From 87ccf3350d466954fada9b135d1dec22c0901f97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rickard=20O=CC=88berg?= Date: Wed, 30 Jan 2013 16:00:52 +0800 Subject: [PATCH 01/15] Ensure that acceptor store doesn't grow unbounded, this time by reacting to what has been delivered --- .../cluster/MultiPaxosServerFactory.java | 2 +- .../multipaxos/AcceptorInstanceStore.java | 2 ++ .../InMemoryAcceptorInstanceStore.java | 26 ++++++++++++------- .../multipaxos/LearnerContext.java | 8 ++++++ 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/MultiPaxosServerFactory.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/MultiPaxosServerFactory.java index e0b277704aecc..f54d746b4b7e1 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/MultiPaxosServerFactory.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/MultiPaxosServerFactory.java @@ -101,7 +101,7 @@ public ProtocolServer newProtocolServer( TimeoutStrategy timeoutStrategy, Messag connectedStateMachines.addMessageProcessor( latencyCalculator ); AcceptorContext acceptorContext = new AcceptorContext( logging, acceptorInstanceStore ); - LearnerContext learnerContext = new LearnerContext(); + LearnerContext learnerContext = new LearnerContext(acceptorInstanceStore); ProposerContext proposerContext = new ProposerContext(); final ClusterContext clusterContext = new ClusterContext( proposerContext, learnerContext, new ClusterConfiguration( initialConfig.getName(), initialConfig.getMembers() ), timeouts, executor, diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/AcceptorInstanceStore.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/AcceptorInstanceStore.java index 5a861fc0b3f9e..4c6f4b665585a 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/AcceptorInstanceStore.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/AcceptorInstanceStore.java @@ -30,5 +30,7 @@ public interface AcceptorInstanceStore void accept( AcceptorInstance instance, Object value ); + void lastDelivered(InstanceId instanceId); + void clear(); } diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/InMemoryAcceptorInstanceStore.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/InMemoryAcceptorInstanceStore.java index 3e00474cb5165..f0374f9689dad 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/InMemoryAcceptorInstanceStore.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/InMemoryAcceptorInstanceStore.java @@ -32,7 +32,12 @@ public class InMemoryAcceptorInstanceStore implements AcceptorInstanceStore { Map instances = new HashMap( ); - Deque currentInstances = new LinkedList(); + + long lastDeliveredInstanceId = -1; + + public InMemoryAcceptorInstanceStore() + { + } @Override public AcceptorInstance getAcceptorInstance( InstanceId instanceId ) @@ -42,13 +47,6 @@ public AcceptorInstance getAcceptorInstance( InstanceId instanceId ) { instance = new AcceptorInstance(); instances.put( instanceId, instance ); - - // Ensure that it doesn't grow unbounded - currentInstances.offer( instanceId ); - if (instances.size() > 500) - { - instances.remove( currentInstances.poll()); - } } return instance; @@ -66,10 +64,20 @@ public void accept( AcceptorInstance instance, Object value ) instance.accept( value ); } + @Override + public void lastDelivered( InstanceId instanceId ) + { + for ( long i = lastDeliveredInstanceId; i <= instanceId.getId(); i++ ) + { + instances.remove( new InstanceId(i) ); + } + + lastDeliveredInstanceId = instanceId.getId(); + } + @Override public void clear() { instances.clear(); - currentInstances.clear(); } } diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/LearnerContext.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/LearnerContext.java index ed741d90986bf..4f8d2f424a83f 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/LearnerContext.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/LearnerContext.java @@ -29,6 +29,13 @@ public class LearnerContext private long lastLearnedInstanceId = -1; private long lastKnownLearnedInstanceInCluster = -1; + private AcceptorInstanceStore acceptorStore; + + public LearnerContext( AcceptorInstanceStore acceptorStore ) + { + this.acceptorStore = acceptorStore; + } + public long getLastDeliveredInstanceId() { return lastDeliveredInstanceId; @@ -37,6 +44,7 @@ public long getLastDeliveredInstanceId() public void setLastDeliveredInstanceId( long lastDeliveredInstanceId ) { this.lastDeliveredInstanceId = lastDeliveredInstanceId; + acceptorStore.lastDelivered( new InstanceId(lastDeliveredInstanceId )); } public long getLastLearnedInstanceId() From 94daee14cac9ce65adcd70e88198d6ea9b2920b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rickard=20O=CC=88berg?= Date: Thu, 31 Jan 2013 11:04:58 +0800 Subject: [PATCH 02/15] Fixed generics. Hopefully OpenJDK builds now --- .../java/org/neo4j/cluster/protocol/cluster/ClusterState.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/cluster/ClusterState.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/cluster/ClusterState.java index b4d50236e7ec8..d2936f0d60155 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/cluster/ClusterState.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/cluster/ClusterState.java @@ -83,7 +83,7 @@ public enum ClusterState Object[] args = message.getPayload(); String name = ( String ) args[0]; URI[] clusterInstanceUris = ( URI[] ) args[1]; - context.joining( name, Iterables.iterable( clusterInstanceUris ) ); + context.joining( name, Iterables.iterable( clusterInstanceUris ) ); for ( URI potentialClusterInstanceUri : clusterInstanceUris ) { From e9435344d9b84a70647b8bcd7630c3e89e8c8b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rickard=20O=CC=88berg?= Date: Thu, 31 Jan 2013 14:02:42 +0800 Subject: [PATCH 03/15] Let main thread yield after a tick to allow executor threads to process --- .../protocol/atomicbroadcast/AtomicBroadcastMap.java | 7 ++++++- .../src/test/java/org/neo4j/cluster/NetworkMock.java | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/AtomicBroadcastMap.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/AtomicBroadcastMap.java index 7b4220e1fc788..bc1ca22f7f172 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/AtomicBroadcastMap.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/AtomicBroadcastMap.java @@ -216,7 +216,8 @@ public void close() private synchronized void checkUpToDate() { - while ( lastCommand != null ) + int tries = 10; + while ( lastCommand != null && tries > 0) { try { @@ -226,7 +227,11 @@ private synchronized void checkUpToDate() { e.printStackTrace(); } + tries--; } + + if (tries == 0) + throw new IllegalStateException( "Timed out waiting for state to be synchronized" ); } public interface MapCommand diff --git a/enterprise/cluster/src/test/java/org/neo4j/cluster/NetworkMock.java b/enterprise/cluster/src/test/java/org/neo4j/cluster/NetworkMock.java index 6f48603fac281..a11f5dbbcf683 100644 --- a/enterprise/cluster/src/test/java/org/neo4j/cluster/NetworkMock.java +++ b/enterprise/cluster/src/test/java/org/neo4j/cluster/NetworkMock.java @@ -206,6 +206,9 @@ public int tick() } } + // Allow other threads (listeners) to process + Thread.yield(); + return messageDeliveries.size(); } From 79e9bdc5bc05a40040bc75f37028c200173ec0c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rickard=20O=CC=88berg?= Date: Thu, 31 Jan 2013 16:05:43 +0800 Subject: [PATCH 04/15] More debugging of network messages during tests Restart Paxos instances that fail on phase 1 timeouts Less nr of messages in MPNT --- .../src/main/java/org/neo4j/cluster/com/NetworkInstance.java | 2 +- .../cluster/protocol/atomicbroadcast/AtomicBroadcastMap.java | 2 +- .../atomicbroadcast/multipaxos/AtomicBroadcastState.java | 1 + .../protocol/atomicbroadcast/multipaxos/ProposerState.java | 3 +-- .../atomicbroadcast/multipaxos/MultiPaxosNetworkTest.java | 2 +- enterprise/cluster/src/test/resources/custom-logback.xml | 1 + 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/com/NetworkInstance.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/com/NetworkInstance.java index 854eee9d18974..40d04cb9f56e0 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/com/NetworkInstance.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/com/NetworkInstance.java @@ -493,7 +493,7 @@ public void channelOpen( ChannelHandlerContext ctx, ChannelStateEvent e ) throws public void messageReceived( ChannelHandlerContext ctx, MessageEvent event ) throws Exception { final Message message = (Message) event.getMessage(); -// msgLog.logMessage("Received:" + message, true); + msgLog.debug("Received:" + message); // receive( message ); receiveExecutor.submit( new Runnable() { diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/AtomicBroadcastMap.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/AtomicBroadcastMap.java index bc1ca22f7f172..d0bd69b292e79 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/AtomicBroadcastMap.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/AtomicBroadcastMap.java @@ -216,7 +216,7 @@ public void close() private synchronized void checkUpToDate() { - int tries = 10; + int tries = 100; while ( lastCommand != null && tries > 0) { try diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/AtomicBroadcastState.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/AtomicBroadcastState.java index 5d7449ad05eae..d7baccdef2017 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/AtomicBroadcastState.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/AtomicBroadcastState.java @@ -130,6 +130,7 @@ public AtomicBroadcastState handle( AtomicBroadcastContext context, switch ( message.getMessageType() ) { case broadcast: + case failed: { URI coordinator = context.getCoordinator(); if ( coordinator != null ) diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/ProposerState.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/ProposerState.java index bb79a34dd7a60..2b05088c0eaa8 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/ProposerState.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/ProposerState.java @@ -135,8 +135,7 @@ public ProposerState handle( MultiPaxosContext context, { if ( instance.ballot > 10000 ) { - context.clusterContext.getLogger( ProposerState.class ).warn( "Propose failed due" + - " to phase 1 timeout" ); + context.clusterContext.getLogger( ProposerState.class ).warn( "Propose failed due to phase 1 timeout" ); // Fail this propose outgoing.offer( Message.internal( AtomicBroadcastMessage.failed, diff --git a/enterprise/cluster/src/test/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/MultiPaxosNetworkTest.java b/enterprise/cluster/src/test/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/MultiPaxosNetworkTest.java index 4ae6368819473..970f5630830e5 100644 --- a/enterprise/cluster/src/test/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/MultiPaxosNetworkTest.java +++ b/enterprise/cluster/src/test/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/MultiPaxosNetworkTest.java @@ -203,7 +203,7 @@ public void joinedCluster( URI member ) logger.info( "Joined cluster - set data" ); - for ( int i = 0; i < 10000; i++ ) + for ( int i = 0; i < 100; i++ ) { map.put( "foo" + i, "bar" + i ); } diff --git a/enterprise/cluster/src/test/resources/custom-logback.xml b/enterprise/cluster/src/test/resources/custom-logback.xml index 091e6d30ca669..1620b227aaaf4 100644 --- a/enterprise/cluster/src/test/resources/custom-logback.xml +++ b/enterprise/cluster/src/test/resources/custom-logback.xml @@ -35,6 +35,7 @@ + From e177f3f1687b1e529bd53d7f5920e549925c8a44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rickard=20O=CC=88berg?= Date: Thu, 31 Jan 2013 16:21:50 +0800 Subject: [PATCH 05/15] Allow message send to finish before shutting down the executor --- .../src/main/java/org/neo4j/cluster/com/NetworkInstance.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/com/NetworkInstance.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/com/NetworkInstance.java index 40d04cb9f56e0..7b949ff4afee4 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/com/NetworkInstance.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/com/NetworkInstance.java @@ -160,7 +160,7 @@ public void start() public void stop() throws Throwable { - sendExecutor.shutdownNow(); + sendExecutor.shutdown(); if ( !sendExecutor.awaitTermination( 10, TimeUnit.SECONDS ) ) { msgLog.warn( "Could not shut down send executor" ); @@ -170,7 +170,7 @@ public void stop() nioChannelFactory.releaseExternalResources(); clientBootstrap.releaseExternalResources(); - receiveExecutor.shutdownNow(); + receiveExecutor.shutdown(); if ( !receiveExecutor.awaitTermination( 10, TimeUnit.SECONDS ) ) { msgLog.warn( "Could not shut down receive executor" ); From 53719e7a35b91615669cdeb2e7a77dd44307818f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rickard=20O=CC=88berg?= Date: Thu, 31 Jan 2013 17:17:17 +0800 Subject: [PATCH 06/15] Learn requests are now sent out to all live instances --- .../protocol/atomicbroadcast/multipaxos/LearnerState.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/LearnerState.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/LearnerState.java index 9675389fb3198..06f726891b84d 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/LearnerState.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/LearnerState.java @@ -134,7 +134,7 @@ public LearnerState handle( MultiPaxosContext context, case learnTimedout: { - // Timed out waiting for learned values - send explicit request to someone + // Timed out waiting for learned values - send explicit request to everyone that is not failed if ( !context.learnerContext.hasDeliveredAllKnownInstances() ) { for ( long instanceId = context.learnerContext.getLastDeliveredInstanceId() + 1; @@ -154,7 +154,6 @@ public LearnerState handle( MultiPaxosContext context, new LearnerMessage.LearnRequestState() ).setHeader( InstanceId.INSTANCE, id.toString() ) ); - break; } } } From 71532c6705b4b3fbcbdc223a44ec5d8572d7317a Mon Sep 17 00:00:00 2001 From: Chris Gioran Date: Thu, 31 Jan 2013 12:19:20 +0200 Subject: [PATCH 07/15] Adds another @Ignore'd test for a cache poisoning issue with invalid Relationship records --- ...ConcurrentDeleteAndLoadCachePoisoning.java | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 community/kernel/src/test/java/org/neo4j/kernel/impl/core/TestRelationshipConcurrentDeleteAndLoadCachePoisoning.java diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/core/TestRelationshipConcurrentDeleteAndLoadCachePoisoning.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/core/TestRelationshipConcurrentDeleteAndLoadCachePoisoning.java new file mode 100644 index 0000000000000..63dacc6fff758 --- /dev/null +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/core/TestRelationshipConcurrentDeleteAndLoadCachePoisoning.java @@ -0,0 +1,178 @@ +/** + * Copyright (c) 2002-2013 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.neo4j.kernel.impl.core; + +import static org.junit.Assert.assertEquals; +import static org.neo4j.test.subprocess.DebuggerDeadlockCallback.RESUME_THREAD; + +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.neo4j.graphdb.DynamicRelationshipType; +import org.neo4j.graphdb.Node; +import org.neo4j.graphdb.Relationship; +import org.neo4j.graphdb.Transaction; +import org.neo4j.graphdb.factory.GraphDatabaseBuilder; +import org.neo4j.graphdb.factory.GraphDatabaseSettings; +import org.neo4j.kernel.GraphDatabaseAPI; +import org.neo4j.test.EmbeddedDatabaseRule; +import org.neo4j.test.subprocess.BreakPoint; +import org.neo4j.test.subprocess.BreakpointHandler; +import org.neo4j.test.subprocess.BreakpointTrigger; +import org.neo4j.test.subprocess.DebugInterface; +import org.neo4j.test.subprocess.DebuggedThread; +import org.neo4j.test.subprocess.EnabledBreakpoints; +import org.neo4j.test.subprocess.ForeignBreakpoints; +import org.neo4j.test.subprocess.SubProcessTestRunner; + +/** + * This test tests the exact same issue as {@link TestConcurrentModificationOfRelationshipChains}. The difference is + * that it tries to cut it as close as possible by doing the relationship cache load right after the removal of the + * relationship from the cache. It really doesn't make a difference but it's a shame to throw it out. + */ +@ForeignBreakpoints( { + @ForeignBreakpoints.BreakpointDef( type = "org.neo4j.kernel.impl.nioneo.xa.WriteTransaction", + method = "doPrepare", on = BreakPoint.Event.EXIT ) } ) +@RunWith( SubProcessTestRunner.class ) +@Ignore("currently fails, awaiting fix") +public class TestRelationshipConcurrentDeleteAndLoadCachePoisoning +{ + private static final int RelationshipGrabSize = 2; + @ClassRule + public static EmbeddedDatabaseRule database = new EmbeddedDatabaseRule() + { + @Override + protected void configure( GraphDatabaseBuilder builder ) + { + builder.setConfig( GraphDatabaseSettings.relationship_grab_size, "" + RelationshipGrabSize ); + } + }; + + private static DebuggedThread committer; + private static DebuggedThread reader; + + @Test + @EnabledBreakpoints( {"doPrepare", "waitForPrepare", "readDone"} ) + public void theTest() throws InterruptedException + { + final GraphDatabaseAPI db = database.getGraphDatabaseAPI(); + + Transaction tx = db.beginTx(); + final Node first = db.createNode(); + final Relationship theOneAfterTheGap = + first.createRelationshipTo( db.createNode(), DynamicRelationshipType.withName( "AC" ) ); + // The gap + for ( int i = 0; i < RelationshipGrabSize; i++) + { + first.createRelationshipTo( db.createNode(), DynamicRelationshipType.withName( "AC" ) ); + } + tx.success(); + tx.finish(); + + // This is required, otherwise relChainPosition is never consulted, everything will already be in mem. + db.getNodeManager().clearCache(); + + Runnable writer = new Runnable() + { + @Override + public void run() + { + Transaction tx = db.beginTx(); + theOneAfterTheGap.delete(); + tx.success(); + tx.finish(); + } + }; + + Runnable reader = new Runnable() + { + @Override + public void run() + { + waitForPrepare(); + // Get the first batch into the cache - relChainPosition shows to theOneAfterTheGap + first.getRelationships().iterator().next(); + readDone(); + } + }; + + Thread writerThread = new Thread( writer ); + Thread readerThread = new Thread( reader ); + + // Start order matters - suspend the reader first, then start the writes. + readerThread.start(); + writerThread.start(); + + readerThread.join(); + writerThread.join(); + + // This should pass without any problems. + int count = 0; + for ( Relationship rel : first.getRelationships() ) + { + count++; + } + assertEquals("Should have read relationships created minus one", RelationshipGrabSize - 1, count); + } + + @BreakpointHandler( "doPrepare" ) + public static void onDoPrepare( BreakPoint self, DebugInterface di ) + { + if ( self.invocationCount() < 3 ) + { + // One for the rel type, one for the setup + return; + } + self.disable(); + committer = di.thread(); + committer.suspend( RESUME_THREAD ); + System.out.println("suspended writer"); + reader.resume(); + System.out.println("resumed reader"); + } + + @BreakpointTrigger("waitForPrepare") + public void waitForPrepare() + { + } + + @BreakpointHandler( "waitForPrepare" ) + public static void onWaitForPrepare( BreakPoint self, DebugInterface di ) + { + self.disable(); + reader = di.thread(); + reader.suspend( RESUME_THREAD ); + System.out.println("Suspended reader"); + } + + @BreakpointTrigger("readDone") + public void readDone() + { + } + + @BreakpointHandler( "readDone" ) + public static void onReadDone( BreakPoint self, DebugInterface di ) + { + self.disable(); + committer.resume(); + System.out.println("Resumed writer"); + } +} From 3a3cdb400e7ce12ad629d8bcb3379169e7586ef0 Mon Sep 17 00:00:00 2001 From: Mattias Persson Date: Thu, 31 Jan 2013 11:40:39 +0100 Subject: [PATCH 08/15] Hopefully will remove flakyness. Each of the two tests run in their own directory and the ProcessStreamHandler now shuts down correctly --- .../java/org/neo4j/shell/impl/JLineConsole.java | 9 +++++---- .../java/org/neo4j/shell/TestRmiPublication.java | 13 +++++++------ .../multipaxos/InMemoryAcceptorInstanceStore.java | 3 --- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/community/shell/src/main/java/org/neo4j/shell/impl/JLineConsole.java b/community/shell/src/main/java/org/neo4j/shell/impl/JLineConsole.java index 5673d232883df..f3226557dcfe0 100644 --- a/community/shell/src/main/java/org/neo4j/shell/impl/JLineConsole.java +++ b/community/shell/src/main/java/org/neo4j/shell/impl/JLineConsole.java @@ -20,7 +20,6 @@ package org.neo4j.shell.impl; import java.io.File; -import java.lang.reflect.InvocationTargetException; import org.neo4j.shell.Console; import org.neo4j.shell.ShellClient; @@ -31,7 +30,7 @@ */ public class JLineConsole implements Console { - private Object consoleReader; + private final Object consoleReader; static JLineConsole newConsoleOrNullIfNotFound( ShellClient client ) { @@ -79,12 +78,14 @@ private JLineConsole( Object consoleReader, ShellClient client ) this.consoleReader = consoleReader; } - public void format( String format, Object... args ) + @Override + public void format( String format, Object... args ) { System.out.print( format ); } - public String readLine( String prompt ) + @Override + public String readLine( String prompt ) { try { diff --git a/community/shell/src/test/java/org/neo4j/shell/TestRmiPublication.java b/community/shell/src/test/java/org/neo4j/shell/TestRmiPublication.java index 2e424e36af724..12b27b6517d1f 100644 --- a/community/shell/src/test/java/org/neo4j/shell/TestRmiPublication.java +++ b/community/shell/src/test/java/org/neo4j/shell/TestRmiPublication.java @@ -19,14 +19,14 @@ */ package org.neo4j.shell; +import static java.lang.Runtime.getRuntime; +import static java.lang.System.getProperty; +import static org.junit.Assert.assertEquals; +import static org.neo4j.test.TargetDirectory.forTest; + import org.junit.Test; import org.neo4j.test.ProcessStreamHandler; -import static java.lang.Runtime.*; -import static java.lang.System.*; -import static org.junit.Assert.*; -import static org.neo4j.test.TargetDirectory.*; - public class TestRmiPublication { @Test @@ -43,7 +43,7 @@ public void jvmShouldDieEvenIfLocalServerIsLeftHanging() throws Exception private int spawnJvm( Class mainClass, String name ) throws Exception { - String dir = forTest( getClass() ).directory( "client", true ).getAbsolutePath(); + String dir = forTest( getClass() ).directory( name, true ).getAbsolutePath(); return waitForExit( getRuntime().exec( new String[] { "java", "-cp", getProperty( "java.class.path" ), mainClass.getName(), dir } ), 20 ); } @@ -71,6 +71,7 @@ private int waitForExit( Process process, int maxSeconds ) throws InterruptedExc finally { streamHandler.cancel(); + streamHandler.done(); } } } diff --git a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/InMemoryAcceptorInstanceStore.java b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/InMemoryAcceptorInstanceStore.java index f0374f9689dad..83f3facafd54f 100644 --- a/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/InMemoryAcceptorInstanceStore.java +++ b/enterprise/cluster/src/main/java/org/neo4j/cluster/protocol/atomicbroadcast/multipaxos/InMemoryAcceptorInstanceStore.java @@ -19,10 +19,7 @@ */ package org.neo4j.cluster.protocol.atomicbroadcast.multipaxos; -import java.util.Deque; import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedList; import java.util.Map; /** From 61f18ce327119d5495965dd7eece18107f995689 Mon Sep 17 00:00:00 2001 From: Anders Nawroth Date: Thu, 31 Jan 2013 13:29:12 +0100 Subject: [PATCH 09/15] Changed the structure of the manual, started using doctools. --- .../org/neo4j/shell/impl/JLineConsole.java | 8 +- .../org/neo4j/shell/TestRmiPublication.java | 13 +- manual/Makefile | 322 +- manual/README.asciidoc | 25 +- manual/{src/main => }/assemblies/contents.xml | 2 +- manual/{src/main => }/assemblies/html.xml | 0 .../assemblies/manpages-enterprise.xml | 0 manual/{src/main => }/assemblies/manpages.xml | 0 manual/{src/main => }/assemblies/upgrade.xml | 0 manual/{src/main => }/assemblies/zip.xml | 0 manual/check.sh | 10 - manual/conf/asciidoc.local.conf | 6 + .../Deployment Options.graffle | 0 .../graffle => docs}/Graph Structures.graffle | 0 .../main/graffle => docs}/HAgraphics.graffle | 0 manual/{src/main/dot => docs}/artifacts.dot | 0 manual/{src => }/docs/htmlconfig.dot | 0 .../neo4j_system_architecture.graffle | 0 manual/{src => }/docs/toolchain.dot | 0 ...-register-docbook => osx-docbook-register} | 3 +- manual/pom.xml | 241 +- manual/src/bin/asciidoc/.hgtags | 25 - manual/src/bin/asciidoc/BUGS | 27 - manual/src/bin/asciidoc/BUGS.txt | 20 - manual/src/bin/asciidoc/CHANGELOG | 3226 --------- manual/src/bin/asciidoc/CHANGELOG.txt | 3056 -------- manual/src/bin/asciidoc/COPYING | 339 - manual/src/bin/asciidoc/COPYRIGHT | 18 - manual/src/bin/asciidoc/INSTALL | 235 - manual/src/bin/asciidoc/INSTALL.txt | 227 - manual/src/bin/asciidoc/MANIFEST | 90 - manual/src/bin/asciidoc/Makefile.in | 185 - manual/src/bin/asciidoc/README | 45 - manual/src/bin/asciidoc/README.txt | 35 - manual/src/bin/asciidoc/a2x.py | 960 --- manual/src/bin/asciidoc/asciidoc.conf | 617 -- manual/src/bin/asciidoc/asciidoc.py | 6257 ----------------- manual/src/bin/asciidoc/asciidocapi.py | 257 - manual/src/bin/asciidoc/common.aap | 9 - manual/src/bin/asciidoc/configure | 2987 -------- manual/src/bin/asciidoc/configure.ac | 11 - .../bin/asciidoc/dblatex/asciidoc-dblatex.sty | 20 - .../bin/asciidoc/dblatex/asciidoc-dblatex.xsl | 74 - .../bin/asciidoc/dblatex/dblatex-readme.txt | 39 - .../docbook-xsl/asciidoc-docbook-xsl.txt | 65 - .../src/bin/asciidoc/docbook-xsl/chunked.xsl | 17 - .../src/bin/asciidoc/docbook-xsl/common.xsl | 106 - manual/src/bin/asciidoc/docbook-xsl/epub.xsl | 35 - manual/src/bin/asciidoc/docbook-xsl/fo.xsl | 152 - .../src/bin/asciidoc/docbook-xsl/htmlhelp.xsl | 16 - .../src/bin/asciidoc/docbook-xsl/manpage.xsl | 31 - manual/src/bin/asciidoc/docbook-xsl/text.xsl | 55 - manual/src/bin/asciidoc/docbook-xsl/xhtml.xsl | 14 - manual/src/bin/asciidoc/docbook45.conf | 759 -- .../filters/code/code-filter-readme.txt | 37 - .../filters/code/code-filter-test.txt | 15 - .../asciidoc/filters/code/code-filter.conf | 8 - .../bin/asciidoc/filters/code/code-filter.py | 239 - .../graphviz/asciidoc-graphviz-sample.txt | 170 - .../filters/graphviz/graphviz-filter.conf | 43 - .../asciidoc/filters/graphviz/graphviz2png.py | 169 - .../asciidoc/filters/latex/latex-filter.conf | 18 - .../bin/asciidoc/filters/latex/latex2png.py | 232 - .../filters/music/music-filter-test.txt | 40 - .../asciidoc/filters/music/music-filter.conf | 31 - .../bin/asciidoc/filters/music/music2png.py | 213 - .../source/source-highlight-filter-test.txt | 19 - .../source/source-highlight-filter.conf | 116 - manual/src/bin/asciidoc/help.conf | 394 -- manual/src/bin/asciidoc/html4.conf | 506 -- manual/src/bin/asciidoc/html5.conf | 684 -- .../src/bin/asciidoc/images/highlighter.png | Bin 128142 -> 0 bytes .../src/bin/asciidoc/images/icons/caution.png | Bin 2734 -> 0 bytes .../bin/asciidoc/images/icons/important.png | Bin 2980 -> 0 bytes manual/src/bin/asciidoc/images/icons/note.png | Bin 2494 -> 0 bytes manual/src/bin/asciidoc/images/icons/tip.png | Bin 2718 -> 0 bytes .../src/bin/asciidoc/images/icons/warning.png | Bin 3214 -> 0 bytes manual/src/bin/asciidoc/images/smallnew.png | Bin 292 -> 0 bytes manual/src/bin/asciidoc/images/tiger.png | Bin 6515 -> 0 bytes manual/src/bin/asciidoc/install-sh | 201 - .../bin/asciidoc/javascripts/ASCIIMathML.js | 938 --- .../bin/asciidoc/javascripts/LaTeXMathML.js | 1223 ---- .../src/bin/asciidoc/javascripts/asciidoc.js | 189 - manual/src/bin/asciidoc/javascripts/slidy.js | 2845 -------- manual/src/bin/asciidoc/javascripts/toc.js | 77 - manual/src/bin/asciidoc/lang-de.conf | 61 - manual/src/bin/asciidoc/lang-en.conf | 54 - manual/src/bin/asciidoc/lang-es.conf | 57 - manual/src/bin/asciidoc/lang-fr.conf | 59 - manual/src/bin/asciidoc/lang-hu.conf | 57 - manual/src/bin/asciidoc/lang-it.conf | 57 - manual/src/bin/asciidoc/lang-nl.conf | 62 - manual/src/bin/asciidoc/lang-pt-BR.conf | 58 - manual/src/bin/asciidoc/lang-ru.conf | 59 - manual/src/bin/asciidoc/lang-uk.conf | 60 - manual/src/bin/asciidoc/latex.conf | 700 -- manual/src/bin/asciidoc/main.aap | 77 - manual/src/bin/asciidoc/slidy.conf | 138 - .../src/bin/asciidoc/stylesheets/asciidoc.css | 533 -- .../bin/asciidoc/stylesheets/docbook-xsl.css | 329 - .../src/bin/asciidoc/stylesheets/pygments.css | 66 - manual/src/bin/asciidoc/stylesheets/slidy.css | 445 -- manual/src/bin/asciidoc/stylesheets/toc2.css | 34 - .../asciidoc/stylesheets/xhtml11-quirks.css | 43 - manual/src/bin/asciidoc/text.conf | 16 - .../src/bin/asciidoc/themes/flask/flask.css | 597 -- .../asciidoc/themes/volnitsky/volnitsky.css | 435 -- manual/src/bin/asciidoc/wordpress.conf | 88 - manual/src/bin/asciidoc/xhtml11-quirks.conf | 61 - manual/src/bin/asciidoc/xhtml11.conf | 682 -- manual/src/bin/fonts/FreeSans.ttf | Bin 460384 -> 0 bytes manual/src/bin/fonts/FreeSansBold.ttf | Bin 172584 -> 0 bytes manual/src/bin/fonts/FreeSansOblique.ttf | Bin 301100 -> 0 bytes manual/src/bin/fonts/FreeSerif.ttf | Bin 1288080 -> 0 bytes manual/src/bin/fonts/FreeSerifBold.ttf | Bin 268612 -> 0 bytes manual/src/bin/fonts/FreeSerifBoldItalic.ttf | Bin 241576 -> 0 bytes manual/src/bin/fonts/FreeSerifItalic.ttf | Bin 410068 -> 0 bytes manual/src/bin/fonts/Inconsolata.ttf | Bin 31860 -> 0 bytes .../configsetting/configsetting.conf | 14 - .../resources/configsetting/configsetting.py | 128 - manual/src/bin/resources/console/console.conf | 13 - manual/src/bin/resources/console/console.py | 51 - manual/src/bin/resources/dot/dot-filter.conf | 13 - manual/src/bin/resources/dot/dot.sh | 76 - .../resources/queryresult/queryresult.conf | 14 - .../bin/resources/queryresult/queryresult.py | 110 - manual/src/bin/resources/snippet/readme.txt | 55 - manual/src/bin/resources/snippet/snippet.conf | 12 - manual/src/bin/resources/snippet/snippet.py | 93 - manual/src/build/bom | 1 - manual/src/build/copy-images.sh | 9 - manual/src/build/deploy.sh | 121 - manual/src/build/htmlcheck.sh | 13 - manual/src/build/manpage.sh | 32 - manual/src/build/outputcheck-images-fop.sh | 26 - manual/src/build/outputcheck-images.sh | 23 - manual/src/build/outputcheck-includefiles.sh | 29 - manual/src/build/textcheck.sh | 19 - manual/src/build/upload.sh | 60 - manual/src/build/yearcheck.sh | 16 - .../resources => }/community/cla.asciidoc | 0 .../community/contributing-code.asciidoc | 0 .../community/contributing.asciidoc | 0 .../community/contribution-areas.asciidoc | 0 .../community/contributors.asciidoc | 0 .../resources => }/community/docs.asciidoc | 0 .../community/embedded-drivers.asciidoc | 0 .../resources => }/community/help.asciidoc | 0 .../resources => }/community/index.asciidoc | 0 .../community/rest-clients.asciidoc | 0 .../community/translating.asciidoc | 0 .../data-modeling/graph.asciidoc | 0 .../data-modeling/property-types.asciidoc | 0 .../conf/head-offline.xsl => docinfo.html} | 144 +- manual/src/{main/resources => }/docinfo.xml | 0 .../{main/resources => }/glossary.asciidoc | 0 .../resources => }/images/front-cover.svg | 0 .../{bin/asciidoc => }/images/icons/README | 0 .../images/icons/admon/caution.png | Bin .../images/icons/admon/caution.svg | 0 .../images/icons/admon/important.png | Bin .../images/icons/admon/important.svg | 0 .../images/icons/admon/note.png | Bin .../images/icons/admon/note.svg | 0 .../resources => }/images/icons/admon/tip.png | Bin .../resources => }/images/icons/admon/tip.svg | 0 .../images/icons/admon/warning.png | Bin .../images/icons/admon/warning.svg | 0 .../asciidoc => }/images/icons/callouts/1.png | Bin .../images/icons/callouts/1.svg | 0 .../images/icons/callouts/10.png | Bin .../images/icons/callouts/10.svg | 0 .../images/icons/callouts/11.png | Bin .../images/icons/callouts/11.svg | 0 .../images/icons/callouts/12.png | Bin .../images/icons/callouts/12.svg | 0 .../images/icons/callouts/13.png | Bin .../images/icons/callouts/13.svg | 0 .../images/icons/callouts/14.png | Bin .../images/icons/callouts/14.svg | 0 .../images/icons/callouts/15.png | Bin .../images/icons/callouts/15.svg | 0 .../images/icons/callouts/16.svg | 0 .../images/icons/callouts/17.svg | 0 .../images/icons/callouts/18.svg | 0 .../images/icons/callouts/19.svg | 0 .../asciidoc => }/images/icons/callouts/2.png | Bin .../images/icons/callouts/2.svg | 0 .../images/icons/callouts/20.svg | 0 .../images/icons/callouts/21.svg | 0 .../images/icons/callouts/22.svg | 0 .../images/icons/callouts/23.svg | 0 .../images/icons/callouts/24.svg | 0 .../images/icons/callouts/25.svg | 0 .../images/icons/callouts/26.svg | 0 .../images/icons/callouts/27.svg | 0 .../images/icons/callouts/28.svg | 0 .../images/icons/callouts/29.svg | 0 .../asciidoc => }/images/icons/callouts/3.png | Bin .../images/icons/callouts/3.svg | 0 .../images/icons/callouts/30.svg | 0 .../asciidoc => }/images/icons/callouts/4.png | Bin .../images/icons/callouts/4.svg | 0 .../asciidoc => }/images/icons/callouts/5.png | Bin .../images/icons/callouts/5.svg | 0 .../asciidoc => }/images/icons/callouts/6.png | Bin .../images/icons/callouts/6.svg | 0 .../asciidoc => }/images/icons/callouts/7.png | Bin .../images/icons/callouts/7.svg | 0 .../asciidoc => }/images/icons/callouts/8.png | Bin .../images/icons/callouts/8.svg | 0 .../asciidoc => }/images/icons/callouts/9.png | Bin .../images/icons/callouts/9.svg | 0 .../resources => }/images/icons/caution.png | Bin .../asciidoc => }/images/icons/example.png | Bin .../{bin/asciidoc => }/images/icons/home.png | Bin .../resources => }/images/icons/important.png | Bin .../{bin/asciidoc => }/images/icons/next.png | Bin .../resources => }/images/icons/note.png | Bin .../{bin/asciidoc => }/images/icons/prev.png | Bin .../{main/resources => }/images/icons/tip.png | Bin .../{bin/asciidoc => }/images/icons/up.png | Bin .../resources => }/images/icons/warning.png | Bin .../{main/resources => }/images/matrix.png | Bin .../resources => }/images/neo4j-green.png | Bin .../resources => }/images/neo4j-logo.png | Bin .../images/operations/Neo4j-shell-server.png | Bin .../images/operations/webadmin-charts.png | Bin .../operations/webadmin-console-cypher.png | Bin .../operations/webadmin-console-gremlin.png | Bin .../operations/webadmin-console-http.png | Bin .../images/operations/webadmin-data.png | Bin .../operations/webadmin-databrowser.png | Bin .../images/operations/webadmin-jmx.png | Bin .../images/operations/webadmin-overview.png | Bin .../images/operations/webadmin-rels.png | Bin .../images/operations/webadmin-stats.png | Bin .../{main/resources => }/index-docinfo.html | 0 .../introduction/comparing.asciidoc | 0 .../graphs/graphdb-compare-docdb-g.asciidoc | 0 .../graphs/graphdb-compare-docdb.asciidoc | 0 .../graphs/graphdb-compare-kvstore-g.asciidoc | 0 .../graphs/graphdb-compare-kvstore.asciidoc | 0 .../graphs/graphdb-compare-rdbms-g.asciidoc | 0 .../graphs/graphdb-compare-rdbms.asciidoc | 0 .../introduction/highlights.asciidoc | 0 .../introduction/index.asciidoc | 0 .../introduction/the-neo4j-graphdb.asciidoc | 0 .../introduction/what-is-a-graphdb.asciidoc | 0 manual/src/main/resources/conf/asciidoc.conf | 18 - .../src/main/resources/conf/breadcrumbs.xsl | 36 - .../main/resources/conf/chunked-offline.xsl | 27 - manual/src/main/resources/conf/chunked.xsl | 24 - manual/src/main/resources/conf/common.xsl | 125 - manual/src/main/resources/conf/dblatex.conf | 3 - .../src/main/resources/conf/disqus-footer.xsl | 131 - manual/src/main/resources/conf/docbook.conf | 38 - .../main/resources/conf/docbook45-slides.conf | 55 - manual/src/main/resources/conf/docbook45.conf | 63 - manual/src/main/resources/conf/fo.xsl | 407 -- manual/src/main/resources/conf/footer.xsl | 22 - manual/src/main/resources/conf/fop.xml | 34 - manual/src/main/resources/conf/head.xsl | 87 - .../src/main/resources/conf/html-params.xsl | 38 - .../src/main/resources/conf/linkedimages.conf | 17 - .../main/resources/conf/offline-footer.xsl | 15 - .../main/resources/conf/syntaxhighlight.xsl | 10 - manual/src/main/resources/conf/text.xsl | 81 - manual/src/main/resources/conf/xhtml.conf | 4 - manual/src/main/resources/conf/xhtml.xsl | 40 - manual/src/main/resources/css/content-bg.png | Bin 3387 -> 0 bytes manual/src/main/resources/css/external.png | Bin 811 -> 0 bytes manual/src/main/resources/css/header-bg.png | Bin 851 -> 0 bytes manual/src/main/resources/css/logo.gif | Bin 4611 -> 0 bytes manual/src/main/resources/css/neo.css | 560 -- manual/src/main/resources/css/shCore.css | 226 - .../src/main/resources/css/shCoreEclipse.css | 339 - .../src/main/resources/css/shThemeEclipse.css | 128 - manual/src/main/resources/css/table-bg.png | Bin 6613 -> 0 bytes .../main/resources/css/utilities-terminal.png | Bin 668 -> 0 bytes manual/src/main/resources/images/icons/README | 5 - .../resources/images/icons/callouts/1.png | Bin 329 -> 0 bytes .../resources/images/icons/callouts/10.png | Bin 361 -> 0 bytes .../resources/images/icons/callouts/11.png | Bin 565 -> 0 bytes .../resources/images/icons/callouts/12.png | Bin 617 -> 0 bytes .../resources/images/icons/callouts/13.png | Bin 623 -> 0 bytes .../resources/images/icons/callouts/14.png | Bin 411 -> 0 bytes .../resources/images/icons/callouts/15.png | Bin 640 -> 0 bytes .../resources/images/icons/callouts/2.png | Bin 353 -> 0 bytes .../resources/images/icons/callouts/3.png | Bin 350 -> 0 bytes .../resources/images/icons/callouts/4.png | Bin 345 -> 0 bytes .../resources/images/icons/callouts/5.png | Bin 348 -> 0 bytes .../resources/images/icons/callouts/6.png | Bin 355 -> 0 bytes .../resources/images/icons/callouts/7.png | Bin 344 -> 0 bytes .../resources/images/icons/callouts/8.png | Bin 357 -> 0 bytes .../resources/images/icons/callouts/9.png | Bin 357 -> 0 bytes .../main/resources/images/icons/example.png | Bin 2599 -> 0 bytes .../src/main/resources/images/icons/home.png | Bin 1340 -> 0 bytes .../src/main/resources/images/icons/next.png | Bin 1302 -> 0 bytes .../src/main/resources/images/icons/prev.png | Bin 1348 -> 0 bytes manual/src/main/resources/images/icons/up.png | Bin 1320 -> 0 bytes manual/src/main/resources/js/cypherconsole.js | 98 - manual/src/main/resources/js/imagescaler.js | 85 - .../src/main/resources/js/jquery-1.6.4.min.js | 4 - manual/src/main/resources/js/shAutoloader.js | 17 - manual/src/main/resources/js/shBrushAS3.js | 59 - .../main/resources/js/shBrushAppleScript.js | 75 - manual/src/main/resources/js/shBrushBash.js | 59 - manual/src/main/resources/js/shBrushCSharp.js | 65 - .../main/resources/js/shBrushColdFusion.js | 100 - manual/src/main/resources/js/shBrushCpp.js | 97 - manual/src/main/resources/js/shBrushCss.js | 91 - manual/src/main/resources/js/shBrushCypher.js | 50 - manual/src/main/resources/js/shBrushDelphi.js | 55 - manual/src/main/resources/js/shBrushDiff.js | 41 - manual/src/main/resources/js/shBrushErlang.js | 52 - manual/src/main/resources/js/shBrushGroovy.js | 67 - .../src/main/resources/js/shBrushJScript.js | 52 - manual/src/main/resources/js/shBrushJava.js | 57 - manual/src/main/resources/js/shBrushJavaFX.js | 58 - manual/src/main/resources/js/shBrushPerl.js | 72 - manual/src/main/resources/js/shBrushPhp.js | 88 - manual/src/main/resources/js/shBrushPlain.js | 33 - .../main/resources/js/shBrushPowerShell.js | 74 - .../main/resources/js/shBrushProperties.js | 43 - manual/src/main/resources/js/shBrushPython.js | 64 - manual/src/main/resources/js/shBrushRuby.js | 55 - manual/src/main/resources/js/shBrushSass.js | 94 - manual/src/main/resources/js/shBrushScala.js | 51 - manual/src/main/resources/js/shBrushSql.js | 66 - manual/src/main/resources/js/shBrushVb.js | 56 - manual/src/main/resources/js/shBrushXml.js | 69 - manual/src/main/resources/js/shCore.js | 17 - manual/src/main/resources/js/shLegacy.js | 17 - manual/src/main/resources/js/sidebar.js | 78 - manual/src/main/resources/js/svgreplacer.js | 43 - manual/src/main/resources/js/tablestyler.js | 34 - manual/src/main/resources/js/version.js | 2 - .../src/main/resources/js/versionswitcher.js | 222 - .../src/main/resources/neo4j-manual.asciidoc | 2 - .../{main/resources => }/manpages.asciidoc | 0 .../main.asciidoc => neo4j-manual.asciidoc} | 6 +- .../resources => }/operations/index.asciidoc | 0 .../deployment.asciidoc | 0 .../installation-deployment/index.asciidoc | 0 .../installation.asciidoc | 0 .../requirements.asciidoc | 0 .../operations/security.asciidoc | 0 .../resources => }/preface/preface.asciidoc | 0 .../{main/resources => }/qanda/index.asciidoc | 0 .../capabilities/cap-details.asciidoc | 0 .../reference/capabilities/capabilities.txt | 0 .../reference/import/import.asciidoc | 0 .../resources => }/reference/index.asciidoc | 0 .../{main/resources => }/tools/index.asciidoc | 0 .../resources => }/tools/webadmin.asciidoc | 0 .../resources => }/tutorials/index.asciidoc | 0 .../tutorials/languages.asciidoc | 0 .../resources => }/tutorials/rest.asciidoc | 0 manual/src/{main/resources => }/version | 0 manual/trace.sh | 4 +- packaging/standalone/pom.xml | 2 +- 362 files changed, 251 insertions(+), 39602 deletions(-) rename manual/{src/main => }/assemblies/contents.xml (97%) rename manual/{src/main => }/assemblies/html.xml (100%) rename manual/{src/main => }/assemblies/manpages-enterprise.xml (100%) rename manual/{src/main => }/assemblies/manpages.xml (100%) rename manual/{src/main => }/assemblies/upgrade.xml (100%) rename manual/{src/main => }/assemblies/zip.xml (100%) delete mode 100755 manual/check.sh create mode 100644 manual/conf/asciidoc.local.conf rename manual/{src/main/graffle => docs}/Deployment Options.graffle (100%) rename manual/{src/main/graffle => docs}/Graph Structures.graffle (100%) rename manual/{src/main/graffle => docs}/HAgraphics.graffle (100%) rename manual/{src/main/dot => docs}/artifacts.dot (100%) rename manual/{src => }/docs/htmlconfig.dot (100%) rename manual/{src/main/graffle => docs}/neo4j_system_architecture.graffle (100%) rename manual/{src => }/docs/toolchain.dot (100%) rename manual/{src/build/osx-register-docbook => osx-docbook-register} (98%) delete mode 100644 manual/src/bin/asciidoc/.hgtags delete mode 100644 manual/src/bin/asciidoc/BUGS delete mode 100644 manual/src/bin/asciidoc/BUGS.txt delete mode 100644 manual/src/bin/asciidoc/CHANGELOG delete mode 100644 manual/src/bin/asciidoc/CHANGELOG.txt delete mode 100644 manual/src/bin/asciidoc/COPYING delete mode 100644 manual/src/bin/asciidoc/COPYRIGHT delete mode 100644 manual/src/bin/asciidoc/INSTALL delete mode 100644 manual/src/bin/asciidoc/INSTALL.txt delete mode 100644 manual/src/bin/asciidoc/MANIFEST delete mode 100644 manual/src/bin/asciidoc/Makefile.in delete mode 100644 manual/src/bin/asciidoc/README delete mode 100644 manual/src/bin/asciidoc/README.txt delete mode 100755 manual/src/bin/asciidoc/a2x.py delete mode 100644 manual/src/bin/asciidoc/asciidoc.conf delete mode 100755 manual/src/bin/asciidoc/asciidoc.py delete mode 100644 manual/src/bin/asciidoc/asciidocapi.py delete mode 100644 manual/src/bin/asciidoc/common.aap delete mode 100755 manual/src/bin/asciidoc/configure delete mode 100644 manual/src/bin/asciidoc/configure.ac delete mode 100644 manual/src/bin/asciidoc/dblatex/asciidoc-dblatex.sty delete mode 100644 manual/src/bin/asciidoc/dblatex/asciidoc-dblatex.xsl delete mode 100644 manual/src/bin/asciidoc/dblatex/dblatex-readme.txt delete mode 100644 manual/src/bin/asciidoc/docbook-xsl/asciidoc-docbook-xsl.txt delete mode 100644 manual/src/bin/asciidoc/docbook-xsl/chunked.xsl delete mode 100644 manual/src/bin/asciidoc/docbook-xsl/common.xsl delete mode 100644 manual/src/bin/asciidoc/docbook-xsl/epub.xsl delete mode 100644 manual/src/bin/asciidoc/docbook-xsl/fo.xsl delete mode 100644 manual/src/bin/asciidoc/docbook-xsl/htmlhelp.xsl delete mode 100644 manual/src/bin/asciidoc/docbook-xsl/manpage.xsl delete mode 100644 manual/src/bin/asciidoc/docbook-xsl/text.xsl delete mode 100644 manual/src/bin/asciidoc/docbook-xsl/xhtml.xsl delete mode 100644 manual/src/bin/asciidoc/docbook45.conf delete mode 100644 manual/src/bin/asciidoc/filters/code/code-filter-readme.txt delete mode 100644 manual/src/bin/asciidoc/filters/code/code-filter-test.txt delete mode 100644 manual/src/bin/asciidoc/filters/code/code-filter.conf delete mode 100755 manual/src/bin/asciidoc/filters/code/code-filter.py delete mode 100644 manual/src/bin/asciidoc/filters/graphviz/asciidoc-graphviz-sample.txt delete mode 100644 manual/src/bin/asciidoc/filters/graphviz/graphviz-filter.conf delete mode 100755 manual/src/bin/asciidoc/filters/graphviz/graphviz2png.py delete mode 100644 manual/src/bin/asciidoc/filters/latex/latex-filter.conf delete mode 100755 manual/src/bin/asciidoc/filters/latex/latex2png.py delete mode 100644 manual/src/bin/asciidoc/filters/music/music-filter-test.txt delete mode 100644 manual/src/bin/asciidoc/filters/music/music-filter.conf delete mode 100755 manual/src/bin/asciidoc/filters/music/music2png.py delete mode 100644 manual/src/bin/asciidoc/filters/source/source-highlight-filter-test.txt delete mode 100644 manual/src/bin/asciidoc/filters/source/source-highlight-filter.conf delete mode 100644 manual/src/bin/asciidoc/help.conf delete mode 100644 manual/src/bin/asciidoc/html4.conf delete mode 100644 manual/src/bin/asciidoc/html5.conf delete mode 100644 manual/src/bin/asciidoc/images/highlighter.png delete mode 100644 manual/src/bin/asciidoc/images/icons/caution.png delete mode 100644 manual/src/bin/asciidoc/images/icons/important.png delete mode 100644 manual/src/bin/asciidoc/images/icons/note.png delete mode 100644 manual/src/bin/asciidoc/images/icons/tip.png delete mode 100644 manual/src/bin/asciidoc/images/icons/warning.png delete mode 100644 manual/src/bin/asciidoc/images/smallnew.png delete mode 100644 manual/src/bin/asciidoc/images/tiger.png delete mode 100755 manual/src/bin/asciidoc/install-sh delete mode 100644 manual/src/bin/asciidoc/javascripts/ASCIIMathML.js delete mode 100644 manual/src/bin/asciidoc/javascripts/LaTeXMathML.js delete mode 100644 manual/src/bin/asciidoc/javascripts/asciidoc.js delete mode 100644 manual/src/bin/asciidoc/javascripts/slidy.js delete mode 100644 manual/src/bin/asciidoc/javascripts/toc.js delete mode 100644 manual/src/bin/asciidoc/lang-de.conf delete mode 100644 manual/src/bin/asciidoc/lang-en.conf delete mode 100644 manual/src/bin/asciidoc/lang-es.conf delete mode 100644 manual/src/bin/asciidoc/lang-fr.conf delete mode 100644 manual/src/bin/asciidoc/lang-hu.conf delete mode 100644 manual/src/bin/asciidoc/lang-it.conf delete mode 100644 manual/src/bin/asciidoc/lang-nl.conf delete mode 100644 manual/src/bin/asciidoc/lang-pt-BR.conf delete mode 100644 manual/src/bin/asciidoc/lang-ru.conf delete mode 100644 manual/src/bin/asciidoc/lang-uk.conf delete mode 100644 manual/src/bin/asciidoc/latex.conf delete mode 100644 manual/src/bin/asciidoc/main.aap delete mode 100644 manual/src/bin/asciidoc/slidy.conf delete mode 100644 manual/src/bin/asciidoc/stylesheets/asciidoc.css delete mode 100644 manual/src/bin/asciidoc/stylesheets/docbook-xsl.css delete mode 100644 manual/src/bin/asciidoc/stylesheets/pygments.css delete mode 100644 manual/src/bin/asciidoc/stylesheets/slidy.css delete mode 100644 manual/src/bin/asciidoc/stylesheets/toc2.css delete mode 100644 manual/src/bin/asciidoc/stylesheets/xhtml11-quirks.css delete mode 100644 manual/src/bin/asciidoc/text.conf delete mode 100644 manual/src/bin/asciidoc/themes/flask/flask.css delete mode 100644 manual/src/bin/asciidoc/themes/volnitsky/volnitsky.css delete mode 100644 manual/src/bin/asciidoc/wordpress.conf delete mode 100644 manual/src/bin/asciidoc/xhtml11-quirks.conf delete mode 100644 manual/src/bin/asciidoc/xhtml11.conf delete mode 100644 manual/src/bin/fonts/FreeSans.ttf delete mode 100644 manual/src/bin/fonts/FreeSansBold.ttf delete mode 100644 manual/src/bin/fonts/FreeSansOblique.ttf delete mode 100644 manual/src/bin/fonts/FreeSerif.ttf delete mode 100644 manual/src/bin/fonts/FreeSerifBold.ttf delete mode 100644 manual/src/bin/fonts/FreeSerifBoldItalic.ttf delete mode 100644 manual/src/bin/fonts/FreeSerifItalic.ttf delete mode 100644 manual/src/bin/fonts/Inconsolata.ttf delete mode 100644 manual/src/bin/resources/configsetting/configsetting.conf delete mode 100755 manual/src/bin/resources/configsetting/configsetting.py delete mode 100644 manual/src/bin/resources/console/console.conf delete mode 100755 manual/src/bin/resources/console/console.py delete mode 100644 manual/src/bin/resources/dot/dot-filter.conf delete mode 100755 manual/src/bin/resources/dot/dot.sh delete mode 100644 manual/src/bin/resources/queryresult/queryresult.conf delete mode 100755 manual/src/bin/resources/queryresult/queryresult.py delete mode 100644 manual/src/bin/resources/snippet/readme.txt delete mode 100644 manual/src/bin/resources/snippet/snippet.conf delete mode 100755 manual/src/bin/resources/snippet/snippet.py delete mode 100644 manual/src/build/bom delete mode 100755 manual/src/build/copy-images.sh delete mode 100755 manual/src/build/deploy.sh delete mode 100755 manual/src/build/htmlcheck.sh delete mode 100755 manual/src/build/manpage.sh delete mode 100755 manual/src/build/outputcheck-images-fop.sh delete mode 100755 manual/src/build/outputcheck-images.sh delete mode 100755 manual/src/build/outputcheck-includefiles.sh delete mode 100755 manual/src/build/textcheck.sh delete mode 100755 manual/src/build/upload.sh delete mode 100755 manual/src/build/yearcheck.sh rename manual/src/{main/resources => }/community/cla.asciidoc (100%) rename manual/src/{main/resources => }/community/contributing-code.asciidoc (100%) rename manual/src/{main/resources => }/community/contributing.asciidoc (100%) rename manual/src/{main/resources => }/community/contribution-areas.asciidoc (100%) rename manual/src/{main/resources => }/community/contributors.asciidoc (100%) rename manual/src/{main/resources => }/community/docs.asciidoc (100%) rename manual/src/{main/resources => }/community/embedded-drivers.asciidoc (100%) rename manual/src/{main/resources => }/community/help.asciidoc (100%) rename manual/src/{main/resources => }/community/index.asciidoc (100%) rename manual/src/{main/resources => }/community/rest-clients.asciidoc (100%) rename manual/src/{main/resources => }/community/translating.asciidoc (100%) rename manual/src/{main/resources => }/data-modeling/graph.asciidoc (100%) rename manual/src/{main/resources => }/data-modeling/property-types.asciidoc (100%) rename manual/src/{main/resources/conf/head-offline.xsl => docinfo.html} (81%) rename manual/src/{main/resources => }/docinfo.xml (100%) rename manual/src/{main/resources => }/glossary.asciidoc (100%) rename manual/src/{main/resources => }/images/front-cover.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/README (100%) rename manual/src/{main/resources => }/images/icons/admon/caution.png (100%) rename manual/src/{main/resources => }/images/icons/admon/caution.svg (100%) rename manual/src/{main/resources => }/images/icons/admon/important.png (100%) rename manual/src/{main/resources => }/images/icons/admon/important.svg (100%) rename manual/src/{main/resources => }/images/icons/admon/note.png (100%) rename manual/src/{main/resources => }/images/icons/admon/note.svg (100%) rename manual/src/{main/resources => }/images/icons/admon/tip.png (100%) rename manual/src/{main/resources => }/images/icons/admon/tip.svg (100%) rename manual/src/{main/resources => }/images/icons/admon/warning.png (100%) rename manual/src/{main/resources => }/images/icons/admon/warning.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/1.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/1.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/10.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/10.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/11.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/11.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/12.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/12.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/13.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/13.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/14.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/14.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/15.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/15.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/16.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/17.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/18.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/19.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/2.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/2.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/20.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/21.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/22.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/23.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/24.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/25.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/26.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/27.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/28.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/29.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/3.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/3.svg (100%) rename manual/src/{main/resources => }/images/icons/callouts/30.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/4.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/4.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/5.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/5.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/6.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/6.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/7.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/7.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/8.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/8.svg (100%) rename manual/src/{bin/asciidoc => }/images/icons/callouts/9.png (100%) rename manual/src/{main/resources => }/images/icons/callouts/9.svg (100%) rename manual/src/{main/resources => }/images/icons/caution.png (100%) rename manual/src/{bin/asciidoc => }/images/icons/example.png (100%) rename manual/src/{bin/asciidoc => }/images/icons/home.png (100%) rename manual/src/{main/resources => }/images/icons/important.png (100%) rename manual/src/{bin/asciidoc => }/images/icons/next.png (100%) rename manual/src/{main/resources => }/images/icons/note.png (100%) rename manual/src/{bin/asciidoc => }/images/icons/prev.png (100%) rename manual/src/{main/resources => }/images/icons/tip.png (100%) rename manual/src/{bin/asciidoc => }/images/icons/up.png (100%) rename manual/src/{main/resources => }/images/icons/warning.png (100%) rename manual/src/{main/resources => }/images/matrix.png (100%) rename manual/src/{main/resources => }/images/neo4j-green.png (100%) rename manual/src/{main/resources => }/images/neo4j-logo.png (100%) rename manual/src/{main/resources => }/images/operations/Neo4j-shell-server.png (100%) rename manual/src/{main/resources => }/images/operations/webadmin-charts.png (100%) rename manual/src/{main/resources => }/images/operations/webadmin-console-cypher.png (100%) rename manual/src/{main/resources => }/images/operations/webadmin-console-gremlin.png (100%) rename manual/src/{main/resources => }/images/operations/webadmin-console-http.png (100%) rename manual/src/{main/resources => }/images/operations/webadmin-data.png (100%) rename manual/src/{main/resources => }/images/operations/webadmin-databrowser.png (100%) rename manual/src/{main/resources => }/images/operations/webadmin-jmx.png (100%) rename manual/src/{main/resources => }/images/operations/webadmin-overview.png (100%) rename manual/src/{main/resources => }/images/operations/webadmin-rels.png (100%) rename manual/src/{main/resources => }/images/operations/webadmin-stats.png (100%) rename manual/src/{main/resources => }/index-docinfo.html (100%) rename manual/src/{main/resources => }/introduction/comparing.asciidoc (100%) rename manual/src/{main/resources => }/introduction/graphs/graphdb-compare-docdb-g.asciidoc (100%) rename manual/src/{main/resources => }/introduction/graphs/graphdb-compare-docdb.asciidoc (100%) rename manual/src/{main/resources => }/introduction/graphs/graphdb-compare-kvstore-g.asciidoc (100%) rename manual/src/{main/resources => }/introduction/graphs/graphdb-compare-kvstore.asciidoc (100%) rename manual/src/{main/resources => }/introduction/graphs/graphdb-compare-rdbms-g.asciidoc (100%) rename manual/src/{main/resources => }/introduction/graphs/graphdb-compare-rdbms.asciidoc (100%) rename manual/src/{main/resources => }/introduction/highlights.asciidoc (100%) rename manual/src/{main/resources => }/introduction/index.asciidoc (100%) rename manual/src/{main/resources => }/introduction/the-neo4j-graphdb.asciidoc (100%) rename manual/src/{main/resources => }/introduction/what-is-a-graphdb.asciidoc (100%) delete mode 100644 manual/src/main/resources/conf/asciidoc.conf delete mode 100644 manual/src/main/resources/conf/breadcrumbs.xsl delete mode 100644 manual/src/main/resources/conf/chunked-offline.xsl delete mode 100644 manual/src/main/resources/conf/chunked.xsl delete mode 100644 manual/src/main/resources/conf/common.xsl delete mode 100644 manual/src/main/resources/conf/dblatex.conf delete mode 100644 manual/src/main/resources/conf/disqus-footer.xsl delete mode 100644 manual/src/main/resources/conf/docbook.conf delete mode 100644 manual/src/main/resources/conf/docbook45-slides.conf delete mode 100644 manual/src/main/resources/conf/docbook45.conf delete mode 100644 manual/src/main/resources/conf/fo.xsl delete mode 100644 manual/src/main/resources/conf/footer.xsl delete mode 100644 manual/src/main/resources/conf/fop.xml delete mode 100644 manual/src/main/resources/conf/head.xsl delete mode 100644 manual/src/main/resources/conf/html-params.xsl delete mode 100644 manual/src/main/resources/conf/linkedimages.conf delete mode 100644 manual/src/main/resources/conf/offline-footer.xsl delete mode 100644 manual/src/main/resources/conf/syntaxhighlight.xsl delete mode 100644 manual/src/main/resources/conf/text.xsl delete mode 100644 manual/src/main/resources/conf/xhtml.conf delete mode 100644 manual/src/main/resources/conf/xhtml.xsl delete mode 100644 manual/src/main/resources/css/content-bg.png delete mode 100644 manual/src/main/resources/css/external.png delete mode 100644 manual/src/main/resources/css/header-bg.png delete mode 100644 manual/src/main/resources/css/logo.gif delete mode 100644 manual/src/main/resources/css/neo.css delete mode 100644 manual/src/main/resources/css/shCore.css delete mode 100644 manual/src/main/resources/css/shCoreEclipse.css delete mode 100644 manual/src/main/resources/css/shThemeEclipse.css delete mode 100644 manual/src/main/resources/css/table-bg.png delete mode 100644 manual/src/main/resources/css/utilities-terminal.png delete mode 100644 manual/src/main/resources/images/icons/README delete mode 100644 manual/src/main/resources/images/icons/callouts/1.png delete mode 100644 manual/src/main/resources/images/icons/callouts/10.png delete mode 100644 manual/src/main/resources/images/icons/callouts/11.png delete mode 100644 manual/src/main/resources/images/icons/callouts/12.png delete mode 100644 manual/src/main/resources/images/icons/callouts/13.png delete mode 100644 manual/src/main/resources/images/icons/callouts/14.png delete mode 100644 manual/src/main/resources/images/icons/callouts/15.png delete mode 100644 manual/src/main/resources/images/icons/callouts/2.png delete mode 100644 manual/src/main/resources/images/icons/callouts/3.png delete mode 100644 manual/src/main/resources/images/icons/callouts/4.png delete mode 100644 manual/src/main/resources/images/icons/callouts/5.png delete mode 100644 manual/src/main/resources/images/icons/callouts/6.png delete mode 100644 manual/src/main/resources/images/icons/callouts/7.png delete mode 100644 manual/src/main/resources/images/icons/callouts/8.png delete mode 100644 manual/src/main/resources/images/icons/callouts/9.png delete mode 100644 manual/src/main/resources/images/icons/example.png delete mode 100644 manual/src/main/resources/images/icons/home.png delete mode 100644 manual/src/main/resources/images/icons/next.png delete mode 100644 manual/src/main/resources/images/icons/prev.png delete mode 100644 manual/src/main/resources/images/icons/up.png delete mode 100644 manual/src/main/resources/js/cypherconsole.js delete mode 100644 manual/src/main/resources/js/imagescaler.js delete mode 100644 manual/src/main/resources/js/jquery-1.6.4.min.js delete mode 100644 manual/src/main/resources/js/shAutoloader.js delete mode 100644 manual/src/main/resources/js/shBrushAS3.js delete mode 100644 manual/src/main/resources/js/shBrushAppleScript.js delete mode 100644 manual/src/main/resources/js/shBrushBash.js delete mode 100644 manual/src/main/resources/js/shBrushCSharp.js delete mode 100644 manual/src/main/resources/js/shBrushColdFusion.js delete mode 100644 manual/src/main/resources/js/shBrushCpp.js delete mode 100644 manual/src/main/resources/js/shBrushCss.js delete mode 100644 manual/src/main/resources/js/shBrushCypher.js delete mode 100644 manual/src/main/resources/js/shBrushDelphi.js delete mode 100644 manual/src/main/resources/js/shBrushDiff.js delete mode 100644 manual/src/main/resources/js/shBrushErlang.js delete mode 100644 manual/src/main/resources/js/shBrushGroovy.js delete mode 100644 manual/src/main/resources/js/shBrushJScript.js delete mode 100644 manual/src/main/resources/js/shBrushJava.js delete mode 100644 manual/src/main/resources/js/shBrushJavaFX.js delete mode 100644 manual/src/main/resources/js/shBrushPerl.js delete mode 100644 manual/src/main/resources/js/shBrushPhp.js delete mode 100644 manual/src/main/resources/js/shBrushPlain.js delete mode 100644 manual/src/main/resources/js/shBrushPowerShell.js delete mode 100644 manual/src/main/resources/js/shBrushProperties.js delete mode 100644 manual/src/main/resources/js/shBrushPython.js delete mode 100644 manual/src/main/resources/js/shBrushRuby.js delete mode 100644 manual/src/main/resources/js/shBrushSass.js delete mode 100644 manual/src/main/resources/js/shBrushScala.js delete mode 100644 manual/src/main/resources/js/shBrushSql.js delete mode 100644 manual/src/main/resources/js/shBrushVb.js delete mode 100644 manual/src/main/resources/js/shBrushXml.js delete mode 100644 manual/src/main/resources/js/shCore.js delete mode 100644 manual/src/main/resources/js/shLegacy.js delete mode 100644 manual/src/main/resources/js/sidebar.js delete mode 100644 manual/src/main/resources/js/svgreplacer.js delete mode 100644 manual/src/main/resources/js/tablestyler.js delete mode 100644 manual/src/main/resources/js/version.js delete mode 100644 manual/src/main/resources/js/versionswitcher.js delete mode 100644 manual/src/main/resources/neo4j-manual.asciidoc rename manual/src/{main/resources => }/manpages.asciidoc (100%) rename manual/src/{main/resources/main.asciidoc => neo4j-manual.asciidoc} (83%) rename manual/src/{main/resources => }/operations/index.asciidoc (100%) rename manual/src/{main/resources => }/operations/installation-deployment/deployment.asciidoc (100%) rename manual/src/{main/resources => }/operations/installation-deployment/index.asciidoc (100%) rename manual/src/{main/resources => }/operations/installation-deployment/installation.asciidoc (100%) rename manual/src/{main/resources => }/operations/installation-deployment/requirements.asciidoc (100%) rename manual/src/{main/resources => }/operations/security.asciidoc (100%) rename manual/src/{main/resources => }/preface/preface.asciidoc (100%) rename manual/src/{main/resources => }/qanda/index.asciidoc (100%) rename manual/src/{main/resources => }/reference/capabilities/cap-details.asciidoc (100%) rename manual/src/{main/resources => }/reference/capabilities/capabilities.txt (100%) rename manual/src/{main/resources => }/reference/import/import.asciidoc (100%) rename manual/src/{main/resources => }/reference/index.asciidoc (100%) rename manual/src/{main/resources => }/tools/index.asciidoc (100%) rename manual/src/{main/resources => }/tools/webadmin.asciidoc (100%) rename manual/src/{main/resources => }/tutorials/index.asciidoc (100%) rename manual/src/{main/resources => }/tutorials/languages.asciidoc (100%) rename manual/src/{main/resources => }/tutorials/rest.asciidoc (100%) rename manual/src/{main/resources => }/version (100%) diff --git a/community/shell/src/main/java/org/neo4j/shell/impl/JLineConsole.java b/community/shell/src/main/java/org/neo4j/shell/impl/JLineConsole.java index f3226557dcfe0..8d7a028ca12a9 100644 --- a/community/shell/src/main/java/org/neo4j/shell/impl/JLineConsole.java +++ b/community/shell/src/main/java/org/neo4j/shell/impl/JLineConsole.java @@ -30,7 +30,7 @@ */ public class JLineConsole implements Console { - private final Object consoleReader; + private Object consoleReader; static JLineConsole newConsoleOrNullIfNotFound( ShellClient client ) { @@ -78,14 +78,12 @@ private JLineConsole( Object consoleReader, ShellClient client ) this.consoleReader = consoleReader; } - @Override - public void format( String format, Object... args ) + public void format( String format, Object... args ) { System.out.print( format ); } - @Override - public String readLine( String prompt ) + public String readLine( String prompt ) { try { diff --git a/community/shell/src/test/java/org/neo4j/shell/TestRmiPublication.java b/community/shell/src/test/java/org/neo4j/shell/TestRmiPublication.java index 12b27b6517d1f..2e424e36af724 100644 --- a/community/shell/src/test/java/org/neo4j/shell/TestRmiPublication.java +++ b/community/shell/src/test/java/org/neo4j/shell/TestRmiPublication.java @@ -19,14 +19,14 @@ */ package org.neo4j.shell; -import static java.lang.Runtime.getRuntime; -import static java.lang.System.getProperty; -import static org.junit.Assert.assertEquals; -import static org.neo4j.test.TargetDirectory.forTest; - import org.junit.Test; import org.neo4j.test.ProcessStreamHandler; +import static java.lang.Runtime.*; +import static java.lang.System.*; +import static org.junit.Assert.*; +import static org.neo4j.test.TargetDirectory.*; + public class TestRmiPublication { @Test @@ -43,7 +43,7 @@ public void jvmShouldDieEvenIfLocalServerIsLeftHanging() throws Exception private int spawnJvm( Class mainClass, String name ) throws Exception { - String dir = forTest( getClass() ).directory( name, true ).getAbsolutePath(); + String dir = forTest( getClass() ).directory( "client", true ).getAbsolutePath(); return waitForExit( getRuntime().exec( new String[] { "java", "-cp", getProperty( "java.class.path" ), mainClass.getName(), dir } ), 20 ); } @@ -71,7 +71,6 @@ private int waitForExit( Process process, int maxSeconds ) throws InterruptedExc finally { streamHandler.cancel(); - streamHandler.done(); } } } diff --git a/manual/Makefile b/manual/Makefile index 58a35ce1dd2a5..02693b0257daa 100644 --- a/manual/Makefile +++ b/manual/Makefile @@ -1,317 +1,17 @@ -# Makefile for the Neo4j documentation +# Makefile for the Neo4j Manual. # -PROJECTNAME = neo4j-manual -BUILDDIR = $(CURDIR)/target -SRCDIR = $(BUILDDIR)/classes -SRCFILE = $(SRCDIR)/$(PROJECTNAME).asciidoc -IMGDIR = $(SRCDIR)/images -CSSDIR = $(SRCDIR)/css -JSDIR = $(SRCDIR)/js -CONFDIR = $(SRCDIR)/conf -DOCBOOKFILE = $(BUILDDIR)/$(PROJECTNAME)-shortinfo.xml -DOCBOOKFILEHTML = $(BUILDDIR)/$(PROJECTNAME)-html.xml -FOPDIR = $(BUILDDIR)/pdf -FOPFILE = $(FOPDIR)/$(PROJECTNAME).fo -FOPPDF = $(FOPDIR)/$(PROJECTNAME).pdf -TEXTWIDTH = 80 -TEXTDIR = $(BUILDDIR)/text -TEXTFILE = $(TEXTDIR)/$(PROJECTNAME).txt -TEXTHTMLFILE = $(TEXTFILE).html -SINGLEHTMLDIR = $(BUILDDIR)/html -SINGLEHTMLFILE = $(SINGLEHTMLDIR)/$(PROJECTNAME).html -ANNOTATEDDIR = $(BUILDDIR)/annotated -ANNOTATEDFILE = $(HTMLDIR)/$(PROJECTNAME).html -CHUNKEDHTMLDIR = $(BUILDDIR)/chunked -CHUNKEDOFFLINEHTMLDIR = $(BUILDDIR)/chunked-offline -CHUNKEDTARGET = $(BUILDDIR)/$(PROJECTNAME).chunked -CHUNKEDSHORTINFOTARGET = $(BUILDDIR)/$(PROJECTNAME)-html.chunked -MANPAGES = $(BUILDDIR)/manpages -UPGRADE = $(BUILDDIR)/upgrade -FILTERSRC = $(CURDIR)/src/bin/resources -FILTERDEST = ~/.asciidoc/filters -SCRIPTDIR = $(CURDIR)/src/build -ASCIDOCDIR = $(CURDIR)/src/bin/asciidoc -ASCIIDOC = $(ASCIDOCDIR)/asciidoc.py -A2X = $(ASCIDOCDIR)/a2x.py +# Project Configuration +project_name = neo4j-manual +language = en -ifdef VERBOSE - V = -v - VA = VERBOSE=1 -endif +# Minimal setup +target = target +build_dir = $(CURDIR)/$(target) +config_dir = $(CURDIR)/conf +tools_dir = $(build_dir)/tools +make_dir = $(tools_dir)/make -ifdef KEEP - K = -k - KA = KEEP=1 -endif +include $(make_dir)/context-manual.make -ifdef VERSION - VERSNUM =$(VERSION) -else - VERSNUM =-neo4j-version -endif - -ifdef IMPORTDIR - IMPDIR = --attribute importdir="$(IMPORTDIR)" -else - IMPDIR = --attribute importdir="$(BUILDDIR)/docs" - IMPORTDIR = "$(BUILDDIR)/docs" -endif - -ifneq (,$(findstring SNAPSHOT,$(VERSNUM))) - GITVERSNUM =master -else - GITVERSNUM =$(VERSION) -endif - -ifndef VERSION - GITVERSNUM =master -endif - -VERS = --attribute revnumber=$(VERSNUM) - -GITVERS = --attribute gitversion=$(GITVERSNUM) - -ASCIIDOC_FLAGS = $(V) $(VERS) $(GITVERS) $(IMPDIR) - -A2X_FLAGS = $(K) $(ASCIIDOC_FLAGS) - -.PHONY: all dist docbook help clean pdf html offline-html singlehtml text cleanup annotated manpages upgrade installfilter html-check text-check check yearcheck - -help: - @echo "Please use 'make ' where is one of" - @echo " clean to clean the build directory" - @echo " dist to generate the common distribution formats" - @echo " pdf to generate a PDF file using FOP" - @echo " html to make standalone HTML files" - @echo " singlehtml to make a single large HTML file" - @echo " text to make text files" - @echo " annotated to make a single annotated HTML file" - @echo " manpages to make the manpages" - @echo "For verbose output, use 'VERBOSE=1'". - @echo "To keep temporary files, use 'KEEP=1'". - @echo "To set the version, use 'VERSION=[the version]'". - @echo "To set the importdir, use 'IMPORTDIR=[the importdir]'". - -dist: installfilter offline-html html html-check text text-check pdf manpages upgrade cleanup yearcheck - -check: html-check text-check cleanup - -clean: - -rm -rf "$(BUILDDIR)/"* - -cleanup: - # - # - # Cleaning up. - # - # -ifndef KEEP - rm -f "$(DOCBOOKFILE)" - rm -f "$(BUILDDIR)/"*.xml - rm -f "$(ANNOTATEDDIR)/"*.xml - rm -f "$(FOPDIR)/images" - rm -f "$(FOPFILE)" - rm -f "$(UPGRADE)/"*.xml - rm -f "$(UPGRADE)/"*.html -endif - -installfilter: - # - # - # Installing asciidoc filters. - # - # - mkdir -p $(FILTERDEST) - cp -fr "$(FILTERSRC)/"* $(FILTERDEST) - -copyimages: - # - # - # Copying images from source projects. - # - # - "$(SCRIPTDIR)/copy-images.sh" "$(IMPORTDIR)" "$(IMGDIR)" - -html-check: offline-html - # - # - # Checking that identifiers exist where they should. - # - "$(SCRIPTDIR)/htmlcheck.sh" "$(CHUNKEDOFFLINEHTMLDIR)" - -text-check: text - # - # - # Checking that snippets are in place. - # - "$(SCRIPTDIR)/textcheck.sh" "$(TEXTFILE)" - -docbook-shortinfo: manpages copyimages - # - # - # Building docbook output with short info. - # Checking DocBook validity. - # - # - mkdir -p "$(BUILDDIR)" - "$(ASCIIDOC)" $(ASCIIDOC_FLAGS) --backend docbook --attribute docinfo1 --attribute nonhtmloutput=1 --doctype book --conf-file="$(CONFDIR)/asciidoc.conf" --conf-file="$(CONFDIR)/docbook45.conf" --out-file "$(DOCBOOKFILE)" "$(SRCFILE)" - xmllint --nonet --noout --xinclude --postvalid "$(DOCBOOKFILE)" - -docbook-html: manpages copyimages - # - # - # Building docbook output with short info for html outputs. - # Checking for missing include files. - # Checking DocBook validity. - # - # - mkdir -p "$(BUILDDIR)" - "$(ASCIIDOC)" $(ASCIIDOC_FLAGS) --backend docbook --attribute docinfo1 --attribute console=1 --doctype book --conf-file="$(CONFDIR)/asciidoc.conf" --conf-file="$(CONFDIR)/docbook45.conf" --conf-file="$(CONFDIR)/linkedimages.conf" --out-file "$(DOCBOOKFILEHTML)" "$(SRCFILE)" 2>&1 | "$(SCRIPTDIR)/outputcheck-includefiles.sh" - xmllint --nonet --noout --xinclude --postvalid "$(DOCBOOKFILEHTML)" - -pdf: docbook-shortinfo copyimages - # - # - # Building PDF. - # - # - mkdir -p "$(FOPDIR)" - cd "$(FOPDIR)" - xsltproc --xinclude --output "$(FOPFILE)" "$(CONFDIR)/fo.xsl" "$(DOCBOOKFILE)" - ln -s "$(SRCDIR)/images" "$(FOPDIR)/images" - #export FOP_OPTS="-Xmx2048m" - #fop -fo $(FOPFILE) -pdf $(FOPPDF) -c $(CONFDIR)/fop.xml - # For fop 1.0, timezone has to be a non-negative one. - MAVEN_OPTS="-Xmx2048m -Duser.timezone=GMT" mvn -f="fop-pom.xml" -e exec:java -Dexec.mainClass="org.apache.fop.cli.Main" -Djava.awt.headless=true -Dexec.args="-fo '$(FOPFILE)' -pdf '$(FOPPDF)' -c '$(CONFDIR)/fop.xml'" 2>&1 | "$(SCRIPTDIR)/outputcheck-images-fop.sh" - -html: manpages copyimages docbook-html - # - # - # Building html output. - # Checking for missing images/resources. - # - # - "$(A2X)" $(V) -L -f chunked -D "$(BUILDDIR)" --xsl-file="$(CONFDIR)/chunked.xsl" -r "$(IMGDIR)" -r "$(CSSDIR)" --xsltproc-opts "--stringparam admon.graphics 1" --xsltproc-opts "--xinclude" --xsltproc-opts "--stringparam chunk.section.depth 1" --xsltproc-opts "--stringparam toc.section.depth 1" "$(DOCBOOKFILEHTML)" 2>&1 | "$(SCRIPTDIR)/outputcheck-images.sh" - rm -rf "$(CHUNKEDHTMLDIR)" - mv "$(CHUNKEDSHORTINFOTARGET)" "$(CHUNKEDHTMLDIR)" - cp -fr "$(JSDIR)" "$(CHUNKEDHTMLDIR)/js" - cp -fr "$(CSSDIR)/"* "$(CHUNKEDHTMLDIR)/css" - cp -fr "$(SRCDIR)/images/"*.png "$(CHUNKEDHTMLDIR)/images" - -offline-html: manpages copyimages docbook-html - # - # - # Building html output for offline use. - # - # - "$(A2X)" $(V) -L -f chunked -D "$(BUILDDIR)" --xsl-file="$(CONFDIR)/chunked-offline.xsl" -r "$(IMGDIR)" -r "$(CSSDIR)" --xsltproc-opts "--stringparam admon.graphics 1" --xsltproc-opts "--xinclude" --xsltproc-opts "--stringparam chunk.section.depth 1" --xsltproc-opts "--stringparam toc.section.depth 1" "$(DOCBOOKFILEHTML)" - rm -rf "$(CHUNKEDOFFLINEHTMLDIR)" - mv "$(CHUNKEDSHORTINFOTARGET)" "$(CHUNKEDOFFLINEHTMLDIR)" - cp -fr "$(JSDIR)" "$(CHUNKEDOFFLINEHTMLDIR)/js" - cp -fr "$(CSSDIR)/"* "$(CHUNKEDOFFLINEHTMLDIR)/css/" - cp -fr "$(SRCDIR)/images/"*.png "$(CHUNKEDOFFLINEHTMLDIR)/images" - -# currently builds docbook format first -singlehtml: dist - # - # - # Building single html file output. - # - # - mkdir -p "$(SINGLEHTMLDIR)" - "$(A2X)" $(A2X_FLAGS) -L -f xhtml -D "$(SINGLEHTMLDIR)" --conf-file="$(CONFDIR)/xhtml.conf" --asciidoc-opts "--conf-file=\"$(CONFDIR)/asciidoc.conf\"" --asciidoc-opts "--conf-file=\"$(CONFDIR)/docbook45.conf\"" --asciidoc-opts "--conf-file=\"$(CONFDIR)/linkedimages.conf\"" --xsl-file="$(CONFDIR)/xhtml.xsl" --xsltproc-opts "--stringparam admon.graphics 1" "$(SRCFILE)" - cp -fr "$(JSDIR)" "$(SINGLEHTMLDIR)/js" - cp -fr "$(CSSDIR)" "$(SINGLEHTMLDIR)/css" - cp -fr "$(IMGDIR)" "$(SINGLEHTMLDIR)/images" - mv "$(SINGLEHTMLDIR)/$(PROJECTNAME).html" "$(SINGLEHTMLDIR)/index.html" - - -# builds docbook format first -annotated: dist - # - # - # Building annotated html output. - # - # - mkdir -p "$(ANNOTATEDDIR)" - "$(A2X)" $(A2X_FLAGS) -L -a showcomments -f xhtml -D "$(ANNOTATEDDIR)" --conf-file="$(CONFDIR)/xhtml.conf" --asciidoc-opts "--conf-file=\"$(CONFDIR)/asciidoc.conf\"" --asciidoc-opts "--conf-file=\"$(CONFDIR)/docbook45.conf\"" --asciidoc-opts "--conf-file=\"$(CONFDIR)/linkedimages.conf\"" --xsl-file="$(CONFDIR)/xhtml.xsl" --xsltproc-opts "--stringparam admon.graphics 1" "$(SRCFILE)" - cp -fr "$(SRCDIR)/js" "$(ANNOTATEDDIR)/js" - cp -fr "$(SRCDIR)/css/"* "$(ANNOTATEDDIR)/css" - cp -fr "$(SRCDIR)/images/"*.png "$(ANNOTATEDDIR)/images" - mv "$(ANNOTATEDDIR)/$(PROJECTNAME).html" "$(ANNOTATEDDIR)/index.html" - -text: docbook-shortinfo - # - # - # Building text output. - # - # - mkdir -p "$(TEXTDIR)" - cd "$(TEXTDIR)" - xsltproc --xinclude --stringparam callout.graphics 0 --stringparam navig.graphics 0 --stringparam admon.textlabel 1 --stringparam admon.graphics 0 --output "$(TEXTHTMLFILE)" "$(CONFDIR)/text.xsl" "$(DOCBOOKFILE)" - sed 's/ //g' <"$(TEXTHTMLFILE)" >"$(TEXTHTMLFILE).filtered" - rm -f "$(TEXTHTMLFILE)" - mv "$(TEXTHTMLFILE).filtered" "$(TEXTHTMLFILE)" - cd "$(SRCDIR)" - cp -f "$(SCRIPTDIR)/bom" "$(TEXTFILE)" - w3m -cols "$(TEXTWIDTH)" -dump -T text/html -no-graph "$(TEXTHTMLFILE)" >> "$(TEXTFILE)" -ifndef KEEP - rm -f "$(TEXTHTMLFILE)" - rm -f "$(TEXTDIR)/"*.html - rm -f "$(CURDIR)/"*.html -endif - -manpages: - # - # - # Building manpages. - # - # - mkdir -p "$(MANPAGES)" - "$(SCRIPTDIR)/manpage.sh" "$(V)" "$(MANPAGES)" "$(IMPORTDIR)" "$(A2X)" "$(SCRIPTDIR)" "neo4j server" "neo4j-coordinator server" "neo4j-coordinator-shell server" "neo4j-shell shell" "neo4j-backup backup" - # clean up - mkdir -p "$(ANNOTATEDDIR)" - cp "$(MANPAGES)/"*.xml "$(ANNOTATEDDIR)" - mv "$(MANPAGES)/"*.xml "$(BUILDDIR)" - rm -rf "$(MANPAGES)/"*.html - -upgrade: - # - # - # Building upgrade text. - # - # - mkdir -p "$(UPGRADE)" - "$(ASCIIDOC)" --backend docbook -a a2x-format=text --out-file "$(UPGRADE)/upgrades.xml" "$(BUILDDIR)/docs/neo4j-docs-jar/ops/upgrades.asciidoc" - # swap out arrow glyph for plain --> - sed 's/→/--\>/g' <"$(UPGRADE)/upgrades.xml" >"$(UPGRADE)/upgrades.xml.safe" - rm -f "$(UPGRADE)/upgrades.xml" - mv "$(UPGRADE)/upgrades.xml.safe" "$(UPGRADE)/upgrades.xml" - xmllint --nonet --noout --valid "$(UPGRADE)/upgrades.xml" - cd "$(UPGRADE)" - xsltproc --stringparam callout.graphics 0 --stringparam navig.graphics 0 --stringparam admon.textlabel 1 --stringparam admon.graphics 0 --output "$(UPGRADE)/upgrades.text.html" "$(ASCIDOCDIR)/docbook-xsl/text.xsl" "$(UPGRADE)/upgrades.xml" - cd "$(CURDIR)" - w3m -cols 70 -dump -T text/html -no-graph "$(UPGRADE)/upgrades.text.html" > "$(UPGRADE)/upgrades.text" - cp -f "$(SCRIPTDIR)/bom" "$(UPGRADE)/UPGRADE.txt" - cat "$(UPGRADE)/upgrades.text" >> "$(UPGRADE)/UPGRADE.txt" - rm "$(UPGRADE)/upgrades.text" - -slidestest: - # - # - # Building slides. - # - # - "$(ASCIIDOC)" $(ASCIIDOC_FLAGS) --backend docbook --doctype article --conf-file="$(CONFDIR)/asciidoc.conf" --conf-file="$(CONFDIR)/docbook45.conf" --conf-file="$(CONFDIR)/docbook45-slides.conf" --out-file ./target/slidestest/article-slides.xml ./target/docs/neo4j-examples-docs-jar/dev/examples/hello-world.txt - xsltproc --xinclude --output ./target/slidestest/slides /usr/share/xml/docbook/stylesheet/docbook-xsl/slides/xhtml/default.xsl ./target/slidestest/article-slides.xml - xmllint --nonet --noout --xinclude --postvalid ./target/slidestest/article-slides.xml - -yearcheck: - # - # - # Check that the manual has the correct year set. - # - # - "$(SCRIPTDIR)/yearcheck.sh" "$(SRCDIR)" diff --git a/manual/README.asciidoc b/manual/README.asciidoc index fdbf4db3acfc6..64b1e58fb1c1b 100644 --- a/manual/README.asciidoc +++ b/manual/README.asciidoc @@ -1,5 +1,4 @@ -About Neo4j Manual -================== += About Neo4j Manual = The documents use the asciidoc format, see: @@ -8,7 +7,7 @@ The documents use the asciidoc format, see: == Building the documentation == -Asciidoc version 8.6.3 is a requirement +Asciidoc version 8.6.8 is a requirement together with whatever dependencies it needs and specifically docbook, w3m, fop and graphviz. @@ -16,12 +15,20 @@ http://maven.apache.org/[Apache Maven] together with http://www.gnu.org/software Note that running parallel jobs with Make (-j option) is not supported. To build the documentation, use: + -`mvn clean install` +`mvn clean install` + +This will produce a single html5 page (in 'target/html5'). +Note that this won't suffice in order to build the download packages of Neo4j. +However, the build requirements are limited to Python and Graphviz (and Maven, Java). +This build checks for missing include files and AsciiDoc syntax errors. -To perform a faster check of the document structure and to see if snippets and images are correctly resolved, use: -`mvn clean compile -Dcheck` -which will only produce html for offline use and text outputs (including the manpages). -Note that this profile can't be used together with the `package` goal. +To build all artifacts, use: + +`mvn clean install -DfullBuild` +or + +`mvn clean install -DfullManualBuild` + +To build all dependencies of the manual, use the following at the top level of the repository: + +`mvn clean install -DdocsBuild` + +In order to build all the artifacts of the manual too, add `-DfullManualBuild` === With brew on OSX === @@ -31,7 +38,7 @@ Install libraries Register the docbook xml DTD - sudo src/build/osx-register-docbook + sudo ./osx-register-docbook === With apt-get on Ubuntu === diff --git a/manual/src/main/assemblies/contents.xml b/manual/assemblies/contents.xml similarity index 97% rename from manual/src/main/assemblies/contents.xml rename to manual/assemblies/contents.xml index 8118665021f26..915fdc3313cc4 100644 --- a/manual/src/main/assemblies/contents.xml +++ b/manual/assemblies/contents.xml @@ -31,7 +31,7 @@ target / - classes/** + src/** sources/** test-sources/** diff --git a/manual/src/main/assemblies/html.xml b/manual/assemblies/html.xml similarity index 100% rename from manual/src/main/assemblies/html.xml rename to manual/assemblies/html.xml diff --git a/manual/src/main/assemblies/manpages-enterprise.xml b/manual/assemblies/manpages-enterprise.xml similarity index 100% rename from manual/src/main/assemblies/manpages-enterprise.xml rename to manual/assemblies/manpages-enterprise.xml diff --git a/manual/src/main/assemblies/manpages.xml b/manual/assemblies/manpages.xml similarity index 100% rename from manual/src/main/assemblies/manpages.xml rename to manual/assemblies/manpages.xml diff --git a/manual/src/main/assemblies/upgrade.xml b/manual/assemblies/upgrade.xml similarity index 100% rename from manual/src/main/assemblies/upgrade.xml rename to manual/assemblies/upgrade.xml diff --git a/manual/src/main/assemblies/zip.xml b/manual/assemblies/zip.xml similarity index 100% rename from manual/src/main/assemblies/zip.xml rename to manual/assemblies/zip.xml diff --git a/manual/check.sh b/manual/check.sh deleted file mode 100755 index 678ddea8cfeb5..0000000000000 --- a/manual/check.sh +++ /dev/null @@ -1,10 +0,0 @@ -mvncommand="mvn" - -# prefer the mvn3 command if it exists -hash mvn3 &> /dev/null -if [ $? -eq 0 ]; then - mvncommand="mvn3" -fi - -$mvncommand clean compile -Dcheck "$@" - diff --git a/manual/conf/asciidoc.local.conf b/manual/conf/asciidoc.local.conf new file mode 100644 index 0000000000000..42ecc55c18935 --- /dev/null +++ b/manual/conf/asciidoc.local.conf @@ -0,0 +1,6 @@ +[attributes] +imagesdir=images +iconsdir=images/icons +imagestargetdir=target/src/images +fontsdir=target/tools/bin/fonts + diff --git a/manual/src/main/graffle/Deployment Options.graffle b/manual/docs/Deployment Options.graffle similarity index 100% rename from manual/src/main/graffle/Deployment Options.graffle rename to manual/docs/Deployment Options.graffle diff --git a/manual/src/main/graffle/Graph Structures.graffle b/manual/docs/Graph Structures.graffle similarity index 100% rename from manual/src/main/graffle/Graph Structures.graffle rename to manual/docs/Graph Structures.graffle diff --git a/manual/src/main/graffle/HAgraphics.graffle b/manual/docs/HAgraphics.graffle similarity index 100% rename from manual/src/main/graffle/HAgraphics.graffle rename to manual/docs/HAgraphics.graffle diff --git a/manual/src/main/dot/artifacts.dot b/manual/docs/artifacts.dot similarity index 100% rename from manual/src/main/dot/artifacts.dot rename to manual/docs/artifacts.dot diff --git a/manual/src/docs/htmlconfig.dot b/manual/docs/htmlconfig.dot similarity index 100% rename from manual/src/docs/htmlconfig.dot rename to manual/docs/htmlconfig.dot diff --git a/manual/src/main/graffle/neo4j_system_architecture.graffle b/manual/docs/neo4j_system_architecture.graffle similarity index 100% rename from manual/src/main/graffle/neo4j_system_architecture.graffle rename to manual/docs/neo4j_system_architecture.graffle diff --git a/manual/src/docs/toolchain.dot b/manual/docs/toolchain.dot similarity index 100% rename from manual/src/docs/toolchain.dot rename to manual/docs/toolchain.dot diff --git a/manual/src/build/osx-register-docbook b/manual/osx-docbook-register similarity index 98% rename from manual/src/build/osx-register-docbook rename to manual/osx-docbook-register index 0d3cc3bb3db4e..5359f0c3f8703 100755 --- a/manual/src/build/osx-register-docbook +++ b/manual/osx-docbook-register @@ -14,4 +14,5 @@ test -f /etc/xml/catalog || xmlcatalog --noout --create /etc/xml/catalog for catalog in "$docbook"/docbook/{xml,xsl}/*/catalog.xml; do xmlcatalog --noout --del "file://$catalog" /etc/xml/catalog xmlcatalog --noout --add "nextCatalog" "" "file://$catalog" /etc/xml/catalog -done \ No newline at end of file +done + diff --git a/manual/pom.xml b/manual/pom.xml index 48a09bc7e2e37..accc37bc59aa6 100644 --- a/manual/pom.xml +++ b/manual/pom.xml @@ -21,7 +21,9 @@ ${project.build.directory}/sources ${project.build.directory}/test-sources ${project.build.outputDirectory}/images - 1.9-SNAPSHOT + ${project.build.directory}/tools + ${project.version} + none @@ -206,12 +208,18 @@ test-sources provided + + org.neo4j.build.plugins + neo4j-doctools + 1 + provided + - src/main/resources + src true version @@ -219,7 +227,7 @@ - src/main/resources + src false version @@ -236,12 +244,27 @@ resources + + ${project.build.directory}/src + maven-dependency-plugin + + unpack-doctools + generate-sources + + unpack-dependencies + + + jar + neo4j-doctools + ${docs.tools} + + unpack-asciidoc-sources generate-sources @@ -310,96 +333,13 @@ make - dist - VERSION=${project.version} - IMPORTDIR=${docs.sources} + init + preview - - org.apache.maven.plugins - maven-assembly-plugin - - - zip - package - - single - - - - src/main/assemblies/zip.xml - - ${project.artifactId}-${project.version} - false - true - - - - manpages - package - - single - - - - src/main/assemblies/manpages.xml - - ${project.artifactId}-${project.version} - true - true - - - - manpagesenterprise - package - - single - - - - src/main/assemblies/manpages-enterprise.xml - - ${project.artifactId}-${project.version} - true - true - - - - upgrade - package - - single - - - - src/main/assemblies/upgrade.xml - - ${project.artifactId}-${project.version} - true - true - - - - contents - package - - single - - - - src/main/assemblies/contents.xml - - ${project.artifactId}-${project.version} - true - true - - - - - org.neo4j.build.plugins license-maven-plugin @@ -408,6 +348,7 @@ src/main/resources/js/** src/main/resources/css/** src/bin/asciidoc/** + src/js/** @@ -458,8 +399,6 @@ make dist - VERSION=${project.version} - IMPORTDIR=${docs.sources} KEEP=1 VERBOSE=1 @@ -471,11 +410,11 @@ - check-asciidoc + neo-full-build false - check + fullBuild @@ -493,16 +432,110 @@ make - check - VERSION=${project.version} - IMPORTDIR=${docs.sources} + dist + + org.apache.maven.plugins + maven-assembly-plugin + + + zip + package + + single + + + + assemblies/zip.xml + + ${project.artifactId}-${project.version} + false + true + + + + manpages + package + + single + + + + assemblies/manpages.xml + + ${project.artifactId}-${project.version} + true + true + + + + manpagesenterprise + package + + single + + + + assemblies/manpages-enterprise.xml + + ${project.artifactId}-${project.version} + true + true + + + + upgrade + package + + single + + + + assemblies/upgrade.xml + + ${project.artifactId}-${project.version} + true + true + + + + contents + package + + single + + + + assemblies/contents.xml + + ${project.artifactId}-${project.version} + true + true + + + + + + none + + + + neo-docs-build + + false + + docsBuild + + + + none + annotated @@ -527,11 +560,8 @@ make - annotated - VERSION=${project.version} - IMPORTDIR=${docs.sources} - KEEP=1 - VERBOSE=1 + init + commented @@ -541,11 +571,11 @@ - single + neo-full-manual-build false - single + fullManualBuild @@ -563,9 +593,7 @@ make - singlehtml - VERSION=${project.version} - IMPORTDIR=${docs.sources} + dist @@ -573,6 +601,9 @@ + + none + publish-manual diff --git a/manual/src/bin/asciidoc/.hgtags b/manual/src/bin/asciidoc/.hgtags deleted file mode 100644 index 54c2a58b38b1b..0000000000000 --- a/manual/src/bin/asciidoc/.hgtags +++ /dev/null @@ -1,25 +0,0 @@ -df92a5582948f744d608a63b6ccea12acfe719d2 8.2.4 -b2cd57c4ac16ce1df6dc7a7ee9c481a2007e182e 8.2.5 -f90db4ee6f11b6b66864681133cabbbc7ebed573 8.2.6 -26d2c2455019c3aacab8ac802f0fb14ae120310a 8.2.7 -74cd0ea52dc37caf015159a211de5fdf56f37c79 8.3.0 -ec1d92cb96885c356516fdbb2f12fb079d878883 8.3.1 -b871b7f3959d0dfab7ea875dc446e8b8e4a76f3a 8.3.2 -0c7a79ecfd57b5cd06650ef2bba7b750157ff011 8.3.3 -fe6cb84e34e763a1040d9bad783dd425428b4f6a 8.3.4 -70874bfab9a3880440b32576a5eefa75d75a3612 8.3.5 -670413603b8a181073f8d657c6646c9cb5d21637 8.4.1 -a125dc7a6bb741e82c73da36961344c29c2e17e7 8.4.2 -f10e93ecb01e7cbff84e87f71aeb75473bcace50 8.4.3 -f6df660e35aa6bad27c774261f72d7f5f76e1dc1 8.4.4 -7cf8476e1cc7f4136ca146793622074efdf603ea 8.4.5 -f3eeaf828bc0be1b38935f172a9d27f1aa853386 8.5.0 -989d09fe6753ecb4169cd7a2ee7fcbca35240fb2 8.5.1 -ed062754b72bff2236d17792bf1f2527505ff5ae 8.5.2 -9b390c87c0c53d436c43617abf7f47cde6fa8eda 8.5.3 -024ee840074ec0cdc035e8fd3562b99371af547e 8.6.0 -d20365f5bab671a96788d6b05a6d4783fddf0875 8.6.1 -4d853fce4fe8563b0fefb1f5c0b96622a7974170 8.6.2 -63ed93a6dfa71a37f33a28ca172c502ce5525f0e 8.6.3 -7fa2dd2b05316ef16bb4f37728de08bd3a846473 8.6.4 -e7c589ffae571674e66893dcae29f96cba9654e0 8.6.5 diff --git a/manual/src/bin/asciidoc/BUGS b/manual/src/bin/asciidoc/BUGS deleted file mode 100644 index 26e74a151d2a9..0000000000000 --- a/manual/src/bin/asciidoc/BUGS +++ /dev/null @@ -1,27 +0,0 @@ - Bugs and Known Problems - - version 8.6.7, 17 March 2012 - __________________________________________________________________ - -1. AsciiDoc - - * A benign warning with will become a reserved keyword in Python 2.6 - sometimes occurs when using Python 2.5 — it’s harmless and will - disappear with Python 3. - * Reported line numbers in diagnostic messages are sometimes wrong. - * Attribute references in macro attribute lists can’t be unescaped - (with the exception of attribute list entry {0}). - * Section numbering is incorrect when outputting HTML from a - multi-part book type document. This is not a biggy since multi-part - books are generally processed to DocBook. - * A row of apostrophes in an inline context throws AsciiDoc into an - endless loop. The problem seems to be in the input file Reader. - __________________________________________________________________ - -2. dblatex - - See ./dblatex/dblatex-readme.txt. - __________________________________________________________________ - - Version 8.6.7 - Last updated 2011-11-10 09:23:10 NZDT diff --git a/manual/src/bin/asciidoc/BUGS.txt b/manual/src/bin/asciidoc/BUGS.txt deleted file mode 100644 index b74c1a2292b6e..0000000000000 --- a/manual/src/bin/asciidoc/BUGS.txt +++ /dev/null @@ -1,20 +0,0 @@ -Bugs and Known Problems -======================= - -AsciiDoc --------- -- A benign warning 'with will become a reserved keyword - in Python 2.6' sometimes occurs when using Python 2.5 -- it's - harmless and will disappear with Python 3. -- Reported line numbers in diagnostic messages are sometimes wrong. -- Attribute references in macro attribute lists can't be unescaped - (with the exception of attribute list entry `{0}`). -- Section numbering is incorrect when outputting HTML from a - multi-part book type document. This is not a biggy since multi-part - books are generally processed to DocBook. -- A row of apostrophes in an inline context throws AsciiDoc into an - endless loop. The problem seems to be in the input file 'Reader'. - -dblatex -------- -See `./dblatex/dblatex-readme.txt`. diff --git a/manual/src/bin/asciidoc/CHANGELOG b/manual/src/bin/asciidoc/CHANGELOG deleted file mode 100644 index c2739ab2afc50..0000000000000 --- a/manual/src/bin/asciidoc/CHANGELOG +++ /dev/null @@ -1,3226 +0,0 @@ - AsciiDoc ChangeLog - - version 8.6.7, 17 March 2012 - __________________________________________________________________ - -1. Version 8.6.7 (2012-03-17) - - Release highlights - No major enhancements but quite a few bug fixes which, among other - things, fixes Jython compatibility and improves Windows compatibility. - - All additions and changes - * Vim syntax highlighter: highlight entity refs in macro arguments. - * Added files with .asciidoc extension to Vim file type detection. - [1]Patch submitted by Dag Wiers. - * Added replacement3 substitution to enable [2]ODT whitespace - processing. - * Added unbreakable option to XHTML and HTML 5 backends. - * Implemented toc::[] block macro and toc-placement attribute for - HTML backends to allow the Table of Contents placement to be set - manually by the author. - * Added FAQs: How can I control page breaks when printing HTML - outputs? and Is it possible to reposition the Table of Contents in - HTML outputs?. - * Added --backend and --backend-opts options to the a2x command to - allow a2x to use backend plugin code extensions. [3]Patch submitted - by Lex Trotman. - * Added [4]args block attribute to source highlight blocks to allow - arbitrary parameters to be passed to the source highlighters. - * If the ascii-ids attribute is defined then non-ascii characters in - auto-generated IDs [5]are replaced by their nearest ascii - equivalents (to work around DocBook processor limitations). - * Added global blockname attribute which is dynamically updated to - identify the current block. See [6]discussion list. - * xhtml11, html5 backends: Include book part TOC entries for - multi-part books. Patch submitted by Loïc Paillotin. - * Removed code filter example from the AsciiDoc User Guide so that - backends implemented as external plugins can compile the manual. - See [7]discussion list. - * If the delimited block skip option is set then do not consume block - title and attributes. This makes it possible for the comment - delimited blocks to use an attribute list (previously the comment - delimited block was hardwired to skip preceding attributes and - titles). See [8]discussion list. - * Added backend-confdir intrinsic attribute. - - Bug fixes - * FIXED: slidy backend: broken stylesheet attribute. [9]Patch - submitted by Micheal Hackett. - * FIXED: Restored [10]missing themes to zip file distribution - archive. - * FIXED: Grammatical error in error messages. [11]Patch submitted by - Dag Wieers. - * FIXED: Use configured normal substitution in preference to the - default one. - * FIXED: The eval block macro would execute multiple times if it - evaluated to None. - * FIXED: Duplicated entries in TOC of large document. [12]Patch - submitted by Sebastien Helleu. - * FIXED: Python 2.4 backward [13]incompatibility. - * FIXED: 8.6.6 regression broke Jython compatibility. See - [14]discussion list. - * FIXED: Leaky file handles in a2x and music and latex filters which - created incompatibility problems for Jython. - * FIXED: All Python filters are executed with the same Python - interpreter that executes the asciidoc parent (previously filters - were hardwired to execute the python interpreter). This prevents - [15]Python mix-ups. - * FIXED: Microsoft Windows shelled command-line truncation that - caused shelled commands to fail e.g. the data-uri attribute - failure. - __________________________________________________________________ - -2. Version 8.6.6 (2011-09-04) - - Release highlights - * The AsciiDoc plugin architecture has been enhanced, unified and - extended: - + Plugin commands have been added to the asciidoc(1) --backend - option. - + An asciidoc(1) --theme option has been implemented to specify - a theme and to manage theme plugins. - + A plugin build command (for creating plugins) added. - + build, install, list and remove plugin commands are all - recognized by asciidoc(1) --backend, --filter and --theme - options. - * A security update by Kenny MacDermid removes the use of eval() on - untrusted input (to disallow code malicious execution). - - All additions and changes - * xhtml11, html5: Made verse and quote block text darker to print - legibly in Google Chrome browser. - * Added plugin build command for plugin file creation. - * Merged --help plugins back to --help manpage so it matches the - asciidoc(1) manpage. - * The --filter command-line option can specify the name of filters - that will be unconditionally loaded. - * If a filter directory contains a file named __noautoload__ then the - filter is not automatically loaded (you can used the --filter - command-line option to override this behavior). - * tests: Add Italian language tests. Patch submitted by Simon - Ruderich. See: - [16]http://groups.google.com/group/asciidoc/browse_thread/thread/5e - 2e6f4dd740d51a - * tests: Add tests for localized man pages. Patch submitted by Simon - Ruderich. See: - [17]http://groups.google.com/group/asciidoc/browse_thread/thread/5e - 2e6f4dd740d51a - * If the section name is prefixed with a + character then the section - contents is appended to the contents of an already existing - same-named section (the default behavior is to replace the the - section). - * If a configuration file section named docinfo is loaded then it - will be included in the document header. Typically the docinfo - section name will be prefixed with a + character so that it is - appended to (rather than replace) other docinfo sections. - * Added {sp} intrinsic attribute for single space character. See - [18]http://groups.google.com/group/asciidoc/browse_thread/thread/a8 - 39aa01db0765d2 - * Fixed TOC and footnotes generator. Patch submitted by Will. See - [19]http://groups.google.com/group/asciidoc/browse_thread/thread/73 - 4ac5afed736987 - * The asciidoc-confdir attribute is set to the asciidoc executable - directory if it contains global configuration files i.e. a local - asciidoc installation. - * asciidoc now throws an error instead of just a warning of the - backend configuration file is not found. - * latex filter: write MD5 file after successful PNG file generation. - Always delete temp files irrespective of outcome. - * Added truecolor option to LaTeX filter. Patch submitted by Michel - Krämer. See: - [20]http://groups.google.com/group/asciidoc/browse_thread/thread/64 - 36788a10561851 - * Unit test for table column specifiers with merged cells. Patch - submitted by Simon Ruderich. See: - [21]http://groups.google.com/group/asciidoc/browse_thread/thread/c9 - 238380a1f2507a - * Added verbose message for ifeval::[] macro evaluation. - * Added test case for ifeval::[] evaluation. - * Security update to remove the use of eval() on untrusted input (to - disallow code malicious execution). Patch submitted by Kenny - MacDermid. - * Changed web site layout from table to CSS based. See - [22]http://groups.google.com/group/asciidoc/browse_thread/thread/ec - 8e8481eb0e27b0/d1c035092b5bb7a4?lnk=gst&q=caption+option#d1c035092b - 5bb7a4 - * a2x: Pass --format option value to asciidoc as a2x-format - attribute. Patch submitted by Lex Trotman - ([23]http://groups.google.com/group/asciidoc/browse_thread/thread/3 - e177b84bc133ca9/659796dfadad30ea?lnk=gst&q=a2x+format#659796dfadad3 - 0ea). - * Added two FAQs submitted by Lex Trotman. See: - [24]http://groups.google.com/group/asciidoc/browse_thread/thread/16 - d3fb9672a408e7 - * html5,xhtml11: Implemented themes directory structure. - * html5,xhtml11: Implemented asciidoc --theme management option - (install, list, build and remove commands). - * html5,xhtml11: A theme can now optionally include a JavaScript file - .js - * html5,xhtml11: If the data-uri attribute is defined then icons from - the theme icons directory (if they exist) will be embedded in the - generated document. - * Added optional warnings argument to include macros. - * The asciidoc --verbose option now prints file inclusion messages. - * xhtml11, html5: Remove necessity for separate manpage CSS files. - * Added css-signature attribute to tests. - * Add css-signature attribute to set a CSS signature for the - document. Patch submitted by Peg Russell, see: - [25]http://groups.google.com/group/asciidoc/browse_thread/thread/ba - cbf8aeb8ad6a3a - * White background for toc2 TOC viewport so that horizontally - scrolled content does not obscure the the TOC. Patch submitted by - Lionel Orry, see: - [26]http://code.google.com/p/asciidoc/issues/detail?id=8 - - Bug fixes - * FIXED: Plugin install command: Delete backend directory is install - fails. - * FIXED: Plugin install command: Fixed bug extracting binary files on - Windows (reported by Jean-Michel Inglebert). - * FIXED: tests: Skip blank sections in testasciidoc.conf test - configuration file instead of throwing an exception (reported by - Jean-Michel Inglebert). - * FIXED: If a plugin Zip file does not contain file permissions - (probably because it was created under Windows) then install it - using the default permissions. - * FIXED: Fixed missing quote in preceding LaTeX filter patch. Fix - submitted by Simon Ruderich. See: - [27]http://groups.google.com/group/asciidoc/browse_thread/thread/64 - 36788a10561851 - * FIXED: Some path attributes were processed as escaped Python - strings which could result in corrupted path names with backslash - separated Windows path names. Reported by Will. See: - [28]http://groups.google.com/group/asciidoc/browse_thread/thread/e8 - f3938bcb4c8bb4/44d13113a35738ef - * FIXED: Vertically spanned table cells resulted in incorrect column - styles being applied to some cells. Reported by Will: - [29]http://groups.google.com/group/asciidoc/browse_thread/thread/c9 - 238380a1f2507a/9afc4559d51e1dbd - * FIXED: LaTeX backend: fixed bad escapes. Patch submitted by Mark - McCurry: - [30]http://groups.google.com/group/asciidoc/browse_thread/thread/8c - 111f1046b33691/158a944cf4d5ff0d?lnk=gst&q=latex+escapes#158a944cf4d - 5ff0d - * FIXED: When using slidy backend, display of characters with accents - is wrong because of meta http-equiv line missing. Reported by - Fabrice Flore-Thebault. See: - [31]http://groups.google.com/group/asciidoc/browse_thread/thread/ea - f25f21d1da180a - __________________________________________________________________ - -3. Version 8.6.5 (2011-05-20) - - Release highlights - * The addition of an html5 backend to generate HTML 5 output. Apart - from the inclusion of audio and video block macros the html5 - backend is functionally identical to the xhtml11 backend. - * A new flask theme for xhtml11 and html5 backends inspired by the - [32]Flask website styling (see toc2 example in the next item - below). - * The new toc2 attribute generates a table of contents in the left - hand margin (xhtml11 and html5 backends). [33]This example was - generated using the following command: - asciidoc -b html5 -a icons -a toc2 -a theme=flask article.txt - * a2x(1) now has a flexible mechanism for copying arbitrary resource - files to HTML based outputs — this is very handy for generating - EPUB files with embedded fonts and other resources. - + The a2x(1) --resource option can be used to inject any file - into EPUB output documents e.g. CSS resources such as fonts - and background images. - + Explicitly specified resources are added to the EPUB OPF - manifest automatically. - + You can explicitly specify file extension MIME types. - + The enhanced resource processing works around a couple of - DocBook XSL bugs (see [34]EPUB Notes). - - All additions and changes - * A new flask theme for xhtml11 and html5 backends. A shameless - knock-off of the [35]Flask website styling. - * Added HTML 5 article with toc2 table of contents to the example on - the AsciiDoc website home page. - * Added filters and topics help topics. Fixed documentation errors in - help text. Patch submitted by Lionel Orry, see: - [36]http://groups.google.com/group/asciidoc/browse_thread/thread/9d - a9d48a6461ff14 - * Pass parent configuration files, command-line attributes and header - attributes to table asciidoc filters. Based on patch submitted by - Simon Ruderich, see: - [37]http://groups.google.com/group/asciidoc/browse_thread/thread/5c - 792cbb395b753b - * Allow a title attribute entry in the document header so that HTML - backends can set the title element separately from the displayed - document title (the doctitle attribute). - * Pass lang attribute to asciidoc table style filter. Patch submitted - by Simon Ruderich, see: - [38]http://groups.google.com/group/asciidoc/browse_thread/thread/e2 - 100b7cb29283ce - * xhtml11,html5: Added toc2 attribute which generates a scrollable - table of contents in the left hand margin. Based on customized CSS - written by Suraj Kurapati, see - [39]http://groups.google.com/group/asciidoc/browse_thread/thread/c5 - e30ee5555877f5 - * Added asciidoc-confdir intrinsic attribute which expands to the - global conf directory. - * Documented that you can specify multiple CSS files with the a2x(1) - --stylesheet command option. See: - [40]http://groups.google.com/group/asciidoc/browse_thread/thread/ba - f3218551d05a05 - * Improved xhtml11 backend’s table of contents generation latency. - Patch submitted by Hongli Lai. See: - [41]http://groups.google.com/group/asciidoc/browse_thread/thread/5a - 7fe64fbfd65ad - * Added html5 backend. - * For consistency converted all DOS formatted configuration and text - files to UNIX format. - * html4: Added ability to use role attribute with most block - elements. Patch contributed by Simon Ruderich. See - [42]http://groups.google.com/group/asciidoc/browse_thread/thread/56 - 20ba634fdb030a - * Added Dutch language configuration file and accompanying test file - (contributed by Dag Wieers, see - [43]http://groups.google.com/group/asciidoc/browse_thread/thread/f9 - 69b9ce987d7f5d). - * Configuration files are loaded in two passes when the -e - command-line option is used (the same behavior as when the -e - option is not used). Patch submitted by haad. See - [44]http://groups.google.com/group/asciidoc/browse_thread/thread/cd - 0f47495fd04181 and - [45]http://code.google.com/p/asciidoc/issues/detail?id=6&q=label%3A - Priority-Medium - * Documented how to include embedded fonts in an EPUB document. - * a2x: Added .= resource specifier syntax. - * a2x: Enable admonition icons in example EPUBs. - * a2x: allow environment variables and tilde home directories in - resource manifest files. - * a2x: don’t process non-existent resource directories. - * a2x: assume resource option is a directory if the name ends with a - directory separator. - * a2x: Added a new syntax to the --resource option specifier which - allows the destination path to be specified. - * a2x: Copy resources referenced in the OPF and resources referenced - by the generated HTML (in theory DocBook XSL should ensure they are - identical but this is not always the case e.g. - [46]http://sourceforge.net/tracker/?func=detail&atid=373747&aid=285 - 4075&group_id=21935). - * Drop border from callout list image links. - * html4: Moved manpage NAME section out of header so that the name - section is rendered when the asciidoc(1) --no-header-footer option - is specified (so that manpages processed blogpost include the NAME - section). - * Vim syntax highlighter: TODO markers now appear in list items and - literal paragraphs and blocks. - * Constrained quotes can now be bounded on the left by a } character. - See: - [47]http://groups.google.com/group/asciidoc/browse_thread/thread/b2 - 4cc3362f35b801 - * Added text-decoration roles (underline, overline, line-through, - blink) for xhtml11 and html5 outputs. - - Bug fixes - * FIXED: epubcheck 1.1 previously issued a warning for files not - registered in the manifest (epubcheck 1.0.5 did not). This resulted - in a problem compiling the adventures-of-sherlock-holmes.txt - example (the underline.png resource was not in the manifest). - __________________________________________________________________ - -4. Version 8.6.4 (2011-02-20) - - Additions and changes - * Added text foreground and background color along with text size CSS - styles for XHTML outputs, see - [48]http://www.methods.co.nz/asciidoc/userguide.html#X96. - * Vim syntax highlighter: highlight macros that start with an - attribute reference (a common idiom). - * Vim syntax highlighter: highlight attribute references in macro - attribute lists. - * Attribute entries can be used to set configuration markup - templates. - * Double-width East Asian characters in titles now correctly match - the title underline widths. Submitted by Changjian Gao (see - [49]http://groups.google.com/group/asciidoc/browse_thread/thread/77 - f28b0dfe60d262). - * Implemented [50]asciidoc(1) filter commands, see: - [51]http://groups.google.com/group/asciidoc/browse_thread/thread/40 - c64cd33ee1905c - * User’s home directory now calculated in a platform independent - manner. - * Added double-quote characters to French language file. Patch - contributed Yves-Alexis Perez, see: - [52]http://groups.google.com/group/asciidoc/browse_thread/thread/e1 - 5282f072413940 - * Vim Syntax highlighter: Highlight closing OpenBlocks which - immediately follow a literal paragraph. - * Changed UNIX /dev/null to OS independent os.devnull in filters - code. Suggested by Henrik Maier: - [53]http://groups.google.com/group/asciidoc/browse_thread/thread/5a - c8e8ea895147e9 - * Vim syntax highlighter: Single and double quoted text now - highlights correctly when preceded by an attributes list. - * Added Ukrainian language file (lang-uk.conf). Added double-quote - characters to Russian language file.conf). Patches contributed by - Lavruschenko Oleksandr, see - [54]http://groups.google.com/group/asciidoc/browse_thread/thread/e1 - 5282f072413940 - * Single and double quote characters are now set using the {lsquo}, - {rsquo}, {ldquo} and {rdquo} attributes. This makes is easy to - customise language specific quotes. See: - [55]http://groups.google.com/group/asciidoc/browse_thread/thread/e1 - 5282f072413940 - * Implemented conf-files attribute to allow configuration files to be - specified in the source document. Suggested by Lex Trotman, see: - [56]http://groups.google.com/group/asciidoc/browse_thread/thread/b1 - 1066a828ab45b9 - - Bug fixes - * FIXED: Auto-generated section title ids are now Unicode aware. - * FIXED: Setting quotes configuration entries using document - attribute entries failed if the attribute entry was not in the - document header. See: - [57]http://groups.google.com/group/asciidoc/browse_thread/thread/a1 - dd0562dee8b939 - * FIXED: If the input and output file names were different then the - output file name was incorrectly used to synthesize docinfo file - names. Reported by Christian Zuckschwerdt. - * FIXED: An error can occur when more than one consecutive quotes are - defined as a blank string. Reported by Peggy Russell. - * FIXED: Encoding error in automatically generated author initials. - Patch submitted by Xin Wang. See: - [58]http://groups.google.com/group/asciidoc/browse_thread/thread/f4 - 4615dca0b834e9 - __________________________________________________________________ - -5. Version 8.6.3 (2010-11-14) - - Additions and changes - * Added and unbreakable option to bulleted and numbered lists (thanks - to Henrik Maier for this patch). - * Added ifeval::[] system macro (thanks to Henrik Maier for - suggesting this feature). - * The image scale attribute sets the DocBook imagedata element scale - attribute. Patch submitted by Henrik Maier. - * DocBook preface, colophon and dedication style section titles now - work. Based on patch submitted by Henrik Maier. - * a2x: Do not inject xsltproc parameters if they were specified on - the command-line (parameter double-ups generate xsltproc Global - parameter already defined errors). - * a2x: Refactored xsltproc parameter injection. - * a2x: articles chunked at section level by default. - * attributes, titles and specialcharacters sections are now read from - the local asciidoc.conf file before the header is parsed. This - fixes a regression problem. See - [59]http://groups.google.com/group/asciidoc/browse_thread/thread/1b - 3f88f1f8118ab3 - * Document header attributes take precedence over configuration file - attributes. - * Refactored music, graphviz and latex filter configurations. - * Refactored source filter configuration and added literal paragraph - source style. - * Separated paragraph styles from paragraph syntax — any style can be - applied to any syntax. - * Added listing and quote paragraph styles. - * Renamed paragraph default style to normal. - * Updated --help option text. - * a2x: The asciidoc_opts, dblatex_opts, fop_opts and xsltproc_opts - command-line options can be specified multiple times. This makes - embedding multiple a2x options in document headers easier to manage - and less error prone. - * Added ASCIIMathML and LaTeXMathML support to slidy backend. - * Pass the encoding attribute to the Pygments source highlight filter - command. - * a2x: HTML Help .hhk file named after AsciiDoc source file. - * a2x: Added --xsl-file option to allow custom XSL stylesheets to be - specified. - * Make builds the man pages. Patch submitted by Sebastian Pipping. - See - [60]http://groups.google.com/group/asciidoc/browse_thread/thread/c2 - 1c2902c29bae64 - - Bug fixes - * FIXED: Sometimes double backquotes were misinterpreted as inline - literal macros. See: - [61]http://groups.google.com/group/asciidoc/browse_thread/thread/f5 - 10ea82a88aaee8 - * FIXED: Regression in 8.6.2: command-line attributes were not - available to the global asciidoc.conf. - * FIXED: Postponed document title substitutions until backend conf - files have been loaded (8.6.2 regression). See - [62]http://groups.google.com/group/asciidoc/browse_thread/thread/42 - b63ce90c2563b8 - * FIXED: The XSL Stylesheets customizations were preventing chapter - and section level TOCs from being generated when using XSL - Stylesheets via a2x. See - [63]http://groups.google.com/group/asciidoc/browse_thread/thread/42 - b63ce90c2563b8 - * FIXED: “UnicodeDecodeError: 'ascii' codec can’t decode byte” error. - This error is due to a limitation in the Python HTMLParser module, - see: [64]http://bugs.python.org/issue3932 - * FIXED: Broken --no-conf option (8.6.2 regression). - * FIXED: Regression in 8.6.2: configuration attribute entries set in - the document header may cause a FAILED: incomplete configuration - files error. - * FIXED: html4: corrected self closed meta tags. - * FIXED: a2x regression in 8.6.2: HTML Help .hhp file name had - reverted to default name instead of the AsciiDoc source file name. - See: - [65]http://groups.google.com/group/asciidoc/browse_thread/thread/de - dc961b23e9ac56 - * FIXED: Attributes in man page title caused it to be dropped - resulting in invalid DocBook output. - * FIXED: make uninstall now deletes the asciidoc.1 and a2x.1 man - pages. - __________________________________________________________________ - -6. Version 8.6.2 (2010-10-03) - - Additions and changes - * docbook45: Enclosed bibliographic lists in a bibliodiv — you can - now include block titles with bibliographic lists. - * Added optional keywords, description and title document header - meta-data attributes to HTML backends for SEO. - * AttributeEntry values can span multiple lines with a ' +' line - continuation. - * Added slidy backend (based on Phillip Lord’s slidy backend - [66]https://phillordbio-asciidoc-fixes.googlecode.com/hg/). - * Implemented OpenBlock partintro style for book part introductions. - * Comment lines substitute special characters only. - * Backend specific global configuration files (all except - asciidoc.conf) are loaded after the header has been parsed — - virtually any attribute can now be specified in the document - header. - * xhtml11: Volnitsky theme: allow bulleted lists to have intervening - children. - * xhtml11: refactored CSS font-family rules to start of file. - * xhtml11: list bullets colored gray. - * ifdef and ifndef system block macros accept multiple attribute - names: multiple names separated by commas are ored; multiple - attribute names separated by pluses are anded. - * xhtml11: Volnitsky theme: set max-width on labeled lists. - * Vim syntax highlighter: Entities inside quoted text are now - highlighted. - * Added role and id attributes to HTML outputs generated by - OpenBlocks. - * Allow floating titles to generate h1 (level 0) titles in HTML - outputs. - * Added a start attribute to numbered lists to set the start number. - See: - [67]http://groups.google.com/group/asciidoc/browse_thread/thread/c1 - 4a4c3b1e4f6dc5 - * Added two more docinfo attributes docinfo1 and docinfo2 to allow - and control inclusion of a shared docinfo file. See - [68]http://groups.google.com/group/asciidoc/browse_thread/thread/c9 - 48697943432e24 - * Vim syntax highlighter highlights multi-name conditional - attributes. - * LaTeX backend patch submitted by Andreas Hermann Braml (see - [69]http://groups.google.com/group/asciidoc/browse_thread/thread/1c - 415fc4540ce5e5). - * Implemented backend aliases; renamed docbook.conf to docbook45.conf - and aliased docbook45 backend to docbook; aliased xhtml11 to html. - - Bug fixes - * FIXED: Filter commands located in filter directories local to the - source document that where not in the search PATH where not found. - * FIXED: Volnitsky theme: Verseblock font set normal instead of - monospaced. - * FIXED: xhtml11: Callout icons were not rendered as Data URIs when - icons and data-uri attributes were specified. - * FIXED: Long standing bug: nested include macros did not restore the - parent document infile and indir attributes. See: - [70]http://groups.google.com/group/asciidoc/browse_thread/thread/87 - 12a95e95a292a7 - * FIXED: html4: set preamble ID anchor. - * FIXED: xhtml11: dropped unusable id and role attributes from - preamble template. - * FIXED: Bug in multi-name conditional attributes e.g. {x,y#} fails - if x or y is undefined. - * FIXED: latex filter not being installed by Makefile. Thanks to - Grant Edwards for this patch. See - [71]http://groups.google.com/group/asciidoc/browse_thread/thread/c4 - 427a3902d130a8 - * FIXED: a2x: Long-standing bug in a2x which always passes - --string-param navig.graphics 0 to xsltproc, regardless of whether - icons are enabled or not. Reported by Michael Wild: - [72]http://groups.google.com/group/asciidoc/browse_thread/thread/59 - a610068e4acb58 - __________________________________________________________________ - -7. Version 8.6.1 (2010-08-22) - - Additions and changes - * a2x: --resource-dir option renamed to --resource. - * a2x: --resource option accepts both file and directory names. - * a2x: Added -m,--resource-manifest option. - * Added Vim syntax highlighting for quote attribute lists. - * Load asciidoc.conf from all configuration directories before any - other configuration files. This ensures that attributes used for - conditional inclusion are set before backend configuration files - are processed. Previously if you wanted to control global conf file - inclusion your only choice was to modify the global asciidoc.conf - file. - * AsciiDoc Quote element attributes have been simplified and - generalized — positional color and size attributes and named role - attribute have been replaced by a single positional attribute. - - Bug fixes - * FIXED: testasciidoc.py: BACKEND command argument was being ignored. - * FIXED: Broken docinfo file functionality in html4 and xhtml11 - backends (previously the docinfo file was included in the body - instead of the header). - - 7.1. Regression issues - - This release breaks compatibility with quoted element positional color - and size attributes (HTML backends). To revert to the deprecated quote - behavior define the deprecated-quotes attribute in the global - asciidoc.conf file or on the command-line. For a more detailed - explanation of the rationale behind this change see - [73]http://groups.google.com/group/asciidoc/browse_thread/thread/b22603 - bfb879418c. - __________________________________________________________________ - -8. Version 8.6.0 (2010-08-16) - - Additions and changes - * The AsciiDoc distribution can now be built “out of the box” from - the distribution tarball or the Mercurial repository (provided you - have the requisite build applications installed). - * The global configuration files directory is ignored by both - asciidoc and a2x if AsciiDoc configuration files are installed in - the same directory as the asciidoc executable. This change allows - both a system wide copy and multiple local copies of AsciiDoc to - coexist on the same host PC. - * CSS quirks mode is no longer the default xhtml11 output - ([74]http://groups.google.com/group/asciidoc/browse_thread/thread/1 - c02d27d49221aa2). - * Relaxed anchor ID name syntax - ([75]http://groups.google.com/group/asciidoc/browse_thread/thread/5 - f3e825c74ed30c). - * Added document files: doc/epub-notes.txt, - doc/publishing-ebooks-with-asciidoc.txt. - * a2x: If all other resource locations are exhausted then recursively - search directories named images and stylesheets in the asciidoc - configuration files directory. - * a2x: options can also be set in the AsciiDoc source file. If the - source file contains a line beginning with // a2x: then the - remainder of the line will be treated as a2x command-line options. - * Added dblatex table-width processing instruction — tables generated - by dblatex now observe the AsciiDoc table width as a percentage - (thanks to Gustav Broberg for suggesting this enhancement). - * a2x: Don’t exit if the --epubcheck option is set and epubcheck is - missing, issue warning and continue. - * Added a global plaintext attribute for dealing with large amounts - of imported text. - * The author name format has been relaxed, if the the author does not - match the formal specification then it is assigned to the firstname - attribute (previously asciidoc exited with an error message). - * FAQ and documentation updates. - * Refactored chunked.xsl and epub.xsl files. - * Exchanged article.epub for more relevant book.epub on website. - * Put asciidoc.epub User Guide on website. - * a2x: Chunking EPUB and HTML outputs set to a per chapter basis and - the first chapter is separate from preceding contents. - * Changed dates format in example article and books to suppress EPUB - validation error. - * Added style and role CSS classes to xhtml11 section templates. - * Added the role element to xhtml11 backend block templates. - * Suppressed md5 module deprecation warning from music and Graphviz - filters. - * Pygments ([76]http://pygments.org/) option added to source code - highlight filter. Based on Pygments source code filter written by - David Hajage - ([77]http://groups.google.com/group/asciidoc/browse_thread/thread/d - 8d042f5a3021369/8934ebbb8cb7144b). - * xhtml11: Added a new theme (volnitsky). Written and contributed by - Leonid V. Volnitsky. - * xhtml11: Set body element class name to document type. - * Added refentryinfo element and contents (including revdate) to man - page DocBook output. Man pages are now dated using the revdate - attribute value if it has been defined. Based on patch supplied by - Rainer Muller - [78]http://groups.google.com/group/asciidoc/browse_frm/thread/319e5 - cd94493e330/3fcb83fab067af42. - * Added {template:...} system attribute. - * Table of contents attribute toc can now be specified in the - document header. - * Reimplemented music and latex filter -m option functionality when - the input is stdin using MD5 checksums. - * Added latex filter. - * Added auto file name generation to image generating filters - (latex,music, graphviz). - * Added counter2 and set2 system attributes (to implement image auto - file name generation). - * Undefined attribute in filter command generates error but does not - exit. - * Attribute substitution proceeds from start line to end line - (previously was in reverse order which was really confusing). - * Tidied up music filter code: - + Format option is optional and default to abc unless Lilypond - notation detected. - + The -m option does not apply to stdin input. - * Added paragraph styles to music and graphviz filters. - * Documented dynamic template names. 753: Graphviz filter can now - generate SVG format images. Patch submitted by Elmo Todurov, see: - [79]http://groups.google.com/group/asciidoc/browse_frm/thread/fe9b3 - 3d8f5f1e0af The xhtml11 SVG Graphviz template marked EXPERIMENTAL. - No SVG support for other backends. - * AsciiDoc template names can now contain embedded attribute - references. - * Added legalnotice tag to doc/article-docinfo.xml example. - * xhtml11 backend: Callouts and callout lists display callout icons - when the icons attribute is defined. See - [80]http://groups.google.com/group/asciidoc/browse_frm/thread/8eda3 - ea812968854 - * Document attribute names are case insensitive everywhere, this - makes using attribute entries more consistent e.g. previously - :VERS: had to be refered to - * Hungarian translation of footer-text (submitted by Miklos Vajna). - See - [81]http://groups.google.com/group/asciidoc/browse_frm/thread/7174c - b7598993c72# - * asciidocapi.py 0.1.2: Can now load AsciiDoc script named asciidoc. - See - [82]http://groups.google.com/group/asciidoc/browse_frm/thread/66e7b - 59d12cd2f91 Based on patch submitted by Phillip Lord. - * German translation of footer-text (submitted by Simon Ruderich). - See - [83]http://groups.google.com/group/asciidoc/browse_frm/thread/7174c - b7598993c72 - * Pushed HTML footer text into language conf files with the - introduction of a [footer-text] configuration file template - section. See - [84]http://groups.google.com/group/asciidoc/browse_frm/thread/7174c - b7598993c72 - - Bug fixes - * FIXED: Sometimes multiple double quoted text elements in the same - paragraph were mistakenly seen as starting with an inline literal. - See - [85]http://groups.google.com/group/asciidoc/browse_frm/thread/219c8 - 6ae25b79a21 - * FIXED: localtime and doctime attributes calculated incorrect - daylight saving / non daylight saving timezones and consequently so - did HTML footers. Patch submitted by Slawomir Testowy. See - [86]http://groups.google.com/group/asciidoc/browse_frm/thread/af652 - 507caf6cec9 - * FIXED: Missing selector for List of examples title in DocBook CSS - file. Patch submitted by Laurent Laville. See - [87]http://groups.google.com/group/asciidoc/browse_frm/thread/3f969 - 00f7fbf5620 - * FIXED: Broken accents in lang-hu.conf. See: - [88]http://groups.google.com/group/asciidoc/browse_frm/thread/7174c - b7598993c72 - * FIXED: DocBook XSL generated HTML callout lists are properly - aligned. Submitted by Lionel Orry. See - [89]http://groups.google.com/group/asciidoc/browse_frm/thread/2ff80 - 2547b6a75ea - * FIXED: Filter execution now occurs prior to filter markup template - substitution to ensure image data URI encoding happens after image - generation (see - [90]http://groups.google.com/group/asciidoc/browse_thread/thread/14 - e8fcb289a135b). - * FIXED: The section numbers no longer increment when the numbered - attribute is undefined (see - [91]http://groups.google.com/group/asciidoc/browse_thread/thread/fa - a36e9e5c7da019/d24cab3fe363e58d). - __________________________________________________________________ - -9. Version 8.5.3 (2010-01-18) - - Additions and changes - * a2x: Added a2x configuration file options ASCIIDOC_OPTS, - DBLATEX_OPTS, FOP_OPTS, XSLTPROC_OPTS (appended to same-named - command-line options). See - [92]http://groups.google.com/group/asciidoc/browse_frm/thread/ac4b9 - bfa2116db28 - * Dropped .hgignore from the repository. See - [93]http://groups.google.com/group/asciidoc/browse_frm/thread/c17ab - d175778f5ea - * Don’t pass verbose options to asciidoc table filter so that - asciidocapi messages are not discarded. See: - [94]http://groups.google.com/group/asciidoc/browse_frm/thread/c17ab - d175778f5ea - * Added ./tests/data/lang-pt-BR-test.txt file to the repository. - * xhtml11: Verse block and verse paragraph content enveloped in a pre - tag (instead of a div) so it renders better in text-only browsers. - See: - [95]http://groups.google.com/group/asciidoc/browse_frm/thread/1b6b6 - 6adb24e710 - * User Guide: Clarified Passthrough Blocks (suggested by Simon - Ruderich). - * FAQ: How can I include lines of dashes inside a listing block? - * FAQ errata and updates (submitted by Simon Ruderich). - * User Guide errata. - * Simplified asciidoc-toc processing instruction and included lists - of figures, tables, examples and equations in books (i.e. revert to - pre-8.5.0 behavior). - * Attempted to have dblatex recognise the asciidoc-toc processing - instruction but couldn’t get it to work. - * Added notitle attribute to allow the document title to be hidden. - - Bug fixes - * FIXED: Regression: system attribute escaping did not work. - * FIXED: Website: broken image links in chunked User Guide. - __________________________________________________________________ - -10. Version 8.5.2 (2009-12-07) - - Additions and changes - * Updated example article and book documents with the recommended - explicit section name syntax (see the Special section titles vs. - explicit template names sidebar in the AsciiDoc User Guide). - * Added Italian language configuration file (contributed by Fabio - Inguaggiato). - * Added header table style. See: - [96]http://groups.google.com/group/asciidoc/browse_frm/thread/a23fe - a28394c8ca9 - * Pass icons, data-uri, imagesdir, iconsdir attributes to asciidoc - table style filter so that images are rendered in table cells. - * Pass trace and verbose attributes to asciidoc table style filter so - diagnostic information is printed from table cell source. - * The eval system attribute can be nested inside other system - attributes. - * HTML outputs: Table and figure caption punctuation set to more - usual syntax. - * docbook backend: footnotes can now contain embedded images. See - [97]http://groups.google.com/group/asciidoc/browse_frm/thread/50b28 - f6941de111a - * CSS tweaks so that tables processed by DocBook XSL Stylesheets have - the default asciidoc xhtml11 backend styling. See - [98]http://groups.google.com/group/asciidoc/browse_frm/thread/dfe52 - 04d5b2c9685 - * Block titles take precedence over section titles to avoid titled - delimited blocks being mistaken for two line section titles (see - [99]http://groups.google.com/group/asciidoc/browse_frm/thread/f0b6f - 9989f828c3). - * Section title trace displays level and title text. - * FAQ additions. - * Added {zwsp} (zero width space) attribute. - * Undefined paragraph styles are reported (previously threw a runtime - error). - * Eliminated empty preamble generation. - * Floating titles now processed in all contexts. - * Implemented auto-lettered appendix names and updated example - documents. - * Section numbering can be disabled in HTML outputs with a - :numbered!: AttributeEntry. - * xhtml11: Nicer default quote block styling. - * Exclude floating titles from xhtml11 table of contents. Patch - submitted by Mark Burton (see - [100]http://groups.google.com/group/asciidoc/browse_frm/thread/14ae - fc1cb6bd85f5). - * Enhanced doc/article-docinfo.xml example docinfo file. - * Vim syntax highlighter improvements. - - Bug fixes - * FIXED: Absolute imagesdir and iconsdir attribute path names do not - work with the xhtml11 data-uri encoding. See - [101]http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b - 7694bbc82a6 - * FIXED: Regression issue with inline data-uri images. See - [102]http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b - 7694bbc82a6 - * FIXED: An unexpected error occurred when processing a table - containing CSV data if the cols attribute was not explicitly - specified. See - [103]http://groups.google.com/group/asciidoc/browse_frm/thread/4b0f - 364b477ec165 - __________________________________________________________________ - -11. Version 8.5.1 (2009-10-31) - - Additions and changes - * If an AsciiDoc document file begins with a UTF-8 BOM (byte order - mark) then it is passed transparently through to the output file. - The BOM is stripped from included files. See - [104]http://groups.google.com/group/asciidoc/browse_frm/thread/e5e6 - 1823ff4203cd - * Added AsciiDoc role attribute to quoted text. Sets class attribute - in HTML outputs; role attribute in DocBook outputs. See: - [105]http://groups.google.com/group/asciidoc/browse_frm/thread/2aa3 - e5711d243045 - * Conditional attribute syntax extended: they now accept multiple - ORed or ANDed attribute names. - * The xhtml11 backend dynamically processes footnotes using - JavaScript. - * Tidied up and namespaced xhtml11 JavaScript. - * Superceded javascripts/toc.js with javascripts/asciidoc-xhtml11.js. - * Added disable-javascript attribute (xhtml11 backend). - * Styled HTML footnotes. - * Added links to HTML footnote refs. - * Added title attribute to inline image macros to display popup - “tooltip” (HTML outputs only). - * Single-quoted attribute values are substituted in block macros - (just like the AttributeList element). - * For consistency changed underscores to dashes in attribute names. - Public attributes with underscores retained for compatibility. - * Added Brazilian Portuguese language configuration file (contributed - by Thiago Farina). - * Added leveloffset attribute to make it easier to combine documents. - - Bug fixes - * FIXED: a2x: --dblatex-opts is now processed last so - asciidoc-dblatex.xsl params can be overridden. Patch submitted by - Mark Fernandes (see - [106]http://groups.google.com/group/asciidoc/browse_frm/thread/5215 - c99dcc865e7d). - * FIXED: An error occurred if a directory in current path with same - name as executable. - - 11.1. Regression issues - - There’s been quite a bit of tiding up to the xhtml11 JavaScript. The - most obvious change is that the toc.js script has been superceded by - asciidoc-xhtml11.js so if you’re linking you’ll need get a copy of the - new file from the distribution javascripts directory. - - If you use customised xhtml11 configuration file [header] and [footer] - sections and you want them to use the new footnotes feature then you’ve - got a bit more work to do: - 1. The onload event expression changed. - 2. The new
...
div envelopes document content. - 3. You need to add
...
div to the - [footnotes] section for footnotes to work. - 4. Drop the ifdef::toc[] macro that surround JavaScript inclusion. - - Take a look at the [header] and [footer] changes in the xhtml11.conf - diff to see what’s going on: - [107]http://hg.sharesource.org/asciidoc/diff/55a5999bfd04/xhtml11.conf - __________________________________________________________________ - -12. Version 8.5.0 (2009-10-04) - - Additions and changes - * Implemented a float attribute for tables and block images (HTML - outputs only). - * Added unfloat::[] block macro to cancel floating. - * Added table align attribute to (HTML outputs only). - * The image align attribute now works with HTML backends. - * Renamed table cell align attribute to halign so it doesn’t clash - with the new table align attribute. - * Added breakable and unbreakable options to AsciiDoc example and - block image elements. - * [miscellaneous] section entries now update properly when set from a - document AttributeEntry. - * [miscellaneous] section pagewidth entry accepts fractional values. - * Fractional column widths are now calculated correctly when using - fractional pageunits (DocBook tables). - * Use DocBook XSL table width processing instructions. - * asciidoc KeyboardInterrupt exits with error code 1. - * Added set system attribute to allow attributes to be set from - configuration file templates. - * Allow constrained quotes to be bounded on the left by a colons and - semicolons, see - [108]http://groups.google.com/group/asciidoc/browse_frm/thread/b276 - a927fdc87995 - * Titled listing and literal blocks (DocBook outputs) no longer - default to examples. See - [109]http://groups.google.com/group/asciidoc/browse_frm/thread/f4df - 7c9eec01a9bd - * Updated language file table, figure and example captions to - accommodate new auto-numbering in html4 and xhtml11 backends. - * Titled source highlight filter listings generated by docbook - backend are now rendered as examples. See - [110]http://groups.google.com/group/asciidoc/browse_frm/thread/f4df - 7c9eec01a9bd - * Implemented counter system attribute. - * Use counter system attributes to number titled tables and block - images in HTML backends. - * Added program name suffix to console messages. - * Added substitution to the AttributeEntry passthrough syntax, this - replaces the now unnecessary attributeentry-subs attribute. - * Allow passthrough inline macro syntax to be used in - AttributeEntrys. - * Reinstated 8.4.4 default lang attribute behavior. See - [111]http://groups.google.com/group/asciidoc/browse_frm/thread/d299 - 24043e21cb6a. - * Added max-width attribute to the xhtml11 backend to set maximum - display width. See - [112]http://groups.google.com/group/asciidoc/browse_frm/thread/74d9 - a542b79ccd50. - * Added a2x.py, a rewritten and much enhanced version of the old a2x - bash script. - * The new a2x can output EPUB formatted documents. - * Added --safe option and deprecated --unsafe option. Patch submitted - by Todd Zullinger. See - [113]http://groups.google.com/group/asciidoc/browse_frm/thread/ea3a - 8ea399ae5d2a and - [114]http://groups.google.com/group/asciidoc/browse_frm/thread/69b3 - 183fdab7c6a5 - * Added CHECK and TEST todo highlight words to Vim syntax - highlighter. - * Line breaks, page breaks, and horizontal rulers are now processed - by dblatex, thanks to a patch submitted by Mark Fernandes - ([115]http://groups.google.com/group/asciidoc/browse_frm/thread/a25 - 4cf949ea7c6c5). - * Allow footnote macros hard up against the preceding word so the - rendered footnote mark can be placed against the noted text without - an intervening space (patch submitted by Stas Bushuev, - [116]http://groups.google.com/group/asciidoc/browse_frm/thread/e1dc - b7ee0efc17b5). - * Normalized path in safe_filename function (submitted by Todd - Zullinger, - [117]http://groups.google.com/group/asciidoc/browse_frm/thread/69b3 - 183fdab7c6a5). - * The Asciidoc numbered and toc attributes cause DocBook outputs to - include asciidoc-numbered and asciidoc-toc processing instructions, - these are used by DocBook XSL to include section numbering and - table of contents (like Asciidoc HTML backends). For backward - compatibility both numbered and toc attributes are defined by - default when the docbook backend is used. See - [118]http://groups.google.com/group/asciidoc/browse_frm/thread/1bad - ad21ff9447ac. - * data-uri attribute is now evaluated dynamically and can be set in - document body (previously could only be set from command-line). - * Added sys3 and eval3 system attributes to passthrough generated - output, this fixes the data-uri inline image problem: - [119]http://groups.google.com/group/asciidoc/browse_frm/thread/a42d - b6bc54c2c537. - * Missing language file generates a warning instead of an error. - * Updated Spanish language file (updates contributed by Gustavo - Andrés Gómez Farhat). - - Bug fixes - * FIXED: Options in an AttributeList option attribute are merged with - (rather than replace) configuration file options. - * FIXED: Comment blocks and comment block macros no longer consume - preceding block titles and attribute lists. - * FIXED: examples/website/layout1.conf and - examples/website/layout2.conf TOC problem. Submitted by Mark - (burtoogle). See - [120]http://groups.google.com/group/asciidoc/browse_frm/thread/b9c6 - 3be67dd1d11c - * FIXED: Only the first occurrence of passthrough macro was - substituted. Patch submitted by Peter Johnson. See - [121]http://groups.google.com/group/asciidoc/browse_frm/thread/1269 - dc2feb1a482c - * FIXED: asciidoc now runs on Jython 2.5.0. - * FIXED: Wordpress margins and pads in a number of block elements - ([122]http://groups.google.com/group/asciidoc/browse_frm/thread/36f - f073c79cbc20a). - - 12.1. Regression issues - - * Tables generated by dblatex occupy 100% of the available space - regardless of the width attribute setting. To restore width - behavior change the pageunits miscellaneous parameter to pt. You - can do this from the command-line with the -a pageunits=pt option. - See [123]DocBook table widths. - __________________________________________________________________ - -13. Version 8.4.5 (2009-05-24) - - Additions and changes - * Added manpage Name and Synopsis section title customization to - languages configuration files. - * Synopsis manpage section no longer mandatory. - * Section markup templates can be specified by setting the title’s - first positional attribute or template attribute. - * The article and book document header can now include a revision - remark. - * A role attribute can now be applied to block elements. This adds - the role attribute to DocBook elements. Patch submitted by - [124]Noah Slater). - * Renamed revision and date attributes to more sensible and - consistent revnumber and revdate (old names deprecated but still - recognized). - * Moved backend specific attributes to Appendix H in User Guide. - * Renamed and generalized the docbook backend revision history - inclusion mechanism to docinfo to reflect the use of all article or - book information elements. The old revision history names still - work but have been deprecated. - * Refactored docbook.conf headers. - * Moved line break replacement from [replacements] to [replacements2] - so the replacement occurs after the mailto macro. This fixes bug - [125]http://groups.google.com/group/asciidoc/browse_thread/thread/4 - bdcdfb0af773e2 - * The typewriter to punctuation apostrophe replacement can be escaped - with a backslash. - * Graphviz filter outputs images to imagesdir if it is defined. - * Made the block image macro generic so that it can be used for - filter outputs. As a result Music and Graphviz filters: - + Have been greatly simplified. - + Honor the data-uri attribute. - + html4 outputs no longer generate W3C validation warning. - * The iconsdir attribute no longer requires a trailing directory - separator character. - * Removed borders around linked html4 images. - * Added html4 specific HTML output for music filter. - * a2x: Added --unsafe option (shortcut for --asciidoc-opts=--unsafe). - * a2x: The FOP executable can now be named fop (this is the default - name in some distributions). - * Attributes are now substituted in the system macro attribute list. - * If the output is set to stdout (i.e. no output directory is - defined) then Music and Graphviz filters will output included - images to the source file directory. - * Added name directive to testasciidoc. - * Added lots of testasciidoc new tests. - * Moved language specific configuration parameters into lang-en.conf - file. - * lang attribute entry can be specified in the AsciiDoc source file - (preceding the header). - * Removed cruft from A-A-P scripts and documented them. - * Added German language config file (lang-de.conf) contributed by - Michael Wild. - * Added French language config file (lang-fr.conf) contributed by - Yves-Alexis Perez. - * Added Russian language config file (lang-ru.conf) contributed by - Artem Zolochevskiy. - * Added Hungarian language config file (lang-hu.conf) contributed by - Miklos Vajna. - - Bug fixes - * FIXED: Multiple manpage names are now handled correctly when - generating DocBook output, each name now generates a separate - DocBook element. See - [126]http://groups.google.com/group/asciidoc/browse_thread/thread/c - 93bb4db025225d8 - * FIXED: A problem that caused AttributeEntries preceding the header - to be overwritten when the language conf file loaded. - * FIXED: Possible inline macro name ambiguity e.g. link matches - olink. - * FIXED: The documented macro definition deletion behavior had been - broken for a long time. - * FIXED: Email addresses not recognized when followed by a period - character. - * FIXED: Hyphens in mailto macros can delimit nested addresses e.g. - bloggs@mail was processed inside - mailto:joe-bloggs@mail-server.com[Mail]. - * FIXED: User name in FTP URI generated incorrect FTP link. See - [127]http://groups.google.com/group/asciidoc/browse_thread/thread/1 - d796a9c9ddb2855 - * FIXED: Source highlighter now works with Wordpress backend (see - [128]http://groups.google.com/group/asciidoc/browse_thread/thread/6 - d8c716748b109e3). - - 13.1. Regression issues - - 1. A colon following the date in the AsciiDoc header is treated as a - revision remark delimiter — this could be an issue if you have used - a colon in the header date. - __________________________________________________________________ - -14. Version 8.4.4 (2009-04-26) - - Additions and changes - * Added table column and row spanning. - * Table styles can now be applied per cell. - * Vertical cell alignment can be applied to columns and individual - cells. - * Added table align attribute to set horizontal alignment for entire - table. - * Included Geoff Eddy’s update of the experimental LaTeX backend. - * A new attribute named trace controls the output of diagnostic - information. If the trace attribute is defined then - element-by-element diagnostic messages detailing output markup - generation are printed to stderr. - * Added literal paragraph style (allows literal style to be applied - to normal paragraphs). - * Deleted unused replacements2 from xhtml11.conf. - * Added replacements2 to default substitutions. - * testasciidoc.py: messages to stdout, only diffs to stderr. - * Added transparency to smallnew.png image. - - Bug fixes - * All combinations of leading comments and attribute entries at the - start of a document are now skipped correctly. - * FIXED: ./configure doesn’t support --docdir as expected (patch - submitted by Artem Zolochevskiy) - * FIXED: Constrained quotes were incorrectly matched across line - boundaries e.g. the string +\nabc+ incorrectly matched a monospace - quote. - __________________________________________________________________ - -15. Version 8.4.3 (2009-04-13) - - Additions and changes - * DocBook outputs default to DocBook version 4.5 doctype (previously - 4.2). - * Configuration file [specialsections] definitions can be undefined - by setting their configuration entry values blank. - * The Makefile install target depends on the all target to ensure - pre-install patches are applied. - * testasciidoc.py now emits user friendly messages if: - 1. the configuration file is missing. - 2. an illegal backend is specified. - 3. an illegal test number is specified. - - Bug fixes - * Fixed [129]missing template section error. - * The testasciidoc.py --force option no longer deletes test data - files that were not specified. - * Dropped second quotes substitution in table cells — it had - effectively disabled quote escaping in table cells. - __________________________________________________________________ - -16. Version 8.4.2 (2009-03-19) - - Additions and changes - * Added [130]testasciidoc, a tool to verify AsciiDoc conformance. - * A warning is issued if nested inline passthroughs are encountered. - * asciidocapi: setting an attribute value to None will undefine - (delete) the attribute (this in addition to the name! attribute - name format that the asciidoc(1) command uses). - __________________________________________________________________ - -17. Version 8.4.1 (2009-03-10) - - Additions and changes - * AsciiDoc now has a [131]Python API. The following minimal example - compiles mydoc.txt to mydoc.html: - - from asciidocapi import AsciiDocAPI asciidoc = AsciiDocAPI() - asciidoc.execute('mydoc.txt') - - * Backtick quoting for monospaced text is now implemented as an - inline literal passthrough. This makes more sense since monospace - text is usually intended to be rendered literally. See - [132]Regression issues below for the impact this may have on - existing documents. Here are some examples that would previously - have had to be escaped: - The `++i` and `++j` auto-increments. - Paths `~/.vim` and `~/docs`. - The `__init__` method. - The `{id}` attribute. - * Added --doctest option to asciidoc(1) command. - * Added an optional second argument to BlockId element, this sets the - {reftext} attribute which in turn is used to set the xreflabel - attribute in DocBook elements. - * Added lists to --help syntax summary. - * {infile} and {indir} attributes reflect the current input file - (previously always referred to the root document). - * {docfile} (new) and {docdir} (previously deprecated) attributes - refer to the root document specified on the asciidoc(1) - command-line. - * Vim syntax highlighter improvements. - * Syntax summary command (asciidoc -h syntax) additions. - * Admonition icons now have transparent backgrounds. - * Changed yellow W3C badges to blue ones in page footers. - - Bug fixes - * Dropped asciidoc(1) broken undocumented --profile option. - * Em dash replacement now recognized at start of block. - - 17.1. Regression issues - - Replacing backtick quoting with the inline literal passthrough raises - two regression scenarios for existing documents: - 1. You have escaped the expansion of enclosed inline elements, for - example: \{id}. You would need to delete the backslashes: {id} (if - you don’t the backslashes will be printed). Mostly it’s just a case - of interactively finding and replacing of all occurrences of `\. - 2. There are enclosed inline elements, for example: some *bold* - monospaced. You would need to switch to plus character monospace - quoting: +some *bold* monospaced+ (if you don’t the enclosed - elements won’t be expanded). - - If your existing documents include these cases and you don’t want to - upgrade then use the -a no-inline-literal command-line option, - alternatively put this in ~/.asciidoc/asciidoc.conf: - [attributes] - no-inline-literal= - __________________________________________________________________ - -18. Version 8.3.5 (2009-02-02) - - Additions and changes - * Cached compiled regular expression delimiters (speed up User Manual - compilation by 250%). - * Created distinct list definitions for each numbered list style to - allow nesting of all styles. - * Roman numbers in numbered lists are followed by a closing - parenthesis instead of a period to eliminate i, v, x item ambiguity - with respect to alpha numbered list items. - * Added **, ***, ****, ***** bulleted lists. - * Added ..., ...., ..... implicit numbered lists. - * Added :::, :::: labeled lists. - * Updated User Guide for new list syntaxes. - * Optimized paragraph and list termination detection with separate - precompiled regular expressions for performance and to prevent - reaching Python 100 named group limit. - * Updated Vim syntax highlighter for new list syntaxes. - * Allow template::[] macros in conf file entries sections (not just - in template sections). - * Dropped unused [listdef-numbered2] conf file sections. - * Renamed ListBlock to more appropriate OpenBlock. - * Implemented single-line versions of ifdef::[] and ifndef::[] - macros. - * html4 backend styling: - + Underlined admonition captions. - + Added side border to Example Blocks. - * xhtml11 backend styling: - + Dropped right hand margin from all but quote and verse blocks. - + html4 backend: corrected over-sized width of caption in - admonition block. - - Bug fixes - * Fixed broken numbered list nesting. - - 18.1. Compatibility issues - - The roman numbered list parenthesis syntax is incompatible with the - potentially ambiguous roman period syntax introduced in 8.3.2. - __________________________________________________________________ - -19. Version 8.3.4 (2009-01-20) - - Additions and changes - * Implemented a title float style. A floating title (or bridgehead) - is rendered just like a normal section but is not formally - associated with a text body and is not part of the regular section - hierarchy so the normal ordering rules do not apply. - * Implemented inline comment macro so comment lines can now appear - inside block elements. - * Comment lines are sent to the output if the showcomments attribute - is defined (comment blocks are never sent to the output). - * Single quoting attribute values in AttributeList elements causes - them to be substituted like normal inline text (without single - quoting only attribute substitution is performed). - * Rewrote list item processing (was very crufty). List continuation - and list blocks now work as expected. Updated and clarified list - documentation in User Guide. - * The revision attribute now recognizes the RCS $Id$ marker format. - * An RCS $Id$ marker formatted revision line in the header does not - need to be preceded by an author line. - * If an RCS $Id$ formatted revision is specified and the author name - has not already been set then the author name in the $Id$ marker - will be used. - * Updated Gouichi Iisaka’s Graphviz filter to version 1.1.3. - * Added autowidth table attribute option for (X)HTML outputs. - * DocBook backend now puts orgname optional attribute in DocBook - header. - * Deprecated undocumented companyname attribute in favor of DocBook’s - corpname. - * Removed explicit closing backslash from HTML4 self-closing tags to - comply with WC3 recommendation. - - Bug fixes - * Fixed 8.3.3 regression whereby adjacent lists with the same syntax - but different list styles were incorrectly treated as a single - list. - __________________________________________________________________ - -20. Version 8.3.3 (2009-01-02) - - This release supersedes 8.3.2. - - Bug fixes - * The broken and confusing numeration and numeration2 numbered list - attributes have been dropped, use the style attribute instead. - __________________________________________________________________ - -21. Version 8.3.2 (2009-01-01) - - Additions and changes - * Added Gouichi Iisaka’s Graphviz filter to distribution. - * The SidebarBlock element can now be rendered with an abstract - style. - * Reorganized filters into a separate subdirectory for each filter. - * Updated Makefile.in and MANIFEST files to reflect new filters - organization. - * Added listing style to LiteralBlock element so listings with nested - listing blocks can be rendered as a listing block. - * Changed example code filter to use preferred ListingBlock syntax - (the old ~ delimited filter syntax is no longer used). - * Implemented enumeration and enumeration2 numbered list attributes - for specifying the list numbering style (arabic, loweralpha, - upperalpha, lowerroman and upperroman). - * AsciiDoc now recognizes upperalpha, lowerroman and upperroman - numbers in listdef-numbered2 numbered lists and sets the number - style based on the style of the first numbered list item - (alternative to setting enumeration2 attribute). - * Updated formatlistpat definition in .vimrc example in User Guide. - * You can now backslash escape system block macros. - * Added Pychart FAQ. - * Drop paragraph text and list text, index and label match groups - from attributes — they are included in the element’s text and we - don’t want them processed a second time as attributes. - * Changed comment line block macro to a passthrough block macro to - ensure no substitutions. - * A subslist no longer has to be appended to a PassthroughBlock macro - definition, if omitted no substitutions are performed. - * Code tidy up: replaced deprecated <> operator with !=. - * Removed unused linuxdoc code. - * Code tidy ups: dropped old types module reference; replaced - has_key() with preferred in operator. - - Bug fixes - * Old syntax source highlight filter regression: special characters - where not escaped in DocBook outputs. - __________________________________________________________________ - -22. Version 8.3.1 (2008-12-14) - - Additions and changes - * Replaced the install.sh script with Ben Walton’s updated autoconf - scripts — see [133]INSTALL for details. - * Added a generalized AttributeEntry syntax to allow arbitrary - configuration file entries to be set from within an AsciiDoc - document (suggested by Henrik Maier). - * Listing delimited blocks in DocBook outputs now support IDs; IDs of - titled Listing and Literal delimited blocks have been moved to the - enclosing DocBook example tag (thanks to Vijay Kumar for this - patch). - * Replaced vertical typewriter apostrophe with punctuation apostrophe - (thanks to Noah Slater). - - Bug fixes - * Regression: Excluding double-quotes from unquoted attribute values - resulted in backward incompatibility, double-quotes in unquoted - attribute values has been reinstated. - * Regression: Text like &...; was sometimes mistaken for an entity - reference — tightened up entity reference matching. - __________________________________________________________________ - -23. Version 8.3.0 (2008-11-29) - - Additions and changes - * [134]AsciiDoc new tables is a complete redesign of the tables - syntax and generation. The new syntax and features are a huge - improvement over the old tables. The old tables syntax has been - deprecated but is currently still processed. - * [135]Lists can now be styled like other block elements. This allows - a single list syntax for glossary, qanda (Question and Answer) and - bibliography lists instead of having to remember a different syntax - for each type. - * Inline passthroughs macros have been improved and block passthrough - macros added. Attribute substitution can be optionally specified - when the macro is called. - * The passthrough block has a fully transparent passthrough delimited - block block style called pass. - * The asciimath and latexmath [136]passthrough macros along with - asciimath and latexmath [137]passthrough blocks provide a (backend - dependent) mechanism for rendering mathematical formulas. There are - [138]LaTeX Math, [139]AsciiMathML and [140]LaTeXMathML examples on - the AsciiDoc website. - * Reimplemented and cleaned up filter processing based on a patch - submitted by Kelly Anderson. Uses the newer subprocess module - instead of the deprecated popen2 module. Now works in Win32 command - shell. - * Addition FAQs, more documentation updates. - * Arbitrary HTML/XML entities can be entered in AsciiDoc source. - * Did away with the need for the shaded-literallayout.patch (thanks - to Henrik Maier for this patch). - * Implemented page break block macro. - * Added line breaks and ruler processing instructions to DocBook - outputs (thanks to Henrik Maier for this patch). - * Added deg (degree) and wj (word joiner) entity attributes (thanks - to Henrik Maier). - * Tweaked DocBook indexterm2 macro to avoid white space preceding the - term when used in table cells (thanks to Henrik Maier for this - patch). - * Title elements now process the options attribute like other block - elements. - * Added ‘single quoted’ element. - * Spaces on both sides of a — em-dash are translated to thin space - characters. - * Improved detection and reporting of malformed attribute lists. - * The list compact style is now a list option. - * Added strong labeled list option which makes the labels bold (HTML - outputs only). - * Dropped unsupported linuxdoc backend. - * Dropped deprecated xhtml-deprecated (version 6) backend. - * Added breakable and unbreakable attribute options to tables to - control table breaking across page boundaries (DocBook XSL/FO - outputs). By and in collaboration with Henrik Maier. - * Added pgwide attribute option to tables to table, block image, - horizontal labeled lists. Specifies that the element should be - rendered across the full text width of the page irrespective of the - current indentation (DocBook XSL/FO outputs). Thanks to Henrik - Maier for this patch. - * Vim syntax highlighter: spaces before/after bullets no longer - highlighted (which is ugly if using a theme that highlights with - underlines). Thanks to Donald Chai for this patch. - * Added a2x(1) --fop option. - * Added a2x(1) --no-xmllint option. - * Highlighted labelled list terms with the navy color in XHTML - outputs. - * Use w3m(1) as default a2x(1) text format generator (fallback to - lynx(1)). - * Changed callout formats in html4 and xhtml11 outputs to angle - brackets to match source highlighter rendering. - * Macros now inject user defined -option attributes into - markup. - * Added IRC URLs to AsciiDoc inline macros. - * Added depth attribute to include::[] system macro. - * Added footnoteref inline macro. - * Added stylesheet XHTML attribute to specify additional custom CSS - stylesheet. - * If a paragraph style is specified it will be added to the XHTML - class attribute and DocBook role attribute. - * Replacements can be set in a document using the reserved - AttributeEntry name replacement. - * The prefix for auto-generated section name IDs can be set with the - idprefix attribute. - - Bug fixes - * Escaped quote skipped over leading and trailing quote instead of - just the leading quote. - * Fixed bug that was causing false negative safe mode warnings (patch - submitted by Julien Palmas). - * Placed priority of AttributeEntry, AttributeList and BlockTitle - above Title. This ensures an AttributeEntry, AttributeList or - BlockTitle followed by a same length leading ListingBlock delimiter - is not mistaken for a two-line title. - * Vim syntax highlighter: fixed multi-line quoted text. - * Contstrained quote termination after non-space character enforced. - * Vim syntax highlighter: unterminated quoted text is no longer - highlighted. - * Vim syntax highlighter: passthroughs now exactly match AsciiDoc - semantics. - * Vim syntax highlighter: escaped quoted text, attribute references - and inline macros are not highlighted. - * Vim syntax highlighter: TODO’s highlighted in CommentBlocks (thanks - to Scott Wall); non-greedy $$...$$. - * Vim syntax highlighter: Comment lines mistaken for vertical list - labels (thanks to Scott Wall). - * Vim syntax highlighter: Single unmatched $$ mistakenly highlighted - remaining text (patch contributed by Scott Wall). - * Callouts now work in source highlighted listing generated by - dblatex. - * Fixed exception that occured if undefined attribute was present in - filter command. - * AttributeList block can now follow a paragraph without intervening - blank line. - * The include macro tabsize attribute is no longer propagated to - nested includes. - - Omissions - The following features were implemented but then but removed from this - release: - * pi, cdata and comment passthrough macros and passthrough block - styles (creeping featurism, use pass macros instead). - * Generic tag inline macro (creeping featurism, use pass macros - instead). - - 23.1. Compatibility issues - - Version 8.3.0 has a number of backward incompatibilities with respect - to the previous 8.2.7 release: - * The old table syntax is still processed but a DEPRECATED warning is - issued. - * Entity references have to be escaped with a backslash. - * You have to explicitly precede horizontal style labeled lists with - the [horizontal] style attribute — by default all labeled lists are - rendered vertically. - * The list compact style has been dropped and is now a list option - (use options="compact" in attribute lists). - * AsciiDoc version 6 sytnax no longer supported. - * Linuxdoc been removed from the distribution. - * The unsupported experimental latex backend has not been tested on - this release. - * The introduction of single-quote quoting requires that double-quote - quoting is escaped with two backslashes. - __________________________________________________________________ - -24. Version 8.2.7 (2008-07-04) - - Additions and changes - * Added dvi, ps and tex output format options to a2x(1). - * Added --dblatex option to a2x(1) so dblatex(1) can be used to - generate PDFs. - * Added custom dblatex(1) configuration files (in distribution - ./dblatex directory) that are used by a2x(1). - * dblatex(1) is now used to generate the distributed PDF version of - the AsciiDoc User Guide. - * If you don’t need a customized the link caption you can enter the - http, https, ftp, file URLs and email addresses without any special - macro syntax — you get the links by just cutting and pasting URLs - and emails addresses. This also makes it easier to open links - directly form AsciiDoc source ( most editors allow you to open URLs - directly). The Vim syntax highlighter has been updated to reflect - these changes. - * Highlighted source code paragraphs have been implemented — it’s a - much more convenient way to enter short code examples (see [141]the - online docs). - * The source highlighter and music filter syntax has changed — they - now used the ListingBlock syntax customized with source and music - style attribute values. This follows the Paragraph styling - convention introduced by the source paragraph (previous item) and - is easier to read. The old syntax still works but has been - deprecated. - * QuoteBlocks now have a verse style — you no longer have to nest a - verse LiteralBlock inside a QuoteBlock for verses. The verse style - on the LiteralBlock has been deprecated (still works though) and - the style attribute is positional attribute 1, pushing attribution - and citetitle attributes to the right (you’ll need to insert a - quote attribute into your existing QuoteBlocks). - * It is no up to the DocBook processor to highlight source code - syntax in elements rather than GNU Highlighter — - this is the correct way to handle it, plus dblatex(1) makes a much - better job. - * scaledwidth and align attributes have been added to the image - macro. They apply to DocBook outputs (specifically for PDF - documents). scaledwidth sets the image size as a percent of the - available page width; align applies left, center or right - horizontal image justification. - * Added a2x(1) --fop-opts=FOP_OPTS option (patch submitted by Miklos - Vajna). - * Added a2x(1) --dblatex-opts=DBLATEX_OPTS option. - * Added Mikhail Yakshin’s FOP 0.95 patch which fixes a long-standing - fo.xsl problem and allows PDF’s to be generated with FOP 0.95 - (previously had to use FOP 0.20.5). - * The User Guide has been updated and outdated FOP configuration and - installation sections removed. - - Bug fixes - * Fixed stylesheets/xhtml11-manpage.css not being included when - linkcss attribute was used. - * Configuration file *-style attributes are now dumped correctly. - * Fixed FAILED: malformed section entry LaTeX backend error. - - See the also the [142]AsciiDoc repository changelog. - __________________________________________________________________ - -25. Version 8.2.6 (2008-04-29) - - Additions and changes - * Enhancements to the Vim AsciiDoc syntax highlighter, for example, - quoted text is now highlighted in titles and macro captions. - * If you define the data-uri intrinsic attribute images referenced by - image macros will be embedded in XHTML using the [143]data: URI - scheme. NOTE: Microsoft browser support for the data: URI scheme is - currently limited to MSIE 8 beta 1. - * Added toc-title attribute to allow custom table of contents titles. - * Added references to Alex Efros’s AsciiDoc Cheatsheet to AsciiDoc - website. - * asciidoc(1) and a2x(1) man pages formatted to conform to - man-pages(7) recommendations. - * Old code-filter syntax (pre-8.1.0) is no longer recognized so that - malformed two-line level 2 titles are no longer confused with - code-filter block delimiters. - * Added → ← ⇒ ⇐ arrow replacements from the Arrows block of Unicode. - * Added DocBook refentry lang attribute — patch contributed by - VMiklos. - * AttributeEntry names can now be numeric (“named macro targets”). - * Hide Table of Contents title if Table of Contents empty — patch - contributed by Alex Efros. - * Various XHTML CSS tweaks. - * Code cleanup: - + Replaced realpath() with Python 2.2 os.path.realpath() library - function. - + Replaced old string library functions with string methods. - + Use file generators instead of readlines(). - + Renamed entities that shadowed builtins. - + Standardized string quoting. - + Dropped readlines() function. - - Bug fixes - * Fixed broken CSS for decimal ordered lists nested in alpha ordered - list, thanks to Alex Efros. - * A missing closing block delimiter now reports the opening delimiter - line number instead of the end of file line number. - * Fixed an error generated by the asciidoc -e option when there are - no block definitions — patch contributed by Alejandro Mery. - * Handle both \r\n (as well as \n) line separators that may be - returned by {sys} attribute evaluation. - * Numbered attribute names no longer interfere with positional - attribute list values. - __________________________________________________________________ - -26. Version 8.2.5 (2007-11-18) - - Bug fixes - * Fixed exception thrown by illegal command-line arguments. - * Rolled back the with warning bug fix introduced in 8.2.4 — it was - incompatible with Python <2.5. - __________________________________________________________________ - -27. Version 8.2.4 (2007-11-10) - - Additions and changes - * You can now use the lang attribute to set the DocBook language - attribute. - * Attribute values can now contain attribute references. - * If the lang attribute is defined then configuration files named - like lang-.conf will be loaded automatically. - * The help file name help-.conf is based on the AsciiDoc lang - attribute, defaults to help.conf (English). - * Admonition, figure and table captions have been factored into a - predefined set of caption_* attributes. They only apply to directly - generated (X)HTML outputs (DocBook stylesheets generate their own - language specific captions based on the lang attribute). - * Dropped platform dependent doc/asciidoc.chm file from distribution - documentation formats. - - Bug fixes - * The spurious warning with will become a reserved keyword in Python - 2.6 has been suppressed. - __________________________________________________________________ - -28. Version 8.2.3 (2007-09-12) - - Additions and changes - * Added VMiklos’s permalink patch for auto-generated section IDs - (enabled by default by the sectids attribute). - * Added [144]FAQ to website. - * Changed format of {localdate} attribute to ISO 8601 (%Y-%m-%d). - * Added abc2ly --beams=None option to make music2png.py conform to - ABC’s notion of beams. - * XHTML level 2 section headings are now styled with an underlining - border. - * XHTML links to AsciiDoc title elements are now implemented with - title ID attributes (previously separate element targets were - generated. - * Multi-word first, middle and last names can be entered in the - header author line using the underscore as a word separator. - * The nested inline macros restriction has now been lifted, for - example you can now include links and inline images inside - footnotes. - * Help topic names can be shortened (so long as they are not - ambiguous). For example asciidoc -hm will print the AsciiDoc man - page. - * Added {two_colons} and {two_semicolons} attributes for escaping - labeled list ambiguity. - * If quirks mode is disabled the XHTML Mime Type is set to the - recommended application/xhtml+xml (rather than text/html). - - Bug fixes - * Author information is now correctly set when using attribute - entries in the header instead of an author line (previously the - author attribute was not being calculated correctly and there were - attribute substitution problems). - __________________________________________________________________ - -29. Version 8.2.2 (2007-07-22) - - Additions and changes - * [145]LaTeXMathML capability has been added for users who are more - familiar with or prefer LaTeX math formulas to the [146]ASCIIMathML - notation (thanks to Arthur Sakellariou for the patch). - * The source highlight and code filters now process embedded - callouts. - * Added an --attribute=ATTRIBUTE option to a2x(1) for passing - attribute values to asciidoc(1) (a shortcut for --asciidoc-opts="-a - ATTRIBUTE"). - * Image block and inline macros prepend optional {imagesdir} - attribute to image link targets. - - Bug fixes - * Fixed an assertion error that occurred when a configuration file - containing an include::[] macro was loaded using the --conf-file - option and the configuration file name did not include an explicit - directory path — patch submitted by Dmitry Potapov. - * Asciidoc titles are only converted to lower case if all characters - are upper case otherwise case is left unchanged — patch submitted - by Dmitry Potapov. - * Added a missing check that input is not stdin before loading - configuration files from the document directory — patch submitted - by Dmitry Potapov. - * Attribute list items must evaluate to strings, numbers or None - (previously it was possible to evaluate to other object types which - resulted in surprising attribute values). - * If an AsciiDoc document has no title an empty XHTML 1.1 title - element is created — previously the title element was dropped which - resulted in invalid XHTML 1.1. - * The Vim syntax file no longer highlights escaped callouts. - * The Vim syntax highlighter now correctly highlights Double-dollar - passthroughs when they enclose dollar delimited ASCIIMathML and - LaTeXMathML formulas. - __________________________________________________________________ - -30. Version 8.2.1 (2007-04-06) - - Additions and changes - * A number of improvements have been made to the Vim syntax - highlighter, for example the word C++ is no longer mistaken for the - start of an unconstrained monospace quote. - * Labeled list definitions have been tightened — a list label can no - longer containing trailing spaces. The following example is no - longer recognized as a valid list label: - - Lorum ipsum - This change implements the originally intended behavior - (as per the AsciiDoc documentation and examples) so there - should be very few compatibility issues. - __________________________________________________________________ - -31. Version 8.2.0 (2007-04-04) - - Additions and changes - * A Vim syntax file is now included in the AsciiDoc distribution - (inspired by Felix Obenhuber’s asciidoc.vim script). You can find - it (along with a Vim filetype detection script in the distribution - ./vim/ directory (the scripts are installed automatically by the - AsciiDoc installer ./install.sh). See Appendix J of the AsciiDoc - User Guide for details. - * Added toclevel attribute (1..4) which sets the number of title - levels reported in the table of contents. Defaults to 2 and must be - used with the toc attribute. Example usage: - $ asciidoc -a toc -a toclevels=3 doc/asciidoc.txt - * Added a listindex attribute which is the current list item index - (1..). If this attribute appears outside a list its value is the - number of items in the most recently closed list. - * The single line titles syntax now accepts trailing suffixes — this - syntax matches the title line syntax of a number of popular Wiki - markups. - * If a QuoteBlock has no attribution or citetitle then the DocBook - element is not generated (previously generated empty - element). - * If the text of a labeled list item is blank then no texttag is - written. - * An end of line backslash performs line continuation for horizontal - labeled list items. - * The Revision line now accommodates Subversion $Id markers (in - addition to CVS and RCS markers). Thanks to Tiago Sturmer Daitx for - this patch. - * Implemented a2x(1) option --skip-asciidoc which allows a2x(1) to - convert DocBook XML files not derived from AsciiDoc sources. - * If a2x(1) --doctype option is not specified it defaults to manpage - if --format=manpage else defaults to article (previously --doctype - always defaulted to article). - * Added an External Resources section to the [147]AsciiDoc home page. - __________________________________________________________________ - -32. Version 8.1.0 (2006-10-22) - - Additions and changes - * AsciiDoc generated XHTML documents now display a table of contents - if the toc attribute is defined (JavaScript needs to be enabled for - this to work). Thanks to Troy Hanson who contributed this feature - based on a JavaScript by Mihai Bazon. I’ve simplified things - somewhat to match Docbook XSL Stylesheets style, see Troy’s - [148]tpl User Guide for a fancier layout. Use the -a toc -a - numbered command-line options to produce a number table of - contents. - * A [149]music filter is included in the distribution ./filters/ - directory. It translates music in [150]LilyPond or [151]ABC - notation to standard classical notation in the form of a trimmed - PNG image which is inserted into the AsciiDoc output document. - * Incorporated Paul Melis’s Win32 filter patch. This workaround - allows AsciiDoc to run filters under Windows. - * Added uninstall.sh script. - * Rather than proliferate a confusing number of filter block - delimiters the following convention has been adopted: delimiters - belonging to DelimitedBlock filters distributed with AsciiDoc will - consist of a word (normally a noun identifying the block content) - followed by four or more tilde characters. This has necessitated - changing existing filter delimiters (the old delimiters still work - but may be deprecated in future versions): - + The example code filter block delimiter is now the word code - followed by four or more tilde characters. - + The source highlight filter block delimiter is now the word - source followed by four or more tilde characters. - * Conditionally redefined subscript and superscripting so they use - the old replacements mechanism when asciidoc7compatible is defined - rather than the asciidoc 8 default unconstrained quoting (patch for - affected files attached). - * Moved the source highlight filter from ./examples/ to ./filter/. - * Added {verbose} intrinsic attribute (useful for passing verbose - flag to filters). - * Added {outdir} intrinsic attribute. - * Renamed {docdir} intrinsic attribute to unambiguous {indir} - ({docdir} still works but may be removed in future release). - * If asciidoc(1) outputs to stdout then intrinsic attribute {docname} - is extracted from the input file name. - __________________________________________________________________ - -33. Version 8.0.0 (2006-08-27) - - This is a major release because changes to quoting and index entry - handling may break existing documents (see Additions and changes below - and Appendix A: Migration Notes in the AsciiDoc User Guide). - - Please report any problems you encounter. - - [152]Stuart Rackham - - Additions and changes - * Quoting can can occur within words (based on patch submitted by - Benjamin Klum). See the Unconstrained Quotes sub-section in the - User Guide. - * The underline and plus characters can be used as alternatives to - the existing apostrophe and backtick quote characters. They are - arguably better choices than the apostrophe and backtick as they - are not confused with punctuation. - * The syntax for index entry macros have have been deprecated from - +...+ and ++...++ to ((...)) and (((...))) respectively. Rationale: - + Bracketing is consistent other with [[...]] and <<...>> - reference macros. - + To easily confused with triple plus passthroughs. - + To make way for the new monospace quoting. - * Superscripts and subscripts are implemented as constrained quotes - so they can now be escaped with a leading backslash and prefixed - with with an attribute list. - * An experimental LaTeX backend has been written by Benjamin Klum (a - number additions in this release are to accommodate the LaTeX - backend). - * include macro file names now expand environment variables and tilde - expansions. - * A configuration file [quotes] entry can be undefined by setting to - a blank value. - * Added callto inline macro for Skype callto links. - * Added colnumber attribute for table data markup. - * A leading comment block or comment lines are now skipped - (previously a document had to start with either attribute entries - or a document Title). - * Experimental rows attribute (number of source lines in table) - available in table markup templates (used by experimental LaTeX - backend). - * Included install shell script written by [153]Jacob Mandelson for - installing the tarball distribution. - * Added INSTALL documentation file. - * Added replacements2 substitution options — a second replacements - section. - * Added the ability to redefine normal and verbatim substitutions - with subsnormal and subsverbatim entries in configuration file - [miscellaneous] section. - * By default AttributeEntry values are substituted for - specialcharacters and attributes, if you want a different - AttributeEntry substitution set the attributeentry-subs attribute. - * The name in name=value configuration file entries can now end with - a backslash, just escape the trailing backslash with a backslash. - For example: - abc\\=xyz - Results in name=abc\ and value=xyz — previously this would have - escaped the = character. - * A blank configuration file section deletes any preceding section - with the same name (applies to non-markup template sections). - * A command-line attribute value with a @ suffix does not override - existing document and configuration file attributes (normally - command-line attributes have precedence over document and - configuration file attributes). - * localtime attribute is now encoded from the native system encoding - to the output encoding. Patch submitted by [154]FKtPp — here’s his - description of the problem: - “I am a Chinese user of AsciiDoc and I find that when I use UTF-8 - (the default encoding) to write asciidoc documents in Windows - platform the resulting html footer line will get screwed. It was - caused by a localized tzname that was always encoded in the windows - native encoding, which in my case is cp936.” - * a2x(1) can generate Open Document Text files using - [155]docbook2odf. Currently docbook2odf(1) only processes a subset - of DocBook, unimplemented elements are skipped. - * The a2x(1) format option defaults to xhtml (previously a format had - to be specified explicitly). - * The -d, \--doctype=DOCTYPE option has been added to a2x(1) which is - a shortcut for --asciidoc-options="--doctype=DOCTYPE". - * Replaced a2x(1) --no-icons and --no-copy options with their negated - equivalents: --icons and --copy respectively. The default behavior - has also changed: copying and use of icons is disabled by default. - Rationale: - + To make the default behavior more consistent since use of - icons and CSS stylesheets does not apply to all formats. - + To make the default behavior less surprising (the creation of - icon and stylesheet output files must now be explicit). - * a2x(1) has been bumped from version 0.1.1 to version 1.0.0. - - Bug fixes - * Removed duplicate ./doc/a2x.1.txt from distribution tarball. - * Documentation errata. - * Attribute replacement is no longer performed twice in Titles and - AttributeEntrys. - * a2x(1) skipped asciidoc(1) execution when rerun with different - --asciidoc-options options, it now always executes asciidoc(1). The - problem was that previously asciidoc(1) was executed only if the - output file was missing or older than the source file. - __________________________________________________________________ - -34. Version 7.1.2 (2006-03-07) - - Additions and changes - * Support for [156]ASCIIMathML has been added. See Appendix I: - ASCIIMathML Support in the User Guide and the examples at - [157]http://www.methods.co.nz/asciidoc/asciimath.html. - * You can now prefix quoted text with inline attributes lists. You - can use this to set font size and color (XHTML and HTML outputs). - * Added ##...## quoting — it does nothing — it’s purpose is to allow - inline attributes to be applied to normal text. - * An inline passthrough mechanism has been implemented. - * Configuration file comment lines can be escaped with a backslash — - this is to allows the inclusion of configuration lines that start - with a hash character. - * The scriptsdir attribute can be used to specify the name of the - directory containing linked JavaScripts (see the [158]User Guide - for details. - * The BackendBlock has been renamed PassthroughBlock for consistency - with the new inline passthrough naming. - * a2x(1) now works with the older bash(1) version 2.05b. Patch - submitted by [159]Francis Daly. - * Content included by the include1::[] system macro is no longer - subject to attribute substitution so that ambiguities no longer - arise when used to include CSS or JavaScript files. - __________________________________________________________________ - -35. Version 7.1.1 (2006-02-24) - - Additions and changes - * The caption attribute can be used to customize admonition captions - as well as image, table and example block element title prefixes - (xhtml11 and html4 backends). - * You can now override the default icon image using the icon - attribute to specify the path of the linked image (xhtml11 and - html4 backends only). - * The deprecated imagesdir attribute is no longer recognized (use - iconsdir instead). - * Added Appendix H: Using AsciiDoc with non-English Languages to the - AsciiDoc User Guide. - * Added Admonition Icons and Captions subsection to the User Guide - explaining how to customize Admonition elements. - - Bug fixes - * a2x(1) failed when configuration files were installed in the global - /etc/asciidoc/ directory — it was only searching the directory - containing the asciidoc executable (thanks to Christian Wiese for - finding and submitting a patch this bug). - * The html4 backend admonition caption now correctly displays the - admonition caption attribute (previously displayed the style - attribute). - __________________________________________________________________ - -36. Version 7.1.0 (2006-01-13) - - Additions and changes - * a2x(1) toolchain wrapper utility. This overcomes the biggest hurdle - for new users which seems to be assembling and using a working - DocBook XML toolchain. With a2x(1) you can generate XHTML (chunked - and unchunked), PDF, man page, HTML Help and text file outputs from - an AsciiDoc input file with a single command. All you need to - install (in addition to AsciiDoc) is xsltproc(1), DocBook XSL - Stylesheets and optionally FOP (if you want PDF) or lynx(1) (if you - want text). - * Block titles can now start with any non-space character (previously - where not allowed to start with .~-_ characters). - * ./stylesheets/docbook.css renamed to ./stylesheets/docbook-xsl.css - to clarify its function. - * Renamed ./docbook-xsl/manpages.xsl to ./docbook-xsl/manpage.xsl for - consistency. - * Admonition and navigation icons moved to ./images/icons/ to clarify - usage and conform with a2x(1) usage. - * Renamed xhtml11 intrinsic attribute imagesdir to iconsdir to keep - vocab consistent and changed default value to ./images/icons - (previously ./images). imagesdir attribute still accepted but - deprecated. - * Unused image files have been weeded out of the distribution. - * Packager notes (appendix B) have been updated to reflect the needs - of a2x(1). - - Important - The renaming of the xhtml11 backend imagesdir intrinsic attribute and - it’s new default value introduces a backward compatibility issue: if - you use the icons attribute you will need to either move your icons to - the new default ./images/icons location or include an - --attribute{nbsp}iconsdir="your_icons_path" option in your asciidoc - commands. - - Bug fixes - * Backslash line continuation is now observed in verbatim paragraphs. - * Fixed errors generated by example - ./examples/website/build-website.sh script. - __________________________________________________________________ - -37. Version 7.0.4 (2005-12-08) - - Additions and changes - * Added ternary conditional attributes - {@:[:]} and - {$:[:]}. - * Safety violations now generate errors (they previously generated - warnings). - * asciidoc(1) now defaults to safe mode, consequently the - [miscellaneous] safe mode entry and --safe command-line option are - no longer necessary (though for backward compatibility asciidoc(1) - still accepts the --safe option). - * Backend Blocks are now flagged unsafe (they could be used to - include arbitrary and hence potentially unsafe output content). - * Filters are no longer considered unsafe. There’s not much point in - insisting on filter safety since the installation of an unsafe - filter would require the introduction of new or modified - configuration files — if your application configurations can be - compromised you’re in all sorts of trouble (safe mode protects - against unsafe input files not unsafe configuration). As with all - filters, before installing, you should verify that they can’t be - coerced into generating malicious output or exposing sensitive - information. - - Bug fixes - * Fixed a lot of glaring grammatical and factual errors in the User - Guide. - __________________________________________________________________ - -38. Version 7.0.3 (2005-12-01) - - Additions and changes - * Added --safe and --unsafe command-line options — AsciiDoc can now - be executed in a safe mode which disallows the execution of - arbitrary code or the inclusion of arbitrary files (see - [160]Appendix C in the AsciiDoc User Guide). - * Included [161]source-highlight filter in the distribution - ./examples/source-highlight-filter/ directory (based on filter - submitted by [162]Ryan Phillips). - * Included the DocBook XSL Stylesheets 1.69.1 customizations used to - generate the distributed AsciiDoc documentation (read the - asciidoc-docbook-xsl.txt file in the distribution ./docbook-xsl/ - directory). - * AsciiDoc DocBook XSL Stylesheet drivers moved from ./doc/ to - ./docbook-xsl/. - * Modified ./doc/manpages.xsl so only URL content is displayed in - manpages. - - Bug fixes - * Explicitly set table CSS border style (xhtml11 backend) to solid - because default border styles vary from browser to browser. - __________________________________________________________________ - -39. Version 7.0.2 (2005-08-28) - - Additions and changes - * There are now long versions of all AsciiDoc options. - * If the --backend is not specified it defaults to xhtml11. - * Added CSS simulated frames layout to the examples website (see - ./examples/website/layout2/README-website.txt). This layout does - not work with IE6 and the original tables based layout is still the - default. - * Support page added to AsciiDoc website. - - Bug fixes - * Invalid options are now trapped gracefully. - * Documentation errata. - __________________________________________________________________ - -40. Version 7.0.1 (2005-06-24) - - Additions and changes - * Reverted to use of strong, em, tt XHTML tags — they’re more obvious - and no less correct than span tags, besides, the generated file - sizes are smaller (the User Guide was 11% smaller). - * Table title rendered with caption tag rather than a separate div. - * The AsciiDoc stylesdir attribute (if specified) is now recognized - when searching for embedded stylesheets (previously only searched - default ./stylesheets directory). - * Default charset encoding changed from ISO-8859-1 to UTF-8 — it’s - less language specific and displays most common languages. - * template::[] macros now expand in all configuration file sections - previously only in markup template sections. - * Cleaned up example website layout CSS and configuration - (presentation has not been changed). - * Refactored xhtml11.conf configuration file. - * Set consistent and sensible permissions on distributed files. - * White space is now stripped from DSV formatted table cell data. - * class="tableblock" attribute added to tables generated by - xhtml-deprecated-css.conf to assist CSS. - - Bug fixes - * Illegal character set encoder (specified by the AsciiDoc encoding - attribute) and character data are trapped gracefully. - * AsciiDoc table format attribute in table attribute lists were not - recognized. - * The nested horizontal labeled list example in the AsciiDoc User - Guide has been dropped — it generated invalid DocBook markup. - __________________________________________________________________ - -41. Version 7.0.0 (2005-06-06) - - This is a major release with many code and documentation changes. - Please report any problems you encounter. - - [163]Stuart Rackham - - Additions and changes - * A new xhtml11 backend generates XHTML 1.1 with integrated CSS2 - replacing the previous xhtml, css, and css-embedded backends. - * The CSS stylesheets have finally been rewritten. - * The asciidoc(1) command help now includes user [164]customizable - help topics. When asciidoc is invoked with the --help option the - command argument is interpreted as a help topic. - * The previous example website has been replaced by the actual - AsciiDoc website (see ./examples/website/. - * XHTML generation options now controlled by the following - attributes: badges, linkcss, icons, numbered, quirks, theme, - stylesdir, imagesdir (see the [165]User Guide for details. - * By default HTML and XHTML are output as stand-alone documents (no - embedded CSS and no linked admonition icon images). - * Documents encoded with the UTF-8 Unicode character set are now - processed thanks to a patch supplied by [166]Viktor Vasilev. - * The -a ^name command-line syntax to undefine an attribute has been - deprecated in favor of the -a name! syntax. - * AttributeEntry syntax addition: :name!: to undefine name attribute. - * Added template system block macro to allow the inclusion of one - configuration file template section within another. - * A verse style attribute can now be applied to literal paragraphs - and blocks to reproduce line breaks and white space from the source - document. - * Replacements and Special Words can now be escaped with leading - backslashes. - * Replacements are now processed in configuration file order - (previous ordering was indeterminate). - * System macros can now be used in the base asciidoc.conf - configuration file. - * Deprecated features that emitted warnings in prior versions are no - longer tolerated. - * The eval system attribute expression evaluates to False the - attribute is undefined, if it evaluates to True the result is an - empty string. - * The Paragraph and DelimitedBlock presubs parameter can be aliased - as subs. - * Added verbatim substitutions option. - * Renamed List Continuation Block to List Block and renamed the - listcontinuation option to list. - * Deprecated default substitutions option (use normal instead). - * The section-numbers section numbering attribute has be renamed - numbered. - * Dropped the #UNDER CONSTRUCTION# block macro. - * Rewrote Paragraph and DelimitedBlock handlers adding a [167]styles - configuration entry. - - Bug fixes - * Included files are no longer read inside conditionally excluded - content. - * Manpage command names containing dashes (in the manpage NAME - section) were misinterpreted as the spaced dash command - name/purpose separator. Bug report and patch supplied by [168]David - Greaves. - * Unexpected error following malformed author line error. - __________________________________________________________________ - -42. Version 6.0.3 (2005-04-20) - - Additions and changes - * Special characters are now substituted in AttributeEntry element - values. - * Spaced and unspaced em dashes are now recognized (previously only - spaced em dashes were recognized). - * Replaced the table noborders option with richer frame and grid - attributes. - * The duplicate macro warning message now only occurs when the - verbose (-v) option is enabled. - * Single lines starting with two forward slashes hard up against the - left margin are treated as comments and are not processed. - * Renamed section delimited block option to sectionbody to more - accurately reflect it’s role. - * Added a List Continuation block — a specialized delimited block - that is functionally equivalent to the List Item Continuation - feature except that the list contained within the block does not - require explicit + list item continuation lines. - * Dropped deprecated tags from generated HTML. - * Literal Block delimiters must now consist of at least four points - (previously three) to avoid lone ellipsis ambiguity. - - Bug fixes - * Some system attribute evaluation failures caused unexpected - exceptions to occur. - __________________________________________________________________ - -43. Version 6.0.2 (2005-03-30) - - Additions and changes - * Three new system block macros have been added — eval, sys and sys2 - which are the block macro equivalents to the same named system - attributes. - * Intrinsic macros have been renamed system macros along with action - attributes which have been renamed system attributes: - + To reflect their common (though contextually different) - behavior. - + To avoid confusion with intrinsic attributes. - - Bug fixes - * Asciidoc now searches in /etc/asciidoc/filters for filters. - __________________________________________________________________ - -44. Version 6.0.1 (2005-03-06) - - Additions and changes - * A global configuration file location /etc/asciidoc has been added - and is now processed before all other locations (patch supplied by - [169]Fredrik Steen). - * Recoded tempfile.mktemp() and other artifacts that are no longer - necessary or desirable (patches supplied by [170]Fredrik Steen). - * Added BUGS file to the distribution. - - Bug fixes - * Illegal comment syntax in css-embedded-stylesheet.conf resulted in - illegal CSS in files generated by the css-embedded backend. - __________________________________________________________________ - -45. Version 6.0.0 (2005-01-28) - - This release has had some fairly major code and documentation changes. - Please report any problems you encounter. - - [171]Stuart Rackham - - A lot of new stuff. A new major version number — some regression - incompatibility (hopefully mitigated by deprecated warnings). - - Went mad trying to rein in the current feature anarchy — established a - unified notion of document attributes. Attempted to introduce a - consistent vocabulary — renamed many poorly or inconsistently named - entities. - - Actually, deprecated syntax is still processed correctly in almost all - cases. One source of incompatibility that may arise if you have - customized CSS stylesheets is the change of AsciiDoc CSS class names - (see below). I guess the moral is if you’ve done a lot of configuration - file customization and are happy with version 5 then you may want to - stay put. - - Note - This version requires Python 2.3 or better to run. - - Additions and changes - * Glossary entries have been renamed attributes. This eliminates - confusion with the accepted meaning of glossary. - * An AttributeEntry block element has been added so that document - attributes can be assigned from within an AsciiDoc document. - * The AttributeList block element has been added which is a more - general solution than the (now deprecated) DelimitedBlock - arguments. - * An BlockId element has been added for setting block element anchor - (link target) IDs. - * Quoted text can now span multiple lines (thanks to James Bowlin for - this patch). - * Inline macros can now span multiple lines. - * ‘`double backtick / apostrophe’' quotes generate “curly quotes”. - * A warning is now emitted for out of order list item (applies to - explicitly enumerated numbered list items). - * Added include action attribute. - * A line of three or more apostrophes generates an HTML horizontal - ruler (
tag). You will get a warning if processed with - non-HTML backend. - * An {imagesdir} attribute specifies image file location for images - referenced in configuration files when generating HTML (the default - location is images). - * An {stylesdir} attribute specifies the location of CSS stylesheets - when generating styled HTML (the default location for configured - markup is .). - * The use of the (often inappropriately named) {caption} attribute - list entry has been deprecated, use {0} instead. - * New ExampleBlock delimited block along with associated variants - Note, Tip, Warning, Caution and Important. - * The docbook.conf file now facilitates the optional inclusion of a - DocBook revision history file. - * To better reflect their purpose the following block elements have - been renamed: VerbatimBlock to ListingBlock; IndentedBlock to - LiteralBlock; IndentedParagraph to LiteralParagraph; CustomBlock to - BackendBlock; SimpleSection to SectionBody. Any corresponding CSS - class names have also been changed which could result in backward - incompatibility in customized stylesheets. - * Swapped plain DocBook admonition icons for Jimmac’s DocBook icons - ([172]http://jimmac.musichall.cz/ikony.php3). The original plain - icons have been moved to ./images/plain. - * Renamed html backend to xhtml to better reflect it’s function - (former html-4 backend renamed to html). - * A new inline anchor macro syntax [[[]]] is available, it - displays [] at the anchor location and is for anchoring - bibliography list entries. - * An optional single-line titles syntax can be used. - * Tweaks to distributed CSS stylesheets and FOP fo.xsl customization - file. - * List Item Continuation has been implemented which allows additional - block elements to be included in list items by separating them from - the preceding list item element with a line containing a single - plus character. - * A new Horizontal Labeled List list type has been added. Generates - two column list — the first column contains the list element - labels, the second contains the element text. Same syntax as - Vertical Labeled Lists except the double colon label suffix is - followed by the start of the list item text. - - Bug fixes - * Fixed broken backslash line continuation. - * Labeled list end tags were not undergoing attribute substitution. - * Documents without any author information now generate legitimate - DocBook (previously if the author line was not included in the - document header then an empty (illegal) DocBook author element was - generated). - * Multiple spaces in filter command arguments were replaced by a - single space. The ./examples/asciidoc2text/asciidoc2text.sh script - now indents text correctly. - __________________________________________________________________ - -46. Version 5.1.1 (2004-10-10) - - 15-December-2004: Interim update: Updated asciidoc.py to fix broken - join_lines function — no other changes. - * PDF documentation is now produced from DocBook XML using XSLTLib - and FOP. Previously we processed DocBook SGML with jw(1) (which - used Dvips to convert DVI files to PDF). FOP has come a long way in - the last 12 months and produces very acceptable PDF under both - Linux and Windows. - * Sections detailing how to install and use the DocBook XSL - Stylesheets, xsltproc, FOP toolchain and the AsciiDoc XSLT drivers - have been added to the User Guide. - * The PDF output from the he example article template has been - included in the distribution (./doc/article.pdf). - * Special characters are emitted using decimal Unicode character - codes (previously used named character entities which cannot be - assumed included in non-HTML documents). - * Added registered trademark ® to [replacements]. - * CSS stylesheet tweaks. - * Admonitions (Note, Tip, Important, Warning, Caution) include icons - when generating css output. - __________________________________________________________________ - -47. Version 5.1.0 (2004-09-18) - - * Callouts have been implemented (see the Callouts section of the - AsciiDoc User Guide for details). - * Added XSL drivers for generating XHTML, chunked XHTML and HTML Help - from DocBook XML using XSL stylesheets and xsltproc(1). - * Added CSS stylesheet for HTML generated from DocBook XML using XSL - stylesheets. - * Distribution contains HTML Help formatted User Guide - (./doc/asciidoc.chm), the User Guide tells you how it’s generated. - * Images referred to by distributed stylesheets are now located in - the ./images subdirectory (previously located in .). - * Filters path names are now handled properly under Cygwin. - * The usual documentation and examples additions, updates and - polishing. - __________________________________________________________________ - -48. Version 5.0.9 (2004-09-09) - - * The convention of using a .asc file extension for AsciiDoc files - has been dropped in favor of the familiar .txt extension. It makes - more sense in that AsciiDoc is a text presentation format and - because .asc clashed with the same extension used by other - applications. It’s only a naming convention — you don’t have to - switch if you don’t want to. - * Changed the subscript formatting character from underline to tilde - since underscores in file names are reasonably common (especially - in link and image macros). - * An alternative syntax for the index term inline macro has been - added: ++,,++. - * Index terms that have secondary and tertiary entries now - additionally generate separate index terms for the secondary and - tertiary entries. - * A ++ index term inline macro has been added which displays - the term in the primary text flow. - * Added alternative variable list definition using double semi-colon - terminator as opposed to the standard double colon terminator so - variable lists can be nested to two levels. - * Footnotes now appear on a separate line in HTML and Linuxdoc - outputs. - * Python version compatibility is checked at startup. - * Preface and appendix section titles in multi-part Book documents - are meant to be out of sequence — warnings are no longer emitted - when outputting HTML. - * Empty section warnings have been replaced by error messages and are - emitted only if invalid markup would result. - * Missing macro sections or invalid macro name warnings are only - generated at startup if the -v (verbose) option is set. Otherwise - they are deferred until a matching macro is encountered in the - input file. - * Missing or invalid table definition warnings are only generated at - startup if the -v (verbose) option is set. Otherwise they are - deferred until a matching table is encountered in the input file. - * AsciiDoc now makes more of an effort to continue in the face of - errors. - * Fixed broken ./examples/website/main.aap script. - * Converted distribution text files DOS text format as a sop to - Windows users with challenged text editors. - * Documentation additions and corrections. - __________________________________________________________________ - -49. Version 5.0.8 (2004-05-15) - - * Spurious out of sequence level 2 warnings no longer appear when - processing book document multi-part book top level Preface and - Appendix sub-sections since they are (correctly) out of sequence. - * A warning is no longer emitted for empty Index sections since this - is normal when generating DocBook outputs. - * Fixed: [quotes] configuration file entries where not being - overridden by downstream configuration file entries. - * Footnote text is now output enclosed in square brackets in HTML - documents. - * Added superscripts and subscripts to the standard PRS configuration - files. - * Adjusted CSS stylesheets so list titles don’t have so much space - between title and first list item (broken in IE6 due to poor CSS - compliance). Lessened sidebar title top margin. - __________________________________________________________________ - -50. Version 5.0.7 (2004-04-22) - - * The version 5.0.6 README incorrectly stated that AsciiDoc would run - under Python 2.0, in fact it requires Python 2.1 or better. The - README has been corrected. - * Documented techniques for combining and splitting AsciiDoc - documents and processing the combined and split parts (see the Tips - and Tricks section of the User Guide). - * An example of marking up superscripts and subscripts is documented - in the Tips and Tricks section of the User Guide (the example - configuration file is in the AsciiDoc examples directory). - * Added ellipsis to shipped [replacements]; three periods output an - ellipsis entity. - * Removed unused SectionClose class. - * The AsciiDoc Preamble element is output as a DocBook Preface when - processed as a book document type (in older AsciiDoc versions a - warning was issued and processing stopped). - * Fixed a quoting anomaly: quoted text can no longer begin or end - with with white space. - __________________________________________________________________ - -51. Version 5.0.6 (2004-03-07) - - * New image macro implements optional image scaling and linking and - works in both inline and block contexts. The image macro obsolesces - the existing graphic block macro and icon inline macro. - * Macro substitution section names now have -inlinemacro and - -blockmacro suffixes to resolve context ambiguity, make their - purpose clearer and relieve section namespace congestion. - * Header derived glossary entries can now be overridden from the - command-line. - * Special character substitution is now performed on AuthorLine - derived author names. - * A macro or block argument called options can be used as a shortcut - for a list named arguments with zero length string values. - * Tables can be output without borders using the options="noborders" - argument. - * Table data lines that do not immediately follow a table section - underline can now be blank. This allows CSV data with embedded - blank lines to be processed correctly. - * Blank DSV format table data lines are silently skipped. - * Tightened up on enforcement of configuration file section names to - reduce the possibility of section content being seen as a section - header line. - * Section titles can be optionally suffixed with title arguments - enclosed in double square brackets. - * A replacement has been added to asciidoc.conf to replace inline - double dashes with the — entity. - * Changed the .UNDER-CONSTRUCTION. macro syntax to - #UNDER-CONSTRUCTION# so it is not mistaken for a BlockTitle. - Similarly changed the .NEW. replacement with #NEW#. - * #NEW# and #UNDER-CONSTRUCTION# macros are now included in - the DocBook backend. - * Replaced shipped smallnew.gif with smallnew.png. - * Documentation tidy ups. - __________________________________________________________________ - -52. Version 5.0.5 (2004-02-25) - - * Fixed the disappearing paragraph titles problem that was caused by - Inline macros (incorrectly) processing BlockTitles. - * Tightened AuthorLine validation. Previously invalid email addresses - and embedded special characters in the AuthorLine resulted in - invalid output markup. - __________________________________________________________________ - -53. Version 5.0.4 (2004-02-09) - - * Reinstated missing infile, outfile, filetype and - filetype- glossary entries. - * As of version 5.0.3 asciidoc(1) now requires Python 2.0 or greater, - this has now been documented. - __________________________________________________________________ - -54. Version 5.0.3 (2004-01-23) - - * Fixed problem that caused any filters directory file containing - .conf (not just those with the .conf extension) from being loaded. - * All [miscellaneous] configuration file entries can now be - referenced like glossary entries (they are now processed internally - as glossary entries). - * The output file line terminator (previously hardwired to \r\n is - now set using the newline entry in the configuration file - [miscellaneous] section. - * The misspelt blocktitles configuration file entry name has been - corrected (to blocktitle). - * An {empty} glossary entry has been added to the default - configuration which is useful for outputting trailing blank lines - from configuration file substitution sections. - __________________________________________________________________ - -55. Version 5.0.2 (2003-12-18) - - * New (alternative) anchor and xref macro syntax (old syntax still - valid). - * DocBook mediaobject and inlinemediaobject tags are generated in - place of graphic and inlinegraphic tags by the AsciiDoc graphic and - icon macros. If a macro argument is specified it is the alternative - text output if the target document format does not support the - specified graphic file format. - * Dropped the LinuxDoc left and right square bracket special - character substitutions as they interfered with macro substitution. - * Documentation updates and corrections. - __________________________________________________________________ - -56. Version 5.0.1 (2003-12-09) - - * Fixed problem with anchor tag when generating CSS styled HTML. - __________________________________________________________________ - -57. Version 5.0 (2003-12-08) - - This release has had some fairly major code and documentation changes. - Please report any problems you encounter. - - [173]Stuart Rackham - - * AsciiDoc can now produce a full-blown multi-part DocBook book - including dedication, abstract, preface, colophon, glossary, - appendix, bibliography and book part elements using the new - specialsections configuration file section. - * All Section element children (Paragraph, DelimitedBlock, List, - Table, BlockMacro) can now be titled using the BlockTitle element. - A BlockTitle element is a single line containing a title and - beginning with a period. - * The index and backmatter macros have been dropped, superseded by - specialsections. - * The AsciiDoc Preface element has been renamed Preamble (to avoid - confusion with the DocBook book preface element). - * Out of sequence titles are now tolerated with a warning. This - allows book document level 0 sections to be processed. - * An anchor inline macro has been added for document link target - creation. - * Note, Tip, Important and Warning paragraph types have been added to - support the corresponding DocBook elements. - * Title substitution is now performed in SidebarBlock titles. - * DocBook graphics now output as figure and informalfigure elements - rather than mediaobjects. This ensures numbered figures and a lists - of figures are produced by the DocBook toolchain. - * You can now escape block argument lines by appending a backslash. - Alternatively, if you embed arguments in the delimiter line - AsciiDoc does not check for an arguments line. - * The default DocBook backend file extension has been changed from - .docbook to .xml (.sgml for the docbook-sgml backend). - * Warnings are output by default (previously they only printed when - verbose option enabled). - * A Question and Answer variable list definition has been added to - the shipped configuration files, primarily to create DocBook qanda - DocBook elements. - * Fixed broken code-filter -b linuxdoc option. The asciidoc.asc User - Guide can now be processed by linuxdoc(1) (although tables are - dropped because LinuxDoc does not implement tables). - - Compatibility issues: - 1. Table titles are no longer in the arguments line, use the new - BlockTitles. - 2. Graphic titles are no longer in the graphic block macro caption, - use the new BlockTitles. - 3. The code-filter title must be placed in a preceding BlockTitle. - 4. SidebarBlock titles must be placed in a preceding BlockTitle. - 5. The DelimitedBlock option sidebar has been renamed to section. - 6. The default DocBook backend file extension has been changed from - .docbook to .xml (.sgml for the docbook-sgml backend). - __________________________________________________________________ - -58. Version 4.2 (2003-11-26) - - * The default HTML output is now XHTML 1.0 markup. To output the - former HTML 4 markup specify the html-4 backend. - * The default DocBook output is now DocBook XML. To output the former - DocBook SGML specify the docbook-sgml backend. The associated - docbook-sgml.conf file illustrates how to support minor DTD - variations. Examples of using the xmlto(1) command for DocBook - conversion have been added to the User Guide. - * Glossary entries set using the command-line -g option can now be - referenced in configuration files. - * Configuration dumps (-c command-line option) no longer output - redundant undefined glossary entries. - * DelimitedBlock arguments can now be specified in a separate - arguments line immediately following the leading delimiter line, - This is in preference to the existing delimiter embedded arguments. - Reasons: - + The syntax is in keeping with the Tables arguments syntax. - + It’s easier to enter and implements line continuation. - * A new QuoteBlock DelimitedBlock definition has been added to the - distribution configuration files. - * The table arguments lines can be continued using the backslash line - continuation character. - * Added new calculated glossary reference type {%}. - * Double-quote characters can now appear in unquoted positional - arguments. - __________________________________________________________________ - -59. Version 4.1 (2003-11-13) - - * Added DSV (Delimiter Separated Values) tables format. - * {eval:} glossary references drop the containing line if - evaluates to None. - * Block, Table and Macro arguments can now be positional (quoted or - unquoted). - * Vocabulary change: DelimitedBlock, Table and Macro attributes are - now referred to as arguments. This makes more sense in light of the - extended syntax and avoids confusion with backend markup tag - attributes. - * tablewidth table ruler parameter can now be expressed in percent - units (0..100). If between 0 and 1 then the original fractional - unit measure is applied. - * The use of quoting for generating footnotes and index entries has - been dropped in favor of footnote and indexterm inline macros. - * backmatter inline macro included in distribution. - * Fixed: CSS styled HTML tables are now fully XHTML 1.0 conformant. - * Fixed: tablewidth was processed incorrectly when passed as table - argument. - * Fixed: Glossary references like {x=\{y}} were one character off if - {x] was defined and {y} was not. - __________________________________________________________________ - -60. Version 4.0 (2003-11-08) - - This release has had some fairly major code and documentation changes. - Please report any problems you encounter. - - Stuart Rackham - - * Added tables to AsciiDoc. - * Added two special subs options: default specifies the default - substitution options and none specifies no substitution. These - options can only appear singly. - * Line continuation using a trailing backslash character is available - in Paragraphs, ListItems, Tables. - * The left and right quotes for quoted text can now be specified - separately. - * Shipped configuration files implement footnotes (only useful for - DocBook output) using \[[]] quoting. - * Shipped configuration files implement index terms (only useful for - DocBook and LinuxDoc output) using \(()) quoting. - * The shipped html backend configuration now emits valid HTML 4.01 - Transitional. - * Added new calculated glossary reference types {!} and - {#}. - * The DelimitedBlock params option has been dropped in favor of the - new block attributes mechanism. If you have customized block params - options you may need to adjust source files to use the block - attributes syntax. The example code filter has been updated to - reflect these changes. - * The code filter now has a -t tabsize option. - * Replaced -w option with -v (verbose) option. The warnings option - was just to confusing. - * Named attributes can now be specified in macro calls. - * The tabsize attribute is recognized in the built-in include macros. - A tabsize of zero suppresses tab expansion. - * The configuration file [options] section has been split into - [miscellaneous] and [titles]. If you have customized any of these - settings you will need to adjust the affected configuration files. - * Configuration file [miscellaneous] entries can now also be set - using the command-line -g option. - * Fixed: error that occurred when attempting to use zero length - configuration and source files. - * Fixed: blocking filter halt problem. - * Fixed: inline macro escape prefix problem. - * Fixed: missing macros from configuration dump problem. - * Fixed: named macros were dumped incorrectly. - * Many documentation changes/additions/corrections. - __________________________________________________________________ - -61. Version 3.2.2 (2003-10-26) - - * Added -n option (synonym for -g section-numbers). - * Dropped the processing commentary (hey, this is Unix). - * Added new calculated glossary reference type {?}. - is the glossary entry name and is the text - substituted if the glossary entry is defined. can only - contain literal text (no glossary references allowed). - * Added asciidoc2text to distribution examples/asciidoc2text - directory (converts AsciiDoc source to text file with section - numbering). - * Fixed incorrect nesting of Simple lists inside Variable lists. - * List definitions have been modified so that list items can be - indented. This allows a more intuitive indentation of nested lists - in AsciiDoc source. - * Lists must be separated from preceding paragraphs by a blank line. - This is to avoid paragraph lines being mistaken for list items. - * Corrected asciidoc man page documentation error: the`-f` option - does not search relative to source document directory for the - configuration file. - * Minor updates to various distribution .conf files. - * Included badges.conf in examples directory. - * css-embedded-stylesheet.conf now supports footer badges. - * The default in-line element processing order has been changed: - Glossary References are now processed before Inline Macros. This - allows glossary expansions to occur inside macro references. - * Glossary entries are now allowed in Author and Revision lines. - * Default List subs options and Paragraph presubs options are - assigned the following default value if not specified: - specialcharacters,quotes,specialwords,replacements,glossary,macros - * Documentation changes/additions/corrections. - __________________________________________________________________ - -62. Version 3.2 (2003-05-26) - - * Added a -s command-line option to suppress the output of [header] - and [footer] sections. - * Article document headers are no longer mandatory: this allows - AsciiDoc to process arbitrary chunks of text. When used in - conjunction with the new -s command-line option corresponding - chunks of backend markup can be generated. - * AsciiDoc now emits a warning message and continues when an out of - sequence section title is detected (previously it failed and - halted). This allows document sections to be processed separately. - * Optional presubs and postsubs entries have been added to - DelimitedBlock and Paragraph definitions. As a consequence - substitution options are no longer legal in options entries. - * presubs and postsubs substitutions are processed in the order the - options are specified (rather than the fixed options order of - previous versions). - * ./filters subdirectories are automatically searched for filter - commands. - * A title-subs configuration option specifies the substitutions - performed on document Header and Section titles. - * A subs entry in now included in List configuration file definitions - that specified substitutions performed on list entry text. - * Configuration files are auto-loaded from ./filters subdirectories. - * Added example code filter (see ./examples/filters). - * Bug fix: if section was empty you may have got erroneous missing - tag "paragraph" error. - * Internal code tidy up. - __________________________________________________________________ - -63. Version 3.1 (2003-05-18) - - * In version 3.0 a [macros] section entry of the form name was - equivalent to name=. An entry of the form name now undefines the - entry (to bring it in line with the behavior of other special - sections). - * Paragraphs have now been generalized (in the same way as Lists and - DelimitedBlocks). - * The indentsize option has been dropped as as consequence of - paragraph generalization. - * Pipe | characters can be included in substituted tag and - substitution section text using the {brvbar} (broken vertical bar) - glossary reference. - * Removed the restriction requiring substitution section text - placeholders | to be on a separate line. - * Added an -e asciidoc(1) command option that excludes implicit - configuration files (used in conjunction with -c generated - configuration files). - * Version 3.0 documentation has undergone a considerable cleanup. - * The dumping of quoted section entries (see -c option) now works - correctly. - * The format of special section entries has been made consistent: - name undefines the entry; name= sets the entry value to a blank - string; name=value sets the entry value to value. - * As a consequence of the previous change the caret prefix is no - longer used in glossary configuration file entries (although it is - still used when undefining an entry using the -g command-line - option). - __________________________________________________________________ - -64. Version 3.0 (2003-05-13) - - This version is the culmination of work begun in the 2.x releases - whereby fixed policy has been replaced by extensible mechanisms. - * Added -c command-line option to dump a composite asciidoc(1) - configuration file to stdout. - * Lists and Delimited Blocks are now defined by a set of - configuration file parameter sections. The user can modify the - default definitions or add new ones. - * Block content can now be processed through external filters. - * The default behavior for Custom Blocks is to perform glossary - substitution (previously there was no substitution inside Custom - Blocks). - * The old 2.x style macros have been reimplemented; as with Lists and - Delimited Blocks there syntax and behavior can be configured by the - user. The default macro syntax remains the same but the semantics - are now (hopefully) a bit more intelligible. - * Block and Builtin macros use :: delimiter instead of the 2.x single - colon delimit (to distinguish them from inline macros). The 2.x - syntax is still supported for backward compatibility. - * Nested lists are now supported and IndentedParagraphs can be - included in list items. - * Conditional source inclusion can be specified using built in ifdef, - ifndef and endif macros. - * The new conditional source inclusion feature has been used to - reduce the number of default configuration files down to one per - backend. - * A change of name: 2.x Substitutions are now called Replacements and - the 2.x [substitutions] configuration file section is now called - [replacements] (the old name is still recognized for backward - compatibility). - * The line break is now implemented as a Replacements substitution. - * Inline icon macro for inline images has been added to default - configuration files. - __________________________________________________________________ - -65. Version 2.2 (2003-04-07) - - * The master.conf configuration file name has been deprecated in - favor of asciidoc.conf. - * The standard configuration files set is now loaded from the - .asciidoc folder in the users home directory (if it exists) and - then from the source document directory. Configuration files that - don’t exist are silently skipped. - * Configuration files named like the source file will be - automatically loaded if they are found in the source file - directory. For example if the source file is mydoc.asc and the -b - html option is used then asciidoc(1) will look for mydoc.conf and - mydoc-html.conf in that order. - * The characters used to quote formatted text can be configured and - extended by the user (see the master.conf [quotes] section). - * Quoted text can now be escaped by prefixing a backslash character - to the leading quote. - * The double single-quote '' strong text quote has been deprecated in - favor of an asterisk * character. - * Added {eval:expression}, {sys:command} and {sys2:command} glossary - reference actions. - * Trailing brace characters } are now allowed inside glossary - references provided they are escaped with a backslash character. - * Glossary entries can now be escaped by prefixing a backslash - character to the leading brace character (use this in preference to - placing the backslash inside the brace). - * The output macro has been deprecated (use the new include1 macro - inside a CustomBlock). - * The default document type is article (asciidoc no longer attempts - to guess). - * Files included within DelimitedBlocks are not searched for block - termination underlines. This ensures the entire file is part of the - DelimitedBlock. - * include macros can now be used in configuration files. - * Corrected {infile} and {outfile} glossary entry documentation. - * File inclusion is now limited to a depth of 5 to catch recursion - loops. - * Inline tags have been deprecated, they’re not necessary and they - immediately make the source document backend specific. Use - CustomBlocks or Substitutions instead. - __________________________________________________________________ - -66. Version 2.1 (2003-03-17) - - * Added section auto numbering {sectnum} glossary entry - (auto-numbering function contributed by Ludovico Magnocavallo). - * asciidoc(1) now correctly returns non-zero exit status if an error - occurs. - * An AsciiDoc example website has been included in the AsciiDoc - distribution examples/website directory. - * NOTE: The asciidoc wrapper script included in the 2.0 distribution - has been dropped, if you’ve symlinked or aliased to asciidoc you’ll - need to change them to point directly to asciidoc.py instead. - * An RCS $Id$ marker can be used as the document header revision line - (based on a patch submitted by Ludovico Magnocavallo). - * In addition to the name=value glossary entry format two new ones - have been introduced: name (the default value is set to an empty - string) and ^name (the glossary entry is undefined). - * The -q command-line option has been deprecated and the -w level - command-line option added. - NOTE: By default skipped substitution warnings are now suppressed. - * If a configuration file specified with the -f command-line option - is not found relative to the current working directory then the - search is repeated relative to the asciidoc(1) directory. This - allows global configuration files to be used. - * Added {infile}, {outfile} predefined glossary entries. - * Added under-construction macro to HTML article configuration files. - * Deprecated {asciidoc_version} glossary entry in favor of - {asciidoc-version} (to it consistent with other entries). - __________________________________________________________________ - -67. Version 2.0 (2003-02-24) - - * The emphasized, strong and monospaced words options have been - generalized with the introduction of macro based special words - lists. - * Glossary references can now appear in both the document and macro - bodies. - * All output files use crlf line termination (previously used UNIX lf - (newline) termination). - * Added [substitutions] section which implements arbitrary regular - expression based substitutions. - * An optional master.conf configuration file can be used for entries - that are not backend or document type specific. - * Special character definitions moved from the code to the new - [special_characters] configuration file section. - * Configuration file glossary added. - * Command-line -g glossary entry added. - * A new book document type has been implemented for the docbook - backend. It outputs DocBook book documents. - * A major internal change has been the implementation of parametrized - user definable macros. Internally most document elements are now - processed as macros. - * Configuration file macro variables can be specified with default - values (literals or other macro variables). - * An attempt has been made to tighten up the vocabulary used to - describe the AsciiDoc document syntax. - * The term abstract has been replaced by the more general term - preface and a new preface section introduced into article - configuration files (replacing the synopsis sections). - * Any section elements can now be put in the document preface - (previous versions only allowed paragraphs). - * AsciiDoc Blocks have been unified and their behavior can be user - defined and parametrized. - * An output inclusion allows an external file to be written directly - to the backend output file. - * A new CustomBlock has been added. Default behavior is to insert the - enveloped AsciiDoc source lines directly into the output file. - * A line break tag can be inserted by terminating a line with a + - character (only really useful for HTML backends). - * An fourth section level has been introduced. - * The SidebarBlock delimiter line characters have been changed. The - deprecated underline is still accepted. - * Levels 2 and 3 title underline characters have been changed. The - deprecated underlines are still accepted. - * Lines with backend specific inline tags can be inserted into - AsciiDoc source files. - * Single words enveloped by underscores are no longer emphasized. - This feature was deprecated as it is redundant (use single quotes - instead) and was being applied to file names with underscores. - * A -q quiet option has been added to suppress warning messages. - * Badge images sourced locally. - * Added author and author-mail meta tags to HTML configuration files. - __________________________________________________________________ - -68. Version 1.5 (2003-01-08) - - * Implemented sidebar document elements. - * Explicit checks for user specified configuration files and input - file (rather than throwing exception). - __________________________________________________________________ - -69. Version 1.4 (2003-01-04) - - * New configuration file options emphasizedwords and strongwords. - These allow the definition of words that will always be emphasized - or rendered in a strong font without inline formatting. - * Document and section titles are no long subject to inline - formatting. - * Multiple configuration files can be overlaid in a single command. - * Configuration file tags and options entries can now be overridden - on an entry by entry basis (previously the entire section was - overloaded). - * Configuration file tags and options entries are now cached this has - resulted in around 37% performance improvement over version 1.3. - * Variable lists can now contain multiple terms per list item. - * Placeholder paragraph eliminated from empty sections that contain - subsections. - * Added {asciidoc_version} substitution variable. - * More documentation additions and tidy ups. - __________________________________________________________________ - -70. Version 1.3 (2003-01-01) - - * A new strong text formatting convention has been implemented: Word - phrases enclosed in pairs of single quote characters (acute - accents) are rendered in a strong font (usually bold). - * Paragraphs can now be followed immediately by Simple lists and - Ordered lists without an intervening blank line. - * A user specified configuration file (asciidoc(1) -f option) - overlays the default configuration file rather than replacing it. - Custom configuration files need only contain those sections that - have been customized. - * Comment Block delimiters have been relaxed slightly. They must - start with three forward slashes /// but the remainder can contain - any characters, this allows comments to be embedded in the - delimiter line. - * Leading non-digit characters preceding revision number are now - ignored. - * Set default indentsize [option] from 2 to documented default value - of zero in HTML backend html-article.conf and html-manpage.conf - files. - * Fixed error that occurred when taking input from stdin without - explicitly specifying a document type. - * Restored file name and line number error message information. - * Changed deprecated -t option to -d in asciidoc --help and usage - command output. - * CSS styles tweaking. - * Code, configuration file and documentation tidy ups. - __________________________________________________________________ - -71. Version 1.2 (2002-12-28) - - * Implemented include URL to allow file inclusion. - * fileextension configuration file [option] renamed to more sensible - outfilesuffix (fileextension still accepted by this version but - will be dropped in future). - * Improved error reporting. - * CSS backends generate valid XHTML. - * New css-embedded backend generates HTML with embedded stylesheets - (use the css backend for linked stylesheets). The css-embedded - backend output contains no linked images so the generated html - files are completely self contained. - * Bug fixes. - __________________________________________________________________ - -72. Version 1.1 (2002-12-03) - - * Added css (cascading style sheets) backend - * Implemented IndentedBlock document element. - * Tabsize command-line option has been deprecated in favor of - configuration file. - * Default indent width changed to zero. - * Added {localdate} and {localtime} substitution variables. - * Added optional [options] configuration file section with - fileextension, tabsize and indentsize options. - * Implemented {authorinitials} substitution variable. - * Added https link type. - * Corrected [graphic] substitution from {title} to {caption} in - linuxdoc-article.conf configuration file. - * Fixed error that occurred when == title underline was used. - __________________________________________________________________ - -73. Version 1.0 (2002-11-25) - - First AsciiDoc public release along with AsciiDoc web site - ([174]http://www.methods.co.nz/asciidoc/) and SourceForge.net project - registration ([175]https://sourceforge.net/projects/asciidoc/). - __________________________________________________________________ - - Version 8.6.7 - Last updated 2012-03-16 16:49:19 NZDT - -References - - 1. http://groups.google.com/group/asciidoc/browse_thread/thread/a9762e21ec0cc244/5d3a4ebf20e6847e - 2. http://groups.google.com/group/asciidoc/browse_thread/thread/843d7d3d671006fb/25628e14c829db3f - 3. http://groups.google.com/group/asciidoc/browse_thread/thread/b8e93740b7cd0e1d/b5e0b83fe37ae31a - 4. http://groups.google.com/group/asciidoc/browse_thread/thread/3d06b0105dfbb780/8c60eb7a62f522e4 - 5. http://groups.google.com/group/asciidoc/browse_thread/thread/33e99b78e2472122 - 6. http://groups.google.com/group/asciidoc/browse_thread/thread/8200e29815c40f72 - 7. http://groups.google.com/group/asciidoc/browse_thread/thread/849e5ea91f43adf2 - 8. http://groups.google.com/group/asciidoc/browse_thread/thread/e92a75abcc382701 - 9. http://groups.google.com/group/asciidoc/browse_thread/thread/58d0843ae4345afd - 10. http://groups.google.com/group/asciidoc/browse_thread/thread/b0e69e393b6f9f20/47a2c7586f9e40c6?lnk=gst&q=themes+tarball#47a2c7586f9e40c6 - 11. http://groups.google.com/group/asciidoc/browse_thread/thread/b9d705c6b6b39f59/1e120483dafca109 - 12. http://groups.google.com/group/asciidoc/browse_thread/thread/103445ab9d95cb0c - 13. http://code.google.com/p/asciidoc/issues/detail?id=9 - 14. http://groups.google.com/group/asciidoc/browse_thread/thread/4608b77ec289f6c4 - 15. http://groups.google.com/group/asciidoc/browse_thread/thread/14e8fcb289a135b/3af3b4e57b827c78?lnk=gst&q=archlinux#3af3b4e57b827c78 - 16. http://groups.google.com/group/asciidoc/browse_thread/thread/5e2e6f4dd740d51a - 17. http://groups.google.com/group/asciidoc/browse_thread/thread/5e2e6f4dd740d51a - 18. http://groups.google.com/group/asciidoc/browse_thread/thread/a839aa01db0765d2 - 19. http://groups.google.com/group/asciidoc/browse_thread/thread/734ac5afed736987 - 20. http://groups.google.com/group/asciidoc/browse_thread/thread/6436788a10561851 - 21. http://groups.google.com/group/asciidoc/browse_thread/thread/c9238380a1f2507a - 22. http://groups.google.com/group/asciidoc/browse_thread/thread/ec8e8481eb0e27b0/d1c035092b5bb7a4?lnk=gst&q=caption+option#d1c035092b5bb7a4 - 23. http://groups.google.com/group/asciidoc/browse_thread/thread/3e177b84bc133ca9/659796dfadad30ea?lnk=gst&q=a2x+format#659796dfadad30ea - 24. http://groups.google.com/group/asciidoc/browse_thread/thread/16d3fb9672a408e7 - 25. http://groups.google.com/group/asciidoc/browse_thread/thread/bacbf8aeb8ad6a3a - 26. http://code.google.com/p/asciidoc/issues/detail?id=8 - 27. http://groups.google.com/group/asciidoc/browse_thread/thread/6436788a10561851 - 28. http://groups.google.com/group/asciidoc/browse_thread/thread/e8f3938bcb4c8bb4/44d13113a35738ef - 29. http://groups.google.com/group/asciidoc/browse_thread/thread/c9238380a1f2507a/9afc4559d51e1dbd - 30. http://groups.google.com/group/asciidoc/browse_thread/thread/8c111f1046b33691/158a944cf4d5ff0d?lnk=gst&q=latex+escapes#158a944cf4d5ff0d - 31. http://groups.google.com/group/asciidoc/browse_thread/thread/eaf25f21d1da180a - 32. http://flask.pocoo.org/docs/ - 33. file://localhost/tmp/lynxXXXX11f6Aw/article-html5-toc2.html - 34. file://localhost/tmp/lynxXXXX11f6Aw/epub-notes.html - 35. http://flask.pocoo.org/docs/ - 36. http://groups.google.com/group/asciidoc/browse_thread/thread/9da9d48a6461ff14 - 37. http://groups.google.com/group/asciidoc/browse_thread/thread/5c792cbb395b753b - 38. http://groups.google.com/group/asciidoc/browse_thread/thread/e2100b7cb29283ce - 39. http://groups.google.com/group/asciidoc/browse_thread/thread/c5e30ee5555877f5 - 40. http://groups.google.com/group/asciidoc/browse_thread/thread/baf3218551d05a05 - 41. http://groups.google.com/group/asciidoc/browse_thread/thread/5a7fe64fbfd65ad - 42. http://groups.google.com/group/asciidoc/browse_thread/thread/5620ba634fdb030a - 43. http://groups.google.com/group/asciidoc/browse_thread/thread/f969b9ce987d7f5d - 44. http://groups.google.com/group/asciidoc/browse_thread/thread/cd0f47495fd04181 - 45. http://code.google.com/p/asciidoc/issues/detail?id=6&q=label%3APriority-Medium - 46. http://sourceforge.net/tracker/?func=detail&atid=373747&aid=2854075&group_id=21935 - 47. http://groups.google.com/group/asciidoc/browse_thread/thread/b24cc3362f35b801 - 48. http://www.methods.co.nz/asciidoc/userguide.html#X96 - 49. http://groups.google.com/group/asciidoc/browse_thread/thread/77f28b0dfe60d262 - 50. http://www.methods.co.nz/asciidoc/manpage.html - 51. http://groups.google.com/group/asciidoc/browse_thread/thread/40c64cd33ee1905c - 52. http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940 - 53. http://groups.google.com/group/asciidoc/browse_thread/thread/5ac8e8ea895147e9 - 54. http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940 - 55. http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940 - 56. http://groups.google.com/group/asciidoc/browse_thread/thread/b11066a828ab45b9 - 57. http://groups.google.com/group/asciidoc/browse_thread/thread/a1dd0562dee8b939 - 58. http://groups.google.com/group/asciidoc/browse_thread/thread/f44615dca0b834e9 - 59. http://groups.google.com/group/asciidoc/browse_thread/thread/1b3f88f1f8118ab3 - 60. http://groups.google.com/group/asciidoc/browse_thread/thread/c21c2902c29bae64 - 61. http://groups.google.com/group/asciidoc/browse_thread/thread/f510ea82a88aaee8 - 62. http://groups.google.com/group/asciidoc/browse_thread/thread/42b63ce90c2563b8 - 63. http://groups.google.com/group/asciidoc/browse_thread/thread/42b63ce90c2563b8 - 64. http://bugs.python.org/issue3932 - 65. http://groups.google.com/group/asciidoc/browse_thread/thread/dedc961b23e9ac56 - 66. https://phillordbio-asciidoc-fixes.googlecode.com/hg/ - 67. http://groups.google.com/group/asciidoc/browse_thread/thread/c14a4c3b1e4f6dc5 - 68. http://groups.google.com/group/asciidoc/browse_thread/thread/c948697943432e24 - 69. http://groups.google.com/group/asciidoc/browse_thread/thread/1c415fc4540ce5e5 - 70. http://groups.google.com/group/asciidoc/browse_thread/thread/8712a95e95a292a7 - 71. http://groups.google.com/group/asciidoc/browse_thread/thread/c4427a3902d130a8 - 72. http://groups.google.com/group/asciidoc/browse_thread/thread/59a610068e4acb58 - 73. http://groups.google.com/group/asciidoc/browse_thread/thread/b22603bfb879418c - 74. http://groups.google.com/group/asciidoc/browse_thread/thread/1c02d27d49221aa2 - 75. http://groups.google.com/group/asciidoc/browse_thread/thread/5f3e825c74ed30c - 76. http://pygments.org/ - 77. http://groups.google.com/group/asciidoc/browse_thread/thread/d8d042f5a3021369/8934ebbb8cb7144b - 78. http://groups.google.com/group/asciidoc/browse_frm/thread/319e5cd94493e330/3fcb83fab067af42 - 79. http://groups.google.com/group/asciidoc/browse_frm/thread/fe9b33d8f5f1e0af - 80. http://groups.google.com/group/asciidoc/browse_frm/thread/8eda3ea812968854 - 81. http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72 - 82. http://groups.google.com/group/asciidoc/browse_frm/thread/66e7b59d12cd2f91 - 83. http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72 - 84. http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72 - 85. http://groups.google.com/group/asciidoc/browse_frm/thread/219c86ae25b79a21 - 86. http://groups.google.com/group/asciidoc/browse_frm/thread/af652507caf6cec9 - 87. http://groups.google.com/group/asciidoc/browse_frm/thread/3f96900f7fbf5620 - 88. http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72 - 89. http://groups.google.com/group/asciidoc/browse_frm/thread/2ff802547b6a75ea - 90. http://groups.google.com/group/asciidoc/browse_thread/thread/14e8fcb289a135b - 91. http://groups.google.com/group/asciidoc/browse_thread/thread/faa36e9e5c7da019/d24cab3fe363e58d - 92. http://groups.google.com/group/asciidoc/browse_frm/thread/ac4b9bfa2116db28 - 93. http://groups.google.com/group/asciidoc/browse_frm/thread/c17abd175778f5ea - 94. http://groups.google.com/group/asciidoc/browse_frm/thread/c17abd175778f5ea - 95. http://groups.google.com/group/asciidoc/browse_frm/thread/1b6b66adb24e710 - 96. http://groups.google.com/group/asciidoc/browse_frm/thread/a23fea28394c8ca9 - 97. http://groups.google.com/group/asciidoc/browse_frm/thread/50b28f6941de111a - 98. http://groups.google.com/group/asciidoc/browse_frm/thread/dfe5204d5b2c9685 - 99. http://groups.google.com/group/asciidoc/browse_frm/thread/f0b6f9989f828c3 - 100. http://groups.google.com/group/asciidoc/browse_frm/thread/14aefc1cb6bd85f5 - 101. http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b7694bbc82a6 - 102. http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b7694bbc82a6 - 103. http://groups.google.com/group/asciidoc/browse_frm/thread/4b0f364b477ec165 - 104. http://groups.google.com/group/asciidoc/browse_frm/thread/e5e61823ff4203cd - 105. http://groups.google.com/group/asciidoc/browse_frm/thread/2aa3e5711d243045 - 106. http://groups.google.com/group/asciidoc/browse_frm/thread/5215c99dcc865e7d - 107. http://hg.sharesource.org/asciidoc/diff/55a5999bfd04/xhtml11.conf - 108. http://groups.google.com/group/asciidoc/browse_frm/thread/b276a927fdc87995 - 109. http://groups.google.com/group/asciidoc/browse_frm/thread/f4df7c9eec01a9bd - 110. http://groups.google.com/group/asciidoc/browse_frm/thread/f4df7c9eec01a9bd - 111. http://groups.google.com/group/asciidoc/browse_frm/thread/d29924043e21cb6a - 112. http://groups.google.com/group/asciidoc/browse_frm/thread/74d9a542b79ccd50 - 113. http://groups.google.com/group/asciidoc/browse_frm/thread/ea3a8ea399ae5d2a - 114. http://groups.google.com/group/asciidoc/browse_frm/thread/69b3183fdab7c6a5 - 115. http://groups.google.com/group/asciidoc/browse_frm/thread/a254cf949ea7c6c5 - 116. http://groups.google.com/group/asciidoc/browse_frm/thread/e1dcb7ee0efc17b5 - 117. http://groups.google.com/group/asciidoc/browse_frm/thread/69b3183fdab7c6a5 - 118. http://groups.google.com/group/asciidoc/browse_frm/thread/1badad21ff9447ac - 119. http://groups.google.com/group/asciidoc/browse_frm/thread/a42db6bc54c2c537 - 120. http://groups.google.com/group/asciidoc/browse_frm/thread/b9c63be67dd1d11c - 121. http://groups.google.com/group/asciidoc/browse_frm/thread/1269dc2feb1a482c - 122. http://groups.google.com/group/asciidoc/browse_frm/thread/36ff073c79cbc20a - 123. http://www.methods.co.nz/asciidoc/userguide.html#X89 - 124. http://groups.google.com/group/asciidoc/browse_thread/thread/62278a054188a038 - 125. http://groups.google.com/group/asciidoc/browse_thread/thread/4bdcdfb0af773e2 - 126. http://groups.google.com/group/asciidoc/browse_thread/thread/c93bb4db025225d8 - 127. http://groups.google.com/group/asciidoc/browse_thread/thread/1d796a9c9ddb2855 - 128. http://groups.google.com/group/asciidoc/browse_thread/thread/6d8c716748b109e3 - 129. http://groups.google.com/group/asciidoc/browse_thread/thread/fd27add515597c06 - 130. http://www.methods.co.nz/asciidoc/testasciidoc.html - 131. http://www.methods.co.nz/asciidoc/asciidocapi.html - 132. file://localhost/tmp/lynxXXXX11f6Aw/L9155-856TMP.html#X2 - 133. http://www.methods.co.nz/asciidoc/INSTALL.html - 134. http://www.methods.co.nz/asciidoc/newtables.html - 135. http://www.methods.co.nz/asciidoc/newlists.html - 136. http://www.methods.co.nz/asciidoc/userguide.html#X77 - 137. http://www.methods.co.nz/asciidoc/userguide.html#X76 - 138. http://www.methods.co.nz/asciidoc/latexmath.pdf - 139. http://www.methods.co.nz/asciidoc/asciimathml.html - 140. http://www.methods.co.nz/asciidoc/latexmathml.html - 141. http://www.methods.co.nz/asciidoc/source-highlight-filter.html - 142. https://sharesource.org/hg/asciidoc/ - 143. http://en.wikipedia.org/wiki/Data:_URI_scheme - 144. http://www.methods.co.nz/asciidoc/faq.html - 145. http://www.maths.nottingham.ac.uk/personal/drw/lm.html - 146. http://www.methods.co.nz/asciidoc/asciimathml.html - 147. http://www.methods.co.nz/asciidoc/index.html - 148. http://tpl.sourceforge.net/userguide.html - 149. http://www.methods.co.nz/asciidoc/music-filter.html - 150. http://lilypond.org/ - 151. http://abcnotation.org.uk/ - 152. mailto:srackham@gmail.com - 153. mailto:jlm@ofb.net - 154. mailto:m_pupil@yahoo.com.cn - 155. http://open.comsultia.com/docbook2odf/ - 156. http://www1.chapman.edu/~jipsen/mathml/asciimath.html - 157. http://www.methods.co.nz/asciidoc/asciimath.html - 158. file://localhost/tmp/lynxXXXX11f6Aw/userguide.html#X33 - 159. mailto:francis@daoine.org - 160. file://localhost/tmp/lynxXXXX11f6Aw/userguide.html#X39 - 161. file://localhost/tmp/lynxXXXX11f6Aw/source-highlight-filter.html - 162. mailto:trolocsis@gmail.com - 163. mailto:srackham@gmail.com - 164. file://localhost/tmp/lynxXXXX11f6Aw/userguide.html#X36 - 165. file://localhost/tmp/lynxXXXX11f6Aw/userguide.html#X33 - 166. mailto:viktor@rbg.informatik.tu-darmstadt.de - 167. file://localhost/tmp/lynxXXXX11f6Aw/userguide.html#X23 - 168. mailto:david@dgreaves.com - 169. mailto:stone@debian.org - 170. mailto:stone@debian.org - 171. mailto:srackham@gmail.com - 172. http://jimmac.musichall.cz/ikony.php3 - 173. mailto:srackham@gmail.com - 174. http://www.methods.co.nz/asciidoc/ - 175. https://sourceforge.net/projects/asciidoc/ diff --git a/manual/src/bin/asciidoc/CHANGELOG.txt b/manual/src/bin/asciidoc/CHANGELOG.txt deleted file mode 100644 index 8965577154381..0000000000000 --- a/manual/src/bin/asciidoc/CHANGELOG.txt +++ /dev/null @@ -1,3056 +0,0 @@ -AsciiDoc ChangeLog -================== - -:website: http://www.methods.co.nz/asciidoc/ - - -Version 8.6.7 (2012-03-17) --------------------------- -.Release highlights -No major enhancements but quite a few bug fixes which, among other -things, fixes Jython compatibility and improves Windows compatibility. - -.All additions and changes -- Vim syntax highlighter: highlight entity refs in macro arguments. -- Added files with `.asciidoc` extension to Vim file type detection. - http://groups.google.com/group/asciidoc/browse_thread/thread/a9762e21ec0cc244/5d3a4ebf20e6847e[Patch] - submitted by Dag Wiers. -- Added 'replacement3' substitution to enable - http://groups.google.com/group/asciidoc/browse_thread/thread/843d7d3d671006fb/25628e14c829db3f[ODT - whitespace processing]. -- Added 'unbreakable' option to XHTML and HTML 5 backends. -- Implemented toc::[] block macro and 'toc-placement' attribute for - HTML backends to allow the Table of Contents placement to be set - manually by the author. -- Added FAQs: 'How can I control page breaks when printing HTML - outputs?' and 'Is it possible to reposition the Table of Contents - in HTML outputs?'. -- Added `--backend` and `--backend-opts` options to the 'a2x' command - to allow 'a2x' to use backend plugin code extensions. - http://groups.google.com/group/asciidoc/browse_thread/thread/b8e93740b7cd0e1d/b5e0b83fe37ae31a[Patch] - submitted by Lex Trotman. -- Added - http://groups.google.com/group/asciidoc/browse_thread/thread/3d06b0105dfbb780/8c60eb7a62f522e4[args - block attribute] to source highlight blocks to allow arbitrary - parameters to be passed to the source highlighters. -- If the 'ascii-ids' attribute is defined then non-ascii characters in - auto-generated IDs - http://groups.google.com/group/asciidoc/browse_thread/thread/33e99b78e2472122[are - replaced] by their nearest ascii equivalents (to work around DocBook - processor limitations). -- Added global 'blockname' attribute which is dynamically updated to - identify the current block. See - http://groups.google.com/group/asciidoc/browse_thread/thread/8200e29815c40f72[discussion - list]. -- 'xhtml11', 'html5' backends: Include book part TOC entries for - multi-part books. Patch submitted by Loïc Paillotin. -- Removed code filter example from the AsciiDoc User Guide so that - backends implemented as external plugins can compile the manual. See - http://groups.google.com/group/asciidoc/browse_thread/thread/849e5ea91f43adf2[discussion - list]. -- If the delimited block 'skip' option is set then do not consume - block title and attributes. This makes it possible for the comment - delimited blocks to use an attribute list (previously the comment - delimited block was hardwired to skip preceding attributes and - titles). See - http://groups.google.com/group/asciidoc/browse_thread/thread/e92a75abcc382701[discussion - list]. -- Added `backend-confdir` intrinsic attribute. - -.Bug fixes -- *FIXED*: slidy backend: broken 'stylesheet' attribute. - http://groups.google.com/group/asciidoc/browse_thread/thread/58d0843ae4345afd[Patch] - submitted by Micheal Hackett. -- *FIXED*: Restored - http://groups.google.com/group/asciidoc/browse_thread/thread/b0e69e393b6f9f20/47a2c7586f9e40c6?lnk=gst&q=themes+tarball#47a2c7586f9e40c6[missing - themes] to zip file distribution archive. -- *FIXED*: Grammatical error in error messages. - http://groups.google.com/group/asciidoc/browse_thread/thread/b9d705c6b6b39f59/1e120483dafca109[Patch] - submitted by Dag Wieers. -- *FIXED*: Use configured normal substitution in preference to the - default one. -- *FIXED*: The 'eval' block macro would execute multiple times if it - evaluated to 'None'. -- *FIXED*: Duplicated entries in TOC of large document. - http://groups.google.com/group/asciidoc/browse_thread/thread/103445ab9d95cb0c[Patch] - submitted by Sebastien Helleu. -- *FIXED*: Python 2.4 backward - http://code.google.com/p/asciidoc/issues/detail?id=9[incompatibility]. -- *FIXED*: 8.6.6 regression broke Jython compatibility. See - http://groups.google.com/group/asciidoc/browse_thread/thread/4608b77ec289f6c4[discussion - list]. -- *FIXED*: Leaky file handles in a2x and music and latex filters which - created incompatibility problems for Jython. -- *FIXED*: All Python filters are executed with the same Python - interpreter that executes the asciidoc parent (previously filters - were hardwired to execute the 'python' interpreter). This prevents - http://groups.google.com/group/asciidoc/browse_thread/thread/14e8fcb289a135b/3af3b4e57b827c78?lnk=gst&q=archlinux#3af3b4e57b827c78[Python - mix-ups]. -- *FIXED*: Microsoft Windows shelled command-line truncation that - caused shelled commands to fail e.g. the 'data-uri' attribute - failure. - - -Version 8.6.6 (2011-09-04) --------------------------- -.Release highlights -- The AsciiDoc plugin architecture has been enhanced, unified and - extended: - * Plugin commands have been added to the asciidoc(1) `--backend` - option. - * An asciidoc(1) `--theme` option has been implemented to specify a - theme and to manage theme plugins. - * A plugin 'build' command (for creating plugins) added. - * 'build', 'install', 'list' and 'remove' plugin commands are all - recognized by asciidoc(1) `--backend`, `--filter` and `--theme` - options. -- A security update by Kenny MacDermid removes the use of `eval()` on - untrusted input (to disallow code malicious execution). - -.All additions and changes -- 'xhtml11', 'html5': Made verse and quote block text darker to print - legibly in Google Chrome browser. -- Added plugin 'build' command for plugin file creation. -- Merged `--help plugins` back to `--help manpage` so it matches the - asciidoc(1) manpage. -- The `--filter` command-line option can specify the name of filters - that will be unconditionally loaded. -- If a filter directory contains a file named `__noautoload__` then - the filter is not automatically loaded (you can used the `--filter` - command-line option to override this behavior). -- tests: Add Italian language tests. Patch submitted by Simon - Ruderich. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/5e2e6f4dd740d51a -- tests: Add tests for localized man pages. Patch submitted by Simon - Ruderich. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/5e2e6f4dd740d51a -- If the section name is prefixed with a '+' character then the - section contents is appended to the contents of an already existing - same-named section (the default behavior is to replace the the - section). -- If a configuration file section named 'docinfo' is loaded then it - will be included in the document header. Typically the 'docinfo' - section name will be prefixed with a '+' character so that it is - appended to (rather than replace) other 'docinfo' sections. -- Added `{sp}` intrinsic attribute for single space character. See - http://groups.google.com/group/asciidoc/browse_thread/thread/a839aa01db0765d2 -- Fixed TOC and footnotes generator. Patch submitted by Will. See - http://groups.google.com/group/asciidoc/browse_thread/thread/734ac5afed736987 -- The `asciidoc-confdir` attribute is set to the asciidoc executable - directory if it contains global configuration files i.e. a local - asciidoc installation. -- asciidoc now throws an error instead of just a warning of the - backend configuration file is not found. -- latex filter: write MD5 file after successful PNG file generation. - Always delete temp files irrespective of outcome. -- Added truecolor option to LaTeX filter. Patch submitted by Michel - Krämer. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/6436788a10561851 -- Unit test for table column specifiers with merged cells. Patch - submitted by Simon Ruderich. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/c9238380a1f2507a -- Added verbose message for `ifeval::[]` macro evaluation. -- Added test case for `ifeval::[]` evaluation. -- Security update to remove the use of `eval()` on untrusted input (to - disallow code malicious execution). Patch submitted by Kenny - MacDermid. -- Changed web site layout from table to CSS based. See - http://groups.google.com/group/asciidoc/browse_thread/thread/ec8e8481eb0e27b0/d1c035092b5bb7a4?lnk=gst&q=caption+option#d1c035092b5bb7a4 -- a2x: Pass `--format` option value to asciidoc as 'a2x-format' - attribute. Patch submitted by Lex Trotman - (http://groups.google.com/group/asciidoc/browse_thread/thread/3e177b84bc133ca9/659796dfadad30ea?lnk=gst&q=a2x+format#659796dfadad30ea). -- Added two FAQs submitted by Lex Trotman. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/16d3fb9672a408e7 -- html5,xhtml11: Implemented themes directory structure. -- html5,xhtml11: Implemented asciidoc `--theme` management option - (install, list, build and remove commands). -- html5,xhtml11: A theme can now optionally include a JavaScript file - `.js` -- html5,xhtml11: If the 'data-uri' attribute is defined then icons - from the theme icons directory (if they exist) will be embedded in - the generated document. -- Added optional 'warnings' argument to include macros. -- The asciidoc `--verbose` option now prints file inclusion messages. -- xhtml11, html5: Remove necessity for separate manpage CSS files. -- Added 'css-signature' attribute to tests. -- Add 'css-signature' attribute to set a CSS signature for the - document. Patch submitted by Peg Russell, see: - http://groups.google.com/group/asciidoc/browse_thread/thread/bacbf8aeb8ad6a3a -- White background for toc2 TOC viewport so that horizontally scrolled - content does not obscure the the TOC. Patch submitted by Lionel - Orry, see: http://code.google.com/p/asciidoc/issues/detail?id=8 - -.Bug fixes -- *FIXED*: Plugin install command: Delete backend directory is install - fails. -- *FIXED*: Plugin install command: Fixed bug extracting binary files - on Windows (reported by Jean-Michel Inglebert). -- *FIXED*: tests: Skip blank sections in testasciidoc.conf test - configuration file instead of throwing an exception (reported by - Jean-Michel Inglebert). -- *FIXED*: If a plugin Zip file does not contain file permissions - (probably because it was created under Windows) then install it - using the default permissions. -- *FIXED*: Fixed missing quote in preceding LaTeX filter patch. Fix - submitted by Simon Ruderich. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/6436788a10561851 -- *FIXED*: Some path attributes were processed as escaped Python - strings which could result in corrupted path names with backslash - separated Windows path names. Reported by Will. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/e8f3938bcb4c8bb4/44d13113a35738ef -- *FIXED*: Vertically spanned table cells resulted in incorrect column - styles being applied to some cells. Reported by Will: - http://groups.google.com/group/asciidoc/browse_thread/thread/c9238380a1f2507a/9afc4559d51e1dbd -- *FIXED*: LaTeX backend: fixed bad escapes. Patch submitted by Mark - McCurry: - http://groups.google.com/group/asciidoc/browse_thread/thread/8c111f1046b33691/158a944cf4d5ff0d?lnk=gst&q=latex+escapes#158a944cf4d5ff0d -- *FIXED*: When using slidy backend, display of characters with - accents is wrong because of 'meta http-equiv' line missing. Reported - by Fabrice Flore-Thebault. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/eaf25f21d1da180a - - -Version 8.6.5 (2011-05-20) --------------------------- -.Release highlights -- The addition of an 'html5' backend to generate HTML 5 output. Apart - from the inclusion of 'audio' and 'video' block macros the 'html5' - backend is functionally identical to the 'xhtml11' backend. - -- A new 'flask' theme for 'xhtml11' and 'html5' backends inspired by - the http://flask.pocoo.org/docs/[Flask website] styling (see 'toc2' - example in the next item below). - -- The new 'toc2' attribute generates a table of contents in - the left hand margin ('xhtml11' and 'html5' backends). - link:article-html5-toc2.html[This example] was generated using - the following command: - - asciidoc -b html5 -a icons -a toc2 -a theme=flask article.txt - -- `a2x(1)` now has a flexible mechanism for copying arbitrary - resource files to HTML based outputs -- this is very handy for - generating EPUB files with embedded fonts and other resources. - - * The `a2x(1)` `--resource` option can be used to inject any file - into EPUB output documents e.g. CSS resources such as fonts and - background images. - * Explicitly specified resources are added to the EPUB OPF manifest - automatically. - * You can explicitly specify file extension MIME types. - * The enhanced resource processing works around a couple of DocBook - XSL bugs (see link:epub-notes.html[EPUB Notes]). - -.All additions and changes -- A new 'flask' theme for 'xhtml11' and 'html5' backends. A shameless - knock-off of the http://flask.pocoo.org/docs/[Flask website] - styling. -- Added HTML 5 article with 'toc2' table of contents to the example on - the AsciiDoc website home page. -- Added 'filters' and 'topics' help topics. Fixed documentation - errors in help text. Patch submitted by Lionel Orry, see: - http://groups.google.com/group/asciidoc/browse_thread/thread/9da9d48a6461ff14 -- Pass parent configuration files, command-line attributes and header - attributes to table asciidoc filters. Based on patch submitted by - Simon Ruderich, see: - http://groups.google.com/group/asciidoc/browse_thread/thread/5c792cbb395b753b -- Allow a 'title' attribute entry in the document header so that HTML - backends can set the 'title' element separately from the displayed - document title (the 'doctitle' attribute). -- Pass 'lang' attribute to 'asciidoc' table style filter. Patch - submitted by Simon Ruderich, see: - http://groups.google.com/group/asciidoc/browse_thread/thread/e2100b7cb29283ce -- xhtml11,html5: Added 'toc2' attribute which generates a scrollable - table of contents in the left hand margin. Based on customized CSS - written by Suraj Kurapati, see - http://groups.google.com/group/asciidoc/browse_thread/thread/c5e30ee5555877f5 -- Added 'asciidoc-confdir' intrinsic attribute which expands to the - global conf directory. -- Documented that you can specify multiple CSS files with the a2x(1) - `--stylesheet` command option. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/baf3218551d05a05 -- Improved xhtml11 backend's table of contents generation latency. - Patch submitted by Hongli Lai. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/5a7fe64fbfd65ad -- Added html5 backend. -- For consistency converted all DOS formatted configuration and text - files to UNIX format. -- html4: Added ability to use 'role' attribute with most block - elements. Patch contributed by Simon Ruderich. See - http://groups.google.com/group/asciidoc/browse_thread/thread/5620ba634fdb030a -- Added Dutch language configuration file and accompanying test file - (contributed by Dag Wieers, see - http://groups.google.com/group/asciidoc/browse_thread/thread/f969b9ce987d7f5d). -- Configuration files are loaded in two passes when the -e - command-line option is used (the same behavior as when the -e option - is not used). Patch submitted by haad. See - http://groups.google.com/group/asciidoc/browse_thread/thread/cd0f47495fd04181 - and - http://code.google.com/p/asciidoc/issues/detail?id=6&q=label%3APriority-Medium -- Documented how to include embedded fonts in an EPUB document. -- a2x: Added `.=` resource specifier syntax. -- a2x: Enable admonition icons in example EPUBs. -- a2x: allow environment variables and tilde home directories in - resource manifest files. -- a2x: don't process non-existent resource directories. -- a2x: assume resource option is a directory if the name ends with a - directory separator. -- a2x: Added a new syntax to the `--resource` option specifier which - allows the destination path to be specified. -- a2x: Copy resources referenced in the OPF and resources referenced - by the generated HTML (in theory DocBook XSL should ensure they are - identical but this is not always the case e.g. - http://sourceforge.net/tracker/?func=detail&atid=373747&aid=2854075&group_id=21935). -- Drop border from callout list image links. -- html4: Moved manpage NAME section out of header so that the name - section is rendered when the asciidoc(1) `--no-header-footer` option - is specified (so that manpages processed blogpost include the NAME - section). -- Vim syntax highlighter: TODO markers now appear in list items and - literal paragraphs and blocks. -- Constrained quotes can now be bounded on the left by a } character. - See: - http://groups.google.com/group/asciidoc/browse_thread/thread/b24cc3362f35b801 -- Added text-decoration roles (underline, overline, line-through, - blink) for xhtml11 and html5 outputs. - -.Bug fixes -- *FIXED*: epubcheck 1.1 previously issued a warning for files not - registered in the manifest (epubcheck 1.0.5 did not). This resulted - in a problem compiling the adventures-of-sherlock-holmes.txt example - (the `underline.png` resource was not in the manifest). - - -Version 8.6.4 (2011-02-20) --------------------------- -.Additions and changes -- Added text foreground and background color along with text size CSS - styles for XHTML outputs, see {website}userguide.html#X96[]. -- Vim syntax highlighter: highlight macros that start with an - attribute reference (a common idiom). -- Vim syntax highlighter: highlight attribute references in macro - attribute lists. -- Attribute entries can be used to set configuration markup templates. -- Double-width East Asian characters in titles now correctly match the - title underline widths. Submitted by Changjian Gao (see - http://groups.google.com/group/asciidoc/browse_thread/thread/77f28b0dfe60d262). -- Implemented {website}manpage.html[asciidoc(1)] filter commands, see: - http://groups.google.com/group/asciidoc/browse_thread/thread/40c64cd33ee1905c -- User's home directory now calculated in a platform independent - manner. -- Added double-quote characters to French language file. Patch - contributed Yves-Alexis Perez, see: - http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940 -- Vim Syntax highlighter: Highlight closing OpenBlocks which - immediately follow a literal paragraph. -- Changed UNIX `/dev/null` to OS independent `os.devnull` in filters - code. Suggested by Henrik Maier: - http://groups.google.com/group/asciidoc/browse_thread/thread/5ac8e8ea895147e9 -- Vim syntax highlighter: Single and double quoted text now highlights - correctly when preceded by an attributes list. -- Added Ukrainian language file (`lang-uk.conf`). Added double-quote - characters to Russian language file.conf). Patches contributed by - Lavruschenko Oleksandr, see - http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940 -- Single and double quote characters are now set using the `{lsquo}`, - `{rsquo}`, `{ldquo}` and `{rdquo}` attributes. This makes is easy to - customise language specific quotes. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940 -- Implemented 'conf-files' attribute to allow configuration files to - be specified in the source document. Suggested by Lex Trotman, see: - http://groups.google.com/group/asciidoc/browse_thread/thread/b11066a828ab45b9 - -.Bug fixes -- *FIXED*: Auto-generated section title ids are now Unicode aware. -- *FIXED*: Setting 'quotes' configuration entries using document - attribute entries failed if the attribute entry was not in the - document header. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/a1dd0562dee8b939 -- *FIXED*: If the input and output file names were different then the - output file name was incorrectly used to synthesize 'docinfo' file - names. Reported by Christian Zuckschwerdt. -- *FIXED*: An error can occur when more than one consecutive quotes - are defined as a blank string. Reported by Peggy Russell. -- *FIXED*: Encoding error in automatically generated author initials. - Patch submitted by Xin Wang. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/f44615dca0b834e9 - - -Version 8.6.3 (2010-11-14) --------------------------- -.Additions and changes -- Added and 'unbreakable' option to bulleted and numbered lists - (thanks to Henrik Maier for this patch). -- Added `ifeval::[]` system macro (thanks to Henrik Maier for - suggesting this feature). -- The image 'scale' attribute sets the DocBook 'imagedata' element - 'scale' attribute. Patch submitted by Henrik Maier. -- DocBook 'preface', 'colophon' and 'dedication' style section titles - now work. Based on patch submitted by Henrik Maier. -- 'a2x': Do not inject xsltproc parameters if they were specified on - the command-line (parameter double-ups generate xsltproc 'Global - parameter already defined' errors). -- 'a2x': Refactored xsltproc parameter injection. -- 'a2x': articles chunked at section level by default. -- 'attributes', 'titles' and 'specialcharacters' sections are now read - from the local `asciidoc.conf` file before the header is parsed. - This fixes a regression problem. See - http://groups.google.com/group/asciidoc/browse_thread/thread/1b3f88f1f8118ab3 -- Document header attributes take precedence over configuration file - attributes. -- Refactored 'music', 'graphviz' and 'latex' filter configurations. -- Refactored source filter configuration and added literal paragraph - source style. -- Separated paragraph styles from paragraph syntax -- any style can be - applied to any syntax. -- Added 'listing' and 'quote' paragraph styles. -- Renamed paragraph 'default' style to 'normal'. -- Updated `--help` option text. -- 'a2x': The `asciidoc_opts`, `dblatex_opts`, `fop_opts` and - `xsltproc_opts` command-line options can be specified multiple - times. This makes embedding multiple 'a2x' options in document - headers easier to manage and less error prone. -- Added ASCIIMathML and LaTeXMathML support to slidy backend. -- Pass the 'encoding' attribute to the Pygments source highlight - filter command. -- 'a2x': HTML Help `.hhk` file named after AsciiDoc source file. -- 'a2x': Added `--xsl-file` option to allow custom XSL stylesheets to - be specified. -- Make builds the man pages. Patch submitted by Sebastian Pipping. See - http://groups.google.com/group/asciidoc/browse_thread/thread/c21c2902c29bae64 - -.Bug fixes -- *FIXED*: Sometimes double backquotes were misinterpreted as inline - literal macros. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/f510ea82a88aaee8 -- *FIXED*: Regression in 8.6.2: command-line attributes were not - available to the global asciidoc.conf. -- *FIXED*: Postponed document title substitutions until backend conf - files have been loaded (8.6.2 regression). See - http://groups.google.com/group/asciidoc/browse_thread/thread/42b63ce90c2563b8 -- *FIXED*: The XSL Stylesheets customizations were preventing chapter - and section level TOCs from being generated when using XSL - Stylesheets via 'a2x'. See - http://groups.google.com/group/asciidoc/browse_thread/thread/42b63ce90c2563b8 -- *FIXED*: ``UnicodeDecodeError: \'ascii' codec can't decode byte'' - error. This error is due to a limitation in the Python HTMLParser - module, see: http://bugs.python.org/issue3932 -- *FIXED*: Broken `--no-conf` option (8.6.2 regression). -- *FIXED*: Regression in 8.6.2: configuration attribute entries set in - the document header may cause a 'FAILED: incomplete configuration - files' error. -- *FIXED*: 'html4': corrected self closed meta tags. -- *FIXED*: 'a2x' regression in 8.6.2: HTML Help `.hhp` file name had - reverted to default name instead of the AsciiDoc source file name. - See: - http://groups.google.com/group/asciidoc/browse_thread/thread/dedc961b23e9ac56 -- *FIXED*: Attributes in man page title caused it to be dropped - resulting in invalid DocBook output. -- *FIXED*: `make uninstall` now deletes the `asciidoc.1` and `a2x.1` - man pages. - - -Version 8.6.2 (2010-10-03) --------------------------- -.Additions and changes -- 'docbook45': Enclosed bibliographic lists in a 'bibliodiv' -- you - can now include block titles with bibliographic lists. -- Added optional 'keywords', 'description' and 'title' document header - meta-data attributes to HTML backends for SEO. -- AttributeEntry values can span multiple lines with a ' +' line - continuation. -- Added 'slidy' backend (based on Phillip Lord's slidy backend - https://phillordbio-asciidoc-fixes.googlecode.com/hg/). -- Implemented 'OpenBlock' 'partintro' style for book part - introductions. -- Comment lines substitute special characters only. -- Backend specific global configuration files (all except - `asciidoc.conf`) are loaded *after* the header has been parsed -- - virtually any attribute can now be specified in the document header. -- 'xhtml11': Volnitsky theme: allow bulleted lists to have intervening - children. -- 'xhtml11': refactored CSS font-family rules to start of file. -- 'xhtml11': list bullets colored gray. -- 'ifdef' and 'ifndef' system block macros accept multiple attribute - names: multiple names separated by commas are 'ored'; multiple - attribute names separated by pluses are 'anded'. -- 'xhtml11': Volnitsky theme: set max-width on labeled lists. -- Vim syntax highlighter: Entities inside quoted text are now - highlighted. -- Added 'role' and 'id' attributes to HTML outputs generated by - 'OpenBlocks'. -- Allow floating titles to generate 'h1' (level 0) titles in HTML - outputs. -- Added a 'start' attribute to numbered lists to set the start number. - See: - http://groups.google.com/group/asciidoc/browse_thread/thread/c14a4c3b1e4f6dc5 -- Added two more docinfo attributes 'docinfo1' and 'docinfo2' to allow - and control inclusion of a shared docinfo file. See - http://groups.google.com/group/asciidoc/browse_thread/thread/c948697943432e24 -- Vim syntax highlighter highlights multi-name conditional attributes. -- LaTeX backend patch submitted by Andreas Hermann Braml (see - http://groups.google.com/group/asciidoc/browse_thread/thread/1c415fc4540ce5e5). -- Implemented 'backend aliases'; renamed `docbook.conf` to - `docbook45.conf` and aliased 'docbook45' backend to 'docbook'; - aliased 'xhtml11' to 'html'. - -.Bug fixes -- *FIXED*: Filter commands located in filter directories local to the - source document that where not in the search 'PATH' where not found. -- *FIXED*: Volnitsky theme: Verseblock font set normal instead of - monospaced. -- *FIXED*: 'xhtml11': Callout icons were not rendered as Data URIs - when 'icons' and 'data-uri' attributes were specified. -- *FIXED*: Long standing bug: nested include macros did not restore - the parent document 'infile' and 'indir' attributes. See: - http://groups.google.com/group/asciidoc/browse_thread/thread/8712a95e95a292a7 -- *FIXED*: 'html4': set preamble ID anchor. -- *FIXED*: 'xhtml11': dropped unusable 'id' and 'role' attributes from - preamble template. -- *FIXED*: Bug in multi-name conditional attributes e.g. `{x,y#}` - fails if x or y is undefined. -- *FIXED*: latex filter not being installed by Makefile. Thanks to - Grant Edwards for this patch. See - http://groups.google.com/group/asciidoc/browse_thread/thread/c4427a3902d130a8 -- *FIXED*: 'a2x': Long-standing bug in a2x which always passes - `--string-param navig.graphics 0` to 'xsltproc', regardless of - whether icons are enabled or not. Reported by Michael Wild: - http://groups.google.com/group/asciidoc/browse_thread/thread/59a610068e4acb58 - - -Version 8.6.1 (2010-08-22) --------------------------- -.Additions and changes -- 'a2x': `--resource-dir` option renamed to `--resource`. -- 'a2x': `--resource` option accepts both file and directory names. -- 'a2x': Added `-m,--resource-manifest` option. -- Added Vim syntax highlighting for quote attribute lists. -- Load 'asciidoc.conf' from all configuration directories before any - other configuration files. This ensures that attributes used for - conditional inclusion are set before backend configuration files are - processed. Previously if you wanted to control global conf file - inclusion your only choice was to modify the global 'asciidoc.conf' - file. -- AsciiDoc 'Quote element' attributes have been simplified and - generalized -- positional color and size attributes and named 'role' - attribute have been replaced by a single positional attribute. - -.Bug fixes -- *FIXED*: 'testasciidoc.py': `BACKEND` command argument was being - ignored. -- *FIXED*: Broken 'docinfo' file functionality in 'html4' and - 'xhtml11' backends (previously the docinfo file was included in - the 'body' instead of the 'header'). - -Regression issues -~~~~~~~~~~~~~~~~~ -This release breaks compatibility with quoted element positional color -and size attributes (HTML backends). To revert to the deprecated quote -behavior define the 'deprecated-quotes' attribute in the global -`asciidoc.conf` file or on the command-line. For a more detailed -explanation of the rationale behind this change see -http://groups.google.com/group/asciidoc/browse_thread/thread/b22603bfb879418c. - - -Version 8.6.0 (2010-08-16) --------------------------- -.Additions and changes -- The AsciiDoc distribution can now be built ``out of the box'' - from the distribution tarball or the Mercurial repository - (provided you have the requisite build applications installed). -- The global configuration files directory is ignored by both - 'asciidoc' and 'a2x' if AsciiDoc configuration files are installed - in the same directory as the asciidoc executable. This change - allows both a system wide copy and multiple local copies of AsciiDoc - to coexist on the same host PC. -- CSS 'quirks' mode is no longer the default 'xhtml11' output - (http://groups.google.com/group/asciidoc/browse_thread/thread/1c02d27d49221aa2). -- Relaxed anchor ID name syntax - (http://groups.google.com/group/asciidoc/browse_thread/thread/5f3e825c74ed30c). -- Added document files: `doc/epub-notes.txt`, - `doc/publishing-ebooks-with-asciidoc.txt`. -- 'a2x': If all other resource locations are exhausted then recursively - search directories named 'images' and 'stylesheets' in the - 'asciidoc' configuration files directory. -- 'a2x': options can also be set in the AsciiDoc source file. If the - source file contains a line beginning with '// a2x:' then the - remainder of the line will be treated as a2x command-line options. -- Added dblatex table-width processing instruction -- tables generated - by dblatex now observe the AsciiDoc table width as a percentage - (thanks to Gustav Broberg for suggesting this enhancement). -- 'a2x': Don't exit if the `--epubcheck` option is set and 'epubcheck' - is missing, issue warning and continue. -- Added a global 'plaintext' attribute for dealing with large amounts - of imported text. -- The author name format has been relaxed, if the the author does not - match the formal specification then it is assigned to the - 'firstname' attribute (previously asciidoc exited with an error - message). -- FAQ and documentation updates. -- Refactored chunked.xsl and epub.xsl files. -- Exchanged article.epub for more relevant book.epub on website. -- Put asciidoc.epub User Guide on website. -- 'a2x': Chunking EPUB and HTML outputs set to a per chapter basis and - the first chapter is separate from preceding contents. -- Changed dates format in example article and books to suppress EPUB - validation error. -- Added 'style' and 'role' CSS classes to xhtml11 section templates. -- Added the 'role' element to xhtml11 backend block templates. -- Suppressed md5 module deprecation warning from music and Graphviz filters. -- Pygments (http://pygments.org/) option added to source code - highlight filter. Based on Pygments source code filter written by - David Hajage - (http://groups.google.com/group/asciidoc/browse_thread/thread/d8d042f5a3021369/8934ebbb8cb7144b). -- xhtml11: Added a new theme (volnitsky). Written and contributed by - Leonid V. Volnitsky. -- xhtml11: Set body element class name to document type. -- Added refentryinfo element and contents (including revdate) to man - page DocBook output. Man pages are now dated using the revdate - attribute value if it has been defined. Based on patch supplied by - Rainer Muller - http://groups.google.com/group/asciidoc/browse_frm/thread/319e5cd94493e330/3fcb83fab067af42. -- Added `{template:...}` system attribute. -- Table of contents attribute 'toc' can now be specified in the - document header. -- Reimplemented music and latex filter -m option functionality when - the input is stdin using MD5 checksums. -- Added 'latex' filter. -- Added auto file name generation to image generating filters - (latex,music, graphviz). -- Added `counter2` and `set2` system attributes (to implement image - auto file name generation). -- Undefined attribute in filter command generates error but does not - exit. -- Attribute substitution proceeds from start line to end line - (previously was in reverse order which was really confusing). -- Tidied up music filter code: - * Format option is optional and default to 'abc' unless Lilypond - notation detected. - * The -m option does not apply to stdin input. -- Added paragraph styles to music and graphviz filters. -- Documented dynamic template names. 753: Graphviz filter can now - generate SVG format images. Patch submitted by Elmo Todurov, see: - http://groups.google.com/group/asciidoc/browse_frm/thread/fe9b33d8f5f1e0af - The xhtml11 SVG Graphviz template marked EXPERIMENTAL. No SVG - support for other backends. -- AsciiDoc template names can now contain embedded attribute - references. -- Added 'legalnotice' tag to `doc/article-docinfo.xml` example. -- xhtml11 backend: Callouts and callout lists display callout icons - when the 'icons' attribute is defined. See - http://groups.google.com/group/asciidoc/browse_frm/thread/8eda3ea812968854 -- Document attribute names are case insensitive everywhere, this makes using -attribute entries more consistent e.g. previously :VERS: had to be refered to -with {vers} ({VERS} did not work). -- Hungarian translation of footer-text (submitted by Miklos Vajna). - See - http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72# -- asciidocapi.py 0.1.2: Can now load AsciiDoc script named asciidoc. - See - http://groups.google.com/group/asciidoc/browse_frm/thread/66e7b59d12cd2f91 - Based on patch submitted by Phillip Lord. -- German translation of footer-text (submitted by Simon Ruderich). See - http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72 -- Pushed HTML footer text into language conf files with the - introduction of a [footer-text] configuration file template section. - See - http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72 - -.Bug fixes -- *FIXED*: Sometimes multiple double quoted text elements in the same - paragraph were mistakenly seen as starting with an inline literal. - See - http://groups.google.com/group/asciidoc/browse_frm/thread/219c86ae25b79a21 -- *FIXED*: 'localtime' and 'doctime' attributes calculated incorrect - daylight saving / non daylight saving timezones and consequently so - did HTML footers. Patch submitted by Slawomir Testowy. See - http://groups.google.com/group/asciidoc/browse_frm/thread/af652507caf6cec9 -- *FIXED*: Missing selector for 'List of examples' title in DocBook - CSS file. Patch submitted by Laurent Laville. See - http://groups.google.com/group/asciidoc/browse_frm/thread/3f96900f7fbf5620 -- *FIXED*: Broken accents in lang-hu.conf. See: - http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72 -- *FIXED*: DocBook XSL generated HTML callout lists are properly - aligned. Submitted by Lionel Orry. See - http://groups.google.com/group/asciidoc/browse_frm/thread/2ff802547b6a75ea -- *FIXED*: Filter execution now occurs prior to filter markup template - substitution to ensure image data URI encoding happens after image - generation (see - http://groups.google.com/group/asciidoc/browse_thread/thread/14e8fcb289a135b). -- *FIXED*: The section numbers no longer increment when the 'numbered' - attribute is undefined (see - http://groups.google.com/group/asciidoc/browse_thread/thread/faa36e9e5c7da019/d24cab3fe363e58d). - - -Version 8.5.3 (2010-01-18) --------------------------- -.Additions and changes -- a2x: Added a2x configuration file options ASCIIDOC_OPTS, - DBLATEX_OPTS, FOP_OPTS, XSLTPROC_OPTS (appended to same-named - command-line options). See - http://groups.google.com/group/asciidoc/browse_frm/thread/ac4b9bfa2116db28 -- Dropped `.hgignore` from the repository. See - http://groups.google.com/group/asciidoc/browse_frm/thread/c17abd175778f5ea -- Don't pass verbose options to asciidoc table filter so that - asciidocapi messages are not discarded. See: - http://groups.google.com/group/asciidoc/browse_frm/thread/c17abd175778f5ea -- Added `./tests/data/lang-pt-BR-test.txt` file to the repository. -- xhtml11: Verse block and verse paragraph content enveloped in a - 'pre' tag (instead of a 'div') so it renders better in text-only - browsers. See: - http://groups.google.com/group/asciidoc/browse_frm/thread/1b6b66adb24e710 -- User Guide: Clarified Passthrough Blocks (suggested by Simon - Ruderich). -- FAQ: 'How can I include lines of dashes inside a listing block?' -- FAQ errata and updates (submitted by Simon Ruderich). -- User Guide errata. -- Simplified 'asciidoc-toc' processing instruction and included lists - of figures, tables, examples and equations in books (i.e. revert to - pre-8.5.0 behavior). -- Attempted to have dblatex recognise the 'asciidoc-toc' processing - instruction but couldn't get it to work. -- Added 'notitle' attribute to allow the document title to be hidden. - - -.Bug fixes -- *FIXED*: Regression: system attribute escaping did not work. -- *FIXED*: Website: broken image links in chunked User Guide. - - -Version 8.5.2 (2009-12-07) --------------------------- -.Additions and changes -- Updated example article and book documents with the recommended - explicit section name syntax (see the 'Special section titles - vs. explicit template names' sidebar in the AsciiDoc 'User Guide'). -- Added Italian language configuration file (contributed by Fabio - Inguaggiato). -- Added 'header' table style. See: - http://groups.google.com/group/asciidoc/browse_frm/thread/a23fea28394c8ca9 -- Pass 'icons', 'data-uri', 'imagesdir', 'iconsdir' attributes to - 'asciidoc' table style filter so that images are rendered in table - cells. -- Pass 'trace' and 'verbose' attributes to 'asciidoc' table style - filter so diagnostic information is printed from table cell source. -- The 'eval' system attribute can be nested inside other system - attributes. -- HTML outputs: Table and figure caption punctuation set to more usual - syntax. -- docbook backend: footnotes can now contain embedded images. See - http://groups.google.com/group/asciidoc/browse_frm/thread/50b28f6941de111a -- CSS tweaks so that tables processed by DocBook XSL Stylesheets have - the default asciidoc xhtml11 backend styling. See - http://groups.google.com/group/asciidoc/browse_frm/thread/dfe5204d5b2c9685 -- Block titles take precedence over section titles to avoid titled - delimited blocks being mistaken for two line section titles (see - http://groups.google.com/group/asciidoc/browse_frm/thread/f0b6f9989f828c3). -- Section title trace displays level and title text. -- FAQ additions. -- Added `{zwsp}` (zero width space) attribute. -- Undefined paragraph styles are reported (previously threw a runtime - error). -- Eliminated empty preamble generation. -- Floating titles now processed in all contexts. -- Implemented auto-lettered appendix names and updated example - documents. -- Section numbering can be disabled in HTML outputs with a - ':numbered!:' AttributeEntry. -- xhtml11: Nicer default quote block styling. -- Exclude floating titles from xhtml11 table of contents. Patch - submitted by Mark Burton (see - http://groups.google.com/group/asciidoc/browse_frm/thread/14aefc1cb6bd85f5). -- Enhanced `doc/article-docinfo.xml` example docinfo file. -- Vim syntax highlighter improvements. - -.Bug fixes -- *FIXED*: Absolute 'imagesdir' and 'iconsdir' attribute path names - do not work with the xhtml11 data-uri encoding. See - http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b7694bbc82a6 -- *FIXED*: Regression issue with inline data-uri images. See - http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b7694bbc82a6 -- *FIXED*: An unexpected error occurred when processing a table - containing CSV data if the 'cols' attribute was not explicitly - specified. See - http://groups.google.com/group/asciidoc/browse_frm/thread/4b0f364b477ec165 - - -Version 8.5.1 (2009-10-31) --------------------------- -.Additions and changes -- If an AsciiDoc document file begins with a UTF-8 BOM (byte order - mark) then it is passed transparently through to the output file. - The BOM is stripped from included files. See - http://groups.google.com/group/asciidoc/browse_frm/thread/e5e61823ff4203cd -- Added AsciiDoc 'role' attribute to quoted text. Sets 'class' - attribute in HTML outputs; 'role' attribute in DocBook outputs. See: - http://groups.google.com/group/asciidoc/browse_frm/thread/2aa3e5711d243045 -- Conditional attribute syntax extended: they now accept multiple ORed - or ANDed attribute names. -- The 'xhtml11' backend dynamically processes footnotes using - JavaScript. -- Tidied up and namespaced 'xhtml11' JavaScript. -- Superceded `javascripts/toc.js` with `javascripts/asciidoc-xhtml11.js`. -- Added 'disable-javascript' attribute ('xhtml11' backend). -- Styled HTML footnotes. -- Added links to HTML footnote refs. -- Added title attribute to inline image macros to display popup - ``tooltip'' (HTML outputs only). -- Single-quoted attribute values are substituted in block macros (just - like the AttributeList element). -- For consistency changed underscores to dashes in attribute names. - Public attributes with underscores retained for compatibility. -- Added Brazilian Portuguese language configuration file (contributed - by Thiago Farina). -- Added 'leveloffset' attribute to make it easier to combine - documents. - -.Bug fixes -- *FIXED:* a2x: `--dblatex-opts` is now processed last so - `asciidoc-dblatex.xsl` params can be overridden. Patch submitted by - Mark Fernandes (see - http://groups.google.com/group/asciidoc/browse_frm/thread/5215c99dcc865e7d). -- *FIXED:* An error occurred if a directory in current path with same - name as executable. - -Regression issues -~~~~~~~~~~~~~~~~~ -There's been quite a bit of tiding up to the xhtml11 JavaScript. The -most obvious change is that the toc.js script has been superceded by -asciidoc-xhtml11.js so if you're linking you'll need get a copy of -the new file from the distribution javascripts directory. - -If you use customised xhtml11 configuration file `[header]` and -`[footer]` sections and you want them to use the new footnotes feature -then you've got a bit more work to do: - -. The onload event expression changed. -. The new `
...
` div envelopes document - content. -. You need to add `
...
` div to the - `[footnotes]` section for footnotes to work. -. Drop the `ifdef::toc[]` macro that surround JavaScript inclusion. - -Take a look at the [header] and [footer] changes in the xhtml11.conf -diff to see what's going on: -http://hg.sharesource.org/asciidoc/diff/55a5999bfd04/xhtml11.conf - - -Version 8.5.0 (2009-10-04) --------------------------- -.Additions and changes -- Implemented a 'float' attribute for tables and block images (HTML - outputs only). -- Added `unfloat::[]` block macro to cancel floating. -- Added table 'align' attribute to (HTML outputs only). -- The image 'align' attribute now works with HTML backends. -- Renamed table cell 'align' attribute to 'halign' so it doesn't clash - with the new table 'align' attribute. -- Added 'breakable' and 'unbreakable' options to AsciiDoc example and - block image elements. -- `[miscellaneous]` section entries now update properly when set from - a document 'AttributeEntry'. -- `[miscellaneous]` section `pagewidth` entry accepts fractional - values. -- Fractional column widths are now calculated correctly when using - fractional 'pageunits' (DocBook tables). -- Use DocBook XSL table width processing instructions. -- asciidoc 'KeyboardInterrupt' exits with error code 1. -- Added 'set' system attribute to allow attributes to be set from - configuration file templates. -- Allow constrained quotes to be bounded on the left by a colons and - semicolons, see - http://groups.google.com/group/asciidoc/browse_frm/thread/b276a927fdc87995 -- Titled listing and literal blocks (DocBook outputs) no longer default - to examples. See - http://groups.google.com/group/asciidoc/browse_frm/thread/f4df7c9eec01a9bd -- Updated language file table, figure and example captions to - accommodate new auto-numbering in html4 and xhtml11 backends. -- Titled source highlight filter listings generated by docbook backend - are now rendered as examples. See - http://groups.google.com/group/asciidoc/browse_frm/thread/f4df7c9eec01a9bd -- Implemented 'counter' system attribute. -- Use 'counter' system attributes to number titled tables and block - images in HTML backends. -- Added program name suffix to console messages. -- Added substitution to the 'AttributeEntry' passthrough syntax, this - replaces the now unnecessary 'attributeentry-subs' attribute. -- Allow passthrough inline macro syntax to be used in - 'AttributeEntrys'. -- Reinstated 8.4.4 default 'lang' attribute behavior. See - http://groups.google.com/group/asciidoc/browse_frm/thread/d29924043e21cb6a. -- Added 'max-width' attribute to the 'xhtml11' backend to set maximum - display width. See - http://groups.google.com/group/asciidoc/browse_frm/thread/74d9a542b79ccd50. -- Added 'a2x.py', a rewritten and much enhanced version of the old - 'a2x' bash script. -- The new 'a2x' can output EPUB formatted documents. -- Added `--safe` option and deprecated `--unsafe` option. Patch - submitted by Todd Zullinger. See - http://groups.google.com/group/asciidoc/browse_frm/thread/ea3a8ea399ae5d2a - and - http://groups.google.com/group/asciidoc/browse_frm/thread/69b3183fdab7c6a5 -- Added 'CHECK' and 'TEST' todo highlight words to Vim syntax - highlighter. -- Line breaks, page breaks, and horizontal rulers are now processed by - dblatex, thanks to a patch submitted by Mark Fernandes - (http://groups.google.com/group/asciidoc/browse_frm/thread/a254cf949ea7c6c5). -- Allow footnote macros hard up against the preceding word so the - rendered footnote mark can be placed against the noted text without - an intervening space (patch submitted by Stas Bushuev, - http://groups.google.com/group/asciidoc/browse_frm/thread/e1dcb7ee0efc17b5). -- Normalized path in `safe_filename` function (submitted by Todd - Zullinger, - http://groups.google.com/group/asciidoc/browse_frm/thread/69b3183fdab7c6a5). -- The Asciidoc 'numbered' and 'toc' attributes cause DocBook outputs - to include `asciidoc-numbered` and `asciidoc-toc` processing - instructions, these are used by DocBook XSL to include section - numbering and table of contents (like Asciidoc HTML backends). For - backward compatibility both 'numbered' and 'toc' attributes are - defined by default when the 'docbook' backend is used. See - http://groups.google.com/group/asciidoc/browse_frm/thread/1badad21ff9447ac. -- 'data-uri' attribute is now evaluated dynamically and can be set in - document body (previously could only be set from command-line). -- Added 'sys3' and 'eval3' system attributes to passthrough generated - output, this fixes the data-uri inline image problem: - http://groups.google.com/group/asciidoc/browse_frm/thread/a42db6bc54c2c537. -- Missing language file generates a warning instead of an error. -- Updated Spanish language file (updates contributed by Gustavo Andrés - Gómez Farhat). - -.Bug fixes -- *FIXED:* Options in an 'AttributeList' option attribute are merged - with (rather than replace) configuration file options. -- *FIXED:* Comment blocks and comment block macros no longer consume - preceding block titles and attribute lists. -- *FIXED:* `examples/website/layout1.conf` and - `examples/website/layout2.conf` TOC problem. Submitted by Mark - (burtoogle). See - http://groups.google.com/group/asciidoc/browse_frm/thread/b9c63be67dd1d11c -- *FIXED:* Only the first occurrence of passthrough macro was - substituted. Patch submitted by Peter Johnson. See - http://groups.google.com/group/asciidoc/browse_frm/thread/1269dc2feb1a482c -- *FIXED:* asciidoc now runs on Jython 2.5.0. -- *FIXED:* Wordpress margins and pads in a number of block - elements - (http://groups.google.com/group/asciidoc/browse_frm/thread/36ff073c79cbc20a). - -Regression issues -~~~~~~~~~~~~~~~~~ -- Tables generated by 'dblatex' occupy 100% of the available space - regardless of the 'width' attribute setting. To restore width - behavior change the 'pageunits' miscellaneous parameter to 'pt'. You - can do this from the command-line with the `-a pageunits=pt` option. - See {website}userguide.html#X89[DocBook table widths]. - - -Version 8.4.5 (2009-05-24) --------------------------- -.Additions and changes -- Added manpage 'Name' and 'Synopsis' section title customization to languages - configuration files. -- Synopsis manpage section no longer mandatory. -- Section markup templates can be specified by setting the title's - first positional attribute or 'template' attribute. -- The article and book document header can now include a revision - remark. -- A 'role' attribute can now be applied to block elements. This adds - the 'role' attribute to DocBook elements. Patch submitted by - http://groups.google.com/group/asciidoc/browse_thread/thread/62278a054188a038[Noah - Slater]). -- Renamed 'revision' and 'date' attributes to more sensible and consistent - 'revnumber' and 'revdate' (old names deprecated but still - recognized). -- Moved backend specific attributes to Appendix H in User Guide. -- Renamed and generalized the docbook backend revision history - inclusion mechanism to 'docinfo' to reflect the use of all article - or book information elements. The old revision history names still - work but have been deprecated. -- Refactored docbook.conf headers. -- Moved line break replacement from `[replacements]` to - `[replacements2]` so the replacement occurs after the mailto macro. - This fixes bug - http://groups.google.com/group/asciidoc/browse_thread/thread/4bdcdfb0af773e2 -- The typewriter to punctuation apostrophe replacement can be escaped - with a backslash. -- Graphviz filter outputs images to 'imagesdir' if it is defined. -- Made the block image macro generic so that it can be used for filter - outputs. As a result Music and Graphviz filters: - * Have been greatly simplified. - * Honor the 'data-uri' attribute. - * 'html4' outputs no longer generate W3C validation warning. -- The 'iconsdir' attribute no longer requires a trailing directory - separator character. -- Removed borders around linked html4 images. -- Added 'html4' specific HTML output for music filter. -- 'a2x': Added `--unsafe` option (shortcut for - `--asciidoc-opts=--unsafe`). -- 'a2x': The FOP executable can now be named `fop` (this is the - default name in some distributions). -- Attributes are now substituted in the system macro attribute list. -- If the output is set to stdout (i.e. no output directory is defined) - then Music and Graphviz filters will output included images to the - source file directory. -- Added 'name' directive to 'testasciidoc'. -- Added lots of 'testasciidoc' new tests. -- Moved language specific configuration parameters into `lang-en.conf` - file. -- 'lang' attribute entry can be specified in the AsciiDoc source file - (preceding the header). -- Removed cruft from A-A-P scripts and documented them. -- Added German language config file (`lang-de.conf`) contributed by - Michael Wild. -- Added French language config file (`lang-fr.conf`) contributed by - Yves-Alexis Perez. -- Added Russian language config file (`lang-ru.conf`) contributed by - Artem Zolochevskiy. -- Added Hungarian language config file (`lang-hu.conf`) contributed by - Miklos Vajna. - -.Bug fixes -- *FIXED:* Multiple manpage names are now handled correctly when - generating DocBook output, each name now generates a separate - DocBook `` element. See - http://groups.google.com/group/asciidoc/browse_thread/thread/c93bb4db025225d8 -- *FIXED:* A problem that caused AttributeEntries preceding the header - to be overwritten when the language conf file loaded. -- *FIXED:* Possible inline macro name ambiguity e.g. link matches olink. -- *FIXED:* The documented macro definition deletion behavior had been - broken for a long time. -- *FIXED:* Email addresses not recognized when followed by a period - character. -- *FIXED:* Hyphens in mailto macros can delimit nested addresses e.g. - \bloggs@mail was processed inside - \mailto:joe-bloggs@mail-server.com[Mail]. -- *FIXED:* User name in FTP URI generated incorrect FTP link. See - http://groups.google.com/group/asciidoc/browse_thread/thread/1d796a9c9ddb2855 -- *FIXED:* Source highlighter now works with Wordpress backend (see - http://groups.google.com/group/asciidoc/browse_thread/thread/6d8c716748b109e3). - -[[X2]] -Regression issues -~~~~~~~~~~~~~~~~~ -. A colon following the date in the AsciiDoc header is treated as a - revision remark delimiter -- this could be an issue if you have used - a colon in the header date. - - -Version 8.4.4 (2009-04-26) --------------------------- -.Additions and changes -- Added table column and row spanning. -- Table styles can now be applied per cell. -- Vertical cell alignment can be applied to columns and individual - cells. -- Added table 'align' attribute to set horizontal alignment for entire - table. -- Included Geoff Eddy's update of the experimental LaTeX backend. -- A new attribute named 'trace' controls the output of diagnostic - information. If the 'trace' attribute is defined then - element-by-element diagnostic messages detailing output markup - generation are printed to stderr. -- Added 'literal' paragraph style (allows 'literal' style to be - applied to normal paragraphs). -- Deleted unused `replacements2` from `xhtml11.conf`. -- Added `replacements2` to default substitutions. -- 'testasciidoc.py': messages to 'stdout', only diffs to 'stderr'. -- Added transparency to `smallnew.png` image. - -.Bug fixes -- All combinations of leading comments and attribute entries at the - start of a document are now skipped correctly. -- *FIXED:* `./configure` doesn't support `--docdir` as expected (patch - submitted by Artem Zolochevskiy) -- *FIXED:* Constrained quotes were incorrectly matched across line - boundaries e.g. the string `+\nabc+` incorrectly matched a monospace - quote. - - -Version 8.4.3 (2009-04-13) --------------------------- -.Additions and changes -- DocBook outputs default to DocBook version 4.5 doctype (previously - 4.2). -- Configuration file `[specialsections]` definitions can be undefined - by setting their configuration entry values blank. -- The Makefile 'install' target depends on the 'all' target to ensure - pre-install patches are applied. -- 'testasciidoc.py' now emits user friendly messages if: - . the configuration file is missing. - . an illegal backend is specified. - . an illegal test number is specified. - -.Bug fixes -- Fixed - http://groups.google.com/group/asciidoc/browse_thread/thread/fd27add515597c06[missing - template section] error. -- The 'testasciidoc.py' `--force` option no longer deletes test data - files that were not specified. -- Dropped second quotes substitution in table cells -- it had - effectively disabled quote escaping in table cells. - - -Version 8.4.2 (2009-03-19) --------------------------- -.Additions and changes -- Added {website}testasciidoc.html[testasciidoc], a tool to verify - AsciiDoc conformance. -- A warning is issued if nested inline passthroughs are encountered. -- 'asciidocapi': setting an attribute value to `None` will undefine - (delete) the attribute (this in addition to the `name!` attribute - name format that the `asciidoc(1)` command uses). - -.Bug fixes - - -Version 8.4.1 (2009-03-10) --------------------------- -.Additions and changes -- AsciiDoc now has a {website}asciidocapi.html[Python API]. The - following minimal example compiles `mydoc.txt` to `mydoc.html`: -+ -[source,python] -------------------------------------------------------------------------------- -from asciidocapi import AsciiDocAPI asciidoc = AsciiDocAPI() -asciidoc.execute('mydoc.txt') -------------------------------------------------------------------------------- - -- Backtick quoting for monospaced text is now implemented as an - 'inline literal' passthrough. This makes more sense since monospace - text is usually intended to be rendered literally. See - <> below for the impact this may have on - existing documents. Here are some examples that would previously - have had to be escaped: - - The `++i` and `++j` auto-increments. - Paths `~/.vim` and `~/docs`. - The `__init__` method. - The `{id}` attribute. - -- Added `--doctest` option to `asciidoc(1)` command. -- Added an optional second argument to 'BlockId' element, this sets - the `{reftext}` attribute which in turn is used to set the `xreflabel` - attribute in DocBook elements. -- Added lists to `--help` syntax summary. -- `{infile}` and `{indir}` attributes reflect the current input file - (previously always referred to the root document). -- `{docfile}` (new) and `{docdir}` (previously deprecated) attributes - refer to the root document specified on the `asciidoc(1)` - command-line. -- Vim syntax highlighter improvements. -- Syntax summary command (`asciidoc -h syntax`) additions. -- Admonition icons now have transparent backgrounds. -- Changed yellow W3C badges to blue ones in page footers. - -.Bug fixes -- Dropped `asciidoc(1)` broken undocumented `--profile` option. -- Em dash replacement now recognized at start of block. - -Regression issues -~~~~~~~~~~~~~~~~~ -Replacing backtick quoting with the 'inline literal' passthrough -raises two regression scenarios for existing documents: - -1. You have escaped the expansion of enclosed inline elements, for - example: `\{id}`. You would need to delete the backslashes: `{id}` - (if you don't the backslashes will be printed). Mostly it's just a - case of interactively finding and replacing of all occurrences of - `\. - -2. There are enclosed inline elements, for example: `some *bold* - monospaced`. You would need to switch to plus character monospace - quoting: `+some *bold* monospaced+` (if you don't the enclosed - elements won't be expanded). - -If your existing documents include these cases and you don't want to -upgrade then use the `-a no-inline-literal` command-line option, -alternatively put this in `~/.asciidoc/asciidoc.conf`: - - [attributes] - no-inline-literal= - - -Version 8.3.5 (2009-02-02) --------------------------- -.Additions and changes -- Cached compiled regular expression delimiters (speed up 'User - Manual' compilation by 250%). -- Created distinct list definitions for each numbered list style to - allow nesting of all styles. -- Roman numbers in numbered lists are followed by a closing - parenthesis instead of a period to eliminate 'i', 'v', 'x' item - ambiguity with respect to alpha numbered list items. -- Added `**`, `***`, `****`, `*****` - bulleted lists. -- Added `...`, `....`, `.....` implicit numbered - lists. -- Added `:::`, `::::` labeled lists. -- Updated User Guide for new list syntaxes. -- Optimized paragraph and list termination detection with separate - precompiled regular expressions for performance and to prevent - reaching Python 100 named group limit. -- Updated Vim syntax highlighter for new list syntaxes. -- Allow `template::[]` macros in conf file entries sections (not just - in template sections). -- Dropped unused `[listdef-numbered2]` conf file sections. -- Renamed 'ListBlock' to more appropriate 'OpenBlock'. -- Implemented single-line versions of `ifdef::[]` and `ifndef::[]` - macros. -- 'html4' backend styling: - * Underlined admonition captions. - * Added side border to Example Blocks. -- 'xhtml11' backend styling: - * Dropped right hand margin from all but quote and verse blocks. - * html4 backend: corrected over-sized width of caption in admonition - block. - -.Bug fixes -- Fixed broken numbered list nesting. - -Compatibility issues -~~~~~~~~~~~~~~~~~~~~ -The roman numbered list parenthesis syntax is incompatible with the -potentially ambiguous roman period syntax introduced in 8.3.2. - - -Version 8.3.4 (2009-01-20) --------------------------- -.Additions and changes -- Implemented a title 'float' style. A floating title (or bridgehead) - is rendered just like a normal section but is not formally - associated with a text body and is not part of the regular section - hierarchy so the normal ordering rules do not apply. -- Implemented inline comment macro so comment lines can now appear - inside block elements. -- Comment lines are sent to the output if the 'showcomments' attribute - is defined (comment blocks are never sent to the output). -- Single quoting attribute values in 'AttributeList' elements causes - them to be substituted like normal inline text (without single - quoting only attribute substitution is performed). -- Rewrote list item processing (was very crufty). List continuation - and list blocks now work as expected. Updated and clarified list - documentation in User Guide. -- The 'revision' attribute now recognizes the RCS $Id$ marker format. -- An RCS $Id$ marker formatted revision line in the header does not - need to be preceded by an author line. -- If an RCS $Id$ formatted revision is specified and the author name - has not already been set then the author name in the $Id$ marker - will be used. -- Updated Gouichi Iisaka's Graphviz filter to version 1.1.3. -- Added 'autowidth' table attribute option for (X)HTML outputs. -- DocBook backend now puts 'orgname' optional attribute in DocBook - header. -- Deprecated undocumented 'companyname' attribute in favor of - DocBook's 'corpname'. -- Removed explicit closing backslash from HTML4 self-closing tags to - comply with WC3 recommendation. - -.Bug fixes -- Fixed 8.3.3 regression whereby adjacent lists with the same syntax - but different list styles were incorrectly treated as a single list. - - -Version 8.3.3 (2009-01-02) --------------------------- -This release supersedes 8.3.2. - -.Bug fixes -- The broken and confusing numeration and numeration2 numbered list - attributes have been dropped, use the style attribute instead. - - -Version 8.3.2 (2009-01-01) --------------------------- -.Additions and changes -- Added Gouichi Iisaka's Graphviz filter to distribution. -- The 'SidebarBlock' element can now be rendered with an 'abstract' - style. -- Reorganized filters into a separate subdirectory for each filter. -- Updated `Makefile.in` and `MANIFEST` files to reflect new filters - organization. -- Added 'listing' style to 'LiteralBlock' element so listings with - nested listing blocks can be rendered as a listing block. -- Changed example 'code' filter to use preferred 'ListingBlock' syntax - (the old `~` delimited filter syntax is no longer used). -- Implemented 'enumeration' and 'enumeration2' numbered list - attributes for specifying the list numbering style ('arabic', - 'loweralpha', 'upperalpha', 'lowerroman' and 'upperroman'). -- AsciiDoc now recognizes 'upperalpha', 'lowerroman' and 'upperroman' - numbers in `listdef-numbered2` numbered lists and sets the number - style based on the style of the first numbered list item - (alternative to setting 'enumeration2' attribute). -- Updated `formatlistpat` definition in `.vimrc` example in User - Guide. -- You can now backslash escape system block macros. -- Added 'Pychart' FAQ. -- Drop paragraph 'text' and list 'text', 'index' and 'label' match - groups from attributes -- they are included in the element's text - and we don't want them processed a second time as attributes. -- Changed comment line block macro to a passthrough block macro to - ensure no substitutions. -- A 'subslist' no longer has to be appended to a 'PassthroughBlock' - macro definition, if omitted no substitutions are performed. -- Code tidy up: replaced deprecated `<>` operator with `!=`. -- Removed unused linuxdoc code. -- Code tidy ups: dropped old types module reference; replaced - `has_key()` with preferred `in` operator. - -.Bug fixes -- Old syntax source highlight filter regression: special characters - where not escaped in DocBook outputs. - - -Version 8.3.1 (2008-12-14) --------------------------- -.Additions and changes -- Replaced the `install.sh` script with Ben Walton's updated autoconf - scripts -- see {website}INSTALL.html[INSTALL] for details. -- Added a generalized 'AttributeEntry' syntax to allow arbitrary - configuration file entries to be set from within an AsciiDoc - document (suggested by Henrik Maier). -- Listing delimited blocks in DocBook outputs now support IDs; IDs of - titled Listing and Literal delimited blocks have been moved to the - enclosing DocBook example tag (thanks to Vijay Kumar for this - patch). -- Replaced vertical typewriter apostrophe with punctuation apostrophe - (thanks to Noah Slater). - -.Bug fixes -- Regression: Excluding double-quotes from unquoted attribute values - resulted in backward incompatibility, double-quotes in unquoted - attribute values has been reinstated. -- Regression: Text like `&...;` was sometimes mistaken for an entity - reference -- tightened up entity reference matching. - - -Version 8.3.0 (2008-11-29) --------------------------- -.Additions and changes -- {website}newtables.html[AsciiDoc new tables] is a complete redesign - of the tables syntax and generation. The new syntax and features are - a huge improvement over the old tables. The old tables syntax has - been deprecated but is currently still processed. -- {website}newlists.html[Lists can now be styled] like other block - elements. This allows a single list syntax for 'glossary', 'qanda' - (Question and Answer) and 'bibliography' lists instead of having to - remember a different syntax for each type. -- Inline passthroughs macros have been improved and block passthrough - macros added. Attribute substitution can be optionally specified - when the macro is called. -- The passthrough block has a fully transparent passthrough delimited - block block style called 'pass'. -- The 'asciimath' and 'latexmath' - {website}userguide.html#X77[passthrough macros] along with - 'asciimath' and 'latexmath' {website}userguide.html#X76[passthrough - blocks] provide a (backend dependent) mechanism for rendering - mathematical formulas. There are {website}latexmath.pdf[LaTeX Math], - {website}asciimathml.html[AsciiMathML] and - {website}latexmathml.html[LaTeXMathML] examples on the AsciiDoc - website. -- Reimplemented and cleaned up filter processing based on a patch - submitted by Kelly Anderson. Uses the newer subprocess module - instead of the deprecated popen2 module. Now works in Win32 command - shell. -- Addition FAQs, more documentation updates. -- Arbitrary HTML/XML entities can be entered in AsciiDoc source. -- Did away with the need for the `shaded-literallayout.patch` (thanks - to Henrik Maier for this patch). -- Implemented 'page break' block macro. -- Added 'line breaks' and 'ruler' processing instructions to DocBook - outputs (thanks to Henrik Maier for this patch). -- Added 'deg' (degree) and 'wj' (word joiner) entity attributes - (thanks to Henrik Maier). -- Tweaked DocBook 'indexterm2' macro to avoid white space preceding - the term when used in table cells (thanks to Henrik Maier for this - patch). -- Title elements now process the 'options' attribute like other block - elements. -- Added `single quoted' element. -- Spaces on both sides of a -- em-dash are translated to thin space - characters. -- Improved detection and reporting of malformed attribute lists. -- The list 'compact' style is now a list option. -- Added 'strong' labeled list option which makes the labels bold (HTML - outputs only). -- Dropped unsupported 'linuxdoc' backend. -- Dropped deprecated 'xhtml-deprecated' (version 6) backend. -- Added 'breakable' and 'unbreakable' attribute options to tables to - control table breaking across page boundaries (DocBook XSL/FO - outputs). By and in collaboration with Henrik Maier. -- Added 'pgwide' attribute option to tables to table, block image, - horizontal labeled lists. Specifies that the element should be - rendered across the full text width of the page irrespective of the - current indentation (DocBook XSL/FO outputs). Thanks to Henrik Maier - for this patch. -- Vim syntax highlighter: spaces before/after bullets no longer - highlighted (which is ugly if using a theme that highlights with - underlines). Thanks to Donald Chai for this patch. -- Added `a2x(1)` `--fop` option. -- Added `a2x(1)` `--no-xmllint` option. -- Highlighted labelled list terms with the navy color in XHTML - outputs. -- Use `w3m(1)` as default `a2x(1)` text format generator (fallback to - `lynx(1)`). -- Changed callout formats in html4 and xhtml11 outputs to angle - brackets to match source highlighter rendering. -- Macros now inject user defined `-option` attributes into - markup. -- Added IRC URLs to AsciiDoc inline macros. -- Added `depth` attribute to `include::[]` system macro. -- Added 'footnoteref' inline macro. -- Added 'stylesheet' XHTML attribute to specify additional custom CSS - stylesheet. -- If a paragraph style is specified it will be added to the XHTML - 'class' attribute and DocBook 'role' attribute. -- Replacements can be set in a document using the reserved - AttributeEntry name 'replacement'. -- The prefix for auto-generated section name IDs can be set with the - 'idprefix' attribute. - -.Bug fixes -- Escaped quote skipped over leading and trailing quote instead of - just the leading quote. -- Fixed bug that was causing false negative safe mode warnings (patch - submitted by Julien Palmas). -- Placed priority of AttributeEntry, AttributeList and BlockTitle - above Title. This ensures an AttributeEntry, AttributeList or - BlockTitle followed by a same length leading ListingBlock delimiter - is not mistaken for a two-line title. -- Vim syntax highlighter: fixed multi-line quoted text. -- Contstrained quote termination after non-space character enforced. -- Vim syntax highlighter: unterminated quoted text is no longer - highlighted. -- Vim syntax highlighter: passthroughs now exactly match AsciiDoc - semantics. -- Vim syntax highlighter: escaped quoted text, attribute references - and inline macros are not highlighted. -- Vim syntax highlighter: TODO's highlighted in CommentBlocks (thanks - to Scott Wall); non-greedy pass:[$$...$$]. -- Vim syntax highlighter: Comment lines mistaken for vertical list - labels (thanks to Scott Wall). -- Vim syntax highlighter: Single unmatched $$ mistakenly highlighted - remaining text (patch contributed by Scott Wall). -- Callouts now work in source highlighted listing generated by - dblatex. -- Fixed exception that occured if undefined attribute was present in - filter command. -- AttributeList block can now follow a paragraph without intervening - blank line. -- The include macro tabsize attribute is no longer propagated to - nested includes. - -.Omissions -The following features were implemented but then but removed from this -release: - -- 'pi', 'cdata' and 'comment' passthrough macros and passthrough block - styles (creeping featurism, use 'pass' macros instead). -- Generic 'tag' inline macro (creeping featurism, use 'pass' macros - instead). - - -[[X1]] -Compatibility issues -~~~~~~~~~~~~~~~~~~~~ -Version 8.3.0 has a number of backward incompatibilities with respect -to the previous 8.2.7 release: - -- The old table syntax is still processed but a 'DEPRECATED' warning - is issued. -- Entity references have to be escaped with a backslash. -- You have to explicitly precede horizontal style labeled lists with - the `[horizontal]` style attribute -- by default all labeled lists - are rendered vertically. -- The list 'compact' style has been dropped and is now a list option - (use `options="compact"` in attribute lists). -- AsciiDoc version 6 sytnax no longer supported. -- Linuxdoc been removed from the distribution. -- The unsupported experimental 'latex' backend has not been tested on - this release. -- The introduction of single-quote quoting requires that double-quote - quoting is escaped with two backslashes. - - -Version 8.2.7 (2008-07-04) --------------------------- -.Additions and changes -- Added `dvi`, `ps` and `tex` output format options to a2x(1). -- Added `--dblatex` option to a2x(1) so `dblatex(1)` can be used to - generate PDFs. -- Added custom `dblatex(1)` configuration files (in distribution - `./dblatex` directory) that are used by a2x(1). -- `dblatex(1)` is now used to generate the distributed PDF version of - the AsciiDoc User Guide. -- If you don't need a customized the link caption you can enter the - 'http', 'https', 'ftp', 'file' URLs and email addresses without any - special macro syntax -- you get the links by just cutting and - pasting URLs and emails addresses. This also makes it easier to open - links directly form AsciiDoc source ( most editors allow you to open - URLs directly). The Vim syntax highlighter has been updated to - reflect these changes. -- Highlighted source code paragraphs have been implemented -- it's a - much more convenient way to enter short code examples (see - http://www.methods.co.nz/asciidoc/source-highlight-filter.html[the - online docs]). -- The source highlighter and music filter syntax has changed -- they - now used the ListingBlock syntax customized with 'source' and - 'music' style attribute values. This follows the Paragraph styling - convention introduced by the source paragraph (previous item) and is - easier to read. The old syntax still works but has been deprecated. -- QuoteBlocks now have a 'verse' style -- you no longer have to nest a - 'verse' LiteralBlock inside a QuoteBlock for verses. The 'verse' - style on the LiteralBlock has been deprecated (still works though) - and the 'style' attribute is positional attribute 1, pushing - 'attribution' and 'citetitle' attributes to the right (you'll need - to insert a 'quote' attribute into your existing QuoteBlocks). -- It is no up to the DocBook processor to highlight source code syntax - in `` elements rather than GNU Highlighter -- this - is the correct way to handle it, plus `dblatex(1)` makes a much - better job. -- 'scaledwidth' and 'align' attributes have been added to the 'image' - macro. They apply to DocBook outputs (specifically for PDF - documents). 'scaledwidth' sets the image size as a percent of the - available page width; 'align' applies 'left', 'center' or 'right' - horizontal image justification. -- Added a2x(1) `--fop-opts=FOP_OPTS` option (patch submitted by Miklos - Vajna). -- Added a2x(1) `--dblatex-opts=DBLATEX_OPTS` option. -- Added Mikhail Yakshin's FOP 0.95 patch which fixes a long-standing - `fo.xsl` problem and allows PDF's to be generated with FOP 0.95 - (previously had to use FOP 0.20.5). -- The User Guide has been updated and outdated FOP configuration and - installation sections removed. - -.Bug fixes -- Fixed `stylesheets/xhtml11-manpage.css` not being included when - 'linkcss' attribute was used. -- Configuration file `*-style` attributes are now dumped correctly. -- Fixed 'FAILED: malformed section entry' LaTeX backend error. - -See the also the https://sharesource.org/hg/asciidoc/[AsciiDoc -repository changelog]. - - -Version 8.2.6 (2008-04-29) --------------------------- -.Additions and changes -- Enhancements to the Vim AsciiDoc syntax highlighter, for example, - quoted text is now highlighted in titles and macro captions. -- If you define the `data-uri` intrinsic attribute images referenced - by 'image' macros will be embedded in XHTML using the - http://en.wikipedia.org/wiki/Data:_URI_scheme[data: URI scheme]. - *NOTE*: Microsoft browser support for the 'data: URI scheme' is - currently limited to MSIE 8 beta 1. -- Added `toc-title` attribute to allow custom table of contents - titles. -- Added references to Alex Efros's AsciiDoc Cheatsheet to AsciiDoc - website. -- `asciidoc(1)` and `a2x(1)` man pages formatted to conform to - `man-pages(7)` recommendations. -- Old code-filter syntax (pre-8.1.0) is no longer recognized so that - malformed two-line level 2 titles are no longer confused with - 'code-filter' block delimiters. -- Added -> <- => <= arrow replacements from the Arrows block of - Unicode. -- Added DocBook refentry lang attribute -- patch contributed by - VMiklos. -- AttributeEntry names can now be numeric (``named macro targets''). -- Hide Table of Contents title if Table of Contents empty -- patch - contributed by Alex Efros. -- Various XHTML CSS tweaks. -- Code cleanup: - * Replaced `realpath()` with Python 2.2 `os.path.realpath()` library - function. - * Replaced old string library functions with string methods. - * Use file generators instead of `readlines()`. - * Renamed entities that shadowed builtins. - * Standardized string quoting. - * Dropped `readlines()` function. - -.Bug fixes -- Fixed broken CSS for decimal ordered lists nested in alpha ordered - list, thanks to Alex Efros. -- A missing closing block delimiter now reports the opening delimiter - line number instead of the end of file line number. -- Fixed an error generated by the asciidoc `-e` option when there are - no block definitions -- patch contributed by Alejandro Mery. -- Handle both `\r\n` (as well as `\n`) line separators that may be - returned by `{sys}` attribute evaluation. -- Numbered attribute names no longer interfere with positional - attribute list values. - - -Version 8.2.5 (2007-11-18) --------------------------- -.Additions and changes - -.Bug fixes -- Fixed exception thrown by illegal command-line arguments. -- Rolled back the 'with' warning bug fix introduced in 8.2.4 -- it was - incompatible with Python <2.5. - - -Version 8.2.4 (2007-11-10) --------------------------- -.Additions and changes -- You can now use the `lang` attribute to set the DocBook language - attribute. -- Attribute values can now contain attribute references. -- If the `lang` attribute is defined then configuration files named - like `lang-.conf` will be loaded automatically. -- The help file name `help-.conf` is based on the AsciiDoc - `lang` attribute, defaults to `help.conf` (English). -- Admonition, figure and table captions have been factored into a - predefined set of `caption_*` attributes. They only apply to - directly generated (X)HTML outputs (DocBook stylesheets generate - their own language specific captions based on the `lang` attribute). -- Dropped platform dependent `doc/asciidoc.chm` file from - distribution documentation formats. - -.Bug fixes -- The spurious warning 'with will become a reserved keyword - in Python 2.6' has been suppressed. - - -Version 8.2.3 (2007-09-12) --------------------------- -.Additions and changes -- Added VMiklos's 'permalink' patch for auto-generated section IDs - (enabled by default by the `sectids` attribute). -- Added http://www.methods.co.nz/asciidoc/faq.html[FAQ] to website. -- Changed format of \{localdate} attribute to ISO 8601 (`%Y-%m-%d`). -- Added `abc2ly --beams=None` option to make `music2png.py` conform to - ABC's notion of beams. -- XHTML level 2 section headings are now styled with an underlining - border. -- XHTML links to AsciiDoc title elements are now implemented with - title ID attributes (previously separate `
` element targets were - generated. -- Multi-word first, middle and last names can be entered in the header - author line using the underscore as a word separator. -- The nested inline macros restriction has now been lifted, for - example you can now include links and inline images inside - footnotes. -- Help topic names can be shortened (so long as they are not - ambiguous). For example `asciidoc -hm` will print the AsciiDoc man - page. -- Added `{two_colons}` and `{two_semicolons}` attributes for - escaping labeled list ambiguity. -- If quirks mode is disabled the XHTML Mime Type is set to the - recommended `application/xhtml+xml` (rather than `text/html`). - -.Bug fixes -- Author information is now correctly set when using attribute entries - in the header instead of an author line (previously the 'author' - attribute was not being calculated correctly and there were - attribute substitution problems). - - -Version 8.2.2 (2007-07-22) --------------------------- -.Additions and changes -- http://www.maths.nottingham.ac.uk/personal/drw/lm.html[LaTeXMathML] - capability has been added for users who are more familiar with or - prefer LaTeX math formulas to the - http://www.methods.co.nz/asciidoc/asciimathml.html[ASCIIMathML] - notation (thanks to Arthur Sakellariou for the patch). -- The 'source highlight' and 'code' filters now process embedded - callouts. -- Added an `--attribute=ATTRIBUTE` option to `a2x(1)` for passing - attribute values to asciidoc(1) (a shortcut for `--asciidoc-opts="-a - ATTRIBUTE"`). -- Image block and inline macros prepend optional `{imagesdir}` - attribute to image link targets. - - -.Bug fixes -- Fixed an assertion error that occurred when a configuration file - containing an `include::[]` macro was loaded using the - `--conf-file` option and the configuration file name did not - include an explicit directory path -- patch submitted by Dmitry - Potapov. -- Asciidoc titles are only converted to lower case if all characters - are upper case otherwise case is left unchanged -- patch submitted - by Dmitry Potapov. -- Added a missing check that input is not stdin before loading - configuration files from the document directory -- patch submitted - by Dmitry Potapov. -- Attribute list items must evaluate to strings, numbers or None - (previously it was possible to evaluate to other object types which - resulted in surprising attribute values). -- If an AsciiDoc document has no title an empty XHTML 1.1 'title' - element is created -- previously the 'title' element was dropped - which resulted in invalid XHTML 1.1. -- The Vim syntax file no longer highlights escaped callouts. -- The Vim syntax highlighter now correctly highlights Double-dollar - passthroughs when they enclose dollar delimited ASCIIMathML and - LaTeXMathML formulas. - - -Version 8.2.1 (2007-04-06) --------------------------- -.Additions and changes -- A number of improvements have been made to the Vim syntax - highlighter, for example the word C++ is no longer mistaken for the - start of an unconstrained monospace quote. -- Labeled list definitions have been tightened -- a list label can no - longer containing trailing spaces. The following example is no - longer recognized as a valid list label: - - Lorum ipsum :: -+ -This change implements the originally intended behavior (as per the -AsciiDoc documentation and examples) so there should be very few -compatibility issues. - -.Bug fixes - - -Version 8.2.0 (2007-04-04) --------------------------- -.Additions and changes -- A Vim syntax file is now included in the AsciiDoc distribution - (inspired by Felix Obenhuber's `asciidoc.vim` script). You can find - it (along with a Vim filetype detection script in the distribution - `./vim/` directory (the scripts are installed automatically by the - AsciiDoc installer `./install.sh`). See 'Appendix J' of the - 'AsciiDoc User Guide' for details. -- Added 'toclevel' attribute (1..4) which sets the number of title - levels reported in the table of contents. Defaults to 2 and must be - used with the 'toc' attribute. Example usage: - - $ asciidoc -a toc -a toclevels=3 doc/asciidoc.txt - -- Added a `listindex` attribute which is the current list item index - (1..). If this attribute appears outside a list its value is the - number of items in the most recently closed list. -- The single line titles syntax now accepts trailing suffixes -- this - syntax matches the title line syntax of a number of popular Wiki - markups. -- If a QuoteBlock has no attribution or citetitle then the DocBook - `` element is not generated (previously generated empty - `` element). -- If the text of a labeled list item is blank then no `texttag` is - written. -- An end of line backslash performs line continuation for horizontal - labeled list items. -- The Revision line now accommodates Subversion `$Id` markers (in - addition to CVS and RCS markers). Thanks to Tiago Sturmer Daitx for - this patch. -- Implemented `a2x(1)` option `--skip-asciidoc` which allows `a2x(1)` - to convert DocBook XML files not derived from AsciiDoc sources. -- If `a2x(1) --doctype` option is not specified it defaults to - `manpage` if `--format=manpage` else defaults to `article` - (previously `--doctype` always defaulted to `article`). -- Added an 'External Resources' section to the - http://www.methods.co.nz/asciidoc/index.html[AsciiDoc home page]. - -.Bug fixes - - -Version 8.1.0 (2006-10-22) --------------------------- -.Additions and changes -- AsciiDoc generated XHTML documents now display a table of contents - if the 'toc' attribute is defined (JavaScript needs to be enabled - for this to work). Thanks to Troy Hanson who contributed this - feature based on a JavaScript by Mihai Bazon. I've simplified things - somewhat to match Docbook XSL Stylesheets style, see Troy's - http://tpl.sourceforge.net/userguide.html[tpl User Guide] for a - fancier layout. Use the `-a toc -a numbered` command-line options to - produce a number table of contents. -- A http://www.methods.co.nz/asciidoc/music-filter.html[music filter] - is included in the distribution `./filters/` directory. It - translates music in http://lilypond.org/[LilyPond] or - http://abcnotation.org.uk/[ABC] notation to standard classical - notation in the form of a trimmed PNG image which is inserted into - the AsciiDoc output document. -- Incorporated Paul Melis's Win32 filter patch. This workaround - allows AsciiDoc to run filters under Windows. -- Added `uninstall.sh` script. -- Rather than proliferate a confusing number of filter block - delimiters the following convention has been adopted: delimiters - belonging to DelimitedBlock filters distributed with AsciiDoc will - consist of a word (normally a noun identifying the block content) - followed by four or more tilde characters. This has necessitated - changing existing filter delimiters (the old delimiters still work - but may be deprecated in future versions): - - * The example code filter block delimiter is now the word `code` - followed by four or more tilde characters. - * The source highlight filter block delimiter is now the word - `source` followed by four or more tilde characters. - -- Conditionally redefined subscript and superscripting so they use the - old replacements mechanism when asciidoc7compatible is defined - rather than the asciidoc 8 default unconstrained quoting (patch for - affected files attached). -- Moved the source highlight filter from `./examples/` to `./filter/`. -- Added `{verbose}` intrinsic attribute (useful for passing verbose - flag to filters). -- Added `{outdir}` intrinsic attribute. -- Renamed `{docdir}` intrinsic attribute to unambiguous `{indir}` - (`{docdir}` still works but may be removed in future release). -- If `asciidoc(1)` outputs to stdout then intrinsic attribute - `{docname}` is extracted from the input file name. - - -Version 8.0.0 (2006-08-27) --------------------------- -********************************************************************* -This is a major release because changes to quoting and index entry -handling may break existing documents (see 'Additions and changes' -below and 'Appendix A: Migration Notes' in the AsciiDoc User Guide). - -Please report any problems you encounter. - -mailto:srackham@gmail.com['Stuart Rackham'] -********************************************************************* - -.Additions and changes -- Quoting can can occur within words (based on patch submitted by - Benjamin Klum). See the 'Unconstrained Quotes' sub-section in the - User Guide. - -- The underline and plus characters can be used as alternatives to the - existing apostrophe and backtick quote characters. They are arguably - better choices than the apostrophe and backtick as they are not - confused with punctuation. - -- The syntax for index entry macros have have been deprecated from - `+...+` and `++...++` to `((...))` and `(((...)))` respectively. - Rationale: - * Bracketing is consistent other with `[[...]]` and `<<...>>` - reference macros. - * To easily confused with triple plus passthroughs. - * To make way for the new monospace quoting. - -- Superscripts and subscripts are implemented as constrained quotes so - they can now be escaped with a leading backslash and prefixed with - with an attribute list. - -- An experimental LaTeX backend has been written by Benjamin Klum (a - number additions in this release are to accommodate the LaTeX - backend). -- `include` macro file names now expand environment variables and - tilde expansions. -- A configuration file `[quotes]` entry can be undefined by setting to - a blank value. -- Added `callto` inline macro for Skype 'callto' links. -- Added `colnumber` attribute for table data markup. -- A leading comment block or comment lines are now skipped (previously - a document had to start with either attribute entries or a document - Title). -- Experimental `rows` attribute (number of source lines in table) - available in table markup templates (used by experimental LaTeX - backend). -- Included install shell script written by mailto:jlm@ofb.net[Jacob - Mandelson] for installing the tarball distribution. -- Added INSTALL documentation file. -- Added 'replacements2' substitution options -- a second replacements - section. -- Added the ability to redefine 'normal' and 'verbatim' substitutions - with `subsnormal` and `subsverbatim` entries in configuration file - `[miscellaneous]` section. -- By default `AttributeEntry` values are substituted for - `specialcharacters` and `attributes`, if you want a different - AttributeEntry substitution set the `attributeentry-subs` attribute. -- The `name` in `name=value` configuration file entries can now end - with a backslash, just escape the trailing backslash with a - backslash. For example: - - abc\\=xyz -+ -Results in `name=abc\` and `value=xyz` -- previously this would have -escaped the `=` character. - -- A blank configuration file section deletes any preceding section - with the same name (applies to non-markup template sections). -- A command-line attribute value with a `@` suffix does not override - existing document and configuration file attributes (normally - command-line attributes have precedence over document and - configuration file attributes). -- `localtime` attribute is now encoded from the native system encoding - to the output encoding. Patch submitted by - mailto:m_pupil@yahoo.com.cn[FKtPp] -- here's his description of the - problem: -+ -``I am a Chinese user of AsciiDoc and I find that when I use UTF-8 -(the default encoding) to write asciidoc documents in Windows platform -the resulting html footer line will get screwed. It was caused by a -localized tzname that was always encoded in the windows native -encoding, which in my case is 'cp936'.'' - -- a2x(1) can generate Open Document Text files using - http://open.comsultia.com/docbook2odf/[docbook2odf]. Currently - `docbook2odf(1)` only processes a subset of DocBook, unimplemented - elements are skipped. -- The a2x(1) format option defaults to `xhtml` (previously a format - had to be specified explicitly). -- The `-d, \--doctype=DOCTYPE` option has been added to a2x(1) which - is a shortcut for `--asciidoc-options="--doctype=DOCTYPE"`. -- Replaced a2x(1) `--no-icons` and `--no-copy` options with their - negated equivalents: `--icons` and `--copy` respectively. The - default behavior has also changed: copying and use of icons is - disabled by default. Rationale: - * To make the default behavior more consistent since use of icons - and CSS stylesheets does not apply to all formats. - * To make the default behavior less surprising (the creation of icon - and stylesheet output files must now be explicit). - -- a2x(1) has been bumped from version 0.1.1 to version 1.0.0. - - -.Bug fixes -- Removed duplicate `./doc/a2x.1.txt` from distribution tarball. -- Documentation errata. -- Attribute replacement is no longer performed twice in Titles and - AttributeEntrys. -- a2x(1) skipped asciidoc(1) execution when rerun with different - `--asciidoc-options` options, it now always executes asciidoc(1). - The problem was that previously asciidoc(1) was executed only if the - output file was missing or older than the source file. - - -Version 7.1.2 (2006-03-07) --------------------------- -.Additions and changes -- Support for - http://www1.chapman.edu/~jipsen/mathml/asciimath.html[ASCIIMathML] - has been added. See 'Appendix I: ASCIIMathML Support' in the User - Guide and the examples at - http://www.methods.co.nz/asciidoc/asciimath.html. -- You can now prefix quoted text with inline attributes lists. You - can use this to set font size and color (XHTML and HTML outputs). -- Added `##...##` quoting -- it does nothing -- it's purpose is to - allow inline attributes to be applied to normal text. -- An 'inline passthrough' mechanism has been implemented. -- Configuration file comment lines can be escaped with a backslash -- - this is to allows the inclusion of configuration lines that start - with a hash character. -- The `scriptsdir` attribute can be used to specify the name of the - directory containing linked JavaScripts (see the - link:userguide.html#X33[User Guide] for details. -- The BackendBlock has been renamed PassthroughBlock for consistency - with the new inline passthrough naming. -- `a2x(1)` now works with the older `bash(1)` version 2.05b. Patch - submitted by mailto:francis@daoine.org[Francis Daly]. -- Content included by the `include1::[]` system macro is no longer - subject to attribute substitution so that ambiguities no longer - arise when used to include CSS or JavaScript files. - - -Version 7.1.1 (2006-02-24) --------------------------- -.Additions and changes -- The `caption` attribute can be used to customize admonition captions - as well as image, table and example block element title prefixes - (`xhtml11` and `html4` backends). -- You can now override the default icon image using the `icon` - attribute to specify the path of the linked image (xhtml11 and html4 - backends only). -- The deprecated `imagesdir` attribute is no longer recognized (use - `iconsdir` instead). -- Added 'Appendix H: Using AsciiDoc with non-English Languages' to the - AsciiDoc User Guide. -- Added 'Admonition Icons and Captions' subsection to the User Guide - explaining how to customize Admonition elements. - -.Bug fixes -- `a2x(1)` failed when configuration files were installed in the - global `/etc/asciidoc/` directory -- it was only searching the - directory containing the asciidoc executable (thanks to Christian - Wiese for finding and submitting a patch this bug). -- The html4 backend admonition caption now correctly displays the - admonition `caption` attribute (previously displayed the `style` - attribute). - - -Version 7.1.0 (2006-01-13) --------------------------- -.Additions and changes -- `a2x(1)` toolchain wrapper utility. This overcomes the biggest - hurdle for new users which seems to be assembling and using a - working DocBook XML toolchain. With `a2x(1)` you can generate XHTML - (chunked and unchunked), PDF, man page, HTML Help and text file - outputs from an AsciiDoc input file with a single command. All you - need to install (in addition to AsciiDoc) is xsltproc(1), DocBook XSL - Stylesheets and optionally FOP (if you want PDF) or lynx(1) (if you - want text). -- Block titles can now start with any non-space character (previously - where not allowed to start with `.~-_` characters). -- `./stylesheets/docbook.css` renamed to - `./stylesheets/docbook-xsl.css` to clarify its function. -- Renamed `./docbook-xsl/manpages.xsl` to `./docbook-xsl/manpage.xsl` - for consistency. -- Admonition and navigation icons moved to `./images/icons/` to - clarify usage and conform with a2x(1) usage. -- Renamed xhtml11 intrinsic attribute `imagesdir` to `iconsdir` to - keep vocab consistent and changed default value to `./images/icons` - (previously `./images`). `imagesdir` attribute still accepted but - deprecated. -- Unused image files have been weeded out of the distribution. -- Packager notes (appendix B) have been updated to reflect the needs - of `a2x(1)`. - -IMPORTANT: The renaming of the xhtml11 backend `imagesdir` intrinsic -attribute and it's new default value introduces a backward -compatibility issue: if you use the `icons` attribute you will need to -either move your icons to the new default `./images/icons` location or -include an `--attribute{nbsp}iconsdir="your_icons_path"` option in -your asciidoc commands. - -.Bug fixes -- Backslash line continuation is now observed in verbatim paragraphs. -- Fixed errors generated by example - `./examples/website/build-website.sh` script. - - -Version 7.0.4 (2005-12-08) --------------------------- -.Additions and changes -- Added ternary conditional attributes - `{@:[:]}` and - `{$:[:]}`. -- Safety violations now generate errors (they previously generated - warnings). -- asciidoc(1) now defaults to safe mode, consequently the - `[miscellaneous]` safe mode entry and `--safe` command-line option - are no longer necessary (though for backward compatibility - asciidoc(1) still accepts the `--safe` option). -- Backend Blocks are now flagged unsafe (they could be used to include - arbitrary and hence potentially unsafe output content). -- Filters are no longer considered unsafe. There's not much point in - insisting on filter safety since the installation of an unsafe - filter would require the introduction of new or modified - configuration files -- if your application configurations can be - compromised you're in all sorts of trouble (safe mode protects - against unsafe input files not unsafe configuration). As with all - filters, before installing, you should verify that they can't be - coerced into generating malicious output or exposing sensitive - information. - -.Bug fixes -- Fixed a lot of glaring grammatical and factual errors in the User - Guide. - - -Version 7.0.3 (2005-12-01) --------------------------- -.Additions and changes -- Added `--safe` and `--unsafe` command-line options -- AsciiDoc can - now be executed in a 'safe mode' which disallows the execution of - arbitrary code or the inclusion of arbitrary files (see - link:userguide.html#X39[Appendix C in the AsciiDoc User Guide]). -- Included link:source-highlight-filter.html[source-highlight filter] - in the distribution `./examples/source-highlight-filter/` directory - (based on filter submitted by mailto:trolocsis@gmail.com[Ryan - Phillips]). -- Included the DocBook XSL Stylesheets 1.69.1 customizations used to - generate the distributed AsciiDoc documentation (read the - `asciidoc-docbook-xsl.txt` file in the distribution `./docbook-xsl/` - directory). -- AsciiDoc DocBook XSL Stylesheet drivers moved from `./doc/` to - `./docbook-xsl/`. -- Modified `./doc/manpages.xsl` so only URL content is displayed in - manpages. - -.Bug fixes -- Explicitly set table CSS border style (`xhtml11` backend) to `solid` - because default border styles vary from browser to browser. - - -Version 7.0.2 (2005-08-28) --------------------------- -.Additions and changes -- There are now long versions of all AsciiDoc options. -- If the `--backend` is not specified it defaults to `xhtml11`. -- Added CSS simulated frames layout to the examples website (see - `./examples/website/layout2/README-website.txt`). This layout does - not work with IE6 and the original tables based layout is still the - default. -- Support page added to AsciiDoc website. - -.Bug fixes -- Invalid options are now trapped gracefully. -- Documentation errata. - - -Version 7.0.1 (2005-06-24) --------------------------- -.Additions and changes -- Reverted to use of `strong`, `em`, `tt` XHTML tags -- they're more - obvious and no less correct than `span` tags, besides, the generated - file sizes are smaller (the 'User Guide' was 11% smaller). -- Table title rendered with `caption` tag rather than a separate - `div`. -- The AsciiDoc 'stylesdir' attribute (if specified) is now recognized - when searching for embedded stylesheets (previously only searched - default `./stylesheets` directory). -- Default charset encoding changed from ISO-8859-1 to UTF-8 -- it's - less language specific and displays most common languages. -- `template::[]` macros now expand in all configuration file sections - previously only in markup template sections. -- Cleaned up example website layout CSS and configuration - (presentation has not been changed). -- Refactored `xhtml11.conf` configuration file. -- Set consistent and sensible permissions on distributed files. -- White space is now stripped from DSV formatted table cell data. -- `class="tableblock"` attribute added to tables generated by - `xhtml-deprecated-css.conf` to assist CSS. - -.Bug fixes -- Illegal character set encoder (specified by the AsciiDoc `encoding` - attribute) and character data are trapped gracefully. -- AsciiDoc table 'format' attribute in table attribute lists were not - recognized. -- The nested horizontal labeled list example in the 'AsciiDoc User - Guide' has been dropped -- it generated invalid DocBook markup. - - -Version 7.0.0 (2005-06-06) --------------------------- -*************************************************** -This is a major release with many code and -documentation changes. -Please report any problems you encounter. - -mailto:srackham@gmail.com['Stuart Rackham'] -*************************************************** - -.Additions and changes -- A new 'xhtml11' backend generates XHTML 1.1 with integrated CSS2 - replacing the previous 'xhtml', 'css', and 'css-embedded' backends. -- The CSS stylesheets have finally been rewritten. -- The asciidoc(1) command help now includes user - link:userguide.html#X36[customizable help] topics. When asciidoc is - invoked with the `--help` option the command argument is - interpreted as a help topic. -- The previous example website has been replaced by the actual - AsciiDoc website (see `./examples/website/`. -- XHTML generation options now controlled by the following attributes: - 'badges', 'linkcss', 'icons', 'numbered', 'quirks', 'theme', - 'stylesdir', 'imagesdir' (see the link:userguide.html#X33[User - Guide] for details. -- By default HTML and XHTML are output as stand-alone documents (no - embedded CSS and no linked admonition icon images). -- Documents encoded with the UTF-8 Unicode character set are now - processed thanks to a patch supplied by - mailto:viktor@rbg.informatik.tu-darmstadt.de[Viktor Vasilev]. -- The `-a ^name` command-line syntax to undefine an attribute has been - deprecated in favor of the `-a name!` syntax. -- AttributeEntry syntax addition: `:name!:` to undefine `name` attribute. -- Added `template` system block macro to allow the inclusion of one - configuration file template section within another. -- A 'verse' style attribute can now be applied to literal paragraphs - and blocks to reproduce line breaks and white space from the source - document. -- Replacements and Special Words can now be escaped with leading - backslashes. -- Replacements are now processed in configuration file order (previous - ordering was indeterminate). -- System macros can now be used in the base `asciidoc.conf` - configuration file. -- Deprecated features that emitted warnings in prior versions are no - longer tolerated. -- The `eval` system attribute expression evaluates to `False` the - attribute is undefined, if it evaluates to `True` the result is an - empty string. -- The Paragraph and DelimitedBlock 'presubs' parameter can be aliased - as 'subs'. -- Added 'verbatim' substitutions option. -- Renamed 'List Continuation Block' to 'List Block' and renamed the - 'listcontinuation' option to 'list'. -- Deprecated 'default' substitutions option (use 'normal' instead). -- The 'section-numbers' section numbering attribute has be renamed - 'numbered'. -- Dropped the '\#UNDER CONSTRUCTION#' block macro. -- Rewrote Paragraph and DelimitedBlock handlers adding a - link:userguide.html#X23[styles] configuration entry. - -.Bug fixes -- Included files are no longer read inside conditionally excluded - content. -- Manpage command names containing dashes (in the manpage NAME - section) were misinterpreted as the spaced dash command name/purpose - separator. Bug report and patch supplied by - mailto:david@dgreaves.com[David Greaves]. -- Unexpected error following malformed author line error. - - -Version 6.0.3 (2005-04-20) --------------------------- -.Additions and changes -- Special characters are now substituted in AttributeEntry element - values. -- Spaced and unspaced em dashes are now recognized (previously only - spaced em dashes were recognized). -- Replaced the table 'noborders' option with richer 'frame' and 'grid' - attributes. -- The `duplicate macro` warning message now only occurs when the - verbose (`-v`) option is enabled. -- Single lines starting with two forward slashes hard up against the - left margin are treated as comments and are not processed. -- Renamed 'section' delimited block option to 'sectionbody' to more - accurately reflect it's role. -- Added a List Continuation block -- a specialized delimited block - that is functionally equivalent to the List Item Continuation - feature except that the list contained within the block does not - require explicit '+' list item continuation lines. -- Dropped deprecated `` tags from generated HTML. -- Literal Block delimiters must now consist of at least four points - (previously three) to avoid lone ellipsis ambiguity. - -.Bug fixes -- Some system attribute evaluation failures caused unexpected - exceptions to occur. - - -Version 6.0.2 (2005-03-30) --------------------------- -.Additions and changes -- Three new 'system' block macros have been added -- `eval`, `sys` and - `sys2` which are the block macro equivalents to the same named - system attributes. -- 'Intrinsic' macros have been renamed 'system' macros along with - 'action' attributes which have been renamed 'system' attributes: - * To reflect their common (though contextually different) behavior. - * To avoid confusion with 'intrinsic attributes'. - -.Bug fixes -- Asciidoc now searches in `/etc/asciidoc/filters` for filters. - - -Version 6.0.1 (2005-03-06) --------------------------- -.Additions and changes -- A global configuration file location `/etc/asciidoc` has been added - and is now processed before all other locations (patch supplied by - mailto:stone@debian.org[Fredrik Steen]). -- Recoded `tempfile.mktemp()` and other artifacts that are no longer - necessary or desirable (patches supplied by - mailto:stone@debian.org[Fredrik Steen]). -- Added BUGS file to the distribution. - -.Bug fixes -- Illegal comment syntax in `css-embedded-stylesheet.conf` resulted in - illegal CSS in files generated by the `css-embedded` backend. - - -Version 6.0.0 (2005-01-28) --------------------------- -*************************************************** -This release has had some fairly major code and -documentation changes. Please report any problems -you encounter. - -mailto:srackham@gmail.com['Stuart Rackham'] -*************************************************** - -A lot of new stuff. A new major version number -- some regression -incompatibility (hopefully mitigated by 'deprecated' warnings). - -Went mad trying to rein in the current feature anarchy -- established -a unified notion of document attributes. Attempted to introduce a -consistent vocabulary -- renamed many poorly or inconsistently named -entities. - -Actually, deprecated syntax is still processed correctly in almost all -cases. One source of incompatibility that may arise if you have -customized CSS stylesheets is the change of AsciiDoc CSS class names -(see below). I guess the moral is if you've done a lot of -configuration file customization and are happy with version 5 then you -may want to stay put. - -NOTE: This version requires Python 2.3 or better to run. - -.Additions and changes -- 'Glossary entries' have been renamed 'attributes'. This eliminates - confusion with the accepted meaning of glossary. -- An `AttributeEntry` block element has been added so that document - attributes can be assigned from within an AsciiDoc document. -- The `AttributeList` block element has been added which is a more - general solution than the (now deprecated) DelimitedBlock arguments. -- An BlockId element has been added for setting block element anchor - (link target) IDs. -- Quoted text can now span multiple lines (thanks to James Bowlin for - this patch). -- Inline macros can now span multiple lines. -- \``double backtick / apostrophe'' quotes generate ``curly quotes''. -- A warning is now emitted for out of order list item (applies to - explicitly enumerated numbered list items). -- Added `include` action attribute. -- A line of three or more apostrophes generates an HTML horizontal - ruler (`
` tag). You will get a warning if processed with - non-HTML backend. -- An `{imagesdir}` attribute specifies image file location for images - referenced in configuration files when generating HTML (the default - location is `images`). -- An `{stylesdir}` attribute specifies the location of CSS - stylesheets when generating styled HTML (the default location for - configured markup is `.`). -- The use of the (often inappropriately named) `{caption}` attribute - list entry has been deprecated, use `{0}` instead. -- New 'ExampleBlock' delimited block along with associated variants - Note, Tip, Warning, Caution and Important. -- The `docbook.conf` file now facilitates the optional inclusion of a - DocBook revision history file. -- To better reflect their purpose the following block elements have - been renamed: `VerbatimBlock` to `ListingBlock`; `IndentedBlock` to - `LiteralBlock`; `IndentedParagraph` to `LiteralParagraph`; - `CustomBlock` to `BackendBlock`; `SimpleSection` to `SectionBody`. - Any corresponding CSS class names have also been changed which could - result in backward incompatibility in customized stylesheets. -- Swapped plain DocBook admonition icons for Jimmac's DocBook icons - (http://jimmac.musichall.cz/ikony.php3). The original plain icons - have been moved to `./images/plain`. -- Renamed `html` backend to `xhtml` to better reflect it's function - (former `html-4` backend renamed to `html`). -- A new inline anchor macro syntax `[[[]]]` is available, it - displays `[]` at the anchor location and is for anchoring - bibliography list entries. -- An optional 'single-line titles' syntax can be used. -- Tweaks to distributed CSS stylesheets and FOP `fo.xsl` customization - file. -- 'List Item Continuation' has been implemented which allows - additional block elements to be included in list items by separating - them from the preceding list item element with a line containing a - single plus character. -- A new 'Horizontal Labeled List' list type has been added. Generates - two column list -- the first column contains the list element - labels, the second contains the element text. Same syntax as - `Vertical Labeled Lists` except the double colon label suffix is - followed by the start of the list item text. - -.Bug fixes -- Fixed broken backslash line continuation. -- Labeled list end tags were not undergoing attribute substitution. -- Documents without any author information now generate legitimate - DocBook (previously if the author line was not included in the - document header then an empty (illegal) DocBook `author` element was - generated). -- Multiple spaces in filter command arguments were replaced by a - single space. The `./examples/asciidoc2text/asciidoc2text.sh` script - now indents text correctly. - - -Version 5.1.1 (2004-10-10) --------------------------- -*15-December-2004: Interim update:* Updated `asciidoc.py` to fix -broken `join_lines` function -- no other changes. - -- PDF documentation is now produced from DocBook XML using XSLTLib and - FOP. Previously we processed DocBook SGML with `jw(1)` (which used - Dvips to convert DVI files to PDF). FOP has come a long way in the - last 12 months and produces very acceptable PDF under both Linux and - Windows. -- Sections detailing how to install and use the DocBook XSL - Stylesheets, xsltproc, FOP toolchain and the AsciiDoc XSLT drivers - have been added to the User Guide. -- The PDF output from the he example article template has been - included in the distribution (`./doc/article.pdf`). -- Special characters are emitted using decimal Unicode character codes - (previously used named character entities which cannot be assumed - included in non-HTML documents). -- Added registered trademark (R) to `[replacements]`. -- CSS stylesheet tweaks. -- Admonitions (Note, Tip, Important, Warning, Caution) include icons - when generating css output. - - -Version 5.1.0 (2004-09-18) --------------------------- -- Callouts have been implemented (see the 'Callouts' section of the - AsciiDoc User Guide for details). -- Added XSL drivers for generating XHTML, chunked XHTML and HTML Help - from DocBook XML using XSL stylesheets and xsltproc(1). -- Added CSS stylesheet for HTML generated from DocBook XML using XSL - stylesheets. -- Distribution contains HTML Help formatted User Guide - (`./doc/asciidoc.chm`), the User Guide tells you how it's generated. -- Images referred to by distributed stylesheets are now located in the - `./images` subdirectory (previously located in `.`). -- Filters path names are now handled properly under Cygwin. -- The usual documentation and examples additions, updates and - polishing. - - -Version 5.0.9 (2004-09-09) --------------------------- -- The convention of using a `.asc` file extension for AsciiDoc files - has been dropped in favor of the familiar `.txt` extension. It makes - more sense in that AsciiDoc is a text presentation format and - because `.asc` clashed with the same extension used by other - applications. It's only a naming convention -- you don't have to - switch if you don't want to. -- Changed the subscript formatting character from underline to tilde - since underscores in file names are reasonably common (especially in - link and image macros). -- An alternative syntax for the index term inline macro has been - added: `++,,++`. -- Index terms that have secondary and tertiary entries now - additionally generate separate index terms for the secondary and - tertiary entries. -- A `++` index term inline macro has been added which - displays the term in the primary text flow. -- Added alternative variable list definition using double semi-colon - terminator as opposed to the standard double colon terminator so - variable lists can be nested to two levels. -- Footnotes now appear on a separate line in HTML and Linuxdoc - outputs. -- Python version compatibility is checked at startup. -- Preface and appendix section titles in multi-part Book documents are - meant to be out of sequence -- warnings are no longer emitted when - outputting HTML. -- Empty section warnings have been replaced by error messages and are - emitted only if invalid markup would result. -- Missing macro sections or invalid macro name warnings are only - generated at startup if the `-v` (verbose) option is set. Otherwise - they are deferred until a matching macro is encountered in the input - file. -- Missing or invalid table definition warnings are only generated at - startup if the `-v` (verbose) option is set. Otherwise they are - deferred until a matching table is encountered in the input file. -- AsciiDoc now makes more of an effort to continue in the face of - errors. -- Fixed broken `./examples/website/main.aap` script. -- Converted distribution text files DOS text format as a sop to - Windows users with challenged text editors. -- Documentation additions and corrections. - - -Version 5.0.8 (2004-05-15) --------------------------- -- Spurious 'out of sequence' level 2 warnings no longer appear when - processing 'book' document multi-part book top level Preface and - Appendix sub-sections since they are (correctly) out of sequence. -- A warning is no longer emitted for empty Index sections since this - is normal when generating DocBook outputs. -- Fixed: `[quotes]` configuration file entries where not being - overridden by downstream configuration file entries. -- Footnote text is now output enclosed in square brackets in HTML - documents. -- Added superscripts and subscripts to the standard PRS configuration - files. -- Adjusted CSS stylesheets so list titles don't have so much space - between title and first list item (broken in IE6 due to poor CSS - compliance). Lessened sidebar title top margin. - - -Version 5.0.7 (2004-04-22) --------------------------- -- The version 5.0.6 README incorrectly stated that AsciiDoc would run - under Python 2.0, in fact it requires Python 2.1 or better. The - README has been corrected. -- Documented techniques for combining and splitting AsciiDoc documents - and processing the combined and split parts (see the 'Tips and - Tricks' section of the User Guide). -- An example of marking up superscripts and subscripts is documented - in the 'Tips and Tricks' section of the User Guide (the example - configuration file is in the AsciiDoc `examples` directory). -- Added ellipsis to shipped `[replacements]`; three periods output an - ellipsis entity. -- Removed unused 'SectionClose' class. -- The AsciiDoc 'Preamble' element is output as a DocBook 'Preface' - when processed as a 'book' document type (in older AsciiDoc versions - a warning was issued and processing stopped). -- Fixed a quoting anomaly: quoted text can no longer begin or end with - with white space. - - -Version 5.0.6 (2004-03-07) --------------------------- -- New 'image' macro implements optional image scaling and linking and - works in both inline and block contexts. The 'image' macro obsolesces - the existing 'graphic' block macro and 'icon' inline macro. -- Macro substitution section names now have `-inlinemacro` and - `-blockmacro` suffixes to resolve context ambiguity, make their - purpose clearer and relieve section namespace congestion. -- Header derived glossary entries can now be overridden from the - command-line. -- Special character substitution is now performed on AuthorLine - derived author names. -- A macro or block argument called 'options' can be used as a shortcut - for a list named arguments with zero length string values. -- Tables can be output without borders using the `options="noborders"` - argument. -- Table data lines that do not immediately follow a table section - underline can now be blank. This allows CSV data with embedded blank - lines to be processed correctly. -- Blank DSV format table data lines are silently skipped. -- Tightened up on enforcement of configuration file section names to - reduce the possibility of section content being seen as a section - header line. -- Section titles can be optionally suffixed with title arguments - enclosed in double square brackets. -- A replacement has been added to `asciidoc.conf` to replace inline - double dashes with the `—` entity. -- Changed the `.UNDER-CONSTRUCTION.` macro syntax to - `#UNDER-CONSTRUCTION#` so it is not mistaken for a BlockTitle. - Similarly changed the `.NEW.` replacement with - `#NEW#`. -- `#NEW#` and `#UNDER-CONSTRUCTION#` macros are now - included in the DocBook backend. -- Replaced shipped `smallnew.gif` with `smallnew.png`. -- Documentation tidy ups. - - -Version 5.0.5 (2004-02-25) --------------------------- -- Fixed the disappearing paragraph titles problem that was caused by - Inline macros (incorrectly) processing BlockTitles. -- Tightened AuthorLine validation. Previously invalid email addresses - and embedded special characters in the AuthorLine resulted in - invalid output markup. - - -Version 5.0.4 (2004-02-09) --------------------------- -- Reinstated missing `infile`, `outfile`, `filetype` and - `filetype-` glossary entries. -- As of version 5.0.3 asciidoc(1) now requires Python 2.0 or greater, - this has now been documented. - - -Version 5.0.3 (2004-01-23) --------------------------- -- Fixed problem that caused any filters directory file containing - `.conf` (not just those with the `.conf` extension) from being - loaded. -- All `[miscellaneous]` configuration file entries can now be - referenced like glossary entries (they are now processed internally - as glossary entries). -- The output file line terminator (previously hardwired to `\r\n` is - now set using the `newline` entry in the configuration file - `[miscellaneous]` section. -- The misspelt `blocktitles` configuration file entry name has been - corrected (to `blocktitle`). -- An `{empty}` glossary entry has been added to the default - configuration which is useful for outputting trailing blank lines - from configuration file substitution sections. - - -Version 5.0.2 (2003-12-18) --------------------------- -- New (alternative) 'anchor' and 'xref' macro syntax (old syntax still - valid). -- DocBook `mediaobject` and `inlinemediaobject` tags are generated in - place of `graphic` and `inlinegraphic` tags by the AsciiDoc - `graphic` and `icon` macros. If a macro argument is specified it is - the alternative text output if the target document format does not - support the specified graphic file format. -- Dropped the LinuxDoc left and right square bracket special character - substitutions as they interfered with macro substitution. -- Documentation updates and corrections. - - -Version 5.0.1 (2003-12-09) --------------------------- -- Fixed problem with anchor tag when generating CSS styled HTML. - - -Version 5.0 (2003-12-08) ------------------------- -*************************************************** -This release has had some fairly major code and -documentation changes. Please report any problems -you encounter. - -mailto:srackham@gmail.com['Stuart Rackham'] -*************************************************** - -- AsciiDoc can now produce a full-blown multi-part DocBook book - including dedication, abstract, preface, colophon, glossary, - appendix, bibliography and book part elements using the new - `specialsections` configuration file section. -- All Section element children (Paragraph, DelimitedBlock, List, - Table, BlockMacro) can now be titled using the BlockTitle element. - A BlockTitle element is a single line containing a title and - beginning with a period. -- The `index` and `backmatter` macros have been dropped, superseded by - `specialsections`. -- The AsciiDoc 'Preface' element has been renamed 'Preamble' (to avoid - confusion with the DocBook book preface element). -- Out of sequence titles are now tolerated with a warning. This allows - book document level 0 sections to be processed. -- An 'anchor' inline macro has been added for document link target - creation. -- 'Note', 'Tip', 'Important' and 'Warning' paragraph types have been - added to support the corresponding DocBook elements. -- Title substitution is now performed in SidebarBlock titles. -- DocBook graphics now output as `figure` and `informalfigure` - elements rather than `mediaobjects`. This ensures numbered figures - and a lists of figures are produced by the DocBook toolchain. -- You can now escape block argument lines by appending a backslash. - Alternatively, if you embed arguments in the delimiter line AsciiDoc - does not check for an arguments line. -- The default DocBook backend file extension has been changed from - `.docbook` to `.xml` (`.sgml` for the 'docbook-sgml' backend). -- Warnings are output by default (previously they only printed when - verbose option enabled). -- A Question and Answer variable list definition has been added to the - shipped configuration files, primarily to create DocBook `qanda` - DocBook elements. -- Fixed broken code-filter `-b linuxdoc` option. The asciidoc.asc User - Guide can now be processed by linuxdoc(1) (although tables are - dropped because LinuxDoc does not implement tables). - -.Compatibility issues: -1. Table titles are no longer in the arguments line, use the new - BlockTitles. -2. Graphic titles are no longer in the 'graphic' block macro caption, - use the new BlockTitles. -3. The code-filter title must be placed in a preceding BlockTitle. -4. SidebarBlock titles must be placed in a preceding BlockTitle. -5. The DelimitedBlock option 'sidebar' has been renamed to 'section'. -6. The default DocBook backend file extension has been changed from -`.docbook` to `.xml` (`.sgml` for the 'docbook-sgml' backend). - - -Version 4.2 (2003-11-26) ------------------------- -- The default HTML output is now XHTML 1.0 markup. To output the - former HTML 4 markup specify the `html-4` backend. -- The default DocBook output is now DocBook XML. To output the former - DocBook SGML specify the `docbook-sgml` backend. The associated - `docbook-sgml.conf` file illustrates how to support minor DTD - variations. Examples of using the `xmlto(1)` command for DocBook - conversion have been added to the User Guide. -- Glossary entries set using the command-line -g option can now be - referenced in configuration files. -- Configuration dumps (`-c` command-line option) no longer output - redundant undefined glossary entries. -- DelimitedBlock arguments can now be specified in a separate arguments - line immediately following the leading delimiter line, This is in - preference to the existing delimiter embedded arguments. Reasons: - * The syntax is in keeping with the Tables arguments syntax. - * It's easier to enter and implements line continuation. -- A new QuoteBlock DelimitedBlock definition has been added to the - distribution configuration files. -- The table arguments lines can be continued using the backslash line - continuation character. -- Added new calculated glossary reference type `{%}`. -- Double-quote characters can now appear in unquoted positional - arguments. - - -Version 4.1 (2003-11-13) ------------------------- -- Added DSV (Delimiter Separated Values) tables format. -- `{eval:}` glossary references drop the containing line if - `` evaluates to `None`. -- Block, Table and Macro arguments can now be positional (quoted or - unquoted). -- Vocabulary change: DelimitedBlock, Table and Macro 'attributes' are - now referred to as 'arguments'. This makes more sense in light of the - extended syntax and avoids confusion with backend markup tag - attributes. -- 'tablewidth' table ruler parameter can now be expressed in percent - units (0..100). If between 0 and 1 then the original fractional unit - measure is applied. -- The use of quoting for generating footnotes and index entries has - been dropped in favor of 'footnote' and 'indexterm' inline macros. -- 'backmatter' inline macro included in distribution. -- Fixed: CSS styled HTML tables are now fully XHTML 1.0 conformant. -- Fixed: 'tablewidth' was processed incorrectly when passed as table - argument. -- Fixed: Glossary references like `{x=\{y}}` were one character off - if \{x] was defined and `{y}` was not. - - -Version 4.0 (2003-11-08) ------------------------- -*************************************************** -This release has had some fairly major code and -documentation changes. Please report any problems -you encounter. - -'Stuart Rackham' -*************************************************** - -- Added tables to AsciiDoc. -- Added two special 'subs' options: 'default' specifies the default - substitution options and 'none' specifies no substitution. These - options can only appear singly. -- Line continuation using a trailing backslash character is available - in Paragraphs, ListItems, Tables. -- The left and right quotes for quoted text can now be specified - separately. -- Shipped configuration files implement footnotes (only useful for - DocBook output) using \[[]] quoting. -- Shipped configuration files implement index terms (only useful for - DocBook and LinuxDoc output) using \(()) quoting. -- The shipped 'html' backend configuration now emits valid 'HTML 4.01 - Transitional'. -- Added new calculated glossary reference types `{!}` - and `{#}`. -- The DelimitedBlock 'params' option has been dropped in favor of the - new 'block attributes' mechanism. If you have customized block - params options you may need to adjust source files to use the - 'block attributes' syntax. The example code filter has been updated - to reflect these changes. -- The code filter now has a `-t tabsize` option. -- Replaced `-w` option with `-v` (verbose) option. The warnings option - was just to confusing. -- Named attributes can now be specified in macro calls. -- The 'tabsize' attribute is recognized in the built-in `include` - macros. A tabsize of zero suppresses tab expansion. -- The configuration file `[options]` section has been split into - `[miscellaneous]` and `[titles]`. If you have customized any of - these settings you will need to adjust the affected configuration - files. -- Configuration file `[miscellaneous]` entries can now also be set - using the command-line `-g` option. -- Fixed: error that occurred when attempting to use zero length - configuration and source files. -- Fixed: blocking filter halt problem. -- Fixed: inline macro escape prefix problem. -- Fixed: missing macros from configuration dump problem. -- Fixed: named macros were dumped incorrectly. -- Many documentation changes/additions/corrections. - - -Version 3.2.2 (2003-10-26) --------------------------- -- Added `-n` option (synonym for `-g section-numbers`). -- Dropped the processing commentary (hey, this is Unix). -- Added new calculated glossary reference type `{?}`. - `` is the glossary entry name and `` is the text - substituted if the glossary entry is defined. `` can only - contain literal text (no glossary references allowed). -- Added `asciidoc2text` to distribution `examples/asciidoc2text` - directory (converts AsciiDoc source to text file with section - numbering). -- Fixed incorrect nesting of Simple lists inside Variable lists. -- List definitions have been modified so that list items can be - indented. This allows a more intuitive indentation of nested lists - in AsciiDoc source. -- Lists must be separated from preceding paragraphs by a blank line. - This is to avoid paragraph lines being mistaken for list items. -- Corrected asciidoc man page documentation error: the`-f` option does - *not* search relative to source document directory for the - configuration file. -- Minor updates to various distribution `.conf` files. -- Included `badges.conf` in `examples` directory. -- `css-embedded-stylesheet.conf` now supports footer badges. -- The default in-line element processing order has been changed: - Glossary References are now processed before Inline Macros. This - allows glossary expansions to occur inside macro references. -- Glossary entries are now allowed in Author and Revision lines. -- Default List `subs` options and Paragraph `presubs` options are - assigned the following default value if not specified: - - specialcharacters,quotes,specialwords,replacements,glossary,macros - -- Documentation changes/additions/corrections. - - -Version 3.2 (2003-05-26) ------------------------- -- Added a `-s` command-line option to suppress the output of - `[header]` and `[footer]` sections. -- Article document headers are no longer mandatory: this allows - AsciiDoc to process arbitrary chunks of text. When used in - conjunction with the new `-s` command-line option corresponding - chunks of backend markup can be generated. -- AsciiDoc now emits a warning message and continues when an out of - sequence section title is detected (previously it failed and - halted). This allows document sections to be processed separately. -- Optional 'presubs' and 'postsubs' entries have been added to - 'DelimitedBlock' and 'Paragraph' definitions. As a consequence - substitution options are no longer legal in 'options' entries. -- 'presubs' and 'postsubs' substitutions are processed in the order - the options are specified (rather than the fixed 'options' order of - previous versions). -- ./filters subdirectories are automatically searched for filter - commands. -- A 'title-subs' configuration option specifies the substitutions - performed on document Header and Section titles. -- A 'subs' entry in now included in List configuration file - definitions that specified substitutions performed on list entry - text. -- Configuration files are auto-loaded from ./filters subdirectories. -- Added example code filter (see ./examples/filters). -- Bug fix: if section was empty you may have got erroneous 'missing - tag "paragraph"' error. -- Internal code tidy up. - - -Version 3.1 (2003-05-18) ------------------------- -- In version 3.0 a `[macros]` section entry of the form 'name' was - equivalent to 'name='. An entry of the form 'name' now undefines the - entry (to bring it in line with the behavior of other special - sections). -- Paragraphs have now been generalized (in the same way as Lists and - DelimitedBlocks). -- The 'indentsize' option has been dropped as as consequence of - paragraph generalization. -- Pipe | characters can be included in substituted tag and - substitution section text using the \{brvbar} (broken vertical bar) - glossary reference. -- Removed the restriction requiring substitution section text - placeholders | to be on a separate line. -- Added an `-e` asciidoc(1) command option that excludes implicit - configuration files (used in conjunction with `-c` generated - configuration files). -- Version 3.0 documentation has undergone a considerable cleanup. -- The dumping of quoted section entries (see `-c` option) now works - correctly. -- The format of special section entries has been made consistent: - `name` undefines the entry; `name=` sets the entry value to a blank - string; `name=value` sets the entry value to `value`. -- As a consequence of the previous change the caret prefix is no - longer used in glossary configuration file entries (although it is - still used when undefining an entry using the `-g` command-line - option). - - -Version 3.0 (2003-05-13) ------------------------- -This version is the culmination of work begun in the 2.x releases -whereby fixed policy has been replaced by extensible mechanisms. - -- Added `-c` command-line option to dump a composite asciidoc(1) - configuration file to stdout. -- Lists and Delimited Blocks are now defined by a set of configuration - file parameter sections. The user can modify the default - definitions or add new ones. -- Block content can now be processed through external filters. -- The default behavior for Custom Blocks is to perform glossary - substitution (previously there was no substitution inside Custom - Blocks). -- The old 2.x style macros have been reimplemented; as with Lists and - Delimited Blocks there syntax and behavior can be configured by the - user. The default macro syntax remains the same but the semantics - are now (hopefully) a bit more intelligible. -- Block and Builtin macros use :: delimiter instead of the 2.x single - colon delimit (to distinguish them from inline macros). The 2.x - syntax is still supported for backward compatibility. -- Nested lists are now supported and IndentedParagraphs can be - included in list items. -- Conditional source inclusion can be specified using built in `ifdef`, - `ifndef` and `endif` macros. -- The new conditional source inclusion feature has been used to reduce - the number of default configuration files down to one per backend. -- A change of name: 2.x 'Substitutions' are now called 'Replacements' - and the 2.x `[substitutions]` configuration file section is now - called `[replacements]` (the old name is still recognized for - backward compatibility). -- The line break is now implemented as a 'Replacements' substitution. -- Inline 'icon' macro for inline images has been added to default - configuration files. - -Version 2.2 (2003-04-07) ------------------------- -- The `master.conf` configuration file name has been deprecated in - favor of `asciidoc.conf`. -- The standard configuration files set is now loaded from the - `.asciidoc` folder in the users home directory (if it exists) and - then from the source document directory. Configuration files that - don't exist are silently skipped. -- Configuration files named like the source file will be automatically - loaded if they are found in the source file directory. For example - if the source file is `mydoc.asc` and the `-b html` option is used - then asciidoc(1) will look for `mydoc.conf` and `mydoc-html.conf` in - that order. -- The characters used to quote formatted text can be configured and - extended by the user (see the master.conf [quotes] section). -- Quoted text can now be escaped by prefixing a backslash character to - the leading quote. -- The double single-quote '' strong text quote has been deprecated in - favor of an asterisk * character. -- Added \{eval:expression}, \{sys:command} and \{sys2:command} - glossary reference actions. -- Trailing brace characters `}` are now allowed inside glossary - references provided they are escaped with a backslash character. -- Glossary entries can now be escaped by prefixing a backslash - character to the leading brace character (use this in preference to - placing the backslash inside the brace). -- The output macro has been deprecated (use the new include1 macro - inside a CustomBlock). -- The default document type is `article` (asciidoc no longer attempts - to guess). -- Files included within DelimitedBlocks are not searched for block - termination underlines. This ensures the entire file is part of the - DelimitedBlock. -- `include` macros can now be used in configuration files. -- Corrected \{infile} and \{outfile} glossary entry documentation. -- File inclusion is now limited to a depth of 5 to catch recursion - loops. -- Inline tags have been deprecated, they're not necessary and they - immediately make the source document backend specific. Use - CustomBlocks or Substitutions instead. - -Version 2.1 (2003-03-17) ------------------------- -- Added section auto numbering `{sectnum}` glossary entry - (auto-numbering function contributed by Ludovico Magnocavallo). -- asciidoc(1) now correctly returns non-zero exit status if an error - occurs. -- An AsciiDoc example website has been included in the AsciiDoc - distribution `examples/website` directory. -- NOTE: The `asciidoc` wrapper script included in the 2.0 distribution - has been dropped, if you've symlinked or aliased to `asciidoc` you'll - need to change them to point directly to `asciidoc.py` instead. -- An RCS $Id$ marker can be used as the document header revision line - (based on a patch submitted by Ludovico Magnocavallo). -- In addition to the `name=value` glossary entry format two new ones - have been introduced: `name` (the default value is set to an empty - string) and `^name` (the glossary entry is undefined). -- The `-q` command-line option has been deprecated and the `-w level` - command-line option added. + - NOTE: By default skipped substitution warnings are now suppressed. -- If a configuration file specified with the `-f` command-line option - is not found relative to the current working directory then the - search is repeated relative to the asciidoc(1) directory. This - allows global configuration files to be used. -- Added `{infile}`, `{outfile}` predefined glossary entries. -- Added `under-construction` macro to HTML article configuration - files. -- Deprecated `{asciidoc_version}` glossary entry in favor of - `{asciidoc-version}` (to it consistent with other entries). - -Version 2.0 (2003-02-24) ------------------------- -- The emphasized, strong and monospaced words options have been - generalized with the introduction of macro based 'special words' - lists. -- Glossary references can now appear in both the document and macro - bodies. -- All output files use `crlf` line termination (previously used UNIX - `lf` (newline) termination). -- Added [substitutions] section which implements arbitrary regular - expression based substitutions. -- An optional `master.conf` configuration file can be used for entries - that are not backend or document type specific. -- Special character definitions moved from the code to the new - [special_characters] configuration file section. -- Configuration file glossary added. -- Command-line -g glossary entry added. -- A new 'book' document type has been implemented for the 'docbook' - backend. It outputs DocBook 'book' documents. -- A major internal change has been the implementation of parametrized - user definable 'macros'. Internally most document elements are now - processed as macros. -- Configuration file macro variables can be specified with default - values (literals or other macro variables). -- An attempt has been made to tighten up the vocabulary used to - describe the AsciiDoc document syntax. -- The term abstract has been replaced by the more general term - 'preface' and a new preface section introduced into article - configuration files (replacing the synopsis sections). -- Any section elements can now be put in the document preface - (previous versions only allowed paragraphs). -- AsciiDoc Blocks have been unified and their behavior can be user - defined and parametrized. -- An 'output' inclusion allows an external file to be written directly - to the backend output file. -- A new CustomBlock has been added. Default behavior is to insert the - enveloped AsciiDoc source lines directly into the output file. -- A 'line break' tag can be inserted by terminating a line with a '+' - character (only really useful for HTML backends). -- An fourth section level has been introduced. -- The SidebarBlock delimiter line characters have been changed. The - deprecated underline is still accepted. -- Levels 2 and 3 title underline characters have been changed. The - deprecated underlines are still accepted. -- Lines with backend specific inline tags can be inserted into - AsciiDoc source files. -- Single words enveloped by underscores are no longer emphasized. This - feature was deprecated as it is redundant (use single quotes - instead) and was being applied to file names with underscores. -- A `-q` quiet option has been added to suppress warning messages. -- Badge images sourced locally. -- Added 'author' and 'author-mail' meta tags to HTML configuration - files. - -Version 1.5 (2003-01-08) ------------------------- -- Implemented sidebar document elements. -- Explicit checks for user specified configuration files and input - file (rather than throwing exception). - -Version 1.4 (2003-01-04) ------------------------- -- New configuration file options 'emphasizedwords' and 'strongwords'. - These allow the definition of words that will always be emphasized - or rendered in a strong font without inline formatting. -- Document and section titles are no long subject to inline - formatting. -- Multiple configuration files can be overlaid in a single command. -- Configuration file tags and options entries can now be overridden on - an entry by entry basis (previously the entire section was - overloaded). -- Configuration file tags and options entries are now cached this has - resulted in around 37% performance improvement over version 1.3. -- Variable lists can now contain multiple terms per list item. -- Placeholder paragraph eliminated from empty sections that contain - subsections. -- Added \{asciidoc_version} substitution variable. -- More documentation additions and tidy ups. - -Version 1.3 (2003-01-01) ------------------------- -- A new 'strong' text formatting convention has been implemented: - Word phrases enclosed in pairs of single quote characters (acute - accents) are rendered in a strong font (usually bold). -- Paragraphs can now be followed immediately by Simple lists and - Ordered lists without an intervening blank line. -- A user specified configuration file (`asciidoc(1)` -f option) - overlays the default configuration file rather than replacing it. - Custom configuration files need only contain those sections - that have been customized. -- Comment Block delimiters have been relaxed slightly. They must start - with three forward slashes /// but the remainder can contain any - characters, this allows comments to be embedded in the delimiter line. -- Leading non-digit characters preceding revision number are now - ignored. -- Set default indentsize [option] from 2 to documented default value - of zero in HTML backend html-article.conf and html-manpage.conf - files. -- Fixed error that occurred when taking input from stdin without - explicitly specifying a document type. -- Restored file name and line number error message information. -- Changed deprecated -t option to -d in asciidoc --help and usage - command output. -- CSS styles tweaking. -- Code, configuration file and documentation tidy ups. - -Version 1.2 (2002-12-28) ------------------------- -- Implemented 'include' URL to allow file inclusion. -- `fileextension` configuration file [option] renamed to more sensible - `outfilesuffix` (`fileextension` still accepted by this version but - will be dropped in future). -- Improved error reporting. -- CSS backends generate valid XHTML. -- New `css-embedded` backend generates HTML with embedded stylesheets - (use the `css` backend for linked stylesheets). The css-embedded - backend output contains no linked images so the generated html files - are completely self contained. -- Bug fixes. - -Version 1.1 (2002-12-03) ------------------------- -- Added css (cascading style sheets) backend -- Implemented IndentedBlock document element. -- Tabsize command-line option has been deprecated in - favor of configuration file. -- Default indent width changed to zero. -- Added \{localdate} and \{localtime} substitution variables. -- Added optional [options] configuration file section with - fileextension, tabsize and indentsize options. -- Implemented \{authorinitials} substitution variable. -- Added https link type. -- Corrected [graphic] substitution from \{title} to \{caption} - in linuxdoc-article.conf configuration file. -- Fixed error that occurred when '==' title underline was - used. - -Version 1.0 (2002-11-25) ------------------------- -First AsciiDoc public release along with AsciiDoc web site -(http://www.methods.co.nz/asciidoc/) and SourceForge.net project registration -(https://sourceforge.net/projects/asciidoc/[]). - -// vim: set syntax=asciidoc: diff --git a/manual/src/bin/asciidoc/COPYING b/manual/src/bin/asciidoc/COPYING deleted file mode 100644 index a43ea2126fb6b..0000000000000 --- a/manual/src/bin/asciidoc/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/manual/src/bin/asciidoc/COPYRIGHT b/manual/src/bin/asciidoc/COPYRIGHT deleted file mode 100644 index 13273f351abb8..0000000000000 --- a/manual/src/bin/asciidoc/COPYRIGHT +++ /dev/null @@ -1,18 +0,0 @@ -Copyright (C) 2000-2007 Stuart Rackham - -Email: srackham@gmail.com - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at -your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -USA. diff --git a/manual/src/bin/asciidoc/INSTALL b/manual/src/bin/asciidoc/INSTALL deleted file mode 100644 index 16c325d687fd7..0000000000000 --- a/manual/src/bin/asciidoc/INSTALL +++ /dev/null @@ -1,235 +0,0 @@ - AsciiDoc Installation - - version 8.6.7, 17 March 2012 - - Note - The current version of AsciiDoc requires Python 2.4 or newer to run. If - you don’t already have an up-to-date version of Python installed it can - be downloaded from the official Python website - [1]http://www.python.org/. - __________________________________________________________________ - -1. Prerequisites - - See the [2]README page. - __________________________________________________________________ - -2. Installing from the Mercurial repository - - The AsciiDoc [3]Mercurial repository is hosted by [4]Google Code. To - browse the repository go to - [5]http://code.google.com/p/asciidoc/source/browse/. You can install - AsciiDoc from the repository if you don’t have an up to date packaged - version or want to get the latest version from the trunk: - * Make sure you have [6]Mercurial installed, you can check with: - $ hg --version - * Go to the directory you want to install AsciiDoc into and download - the repository. This example gets the 8.6.7 tagged release: - $ cd ~/bin - $ hg clone -r 8.6.7 https://asciidoc.googlecode.com/hg/ asciidoc-8.6.7 - - You now have two choices: you can run asciidoc locally from your - repository or you can use autoconf(1) and make(1) to perform a - system-wide install. - - 2.1. Running asciidoc from your local copy - - Create a symlink to the AsciiDoc script in a search PATH directory so - it’s easy to execute asciidoc from the command-line, for example: - $ ln -s ~/bin/asciidoc-8.6.7/asciidoc.py ~/bin/asciidoc - $ ln -s ~/bin/asciidoc-8.6.7/a2x.py ~/bin/a2x - - Use the Mercurial pull command to update your local AsciiDoc - repository. - - 2.2. Installing asciidoc for all users - - Create configure using autoconf(1); use configure to create the - Makefile; run make(1); build the man pages; install: - - $ autoconf - $ ./configure - $ make - $ sudo make install - - To uninstall: - - $ sudo make uninstall - __________________________________________________________________ - -3. Distribution tarball installation - - The distribution source tarballs can be downloaded from the SourceForge - [7]http://sourceforge.net/projects/asciidoc/. - - Note - Unless you are [8]installing on Microsoft Windows you should use the - tarball and not the zip file to install the the distribution (the - tarball contains symlinks). - - If your flavor or UNIX or Linux does not have a packaged AsciiDoc - distribution or if you prefer to install the latest AsciiDoc version - from source use the configure shell script in the tarball root - directory. - - The autoconf(1) generated configure script creates a make file that is - tailored for your system. To install: - $ tar -xzf asciidoc-8.6.7.tar.gz - $ cd asciidoc-8.6.7 - $ ./configure - $ sudo make install - - To install the documentation: - $ sudo make docs - - To uninstall AsciiDoc: - $ sudo make uninstall - - If Vim is installed on your system the AsciiDoc Vim syntax highlighter - and filetype detection scripts will be install in the global Vim - configuration file directory (asciidoc.vim in the syntax directory and - asciidoc_filetype.vim in the ftdetect directory). - __________________________________________________________________ - -4. Microsoft Windows installation - - AsciiDoc is developed and tested on Linux but there seem to be quite a - few people using it on Windows. To install AsciiDoc on Windows unzip - the distribution Zip file contents: - $ unzip asciidoc-8.6.7.zip - - This will create the folder asciidoc-8.6.7 containing the asciidoc.py - and a2x.py executables along with configuration files and - documentation. - - To generate DocBook based outputs (e.g. PDFs) you will also need a - working DocBook toolchain. Installing and configuring a DocBook - toolchain on Windows can be a challenge — this blog post explains - [9]How to Create Handsome PDF Documents Without Frustration using - [10]Cygwin, [11]dblatex and AsciiDoc. - __________________________________________________________________ - -5. Testing your installation - - Test out asciidoc by changing to the AsciiDoc application directory and - convert the User Guide document (./doc/asciidoc.txt) to XHTML - (./doc/asciidoc.html): - $ python asciidoc.py doc/asciidoc.txt - - [12]testasciidoc offers a more extensive set of conformance tests, - though you do need to create the test data before running the tests - (this in itself is a good post-install test): - $ python ./tests/testasciidoc.py update - - Now you can run the tests by executing this command: - $ python ./tests/testasciidoc.py run - - A full battery of tests can be run from the main.aap script in the - distribution root directory: - $ aap test - __________________________________________________________________ - -6. Building the distribution - - The AsciiDoc distribution is built using [13]A-A-P (a software build - system written by Bram Moolenaar). The AsciiDoc A-A-P scripts are: - - ./main.aap - Builds the distribution tarball and zip files, documentation and - example website. - - ./doc/main.aap - Builds distribution documentation. - - ./examples/website/main.aap - Builds AsciiDoc website. - - ./common.aap - Included in all scripts. - - To build the distribution tarball and zip files, documentation and - example website run A-A-P from the distribution root directory: - $ aap - __________________________________________________________________ - -7. Prepackaged AsciiDoc installation - - The following platform specific AsciiDoc packages are available: - - Debian GNU/Linux - If you use Debian or a Debian based distribution there’s an - [14]AsciiDoc Debian package available. Thanks to [15]Fredrik - Steen who built and maintains the Debian AsciiDoc package. - - Gentoo Linux - If you use Gentoo Linux there’s a [16]Gentoo AsciiDoc package - available. Thanks to [17]Brandon Philips for writing the ebuild. - - Fedora Linux - With help from Terje Røsten, Chris Wright added asciidoc to - Fedora Extras which is available in the default installation. To - install asciidoc execute the following command: - - $ yum install asciidoc - - Slackware Linux - John Calixto has created a Slackware package for AsciiDoc which - can be downloaded from [18]http://linuxpackages.net/. - - Ark Linux - [19]Bernhard Rosenkraenzer added AsciiDoc to Ark Linux — the - package is available from the Ark Linux repository at - [20]http://arklinux.osuosl.org/dockyard-devel/, so Ark Linux - users should just run apt-get install asciidoc. - - T2 Linux - [21]Christian Wiese added AsciiDoc to the [22]T2 Linux - repository at - [23]http://svn.exactcode.de/t2/trunk/package/textproc/asciidoc/. - To build and install the package on a T2 system, run - ./scripts/Emerge-Pkg asciidoc from within your T2 source - directory (default: /usr/src/t2-src). - - Red Hat Enterprise Linux, Fedora and CentOS packages - Dag Wieers has built AsciiDoc RPMs for a number of Red Hat based - distributions, they can be downloaded from - [24]http://dag.wieers.com/rpm/packages/asciidoc/. - - CSW Package for Sun Solaris - Ben Walton has created a CSW package for AsciiDoc, you can find - it here: [25]http://opencsw.org/packages/asciidoc. - - See also [26]Packager Notes in the AsciiDoc User Guide. - __________________________________________________________________ - - Version 8.6.7 - Last updated 2010-11-15 08:44:54 NZDT - -References - - 1. http://www.python.org/ - 2. file://localhost/tmp/lynxXXXXJGiksz/README.html - 3. http://www.selenic.com/mercurial/ - 4. http://code.google.com/ - 5. http://code.google.com/p/asciidoc/source/browse/ - 6. http://www.selenic.com/mercurial/ - 7. http://sourceforge.net/projects/asciidoc/ - 8. file://localhost/tmp/lynxXXXXJGiksz/L9199-2434TMP.html#X3 - 9. http://blog.rainwebs.net/2010/02/25/how-to-create-handsome-pdf-documents-without-frustration/ - 10. http://www.cygwin.com/ - 11. http://dblatex.sourceforge.net/ - 12. file://localhost/tmp/lynxXXXXJGiksz/testasciidoc.html - 13. http://www.a-a-p.org/ - 14. http://packages.debian.org/asciidoc - 15. mailto:stone@debian.org - 16. http://packages.gentoo.org/package/app-text/asciidoc - 17. mailto:brandon@ifup.org - 18. http://linuxpackages.net/ - 19. mailto:bero@arklinux.org - 20. http://arklinux.osuosl.org/dockyard-devel/ - 21. mailto:cw@ixplanet.de - 22. http://www.t2-project.org/ - 23. http://svn.exactcode.de/t2/trunk/package/textproc/asciidoc/ - 24. http://dag.wieers.com/rpm/packages/asciidoc/ - 25. http://opencsw.org/packages/asciidoc - 26. file://localhost/tmp/lynxXXXXJGiksz/userguide.html#X38 diff --git a/manual/src/bin/asciidoc/INSTALL.txt b/manual/src/bin/asciidoc/INSTALL.txt deleted file mode 100644 index eb07ddd93f288..0000000000000 --- a/manual/src/bin/asciidoc/INSTALL.txt +++ /dev/null @@ -1,227 +0,0 @@ -AsciiDoc Installation -===================== - -NOTE: The current version of AsciiDoc requires *Python 2.4 or newer* -to run. If you don't already have an up-to-date version of Python -installed it can be downloaded from the official Python website -http://www.python.org/. - - -Prerequisites -------------- -See the link:README.html[README] page. - - -Installing from the Mercurial repository ----------------------------------------- -The AsciiDoc http://www.selenic.com/mercurial/[Mercurial] repository -is hosted by http://code.google.com/[Google Code]. -To browse the repository go to -http://code.google.com/p/asciidoc/source/browse/. -You can install AsciiDoc from the repository if you don't have an up to -date packaged version or want to get the latest version from the trunk: - -- Make sure you have http://www.selenic.com/mercurial/[Mercurial] - installed, you can check with: - - $ hg --version - -- Go to the directory you want to install AsciiDoc into and download - the repository. This example gets the {revnumber} tagged release: - -[subs="attributes"] - $ cd ~/bin - $ hg clone -r {revnumber} https://asciidoc.googlecode.com/hg/ asciidoc-{revnumber} - -You now have two choices: you can run asciidoc locally from your -repository or you can use 'autoconf(1)' and 'make(1)' to perform a -system-wide install. - -Running asciidoc from your local copy -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Create a symlink to the AsciiDoc script in a search `PATH` directory -so it's easy to execute `asciidoc` from the command-line, for example: - -[subs="attributes"] - $ ln -s ~/bin/asciidoc-{revnumber}/asciidoc.py ~/bin/asciidoc - $ ln -s ~/bin/asciidoc-{revnumber}/a2x.py ~/bin/a2x - -Use the Mercurial `pull` command to update your local AsciiDoc repository. - -Installing asciidoc for all users -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Create `configure` using 'autoconf(1)'; use `configure` to create the -`Makefile`; run 'make(1)'; build the man pages; install: - ---------------------------------------------- -$ autoconf -$ ./configure -$ make -$ sudo make install ---------------------------------------------- - -To uninstall: - ---------------------------------------------- -$ sudo make uninstall ---------------------------------------------- - - -[[X1]] -Distribution tarball installation ---------------------------------- -The distribution source tarballs can be downloaded from the -SourceForge http://sourceforge.net/projects/asciidoc/. - -NOTE: Unless you are <> you should -use the tarball and not the zip file to install the the distribution -(the tarball contains symlinks). - -If your flavor or UNIX or Linux does not have a packaged AsciiDoc -distribution or if you prefer to install the latest AsciiDoc version -from source use the `configure` shell script in the tarball root -directory. - -The `autoconf(1)` generated `configure` script creates a make file -that is tailored for your system. To install: - -[subs="attributes"] - $ tar -xzf asciidoc-{revnumber}.tar.gz - $ cd asciidoc-{revnumber} - $ ./configure - $ sudo make install - -To install the documentation: - - $ sudo make docs - -To uninstall AsciiDoc: - - $ sudo make uninstall - -If Vim is installed on your system the AsciiDoc Vim syntax highlighter -and filetype detection scripts will be install in the global Vim -configuration file directory (`asciidoc.vim` in the `syntax` directory -and `asciidoc_filetype.vim` in the `ftdetect` directory). - - -[[X3]] -Microsoft Windows installation ------------------------------- -AsciiDoc is developed and tested on Linux but there seem to be quite a -few people using it on Windows. To install AsciiDoc on Windows unzip -the distribution Zip file contents: - -[subs="attributes"] - $ unzip asciidoc-{revnumber}.zip - -This will create the folder +asciidoc-{revnumber}+ containing the -`asciidoc.py` and `a2x.py` executables along with configuration files -and documentation. - -To generate DocBook based outputs (e.g. PDFs) you will also need a -working DocBook toolchain. Installing and configuring a DocBook -toolchain on Windows can be a challenge -- this blog post explains -http://blog.rainwebs.net/2010/02/25/how-to-create-handsome-pdf-documents-without-frustration/[How -to Create Handsome PDF Documents Without Frustration] using -http://www.cygwin.com/[Cygwin], -http://dblatex.sourceforge.net/[dblatex] and AsciiDoc. - - -Testing your installation -------------------------- -Test out asciidoc by changing to the AsciiDoc application directory -and convert the User Guide document (`./doc/asciidoc.txt`) to XHTML -(`./doc/asciidoc.html`): - - $ python asciidoc.py doc/asciidoc.txt - -link:testasciidoc.html[testasciidoc] offers a more extensive set of -conformance tests, though you do need to create the test data before -running the tests (this in itself is a good post-install test): - - $ python ./tests/testasciidoc.py update - -Now you can run the tests by executing this command: - - $ python ./tests/testasciidoc.py run - -A full battery of tests can be run from the `main.aap` script in the -distribution root directory: - - $ aap test - - -Building the distribution -------------------------- -The AsciiDoc distribution is built using http://www.a-a-p.org/[A-A-P] -(a software build system written by Bram Moolenaar). The AsciiDoc -A-A-P scripts are: - -`./main.aap`:: Builds the distribution tarball and zip files, -documentation and example website. -`./doc/main.aap`:: Builds distribution documentation. -`./examples/website/main.aap`:: Builds AsciiDoc website. -`./common.aap`:: Included in all scripts. - -To build the distribution tarball and zip files, documentation and -example website run A-A-P from the distribution root directory: - - $ aap - - -[[X2]] -Prepackaged AsciiDoc installation ---------------------------------- -The following platform specific AsciiDoc packages are available: - -*Debian GNU/Linux*:: - If you use Debian or a Debian based distribution there's an - http://packages.debian.org/asciidoc[AsciiDoc Debian package] - available. Thanks to mailto:stone@debian.org[Fredrik Steen] who - built and maintains the Debian AsciiDoc package. - -*Gentoo Linux*:: - If you use Gentoo Linux there's a - http://packages.gentoo.org/package/app-text/asciidoc[Gentoo AsciiDoc - package] available. Thanks to mailto:brandon@ifup.org[Brandon - Philips] for writing the ebuild. - -*Fedora Linux*:: - With help from Terje Røsten, Chris Wright added asciidoc to Fedora - Extras which is available in the default installation. To install - asciidoc execute the following command: - - $ yum install asciidoc - -*Slackware Linux*:: - John Calixto has created a Slackware package for AsciiDoc which can - be downloaded from http://linuxpackages.net/. - -*Ark Linux*:: - mailto:bero@arklinux.org[Bernhard Rosenkraenzer] added AsciiDoc to - Ark Linux -- the package is available from the Ark Linux repository - at http://arklinux.osuosl.org/dockyard-devel/, so Ark Linux users - should just run `apt-get install asciidoc`. - -*T2 Linux*:: - mailto:cw@ixplanet.de[Christian Wiese] added AsciiDoc to the - http://www.t2-project.org/[T2 Linux] repository at - http://svn.exactcode.de/t2/trunk/package/textproc/asciidoc/. To - build and install the package on a T2 system, run - `./scripts/Emerge-Pkg asciidoc` from within your T2 source directory - (default: `/usr/src/t2-src`). - -*Red Hat Enterprise Linux, Fedora and CentOS packages*:: - Dag Wieers has built AsciiDoc RPMs for a number of Red Hat based - distributions, they can be downloaded from - http://dag.wieers.com/rpm/packages/asciidoc/. - -*CSW Package for Sun Solaris*:: - Ben Walton has created a CSW package for AsciiDoc, you can find it - here: http://opencsw.org/packages/asciidoc. - -See also link:userguide.html#X38[Packager Notes] in the 'AsciiDoc User -Guide'. - - diff --git a/manual/src/bin/asciidoc/MANIFEST b/manual/src/bin/asciidoc/MANIFEST deleted file mode 100644 index 68eebb430644d..0000000000000 --- a/manual/src/bin/asciidoc/MANIFEST +++ /dev/null @@ -1,90 +0,0 @@ -a2x.py -asciidoc.py -asciidocapi.py -BUGS -BUGS.txt -MANIFEST -main.aap -common.aap -CHANGELOG -CHANGELOG.txt -asciidoc.conf -docbook45.conf -help.conf -html4.conf -html5.conf -lang-*.conf -latex.conf -slidy.conf -text.conf -wordpress.conf -xhtml11.conf -xhtml11-quirks.conf -COPYING -COPYRIGHT -dblatex/asciidoc-dblatex.sty -dblatex/asciidoc-dblatex.xsl -dblatex/dblatex-readme.txt -doc/a2x.1 -doc/book.epub -doc/asciidoc.1 -doc/asciidoc.conf -doc/article-docinfo.xml -doc/customers.csv -doc/images/ -doc/main.aap -doc/article.pdf -doc/latex-filter.pdf -doc/music-filter.pdf -doc/source-highlight-filter.pdf -doc/*.txt -doc/asciidoc.dict -docbook-xsl/*.txt -docbook-xsl/*.xsl -examples/website/main.aap -examples/website/build-website.sh -examples/website/*.css -examples/website/*.js -examples/website/customers.csv -examples/website/images/ -examples/website/layout?.conf -examples/website/*.txt -filters/code/code-filter.conf -filters/code/code-filter.py -filters/code/code-filter-readme.txt -filters/code/code-filter-test.txt -filters/latex/latex2png.py -filters/latex/latex-filter.conf -filters/music/music-filter.conf -filters/music/music2png.py -filters/music/music-filter-test.txt -filters/source/source-highlight-filter.conf -filters/source/source-highlight-filter-test.txt -filters/graphviz/graphviz-filter.conf -filters/graphviz/graphviz2png.py -filters/graphviz/asciidoc-graphviz-sample.txt -images/icons/callouts/*.png -images/icons/*.png -images/icons/README -images/smallnew.png -images/tiger.png -images/highlighter.png -INSTALL -INSTALL.txt -configure -configure.ac -Makefile.in -install-sh -javascripts/*.js -README -README.txt -stylesheets/*.css -tests/testasciidoc.py -tests/testasciidoc.conf -tests/asciidocapi.py -tests/data/*.conf -tests/data/*.txt -themes/flask/*.css -themes/volnitsky/*.css -vim/syntax/asciidoc.vim -vim/ftdetect/asciidoc_filetype.vim diff --git a/manual/src/bin/asciidoc/Makefile.in b/manual/src/bin/asciidoc/Makefile.in deleted file mode 100644 index d8672c3e2ffb7..0000000000000 --- a/manual/src/bin/asciidoc/Makefile.in +++ /dev/null @@ -1,185 +0,0 @@ -# -# Make file to install/uninstall AsciiDoc -# - -.NOTPARALLEL: - -INSTALL = @INSTALL@ -INSTALL_PROG = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -SED = @SED@ - -prefix = @prefix@ -exec_prefix = @exec_prefix@ -bindir = @bindir@ -datadir = @datadir@ -docdir = @docdir@ -sysconfdir = @sysconfdir@ -datarootdir = @datarootdir@ -mandir=@mandir@ -srcdir = @srcdir@ - -VPATH = @srcdir@ - -ASCIIDOCCONF = $(sysconfdir)/asciidoc - -prog = asciidoc.py a2x.py -progdir = $(bindir) - -vimdir = @sysconfdir@/vim - -manp = $(patsubst %1.txt,%1,$(wildcard doc/*.1.txt)) -manpdir = $(mandir)/man1 - -conf = $(wildcard *.conf) -confdir = $(ASCIIDOCCONF) - -filtersdir = $(ASCIIDOCCONF)/filters - -codefilter = filters/code/code-filter.py -codefilterdir = $(filtersdir)/code -codefilterconf = filters/code/code-filter.conf -codefilterconfdir = $(filtersdir)/code - -graphvizfilter = filters/graphviz/graphviz2png.py -graphvizfilterdir = $(filtersdir)/graphviz -graphvizfilterconf = filters/graphviz/graphviz-filter.conf -graphvizfilterconfdir = $(filtersdir)/graphviz - -musicfilter = filters/music/music2png.py -musicfilterdir = $(filtersdir)/music -musicfilterconf = filters/music/music-filter.conf -musicfilterconfdir = $(filtersdir)/music - -sourcefilterconf = filters/source/source-highlight-filter.conf -sourcefilterconfdir = $(filtersdir)/source - -latexfilter = filters/latex/latex2png.py -latexfilterdir = $(filtersdir)/latex -latexfilterconf = filters/latex/latex-filter.conf -latexfilterconfdir = $(filtersdir)/latex - -themesdir = $(ASCIIDOCCONF)/themes - -flasktheme = themes/flask/flask.css -flaskthemedir = $(themesdir)/flask - -volnitskytheme = themes/volnitsky/volnitsky.css -volnitskythemedir = $(themesdir)/volnitsky - -docbook = $(wildcard docbook-xsl/*.xsl) -docbookdir = $(ASCIIDOCCONF)/docbook-xsl - -dblatex = $(wildcard dblatex/*.xsl) $(wildcard dblatex/*.sty) -dblatexdir = $(ASCIIDOCCONF)/dblatex - -css = $(wildcard stylesheets/*.css) -cssdir = $(ASCIIDOCCONF)/stylesheets - -js = $(wildcard javascripts/*.js) -jsdir = $(ASCIIDOCCONF)/javascripts - -callouts = $(wildcard images/icons/callouts/*) -calloutsdir = $(ASCIIDOCCONF)/images/icons/callouts - -icons = $(wildcard images/icons/*.png) images/icons/README -iconsdir = $(ASCIIDOCCONF)/images/icons - -doc = $(wildcard README*) $(wildcard BUGS*) $(wildcard INSTALL*) $(wildcard CHANGELOG*) - -DATATARGETS = manp conf docbook dblatex css js callouts icons codefilterconf musicfilterconf sourcefilterconf graphvizfilterconf latexfilterconf flasktheme volnitskytheme -PROGTARGETS = prog codefilter musicfilter graphvizfilter latexfilter -TARGETS = $(DATATARGETS) $(PROGTARGETS) doc - -INSTDIRS = $(TARGETS:%=%dir) - -.PHONY: $(TARGETS) - -all: build - -# create directories used during the install -$(INSTDIRS): - $(INSTALL) -d $(DESTDIR)/$($@) - -$(PROGTARGETS): % : %dir - $(INSTALL_PROG) $($@) $(DESTDIR)/$($<)/ - -$(DATATARGETS): % : %dir - $(INSTALL_DATA) $($@) $(DESTDIR)/$($<)/ - -$(manp): %.1 : %.1.txt - python a2x.py -f manpage $< - -docs: - $(INSTALL) -d $(DESTDIR)/$(docdir) - $(INSTALL_DATA) $(doc) $(DESTDIR)/$(docdir) - $(INSTALL) -d $(DESTDIR)/$(docdir)/docbook-xsl - $(INSTALL_DATA) docbook-xsl/asciidoc-docbook-xsl.txt $(DESTDIR)/$(docdir)/docbook-xsl - $(INSTALL) -d $(DESTDIR)/$(docdir)/dblatex - $(INSTALL_DATA) dblatex/dblatex-readme.txt $(DESTDIR)/$(docdir)/dblatex - $(INSTALL) -d $(DESTDIR)/$(docdir)/stylesheets - $(INSTALL_DATA) $(css) $(DESTDIR)/$(docdir)/stylesheets - $(INSTALL) -d $(DESTDIR)/$(docdir)/javascripts - $(INSTALL_DATA) $(js) $(DESTDIR)/$(docdir)/javascripts - $(INSTALL) -d $(DESTDIR)/$(docdir)/images - ( cd images && \ - cp -R * $(DESTDIR)/$(docdir)/images ) - $(INSTALL) -d $(DESTDIR)/$(docdir)/doc - ( cd doc && \ - cp -R * $(DESTDIR)/$(docdir)/doc ) - $(INSTALL) -d $(DESTDIR)/$(docdir)/examples/website - ( cd examples/website && \ - cp -R * $(DESTDIR)/$(docdir)/examples/website ) - -progsymlink: - (cd $(DESTDIR)/$(progdir); ln -sf asciidoc.py asciidoc) - (cd $(DESTDIR)/$(progdir); ln -sf a2x.py a2x) - -fixconfpath: - @for f in $(prog); do \ - echo "Fixing CONF_DIR in $$f"; \ - $(SED) "s#^CONF_DIR = '.*'#CONF_DIR = '$(ASCIIDOCCONF)'#" $$f > $$f.out; \ - mv $$f.out $$f; \ - chmod +x $$f; \ - done - -install-vim: - @for d in $(DESTDIR)/$(vimdir) /etc/vim; do \ - if ! test -d $$d; then continue; fi ; \ - echo "installing Vim files in $$d" ; \ - $(INSTALL) -d $$d/syntax ; \ - $(INSTALL_DATA) vim/syntax/asciidoc.vim $$d/syntax ; \ - $(INSTALL) -d $$d/ftdetect ; \ - $(INSTALL_DATA) vim/ftdetect/asciidoc_filetype.vim $$d/ftdetect ; \ - done - -uninstall-vim: - @for d in $(DESTDIR)/$(vimdir) /etc/vim; do \ - if ! test -d $$d; then continue; fi ; \ - echo "uninstalling Vim files in $$d" ; \ - rm -f $$d/syntax/asciidoc.vim ; \ - rm -f $$d/ftdetect/asciidoc_filetype.vim ; \ - done - - -build: fixconfpath $(manp) - - -install: all $(PROGTARGETS) $(DATATARGETS) progsymlink install-vim - -uninstall: uninstall-vim - rm -f $(DESTDIR)/$(progdir)/asciidoc - rm -f $(DESTDIR)/$(progdir)/asciidoc.py - rm -f $(DESTDIR)/$(progdir)/a2x - rm -f $(DESTDIR)/$(progdir)/a2x.py - rm -f $(DESTDIR)/$(manpdir)/asciidoc.1 - rm -f $(DESTDIR)/$(manpdir)/a2x.1 - rm -rf $(DESTDIR)/$(confdir) - rm -rf $(DESTDIR)/$(docdir) - -clean: - rm -f $(manp) - -test: - @echo "Nothing to see here...Move along." diff --git a/manual/src/bin/asciidoc/README b/manual/src/bin/asciidoc/README deleted file mode 100644 index 7ba0afd964223..0000000000000 --- a/manual/src/bin/asciidoc/README +++ /dev/null @@ -1,45 +0,0 @@ - AsciiDoc README File - - version 8.6.7, 17 March 2012 - __________________________________________________________________ - -1. Prerequisites - - AsciiDoc is written in Python so you need a Python interpreter (version - 2.4 or later) to execute asciidoc(1). Python is installed by default in - most Linux distributions. You can download Python from the official - Python website [1]http://www.python.org. - __________________________________________________________________ - -2. Obtaining AsciiDoc - - Documentation and installation instructions are on the AsciiDoc website - [2]http://www.methods.co.nz/asciidoc/ - __________________________________________________________________ - -3. Tools - - Current AsciiDoc version tested on Xubuntu Linux 10.04 with: - * Python 2.6.5 - * DocBook XSL Stylesheets 1.76.1 - * xsltproc (libxml 20706, libxslt 10126 and libexslt 815). - * w3m 0.5.2 - * dblatex 0.3 - * FOP 0.95 - * A-A-P 1.091 - __________________________________________________________________ - -4. Copying - - Copyright © 2002-2011 Stuart Rackham. Free use of this software is - granted under the terms of the GNU General Public License version 2 - (GPLv2). - __________________________________________________________________ - - Version 8.6.7 - Last updated 2011-05-04 18:47:58 NZST - -References - - 1. http://www.python.org/ - 2. http://www.methods.co.nz/asciidoc/ diff --git a/manual/src/bin/asciidoc/README.txt b/manual/src/bin/asciidoc/README.txt deleted file mode 100644 index b53c7142e38c0..0000000000000 --- a/manual/src/bin/asciidoc/README.txt +++ /dev/null @@ -1,35 +0,0 @@ -AsciiDoc README File -==================== - -Prerequisites -------------- -AsciiDoc is written in Python so you need a Python interpreter -(version 2.4 or later) to execute asciidoc(1). Python is installed by -default in most Linux distributions. You can download Python from the -official Python website http://www.python.org. - - -Obtaining AsciiDoc ------------------- -Documentation and installation instructions are on the AsciiDoc -website http://www.methods.co.nz/asciidoc/ - - -Tools ------ -Current AsciiDoc version tested on Xubuntu Linux 10.04 with: - -- Python 2.6.5 -- DocBook XSL Stylesheets 1.76.1 -- xsltproc (libxml 20706, libxslt 10126 and libexslt 815). -- w3m 0.5.2 -- dblatex 0.3 -- FOP 0.95 -- A-A-P 1.091 - - -Copying -------- -Copyright (C) 2002-2011 Stuart Rackham. Free use of this software is -granted under the terms of the GNU General Public License version 2 -(GPLv2). diff --git a/manual/src/bin/asciidoc/a2x.py b/manual/src/bin/asciidoc/a2x.py deleted file mode 100755 index c0d01f1c2f85a..0000000000000 --- a/manual/src/bin/asciidoc/a2x.py +++ /dev/null @@ -1,960 +0,0 @@ -#!/usr/bin/env python -''' -a2x - A toolchain manager for AsciiDoc (converts Asciidoc text files to other - file formats) - -Copyright: Stuart Rackham (c) 2009 -License: MIT -Email: srackham@gmail.com - -''' - -import os -import fnmatch -import HTMLParser -import re -import shutil -import subprocess -import sys -import traceback -import urlparse -import zipfile -import xml.dom.minidom -import mimetypes - -PROG = os.path.basename(os.path.splitext(__file__)[0]) -VERSION = '8.6.7' - -# AsciiDoc global configuration file directory. -# NOTE: CONF_DIR is "fixed up" by Makefile -- don't rename or change syntax. -CONF_DIR = '/etc/asciidoc' - - -###################################################################### -# Default configuration file parameters. -###################################################################### - -# Optional environment variable dictionary passed to -# executing programs. If set to None the existing -# environment is used. -ENV = None - -# External executables. -ASCIIDOC = 'asciidoc' -XSLTPROC = 'xsltproc' -DBLATEX = 'dblatex' # pdf generation. -FOP = 'fop' # pdf generation (--fop option). -W3M = 'w3m' # text generation. -LYNX = 'lynx' # text generation (if no w3m). -XMLLINT = 'xmllint' # Set to '' to disable. -EPUBCHECK = 'epubcheck' # Set to '' to disable. -# External executable default options. -ASCIIDOC_OPTS = '' -DBLATEX_OPTS = '' -FOP_OPTS = '' -XSLTPROC_OPTS = '' -BACKEND_OPTS = '' - -###################################################################### -# End of configuration file parameters. -###################################################################### - - -##################################################################### -# Utility functions -##################################################################### - -OPTIONS = None # These functions read verbose and dry_run command options. - -def errmsg(msg): - sys.stderr.write('%s: %s\n' % (PROG,msg)) - -def warning(msg): - errmsg('WARNING: %s' % msg) - -def infomsg(msg): - print '%s: %s' % (PROG,msg) - -def die(msg, exit_code=1): - errmsg('ERROR: %s' % msg) - sys.exit(exit_code) - -def trace(): - """Print traceback to stderr.""" - errmsg('-'*60) - traceback.print_exc(file=sys.stderr) - errmsg('-'*60) - -def verbose(msg): - if OPTIONS.verbose or OPTIONS.dry_run: - infomsg(msg) - -class AttrDict(dict): - """ - Like a dictionary except values can be accessed as attributes i.e. obj.foo - can be used in addition to obj['foo']. - If self._default has been set then it will be returned if a non-existant - attribute is accessed (instead of raising an AttributeError). - """ - def __getattr__(self, key): - try: - return self[key] - except KeyError, k: - if self.has_key('_default'): - return self['_default'] - else: - raise AttributeError, k - def __setattr__(self, key, value): - self[key] = value - def __delattr__(self, key): - try: del self[key] - except KeyError, k: raise AttributeError, k - def __repr__(self): - return '' - def __getstate__(self): - return dict(self) - def __setstate__(self,value): - for k,v in value.items(): self[k]=v - -def isexecutable(file_name): - return os.path.isfile(file_name) and os.access(file_name, os.X_OK) - -def find_executable(file_name): - ''' - Search for executable file_name in the system PATH. - Return full path name or None if not found. - ''' - def _find_executable(file_name): - if os.path.split(file_name)[0] != '': - # file_name includes directory so don't search path. - if not isexecutable(file_name): - return None - else: - return file_name - for p in os.environ.get('PATH', os.defpath).split(os.pathsep): - f = os.path.join(p, file_name) - if isexecutable(f): - return os.path.realpath(f) - return None - if os.name == 'nt' and os.path.splitext(file_name)[1] == '': - for ext in ('.cmd','.bat','.exe'): - result = _find_executable(file_name + ext) - if result: break - else: - result = _find_executable(file_name) - return result - -def write_file(filename, data, mode='w'): - f = open(filename, mode) - try: - f.write(data) - finally: - f.close() - -def read_file(filename, mode='r'): - f = open(filename, mode) - try: - return f.read() - finally: - f.close() - -def shell_cd(path): - verbose('chdir %s' % path) - if not OPTIONS.dry_run: - os.chdir(path) - -def shell_makedirs(path): - if os.path.isdir(path): - return - verbose('creating %s' % path) - if not OPTIONS.dry_run: - os.makedirs(path) - -def shell_copy(src, dst): - verbose('copying "%s" to "%s"' % (src,dst)) - if not OPTIONS.dry_run: - shutil.copy(src, dst) - -def shell_rm(path): - if not os.path.exists(path): - return - verbose('deleting %s' % path) - if not OPTIONS.dry_run: - os.unlink(path) - -def shell_rmtree(path): - if not os.path.isdir(path): - return - verbose('deleting %s' % path) - if not OPTIONS.dry_run: - shutil.rmtree(path) - -def shell(cmd, raise_error=True): - ''' - Execute command cmd in shell and return tuple - (stdoutdata, stderrdata, returncode). - If raise_error is True then a non-zero return terminates the application. - ''' - if os.name == 'nt': - # TODO: this is probably unnecessary, see: - # http://groups.google.com/group/asciidoc/browse_frm/thread/9442ee0c419f1242 - # Windows doesn't like running scripts directly so explicitly - # specify python interpreter. - # Extract first (quoted or unquoted) argument. - mo = re.match(r'^\s*"\s*(?P[^"]+)\s*"', cmd) - if not mo: - mo = re.match(r'^\s*(?P[^ ]+)', cmd) - if mo.group('arg0').endswith('.py'): - cmd = 'python ' + cmd - # Remove redundant quoting -- this is not just cosmetic, - # quoting seems to dramatically decrease the allowed command - # length in Windows XP. - cmd = re.sub(r'"([^ ]+?)"', r'\1', cmd) - verbose('executing: %s' % cmd) - if OPTIONS.dry_run: - return - stdout = stderr = subprocess.PIPE - try: - popen = subprocess.Popen(cmd, stdout=stdout, stderr=stderr, - shell=True, env=ENV) - except OSError, e: - die('failed: %s: %s' % (cmd, e)) - stdoutdata, stderrdata = popen.communicate() - if OPTIONS.verbose: - print stdoutdata - print stderrdata - if popen.returncode != 0 and raise_error: - die('%s returned non-zero exit status %d' % (cmd, popen.returncode)) - return (stdoutdata, stderrdata, popen.returncode) - -def find_resources(files, tagname, attrname, filter=None): - ''' - Search all files and return a list of local URIs from attrname attribute - values in tagname tags. - Handles HTML open and XHTML closed tags. - Non-local URIs are skipped. - files can be a file name or a list of file names. - The filter function takes a dictionary of tag attributes and returns True if - the URI is to be included. - ''' - class FindResources(HTMLParser.HTMLParser): - # Nested parser class shares locals with enclosing function. - def handle_startendtag(self, tag, attrs): - self.handle_starttag(tag, attrs) - def handle_starttag(self, tag, attrs): - attrs = dict(attrs) - if tag == tagname and (filter is None or filter(attrs)): - # Accept only local URIs. - uri = urlparse.urlparse(attrs[attrname]) - if uri[0] in ('','file') and not uri[1] and uri[2]: - result.append(uri[2]) - if isinstance(files, str): - files = [files] - result = [] - for filename in files: - verbose('finding resources in: %s' % filename) - if OPTIONS.dry_run: - continue - parser = FindResources() - # HTMLParser has problems with non-ASCII strings. - # See http://bugs.python.org/issue3932 - contents = read_file(filename) - mo = re.search(r'\A<\?xml.* encoding="(.*?)"', contents) - if mo: - encoding = mo.group(1) - parser.feed(contents.decode(encoding)) - else: - parser.feed(contents) - parser.close() - result = list(set(result)) # Drop duplicate values. - result.sort() - return result - -# NOT USED. -def copy_files(files, src_dir, dst_dir): - ''' - Copy list of relative file names from src_dir to dst_dir. - ''' - for filename in files: - filename = os.path.normpath(filename) - if os.path.isabs(filename): - continue - src = os.path.join(src_dir, filename) - dst = os.path.join(dst_dir, filename) - if not os.path.exists(dst): - if not os.path.isfile(src): - warning('missing file: %s' % src) - continue - dstdir = os.path.dirname(dst) - shell_makedirs(dstdir) - shell_copy(src, dst) - -def find_files(path, pattern): - ''' - Return list of file names matching pattern in directory path. - ''' - result = [] - for (p,dirs,files) in os.walk(path): - for f in files: - if fnmatch.fnmatch(f, pattern): - result.append(os.path.normpath(os.path.join(p,f))) - return result - -def exec_xsltproc(xsl_file, xml_file, dst_dir, opts = ''): - cwd = os.getcwd() - shell_cd(dst_dir) - try: - shell('"%s" %s "%s" "%s"' % (XSLTPROC, opts, xsl_file, xml_file)) - finally: - shell_cd(cwd) - -def get_source_options(asciidoc_file): - ''' - Look for a2x command options in AsciiDoc source file. - Limitation: options cannot contain double-quote characters. - ''' - def parse_options(): - # Parse options to result sequence. - inquotes = False - opt = '' - for c in options: - if c == '"': - if inquotes: - result.append(opt) - opt = '' - inquotes = False - else: - inquotes = True - elif c == ' ': - if inquotes: - opt += c - elif opt: - result.append(opt) - opt = '' - else: - opt += c - if opt: - result.append(opt) - - result = [] - if os.path.isfile(asciidoc_file): - options = '' - f = open(asciidoc_file) - try: - for line in f: - mo = re.search(r'^//\s*a2x:', line) - if mo: - options += ' ' + line[mo.end():].strip() - finally: - f.close() - parse_options() - return result - - -##################################################################### -# Application class -##################################################################### - -class A2X(AttrDict): - ''' - a2x options and conversion functions. - ''' - - def execute(self): - ''' - Process a2x command. - ''' - self.process_options() - # Append configuration file options. - self.asciidoc_opts += ' ' + ASCIIDOC_OPTS - self.dblatex_opts += ' ' + DBLATEX_OPTS - self.fop_opts += ' ' + FOP_OPTS - self.xsltproc_opts += ' ' + XSLTPROC_OPTS - self.backend_opts += ' ' + BACKEND_OPTS - # Execute to_* functions. - if self.backend: - self.to_backend() - else: - self.__getattribute__('to_'+self.format)() - if not (self.keep_artifacts or self.format == 'docbook' or self.skip_asciidoc): - shell_rm(self.dst_path('.xml')) - - def load_conf(self): - ''' - Load a2x configuration file from default locations and --conf-file - option. - ''' - global ASCIIDOC - CONF_FILE = 'a2x.conf' - a2xdir = os.path.dirname(os.path.realpath(__file__)) - conf_files = [] - # From a2x.py directory. - conf_files.append(os.path.join(a2xdir, CONF_FILE)) - # If the asciidoc executable and conf files are in the a2x directory - # then use the local copy of asciidoc and skip the global a2x conf. - asciidoc = os.path.join(a2xdir, 'asciidoc.py') - asciidoc_conf = os.path.join(a2xdir, 'asciidoc.conf') - if os.path.isfile(asciidoc) and os.path.isfile(asciidoc_conf): - self.asciidoc = asciidoc - else: - self.asciidoc = None - # From global conf directory. - conf_files.append(os.path.join(CONF_DIR, CONF_FILE)) - # From $HOME directory. - home_dir = os.environ.get('HOME') - if home_dir is not None: - conf_files.append(os.path.join(home_dir, '.asciidoc', CONF_FILE)) - # If asciidoc is not local to a2x then search the PATH. - if not self.asciidoc: - self.asciidoc = find_executable(ASCIIDOC) - if not self.asciidoc: - die('unable to find asciidoc: %s' % ASCIIDOC) - # From backend plugin directory. - if self.backend is not None: - stdout = shell(self.asciidoc + ' --backend list')[0] - backends = [(i, os.path.split(i)[1]) for i in stdout.splitlines()] - backend_dir = [i[0] for i in backends if i[1] == self.backend] - if len(backend_dir) == 0: - die('missing %s backend' % self.backend) - if len(backend_dir) > 1: - die('more than one %s backend' % self.backend) - verbose('found %s backend directory: %s' % - (self.backend, backend_dir[0])) - conf_files.append(os.path.join(backend_dir[0], 'a2x-backend.py')) - # From --conf-file option. - if self.conf_file is not None: - if not os.path.isfile(self.conf_file): - die('missing configuration file: %s' % self.conf_file) - conf_files.append(self.conf_file) - # From --xsl-file option. - if self.xsl_file is not None: - if not os.path.isfile(self.xsl_file): - die('missing XSL file: %s' % self.xsl_file) - self.xsl_file = os.path.abspath(self.xsl_file) - # Load ordered files. - for f in conf_files: - if os.path.isfile(f): - verbose('loading configuration file: %s' % f) - execfile(f, globals()) - - def process_options(self): - ''' - Validate and command options and set defaults. - ''' - if not os.path.isfile(self.asciidoc_file): - die('missing SOURCE_FILE: %s' % self.asciidoc_file) - self.asciidoc_file = os.path.abspath(self.asciidoc_file) - if not self.destination_dir: - self.destination_dir = os.path.dirname(self.asciidoc_file) - else: - if not os.path.isdir(self.destination_dir): - die('missing --destination-dir: %s' % self.destination_dir) - self.destination_dir = os.path.abspath(self.destination_dir) - self.resource_dirs = [] - self.resource_files = [] - if self.resource_manifest: - if not os.path.isfile(self.resource_manifest): - die('missing --resource-manifest: %s' % self.resource_manifest) - f = open(self.resource_manifest) - try: - for r in f: - self.resources.append(r.strip()) - finally: - f.close() - for r in self.resources: - r = os.path.expanduser(r) - r = os.path.expandvars(r) - if r.endswith('/') or r.endswith('\\'): - if os.path.isdir(r): - self.resource_dirs.append(r) - else: - die('missing resource directory: %s' % r) - elif os.path.isdir(r): - self.resource_dirs.append(r) - elif r.startswith('.') and '=' in r: - ext, mimetype = r.split('=') - mimetypes.add_type(mimetype, ext) - else: - self.resource_files.append(r) - for p in (os.path.dirname(self.asciidoc), CONF_DIR): - for d in ('images','stylesheets'): - d = os.path.join(p,d) - if os.path.isdir(d): - self.resource_dirs.append(d) - verbose('resource files: %s' % self.resource_files) - verbose('resource directories: %s' % self.resource_dirs) - if not self.doctype and self.format == 'manpage': - self.doctype = 'manpage' - if self.doctype: - self.asciidoc_opts += ' --doctype %s' % self.doctype - for attr in self.attributes: - self.asciidoc_opts += ' --attribute "%s"' % attr -# self.xsltproc_opts += ' --nonet' - if self.verbose: - self.asciidoc_opts += ' --verbose' - self.dblatex_opts += ' -V' - if self.icons or self.icons_dir: - params = [ - 'callout.graphics 1', - 'navig.graphics 1', - 'admon.textlabel 0', - 'admon.graphics 1', - ] - if self.icons_dir: - params += [ - 'admon.graphics.path "%s/"' % self.icons_dir, - 'callout.graphics.path "%s/callouts/"' % self.icons_dir, - 'navig.graphics.path "%s/"' % self.icons_dir, - ] - else: - params = [ - 'callout.graphics 0', - 'navig.graphics 0', - 'admon.textlabel 1', - 'admon.graphics 0', - ] - if self.stylesheet: - params += ['html.stylesheet "%s"' % self.stylesheet] - if self.format == 'htmlhelp': - params += ['htmlhelp.chm "%s"' % self.basename('.chm'), - 'htmlhelp.hhp "%s"' % self.basename('.hhp'), - 'htmlhelp.hhk "%s"' % self.basename('.hhk'), - 'htmlhelp.hhc "%s"' % self.basename('.hhc')] - if self.doctype == 'book': - params += ['toc.section.depth 1'] - # Books are chunked at chapter level. - params += ['chunk.section.depth 0'] - for o in params: - if o.split()[0]+' ' not in self.xsltproc_opts: - self.xsltproc_opts += ' --stringparam ' + o - if self.fop_opts: - self.fop = True - if os.path.splitext(self.asciidoc_file)[1].lower() == '.xml': - self.skip_asciidoc = True - else: - self.skip_asciidoc = False - - def dst_path(self, ext): - ''' - Return name of file or directory in the destination directory with - the same name as the asciidoc source file but with extension ext. - ''' - return os.path.join(self.destination_dir, self.basename(ext)) - - def basename(self, ext): - ''' - Return the base name of the asciidoc source file but with extension - ext. - ''' - return os.path.basename(os.path.splitext(self.asciidoc_file)[0]) + ext - - def asciidoc_conf_file(self, path): - ''' - Return full path name of file in asciidoc configuration files directory. - Search first the directory containing the asciidoc executable then - the global configuration file directory. - ''' - f = os.path.join(os.path.dirname(self.asciidoc), path) - if not os.path.isfile(f): - f = os.path.join(CONF_DIR, path) - if not os.path.isfile(f): - die('missing configuration file: %s' % f) - return os.path.normpath(f) - - def xsl_stylesheet(self, file_name=None): - ''' - Return full path name of file in asciidoc docbook-xsl configuration - directory. - If an XSL file was specified with the --xsl-file option then it is - returned. - ''' - if self.xsl_file is not None: - return self.xsl_file - if not file_name: - file_name = self.format + '.xsl' - return self.asciidoc_conf_file(os.path.join('docbook-xsl', file_name)) - - def copy_resources(self, html_files, src_dir, dst_dir, resources=[]): - ''' - Search html_files for images and CSS resource URIs (html_files can be a - list of file names or a single file name). - Copy them from the src_dir to the dst_dir. - If not found in src_dir then recursively search all specified - resource directories. - Optional additional resources files can be passed in the resources list. - ''' - resources = resources[:] - resources += find_resources(html_files, 'link', 'href', - lambda attrs: attrs.get('type') == 'text/css') - resources += find_resources(html_files, 'img', 'src') - resources += self.resource_files - resources = list(set(resources)) # Drop duplicates. - resources.sort() - for f in resources: - if '=' in f: - src, dst = f.split('=') - if not dst: - dst = src - else: - src = dst = f - src = os.path.normpath(src) - dst = os.path.normpath(dst) - if os.path.isabs(dst): - die('absolute resource file name: %s' % dst) - if dst.startswith(os.pardir): - die('resource file outside destination directory: %s' % dst) - src = os.path.join(src_dir, src) - dst = os.path.join(dst_dir, dst) - if not os.path.isfile(src): - for d in self.resource_dirs: - d = os.path.join(src_dir, d) - found = find_files(d, os.path.basename(src)) - if found: - src = found[0] - break - else: - if not os.path.isfile(dst): - die('missing resource: %s' % src) - continue - # Arrive here if resource file has been found. - if os.path.normpath(src) != os.path.normpath(dst): - dstdir = os.path.dirname(dst) - shell_makedirs(dstdir) - shell_copy(src, dst) - - def to_backend(self): - ''' - Convert AsciiDoc source file to a backend output file using the global - 'to_' function (loaded from backend plugin a2x-backend.py - file). - Executes the global function in an A2X class instance context. - ''' - eval('to_%s(self)' % self.backend) - - def to_docbook(self): - ''' - Use asciidoc to convert asciidoc_file to DocBook. - args is a string containing additional asciidoc arguments. - ''' - docbook_file = self.dst_path('.xml') - if self.skip_asciidoc: - if not os.path.isfile(docbook_file): - die('missing docbook file: %s' % docbook_file) - return - shell('"%s" --backend docbook -a "a2x-format=%s" %s --out-file "%s" "%s"' % - (self.asciidoc, self.format, self.asciidoc_opts, docbook_file, self.asciidoc_file)) - if not self.no_xmllint and XMLLINT: - shell('"%s" --nonet --noout --valid "%s"' % (XMLLINT, docbook_file)) - - def to_xhtml(self): - self.to_docbook() - docbook_file = self.dst_path('.xml') - xhtml_file = self.dst_path('.html') - opts = '%s --output "%s"' % (self.xsltproc_opts, xhtml_file) - exec_xsltproc(self.xsl_stylesheet(), docbook_file, self.destination_dir, opts) - src_dir = os.path.dirname(self.asciidoc_file) - self.copy_resources(xhtml_file, src_dir, self.destination_dir) - - def to_manpage(self): - self.to_docbook() - docbook_file = self.dst_path('.xml') - opts = self.xsltproc_opts - exec_xsltproc(self.xsl_stylesheet(), docbook_file, self.destination_dir, opts) - - def to_pdf(self): - if self.fop: - self.exec_fop() - else: - self.exec_dblatex() - - def exec_fop(self): - self.to_docbook() - docbook_file = self.dst_path('.xml') - xsl = self.xsl_stylesheet('fo.xsl') - fo = self.dst_path('.fo') - pdf = self.dst_path('.pdf') - opts = '%s --output "%s"' % (self.xsltproc_opts, fo) - exec_xsltproc(xsl, docbook_file, self.destination_dir, opts) - shell('"%s" %s -fo "%s" -pdf "%s"' % (FOP, self.fop_opts, fo, pdf)) - if not self.keep_artifacts: - shell_rm(fo) - - def exec_dblatex(self): - self.to_docbook() - docbook_file = self.dst_path('.xml') - xsl = self.asciidoc_conf_file(os.path.join('dblatex','asciidoc-dblatex.xsl')) - sty = self.asciidoc_conf_file(os.path.join('dblatex','asciidoc-dblatex.sty')) - shell('"%s" -t %s -p "%s" -s "%s" %s "%s"' % - (DBLATEX, self.format, xsl, sty, self.dblatex_opts, docbook_file)) - - def to_dvi(self): - self.exec_dblatex() - - def to_ps(self): - self.exec_dblatex() - - def to_tex(self): - self.exec_dblatex() - - def to_htmlhelp(self): - self.to_chunked() - - def to_chunked(self): - self.to_docbook() - docbook_file = self.dst_path('.xml') - opts = self.xsltproc_opts - xsl_file = self.xsl_stylesheet() - if self.format == 'chunked': - dst_dir = self.dst_path('.chunked') - elif self.format == 'htmlhelp': - dst_dir = self.dst_path('.htmlhelp') - if not 'base.dir ' in opts: - opts += ' --stringparam base.dir "%s/"' % os.path.basename(dst_dir) - # Create content. - shell_rmtree(dst_dir) - shell_makedirs(dst_dir) - exec_xsltproc(xsl_file, docbook_file, self.destination_dir, opts) - html_files = find_files(dst_dir, '*.html') - src_dir = os.path.dirname(self.asciidoc_file) - self.copy_resources(html_files, src_dir, dst_dir) - - def update_epub_manifest(self, opf_file): - ''' - Scan the OEBPS directory for any files that have not been registered in - the OPF manifest then add them to the manifest. - ''' - opf_dir = os.path.dirname(opf_file) - resource_files = [] - for (p,dirs,files) in os.walk(os.path.dirname(opf_file)): - for f in files: - f = os.path.join(p,f) - if os.path.isfile(f): - assert f.startswith(opf_dir) - f = '.' + f[len(opf_dir):] - f = os.path.normpath(f) - if f not in ['content.opf']: - resource_files.append(f) - opf = xml.dom.minidom.parseString(read_file(opf_file)) - manifest_files = [] - manifest = opf.getElementsByTagName('manifest')[0] - for el in manifest.getElementsByTagName('item'): - f = el.getAttribute('href') - f = os.path.normpath(f) - manifest_files.append(f) - count = 0 - for f in resource_files: - if f not in manifest_files: - count += 1 - verbose('adding to manifest: %s' % f) - item = opf.createElement('item') - item.setAttribute('href', f.replace(os.path.sep, '/')) - item.setAttribute('id', 'a2x-%d' % count) - mimetype = mimetypes.guess_type(f)[0] - if mimetype is None: - die('unknown mimetype: %s' % f) - item.setAttribute('media-type', mimetype) - manifest.appendChild(item) - if count > 0: - write_file(opf_file, opf.toxml()) - - def to_epub(self): - self.to_docbook() - xsl_file = self.xsl_stylesheet() - docbook_file = self.dst_path('.xml') - epub_file = self.dst_path('.epub') - build_dir = epub_file + '.d' - shell_rmtree(build_dir) - shell_makedirs(build_dir) - # Create content. - exec_xsltproc(xsl_file, docbook_file, build_dir, self.xsltproc_opts) - # Copy resources referenced in the OPF and resources referenced by the - # generated HTML (in theory DocBook XSL should ensure they are - # identical but this is not always the case). - src_dir = os.path.dirname(self.asciidoc_file) - dst_dir = os.path.join(build_dir, 'OEBPS') - opf_file = os.path.join(dst_dir, 'content.opf') - opf_resources = find_resources(opf_file, 'item', 'href') - html_files = find_files(dst_dir, '*.html') - self.copy_resources(html_files, src_dir, dst_dir, opf_resources) - # Register any unregistered resources. - self.update_epub_manifest(opf_file) - # Build epub archive. - cwd = os.getcwd() - shell_cd(build_dir) - try: - if not self.dry_run: - zip = zipfile.ZipFile(epub_file, 'w') - try: - # Create and add uncompressed mimetype file. - verbose('archiving: mimetype') - write_file('mimetype', 'application/epub+zip') - zip.write('mimetype', compress_type=zipfile.ZIP_STORED) - # Compress all remaining files. - for (p,dirs,files) in os.walk('.'): - for f in files: - f = os.path.normpath(os.path.join(p,f)) - if f != 'mimetype': - verbose('archiving: %s' % f) - zip.write(f, compress_type=zipfile.ZIP_DEFLATED) - finally: - zip.close() - verbose('created archive: %s' % epub_file) - finally: - shell_cd(cwd) - if not self.keep_artifacts: - shell_rmtree(build_dir) - if self.epubcheck and EPUBCHECK: - if not find_executable(EPUBCHECK): - warning('epubcheck skipped: unable to find executable: %s' % EPUBCHECK) - else: - shell('"%s" "%s"' % (EPUBCHECK, epub_file)) - - def to_text(self): - text_file = self.dst_path('.text') - html_file = self.dst_path('.text.html') - if self.lynx: - shell('"%s" %s --conf-file "%s" -b html4 -a "a2x-format=%s" -o "%s" "%s"' % - (self.asciidoc, self.asciidoc_opts, self.asciidoc_conf_file('text.conf'), - self.format, html_file, self.asciidoc_file)) - shell('"%s" -dump "%s" > "%s"' % - (LYNX, html_file, text_file)) - else: - # Use w3m(1). - self.to_docbook() - docbook_file = self.dst_path('.xml') - opts = '%s --output "%s"' % (self.xsltproc_opts, html_file) - exec_xsltproc(self.xsl_stylesheet(), docbook_file, - self.destination_dir, opts) - shell('"%s" -cols 70 -dump -T text/html -no-graph "%s" > "%s"' % - (W3M, html_file, text_file)) - if not self.keep_artifacts: - shell_rm(html_file) - - -##################################################################### -# Script main line. -##################################################################### - -if __name__ == '__main__': - description = '''A toolchain manager for AsciiDoc (converts Asciidoc text files to other file formats)''' - from optparse import OptionParser - parser = OptionParser(usage='usage: %prog [OPTIONS] SOURCE_FILE', - version='%s %s' % (PROG,VERSION), - description=description) - parser.add_option('-a', '--attribute', - action='append', dest='attributes', default=[], metavar='ATTRIBUTE', - help='set asciidoc attribute value') - parser.add_option('--asciidoc-opts', - action='append', dest='asciidoc_opts', default=[], - metavar='ASCIIDOC_OPTS', help='asciidoc options') - #DEPRECATED - parser.add_option('--copy', - action='store_true', dest='copy', default=False, - help='DEPRECATED: does nothing') - parser.add_option('--conf-file', - dest='conf_file', default=None, metavar='CONF_FILE', - help='configuration file') - parser.add_option('-D', '--destination-dir', - action='store', dest='destination_dir', default=None, metavar='PATH', - help='output directory (defaults to SOURCE_FILE directory)') - parser.add_option('-d','--doctype', - action='store', dest='doctype', metavar='DOCTYPE', - choices=('article','manpage','book'), - help='article, manpage, book') - parser.add_option('-b','--backend', - action='store', dest='backend', metavar='BACKEND', - help='name of backend plugin') - parser.add_option('--epubcheck', - action='store_true', dest='epubcheck', default=False, - help='check EPUB output with epubcheck') - parser.add_option('-f','--format', - action='store', dest='format', metavar='FORMAT', default = 'pdf', - choices=('chunked','epub','htmlhelp','manpage','pdf', 'text', - 'xhtml','dvi','ps','tex','docbook'), - help='chunked, epub, htmlhelp, manpage, pdf, text, xhtml, dvi, ps, tex, docbook') - parser.add_option('--icons', - action='store_true', dest='icons', default=False, - help='use admonition, callout and navigation icons') - parser.add_option('--icons-dir', - action='store', dest='icons_dir', - default=None, metavar='PATH', - help='admonition and navigation icon directory') - parser.add_option('-k', '--keep-artifacts', - action='store_true', dest='keep_artifacts', default=False, - help='do not delete temporary build files') - parser.add_option('--lynx', - action='store_true', dest='lynx', default=False, - help='use lynx to generate text files') - parser.add_option('-L', '--no-xmllint', - action='store_true', dest='no_xmllint', default=False, - help='do not check asciidoc output with xmllint') - parser.add_option('-n','--dry-run', - action='store_true', dest='dry_run', default=False, - help='just print the commands that would have been executed') - parser.add_option('-r','--resource', - action='append', dest='resources', default=[], - metavar='PATH', - help='resource file or directory containing resource files') - parser.add_option('-m', '--resource-manifest', - action='store', dest='resource_manifest', default=None, metavar='FILE', - help='read resources from FILE') - #DEPRECATED - parser.add_option('--resource-dir', - action='append', dest='resources', default=[], - metavar='PATH', - help='DEPRECATED: use --resource') - #DEPRECATED - parser.add_option('-s','--skip-asciidoc', - action='store_true', dest='skip_asciidoc', default=False, - help='DEPRECATED: redundant') - parser.add_option('--stylesheet', - action='store', dest='stylesheet', default=None, - metavar='STYLESHEET', - help='HTML CSS stylesheet file name') - #DEPRECATED - parser.add_option('--safe', - action='store_true', dest='safe', default=False, - help='DEPRECATED: does nothing') - parser.add_option('--dblatex-opts', - action='append', dest='dblatex_opts', default=[], - metavar='DBLATEX_OPTS', help='dblatex options') - parser.add_option('--backend-opts', - action='append', dest='backend_opts', default=[], - metavar='BACKEND_OPTS', help='backend plugin options') - parser.add_option('--fop', - action='store_true', dest='fop', default=False, - help='use FOP to generate PDF files') - parser.add_option('--fop-opts', - action='append', dest='fop_opts', default=[], - metavar='FOP_OPTS', help='options for FOP pdf generation') - parser.add_option('--xsltproc-opts', - action='append', dest='xsltproc_opts', default=[], - metavar='XSLTPROC_OPTS', help='xsltproc options for XSL stylesheets') - parser.add_option('--xsl-file', - action='store', dest='xsl_file', metavar='XSL_FILE', - help='custom XSL stylesheet') - parser.add_option('-v', '--verbose', - action='count', dest='verbose', default=0, - help='increase verbosity') - if len(sys.argv) == 1: - parser.parse_args(['--help']) - source_options = get_source_options(sys.argv[-1]) - argv = source_options + sys.argv[1:] - opts, args = parser.parse_args(argv) - if len(args) != 1: - parser.error('incorrect number of arguments') - opts.asciidoc_opts = ' '.join(opts.asciidoc_opts) - opts.dblatex_opts = ' '.join(opts.dblatex_opts) - opts.fop_opts = ' '.join(opts.fop_opts) - opts.xsltproc_opts = ' '.join(opts.xsltproc_opts) - opts.backend_opts = ' '.join(opts.backend_opts) - opts = eval(str(opts)) # Convert optparse.Values to dict. - a2x = A2X(opts) - OPTIONS = a2x # verbose and dry_run used by utility functions. - verbose('args: %r' % argv) - a2x.asciidoc_file = args[0] - try: - a2x.load_conf() - a2x.execute() - except KeyboardInterrupt: - exit(1) diff --git a/manual/src/bin/asciidoc/asciidoc.conf b/manual/src/bin/asciidoc/asciidoc.conf deleted file mode 100644 index 03c0934cb4763..0000000000000 --- a/manual/src/bin/asciidoc/asciidoc.conf +++ /dev/null @@ -1,617 +0,0 @@ -# -# asciidoc.conf -# -# Asciidoc global configuration file. -# Contains backend independent configuration settings that are applied to all -# AsciiDoc documents. -# - -[miscellaneous] -tabsize=8 -textwidth=70 -newline=\r\n - -[attributes] -backend-alias-html=xhtml11 -backend-alias-docbook=docbook45 -toclevels=2 -toc-placement=auto -sectids= -iconsdir=./images/icons -encoding=UTF-8 -# Uncomment to use xhtml11 quirks mode CSS. -#quirks= -# Uncomment to use the Pygments source highlighter instead of GNU highlighter. -#pygments= -# Uncomment to use deprecated quote attributes. -#deprecated-quotes= -empty= -sp=" " -# Attribute and AttributeList element patterns. -attributeentry-pattern=^:(?P\w[^.]*?)(\.(?P.*?))?:(\s+(?P.*))?$ -attributelist-pattern=(?u)(^\[\[(?P[\w_:][\w_:.-]*)(,(?P.*?))?\]\]$)|(^\[(?P.*)\]$) -# Substitution attributes for escaping AsciiDoc processing. -amp=& -lt=< -gt=> -brvbar=| -nbsp=  -zwsp=​ -wj=⁠ -deg=° -backslash=\ -two-colons=:: -two-semicolons=;; -# DEPRECATED: underscore attribute names. -two_colons=:: -two_semicolons=;; -# Left and right single and double quote characters. -# See http://en.wikipedia.org/wiki/Non-English_usage_of_quotation_marks -lsquo=‘ -rsquo=’ -ldquo=“ -rdquo=” - -[titles] -subs=specialcharacters,quotes,replacements,macros,attributes,replacements2 -# Double-line title pattern and underlines. -sectiontitle=^(?P.*?)$ -underlines="==","--","~~","^^","++" -# Single-line title patterns. -sect0=^= +(?P<title>[\S].*?)( +=)?$ -sect1=^== +(?P<title>[\S].*?)( +==)?$ -sect2=^=== +(?P<title>[\S].*?)( +===)?$ -sect3=^==== +(?P<title>[\S].*?)( +====)?$ -sect4=^===== +(?P<title>[\S].*?)( +=====)?$ -blocktitle=^\.(?P<title>([^.\s].*)|(\.[^.\s].*))$ - -[specialcharacters] -&=& -<=< ->=> - -[quotes] -# The order is important, quotes are processed in conf file order. -**=#strong -*=strong -``|''=doublequoted -'=emphasis -`|'=singlequoted -ifdef::no-inline-literal[] -`=monospaced -endif::no-inline-literal[] -# +++ and $$ quoting is applied to the +++ and $$ inline passthrough -# macros to allow quoted attributes to be used. -# This trick only works with inline passthrough macros. -+++=#unquoted -$$=#unquoted -++=#monospaced -+=monospaced -__=#emphasis -_=emphasis -\##=#unquoted -\#=unquoted -^=#superscript -~=#subscript - -[specialwords] -emphasizedwords= -strongwords= -monospacedwords= - -[replacements] -# Replacements performed in order of configuration file entry. The first entry -# of each replacement pair performs the (non-escaped) replacement, the second -# strips the backslash from the escaped replacement. - -# (C) Copyright (entity reference ©) -(?<!\\)\(C\)=© -\\\(C\)=(C) - -# (R) registered trade mark (entity reference ® -(?<!\\)\(R\)=® -\\\(R\)=(R) - -# (TM) Trademark (entity reference ™) -(?<!\\)\(TM\)=™ -\\\(TM\)=(TM) - -# -- Spaced and unspaced em dashes (entity reference —). -# Space on both sides is translated to thin space characters. -(^-- )=—  -(\n-- )|( -- )|( --\n)= —  -(\w)--(\w)=\1—\2 -\\--(?!-)=-- - -# Replace vertical typewriter apostrophe with punctuation apostrophe. -(\w)'(\w)=\1’\2 -(\w)\\'(\w)=\1'\2 - -# ... Ellipsis (entity reference …) -(?<!\\)\.\.\.=… -\\\.\.\.=... - -# Arrows from the Arrows block of Unicode. -# -> right arrow -(?<!\\)->=→ -\\->=-> -# => right double arrow -(?<!\\)\=>=⇒ -\\\=>==> -# <- left arrow -(?<!\\)<-=← -\\<-=<- -# <= left double arrow -(?<!\\)<\==⇐ -\\<\==<= - -# Arbitrary entity references. -(?<!\\)&([:_#a-zA-Z][:_.\-\w]*?;)=&\1 -\\(&[:_#a-zA-Z][:_.\-\w]*?;)=\1 - -#----------- -# Paragraphs -#----------- -[paradef-default] -delimiter=(?s)(?P<text>\S.*) -posattrs=style -style=normal -template::[paragraph-styles] - -[paradef-literal] -delimiter=(?s)(?P<text>\s+.*) -options=listelement -posattrs=style -style=literal -template::[paragraph-styles] - -[paradef-admonition] -delimiter=(?s)^\s*(?P<style>NOTE|TIP|IMPORTANT|WARNING|CAUTION):\s+(?P<text>.+) -template::[paragraph-styles] - -[paragraph-styles] -normal-style=template="paragraph" -verse-style=template="verseparagraph",posattrs=("style","attribution","citetitle") -quote-style=template="quoteparagraph",posattrs=("style","attribution","citetitle") -literal-style=template="literalparagraph",subs=("verbatim",) -listing-style=template="listingparagraph",subs=("verbatim",) -NOTE-style=template="admonitionparagraph",name="note",caption="{note-caption}" -TIP-style=template="admonitionparagraph",name="tip",caption="{tip-caption}" -IMPORTANT-style=template="admonitionparagraph",name="important",caption="{important-caption}" -WARNING-style=template="admonitionparagraph",name="warning",caption="{warning-caption}" -CAUTION-style=template="admonitionparagraph",name="caution",caption="{caution-caption}" - -[literalparagraph] -template::[literalblock] - -[verseparagraph] -template::[verseblock] - -[quoteparagraph] -template::[quoteblock] - -[listingparagraph] -template::[listingblock] - -[macros] -#-------------- -# Inline macros -#-------------- -# Backslash prefix required for escape processing. -# (?s) re flag for line spanning. - -# Macros using default syntax. -(?su)(?<!\w)[\\]?(?P<name>http|https|ftp|file|irc|mailto|callto|image|link|anchor|xref|indexterm):(?P<target>\S*?)\[(?P<attrlist>.*?)\]= - -# These URL types don't require any special attribute list formatting. -(?su)(?<!\S)[\\]?(?P<name>http|https|ftp|file|irc):(?P<target>//[^\s<>]*[\w/])= -# Allow a leading parenthesis and square bracket. -(?su)(?<\=[([])[\\]?(?P<name>http|https|ftp|file|irc):(?P<target>//[^\s<>]*[\w/])= -# Allow <> brackets. -(?su)[\\]?<(?P<name>http|https|ftp|file|irc):(?P<target>//[^\s<>]*[\w/])>= - -# Email addresses don't require special attribute list formatting. -# The before ">: and after "< character exclusions stop multiple substitution. -(?su)(?<![">:\w._/-])[\\]?(?P<target>\w[\w._-]*@[\w._-]*\w)(?!["<\w_-])=mailto - -# Allow footnote macros hard up against the preceding word so the footnote mark -# can be placed against the noted text without an intervening space -# (http://groups.google.com/group/asciidoc/browse_frm/thread/e1dcb7ee0efc17b5). -(?su)[\\]?(?P<name>footnote|footnoteref):(?P<target>\S*?)\[(?P<attrlist>.*?)\]= - -# Anchor: [[[id]]]. Bibliographic anchor. -(?su)[\\]?\[\[\[(?P<attrlist>[\w_:][\w_:.-]*?)\]\]\]=anchor3 -# Anchor: [[id,xreflabel]] -(?su)[\\]?\[\[(?P<attrlist>[\w"_:].*?)\]\]=anchor2 -# Link: <<id,text>> -(?su)[\\]?<<(?P<attrlist>[\w"_:].*?)>>=xref2 - -ifdef::asciidoc7compatible[] -# Index term: ++primary,secondary,tertiary++ -(?su)(?<!\S)[\\]?\+\+(?P<attrlist>[^+].*?)\+\+(?!\+)=indexterm -# Index term: +primary+ -# Follows ++...++ macro otherwise it will match them. -(?<!\S)[\\]?\+(?P<attrlist>[^\s\+][^+].*?)\+(?!\+)=indexterm2 -endif::asciidoc7compatible[] - -ifndef::asciidoc7compatible[] -# Index term: (((primary,secondary,tertiary))) -(?su)(?<!\()[\\]?\(\(\((?P<attrlist>[^(].*?)\)\)\)(?!\))=indexterm -# Index term: ((primary)) -# Follows (((...))) macro otherwise it will match them. -(?<!\()[\\]?\(\((?P<attrlist>[^\s\(][^(].*?)\)\)(?!\))=indexterm2 -endif::asciidoc7compatible[] - -# Callout -[\\]?<(?P<index>\d+)>=callout - -# Passthrough macros. -(?su)[\\]?(?P<name>pass):(?P<subslist>\S*?)\[(?P<passtext>.*?)(?<!\\)\]=[] - -# Triple-plus and double-dollar inline passthroughs. -(?su)[\\]?\+\+\+(?P<passtext>.*?)\+\+\+=pass[] -(?su)[\\]?\$\$(?P<passtext>.*?)\$\$=pass[specialcharacters] - -# Inline literal. -ifndef::no-inline-literal[] -(?su)(?<![`\w])([\\]?`(?P<passtext>[^`\s]|[^`\s].*?\S)`)(?![`\w])=literal[specialcharacters] -endif::no-inline-literal[] - -# Inline comment. -(?mu)^[\\]?//(?P<passtext>[^/].*|)$=comment[specialcharacters] - -# Default (catchall) inline macro is not implemented so there is no ambiguity -# with previous definition that could result in double substitution of escaped -# references. -#(?su)[\\]?(?P<name>\w(\w|-)*?):(?P<target>\S*?)\[(?P<passtext>.*?)(?<!\\)\]= - -#------------- -# Block macros -#------------- -# Macros using default syntax. -(?u)^(?P<name>image|unfloat|toc)::(?P<target>\S*?)(\[(?P<attrlist>.*?)\])$=# - -# Passthrough macros. -(?u)^(?P<name>pass)::(?P<subslist>\S*?)(\[(?P<passtext>.*?)\])$=# - -^'{3,}$=#ruler -^<{3,}$=#pagebreak -^//(?P<passtext>[^/].*|)$=#comment[specialcharacters] - -# Implemented in HTML backends. -[unfloat-blockmacro] -[toc-blockmacro] - -#----------------- -# Delimited blocks -#----------------- -[blockdef-comment] -delimiter=^/{4,}$ -options=skip -posattrs=style - -[blockdef-sidebar] -delimiter=^\*{4,}$ -template=sidebarblock -options=sectionbody -posattrs=style -# DEPRECATED: Use Openblock instead. -abstract-style=template="abstractblock" - -[blockdef-open] -# A block without opening or closing tags. -delimiter=^--$ -template=openblock -options=sectionbody -posattrs=style -abstract-style=template="abstractblock" -partintro-style=template="partintroblock" - -[blockdef-pass] -delimiter=^\+{4,}$ -template=passblock -# Default subs choosen for backward compatibility. -subs=attributes,macros -posattrs=style -pass-style=template="passblock",subs=() - -[blockdef-listing] -delimiter=^-{4,}$ -template=listingblock -subs=verbatim -posattrs=style - -[blockdef-literal] -delimiter=^\.{4,}$ -template=literalblock -subs=verbatim -posattrs=style -listing-style=template="listingblock" -# DEPRECATED: Use verse style on quote blocks instead. -verse-style=template="verseblock",subs="normal" - -[blockdef-quote] -delimiter=^_{4,}$ -subs=normal -style=quote -posattrs=style,attribution,citetitle -quote-style=template="quoteblock",options=("sectionbody",) -verse-style=template="verseblock" - -[blockdef-example] -delimiter=^={4,}$ -template=exampleblock -options=sectionbody -posattrs=style -NOTE-style=template="admonitionblock",name="note",caption="{note-caption}" -TIP-style=template="admonitionblock",name="tip",caption="{tip-caption}" -IMPORTANT-style=template="admonitionblock",name="important",caption="{important-caption}" -WARNING-style=template="admonitionblock",name="warning",caption="{warning-caption}" -CAUTION-style=template="admonitionblock",name="caution",caption="{caution-caption}" - -# For use by custom filters. -# DEPRECATED: No longer used, a styled listing block (blockdef-listing) is preferable. -[blockdef-filter] -delimiter=^~{4,}$ -template=listingblock -subs=none -posattrs=style - -#------- -# Lists -#------- -[listdef-bulleted] -# - bullets. -delimiter=^\s*- +(?P<text>.+)$ -posattrs=style -type=bulleted -tags=bulleted -callout-style=tags="callout" -bibliography-style=tags="bibliography" - -[listdef-bulleted1] -# * bullets. -template::[listdef-bulleted] -delimiter=^\s*\* +(?P<text>.+)$ - -[listdef-bulleted2] -# ** bullets. -template::[listdef-bulleted] -delimiter=^\s*\*{2} +(?P<text>.+)$ - -[listdef-bulleted3] -# *** bullets. -template::[listdef-bulleted] -delimiter=^\s*\*{3} +(?P<text>.+)$ - -[listdef-bulleted4] -# **** bullets. -template::[listdef-bulleted] -delimiter=^\s*\*{4} +(?P<text>.+)$ - -[listdef-bulleted5] -# ***** bullets. -template::[listdef-bulleted] -delimiter=^\s*\*{5} +(?P<text>.+)$ - -[listdef-arabic] -# Arabic numbering. -delimiter=^\s*(?P<index>\d+\.) +(?P<text>.+)$ -posattrs=style -type=numbered -tags=numbered -style=arabic - -[listdef-loweralpha] -# Lower alpha numbering. -template::[listdef-arabic] -delimiter=^\s*(?P<index>[a-z]\.) +(?P<text>.+)$ -style=loweralpha - -[listdef-upperalpha] -# Upper alpha numbering. -template::[listdef-arabic] -delimiter=^\s*(?P<index>[A-Z]\.) +(?P<text>.+)$ -style=upperalpha - -[listdef-lowerroman] -# Lower roman numbering. -template::[listdef-arabic] -delimiter=^\s*(?P<index>[ivx]+\)) +(?P<text>.+)$ -style=lowerroman - -[listdef-upperroman] -# Upper roman numbering. -template::[listdef-arabic] -delimiter=^\s*(?P<index>[IVX]+\)) +(?P<text>.+)$ -style=upperroman - -[listdef-numbered1] -# . numbering. -template::[listdef-arabic] -delimiter=^\s*\. +(?P<text>.+)$ - -[listdef-numbered2] -# .. numbering. -template::[listdef-loweralpha] -delimiter=^\s*\.{2} +(?P<text>.+)$ - -[listdef-numbered3] -# ... numbering. -template::[listdef-lowerroman] -delimiter=^\s*\.{3} +(?P<text>.+)$ - -[listdef-numbered4] -# .... numbering. -template::[listdef-upperalpha] -delimiter=^\s*\.{4} +(?P<text>.+)$ - -[listdef-numbered5] -# ..... numbering. -template::[listdef-upperroman] -delimiter=^\s*\.{5} +(?P<text>.+)$ - -[listdef-labeled] -# label:: item. -delimiter=^\s*(?P<label>.*[^:])::(\s+(?P<text>.+))?$ -posattrs=style -type=labeled -tags=labeled -vertical-style=tags="labeled" -horizontal-style=tags="horizontal" -glossary-style=tags="glossary" -qanda-style=tags="qanda" - -[listdef-labeled2] -# label;; item. -template::[listdef-labeled] -delimiter=^\s*(?P<label>.*[^;]);;(\s+(?P<text>.+))?$ - -[listdef-labeled3] -# label::: item. -template::[listdef-labeled] -delimiter=^\s*(?P<label>.*[^:]):{3}(\s+(?P<text>.+))?$ - -[listdef-labeled4] -# label:::: item. -template::[listdef-labeled] -delimiter=^\s*(?P<label>.*[^:]):{4}(\s+(?P<text>.+))?$ - -[listdef-callout] -posattrs=style -delimiter=^<?(?P<index>\d*>) +(?P<text>.+)$ -type=callout -tags=callout -style=arabic - -# DEPRECATED: Old list syntax. -[listdef-qanda] -posattrs=style -delimiter=^\s*(?P<label>.*\S)\?\?$ -type=labeled -tags=qanda - -# DEPRECATED: Old list syntax. -[listdef-bibliography] -posattrs=style -delimiter=^\+ +(?P<text>.+)$ -type=bulleted -tags=bibliography - -# DEPRECATED: Old list syntax. -[listdef-glossary] -delimiter=^(?P<label>.*\S):-$ -posattrs=style -type=labeled -tags=glossary - -#------- -# Tables -#------- -[tabledef-default] -delimiter=^\|={3,}$ -posattrs=style -template=table -default-style=tags="default" -verse-style=tags="verse" -literal-style=tags="literal",subs=("specialcharacters",) -emphasis-style=tags="emphasis" -strong-style=tags="strong" -monospaced-style=tags="monospaced" -header-style=tags="header" -asciidoc-style=tags="asciidoc",subs=(),filter='"{python}" "{asciidoc-file}" -b {backend} {asciidoc-args}{lang? -a "lang={lang}@"}{icons? -a icons -a "iconsdir={iconsdir}"}{imagesdir? -a "imagesdir={imagesdir}"}{data-uri? -a data-uri} -a "indir={indir}"{trace? -a "trace={trace}"}{blockname? -a "blockname={blockname}"} -s -' - -[tabledef-nested] -# Same as [tabledef-default] but with different delimiter and separator. -delimiter=^!={3,}$ -separator=((?<!\S)((?P<span>[\d.]+)(?P<op>[*+]))?(?P<align>[<\^>.]{,3})?(?P<style>[a-z])?)?! -posattrs=style -template=table -verse-style=tags="verse" -literal-style=tags="literal",subs=("specialcharacters",) -emphasis-style=tags="emphasis" -strong-style=tags="strong" -monospaced-style=tags="monospaced" -header-style=tags="header" -asciidoc-style=tags="asciidoc",subs=(),filter='"{python}" "{asciidoc-file}" -b {backend} {asciidoc-args}{lang? -a "lang={lang}@"}{icons? -a icons -a "iconsdir={iconsdir}"}{imagesdir? -a "imagesdir={imagesdir}"}{data-uri? -a data-uri} -a "indir={indir}"{trace? -a "trace={trace}"}{blockname? -a "blockname={blockname}"} -s -' - -#---------------------------------------- -# Common block and macro markup templates -#---------------------------------------- -[comment-inlinemacro] -# Outputs nothing. - -[comment-blockmacro] -# Outputs nothing. - -[pass-blockmacro] -{passtext} - -[pass-inlinemacro] -template::[pass-blockmacro] - -[passblock] -| - -[filter-image-blockmacro] -# Synthesize missing target attribute for filter generated file names. -# The tag split | ensures missing target file names are auto-generated -# before the filter is executed, the remainder (the [image-blockmacro]) -# is excuted after the filter to ensure data URI encoding comes after -# the image is created. -{target%}{counter2:target-number} -{target%}{set2:target:{docname}__{target-number}.png} -| -template::[image-blockmacro] - -[+docinfo] -# Blank section to suppress missing template warning. - -#---------------------------------- -# Default special section templates -#---------------------------------- -[abstract] -template::[sect1] - -[colophon] -template::[sect1] - -[dedication] -template::[sect1] - -[preface] -template::[sect1] - -[appendix] -template::[sect1] - -[glossary] -template::[sect1] - -[bibliography] -template::[sect1] - -[index] -template::[sect1] - -[synopsis] -template::[sect1] - -#-------------------------------------------------------------------- -# Deprecated old table definitions. -# - -[old_tabledef-default] -fillchar=- -format=fixed - -[old_tabledef-csv] -fillchar=~ -format=csv - -[old_tabledef-dsv] -fillchar=_ -format=dsv - -# End of deprecated old table definitions. -#-------------------------------------------------------------------- diff --git a/manual/src/bin/asciidoc/asciidoc.py b/manual/src/bin/asciidoc/asciidoc.py deleted file mode 100755 index ed520c4759003..0000000000000 --- a/manual/src/bin/asciidoc/asciidoc.py +++ /dev/null @@ -1,6257 +0,0 @@ -#!/usr/bin/env python -""" -asciidoc - converts an AsciiDoc text file to HTML or DocBook - -Copyright (C) 2002-2010 Stuart Rackham. Free use of this software is granted -under the terms of the GNU General Public License (GPL). -""" - -import sys, os, re, time, traceback, tempfile, subprocess, codecs, locale, unicodedata, copy - -### Used by asciidocapi.py ### -VERSION = '8.6.7' # See CHANGLOG file for version history. - -MIN_PYTHON_VERSION = '2.4' # Require this version of Python or better. - -#--------------------------------------------------------------------------- -# Program constants. -#--------------------------------------------------------------------------- -DEFAULT_BACKEND = 'html' -DEFAULT_DOCTYPE = 'article' -# Allowed substitution options for List, Paragraph and DelimitedBlock -# definition subs entry. -SUBS_OPTIONS = ('specialcharacters','quotes','specialwords', - 'replacements', 'attributes','macros','callouts','normal','verbatim', - 'none','replacements2','replacements3') -# Default value for unspecified subs and presubs configuration file entries. -SUBS_NORMAL = ('specialcharacters','quotes','attributes', - 'specialwords','replacements','macros','replacements2') -SUBS_VERBATIM = ('specialcharacters','callouts') - -NAME_RE = r'(?u)[^\W\d][-\w]*' # Valid section or attribute name. -OR, AND = ',', '+' # Attribute list separators. - - -#--------------------------------------------------------------------------- -# Utility functions and classes. -#--------------------------------------------------------------------------- - -class EAsciiDoc(Exception): pass - -class OrderedDict(dict): - """ - Dictionary ordered by insertion order. - Python Cookbook: Ordered Dictionary, Submitter: David Benjamin. - http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747 - """ - def __init__(self, d=None, **kwargs): - self._keys = [] - if d is None: d = kwargs - dict.__init__(self, d) - def __delitem__(self, key): - dict.__delitem__(self, key) - self._keys.remove(key) - def __setitem__(self, key, item): - dict.__setitem__(self, key, item) - if key not in self._keys: self._keys.append(key) - def clear(self): - dict.clear(self) - self._keys = [] - def copy(self): - d = dict.copy(self) - d._keys = self._keys[:] - return d - def items(self): - return zip(self._keys, self.values()) - def keys(self): - return self._keys - def popitem(self): - try: - key = self._keys[-1] - except IndexError: - raise KeyError('dictionary is empty') - val = self[key] - del self[key] - return (key, val) - def setdefault(self, key, failobj = None): - dict.setdefault(self, key, failobj) - if key not in self._keys: self._keys.append(key) - def update(self, d=None, **kwargs): - if d is None: - d = kwargs - dict.update(self, d) - for key in d.keys(): - if key not in self._keys: self._keys.append(key) - def values(self): - return map(self.get, self._keys) - -class AttrDict(dict): - """ - Like a dictionary except values can be accessed as attributes i.e. obj.foo - can be used in addition to obj['foo']. - If an item is not present None is returned. - """ - def __getattr__(self, key): - try: return self[key] - except KeyError: return None - def __setattr__(self, key, value): - self[key] = value - def __delattr__(self, key): - try: del self[key] - except KeyError, k: raise AttributeError, k - def __repr__(self): - return '<AttrDict ' + dict.__repr__(self) + '>' - def __getstate__(self): - return dict(self) - def __setstate__(self,value): - for k,v in value.items(): self[k]=v - -class InsensitiveDict(dict): - """ - Like a dictionary except key access is case insensitive. - Keys are stored in lower case. - """ - def __getitem__(self, key): - return dict.__getitem__(self, key.lower()) - def __setitem__(self, key, value): - dict.__setitem__(self, key.lower(), value) - def has_key(self, key): - return dict.has_key(self,key.lower()) - def get(self, key, default=None): - return dict.get(self, key.lower(), default) - def update(self, dict): - for k,v in dict.items(): - self[k] = v - def setdefault(self, key, default = None): - return dict.setdefault(self, key.lower(), default) - - -class Trace(object): - """ - Used in conjunction with the 'trace' attribute to generate diagnostic - output. There is a single global instance of this class named trace. - """ - SUBS_NAMES = ('specialcharacters','quotes','specialwords', - 'replacements', 'attributes','macros','callouts', - 'replacements2','replacements3') - def __init__(self): - self.name_re = '' # Regexp pattern to match trace names. - self.linenos = True - self.offset = 0 - def __call__(self, name, before, after=None): - """ - Print trace message if tracing is on and the trace 'name' matches the - document 'trace' attribute (treated as a regexp). - 'before' is the source text before substitution; 'after' text is the - source text after substitutuion. - The 'before' and 'after' messages are only printed if they differ. - """ - name_re = document.attributes.get('trace') - if name_re == 'subs': # Alias for all the inline substitutions. - name_re = '|'.join(self.SUBS_NAMES) - self.name_re = name_re - if self.name_re is not None: - msg = message.format(name, 'TRACE: ', self.linenos, offset=self.offset) - if before != after and re.match(self.name_re,name): - if is_array(before): - before = '\n'.join(before) - if after is None: - msg += '\n%s\n' % before - else: - if is_array(after): - after = '\n'.join(after) - msg += '\n<<<\n%s\n>>>\n%s\n' % (before,after) - message.stderr(msg) - -class Message: - """ - Message functions. - """ - PROG = os.path.basename(os.path.splitext(__file__)[0]) - - def __init__(self): - # Set to True or False to globally override line numbers method - # argument. Has no effect when set to None. - self.linenos = None - self.messages = [] - - def stdout(self,msg): - print msg - - def stderr(self,msg=''): - self.messages.append(msg) - if __name__ == '__main__': - sys.stderr.write('%s: %s%s' % (self.PROG, msg, os.linesep)) - - def verbose(self, msg,linenos=True): - if config.verbose: - msg = self.format(msg,linenos=linenos) - self.stderr(msg) - - def warning(self, msg,linenos=True,offset=0): - msg = self.format(msg,'WARNING: ',linenos,offset=offset) - document.has_warnings = True - self.stderr(msg) - - def deprecated(self, msg, linenos=True): - msg = self.format(msg, 'DEPRECATED: ', linenos) - self.stderr(msg) - - def format(self, msg, prefix='', linenos=True, cursor=None, offset=0): - """Return formatted message string.""" - if self.linenos is not False and ((linenos or self.linenos) and reader.cursor): - if cursor is None: - cursor = reader.cursor - prefix += '%s: line %d: ' % (os.path.basename(cursor[0]),cursor[1]+offset) - return prefix + msg - - def error(self, msg, cursor=None, halt=False): - """ - Report fatal error. - If halt=True raise EAsciiDoc exception. - If halt=False don't exit application, continue in the hope of reporting - all fatal errors finishing with a non-zero exit code. - """ - if halt: - raise EAsciiDoc, self.format(msg,linenos=False,cursor=cursor) - else: - msg = self.format(msg,'ERROR: ',cursor=cursor) - self.stderr(msg) - document.has_errors = True - - def unsafe(self, msg): - self.error('unsafe: '+msg) - - -def userdir(): - """ - Return user's home directory or None if it is not defined. - """ - result = os.path.expanduser('~') - if result == '~': - result = None - return result - -def localapp(): - """ - Return True if we are not executing the system wide version - i.e. the configuration is in the executable's directory. - """ - return os.path.isfile(os.path.join(APP_DIR, 'asciidoc.conf')) - -def file_in(fname, directory): - """Return True if file fname resides inside directory.""" - assert os.path.isfile(fname) - # Empty directory (not to be confused with None) is the current directory. - if directory == '': - directory = os.getcwd() - else: - assert os.path.isdir(directory) - directory = os.path.realpath(directory) - fname = os.path.realpath(fname) - return os.path.commonprefix((directory, fname)) == directory - -def safe(): - return document.safe - -def is_safe_file(fname, directory=None): - # A safe file must reside in 'directory' (defaults to the source - # file directory). - if directory is None: - if document.infile == '<stdin>': - return not safe() - directory = os.path.dirname(document.infile) - elif directory == '': - directory = '.' - return ( - not safe() - or file_in(fname, directory) - or file_in(fname, APP_DIR) - or file_in(fname, CONF_DIR) - ) - -def safe_filename(fname, parentdir): - """ - Return file name which must reside in the parent file directory. - Return None if file is not safe. - """ - if not os.path.isabs(fname): - # Include files are relative to parent document - # directory. - fname = os.path.normpath(os.path.join(parentdir,fname)) - if not is_safe_file(fname, parentdir): - message.unsafe('include file: %s' % fname) - return None - return fname - -def assign(dst,src): - """Assign all attributes from 'src' object to 'dst' object.""" - for a,v in src.__dict__.items(): - setattr(dst,a,v) - -def strip_quotes(s): - """Trim white space and, if necessary, quote characters from s.""" - s = s.strip() - # Strip quotation mark characters from quoted strings. - if len(s) >= 3 and s[0] == '"' and s[-1] == '"': - s = s[1:-1] - return s - -def is_re(s): - """Return True if s is a valid regular expression else return False.""" - try: re.compile(s) - except: return False - else: return True - -def re_join(relist): - """Join list of regular expressions re1,re2,... to single regular - expression (re1)|(re2)|...""" - if len(relist) == 0: - return None - result = [] - # Delete named groups to avoid ambiguity. - for s in relist: - result.append(re.sub(r'\?P<\S+?>','',s)) - result = ')|('.join(result) - result = '('+result+')' - return result - -def lstrip_list(s): - """ - Return list with empty items from start of list removed. - """ - for i in range(len(s)): - if s[i]: break - else: - return [] - return s[i:] - -def rstrip_list(s): - """ - Return list with empty items from end of list removed. - """ - for i in range(len(s)-1,-1,-1): - if s[i]: break - else: - return [] - return s[:i+1] - -def strip_list(s): - """ - Return list with empty items from start and end of list removed. - """ - s = lstrip_list(s) - s = rstrip_list(s) - return s - -def is_array(obj): - """ - Return True if object is list or tuple type. - """ - return isinstance(obj,list) or isinstance(obj,tuple) - -def dovetail(lines1, lines2): - """ - Append list or tuple of strings 'lines2' to list 'lines1'. Join the last - non-blank item in 'lines1' with the first non-blank item in 'lines2' into a - single string. - """ - assert is_array(lines1) - assert is_array(lines2) - lines1 = strip_list(lines1) - lines2 = strip_list(lines2) - if not lines1 or not lines2: - return list(lines1) + list(lines2) - result = list(lines1[:-1]) - result.append(lines1[-1] + lines2[0]) - result += list(lines2[1:]) - return result - -def dovetail_tags(stag,content,etag): - """Merge the end tag with the first content line and the last - content line with the end tag. This ensures verbatim elements don't - include extraneous opening and closing line breaks.""" - return dovetail(dovetail(stag,content), etag) - -# The following functions are so we don't have to use the dangerous -# built-in eval() function. -if float(sys.version[:3]) >= 2.6 or sys.platform[:4] == 'java': - # Use AST module if CPython >= 2.6 or Jython. - import ast - from ast import literal_eval - - def get_args(val): - d = {} - args = ast.parse("d(" + val + ")", mode='eval').body.args - i = 1 - for arg in args: - if isinstance(arg, ast.Name): - d[str(i)] = literal_eval(arg.id) - else: - d[str(i)] = literal_eval(arg) - i += 1 - return d - - def get_kwargs(val): - d = {} - args = ast.parse("d(" + val + ")", mode='eval').body.keywords - for arg in args: - d[arg.arg] = literal_eval(arg.value) - return d - - def parse_to_list(val): - values = ast.parse("[" + val + "]", mode='eval').body.elts - return [literal_eval(v) for v in values] - -else: # Use deprecated CPython compiler module. - import compiler - from compiler.ast import Const, Dict, Expression, Name, Tuple, UnarySub, Keyword - - # Code from: - # http://mail.python.org/pipermail/python-list/2009-September/1219992.html - # Modified to use compiler.ast.List as this module has a List - def literal_eval(node_or_string): - """ - Safely evaluate an expression node or a string containing a Python - expression. The string or node provided may only consist of the - following Python literal structures: strings, numbers, tuples, - lists, dicts, booleans, and None. - """ - _safe_names = {'None': None, 'True': True, 'False': False} - if isinstance(node_or_string, basestring): - node_or_string = compiler.parse(node_or_string, mode='eval') - if isinstance(node_or_string, Expression): - node_or_string = node_or_string.node - def _convert(node): - if isinstance(node, Const) and isinstance(node.value, - (basestring, int, float, long, complex)): - return node.value - elif isinstance(node, Tuple): - return tuple(map(_convert, node.nodes)) - elif isinstance(node, compiler.ast.List): - return list(map(_convert, node.nodes)) - elif isinstance(node, Dict): - return dict((_convert(k), _convert(v)) for k, v - in node.items) - elif isinstance(node, Name): - if node.name in _safe_names: - return _safe_names[node.name] - elif isinstance(node, UnarySub): - return -_convert(node.expr) - raise ValueError('malformed string') - return _convert(node_or_string) - - def get_args(val): - d = {} - args = compiler.parse("d(" + val + ")", mode='eval').node.args - i = 1 - for arg in args: - if isinstance(arg, Keyword): - break - d[str(i)] = literal_eval(arg) - i = i + 1 - return d - - def get_kwargs(val): - d = {} - args = compiler.parse("d(" + val + ")", mode='eval').node.args - i = 0 - for arg in args: - if isinstance(arg, Keyword): - break - i += 1 - args = args[i:] - for arg in args: - d[str(arg.name)] = literal_eval(arg.expr) - return d - - def parse_to_list(val): - values = compiler.parse("[" + val + "]", mode='eval').node.asList() - return [literal_eval(v) for v in values] - -def parse_attributes(attrs,dict): - """Update a dictionary with name/value attributes from the attrs string. - The attrs string is a comma separated list of values and keyword name=value - pairs. Values must preceed keywords and are named '1','2'... The entire - attributes list is named '0'. If keywords are specified string values must - be quoted. Examples: - - attrs: '' - dict: {} - - attrs: 'hello,world' - dict: {'2': 'world', '0': 'hello,world', '1': 'hello'} - - attrs: '"hello", planet="earth"' - dict: {'planet': 'earth', '0': '"hello",planet="earth"', '1': 'hello'} - """ - def f(*args,**keywords): - # Name and add aguments '1','2'... to keywords. - for i in range(len(args)): - if not str(i+1) in keywords: - keywords[str(i+1)] = args[i] - return keywords - - if not attrs: - return - dict['0'] = attrs - # Replace line separators with spaces so line spanning works. - s = re.sub(r'\s', ' ', attrs) - d = {} - try: - d.update(get_args(s)) - d.update(get_kwargs(s)) - for v in d.values(): - if not (isinstance(v,str) or isinstance(v,int) or isinstance(v,float) or v is None): - raise Exception - except Exception: - s = s.replace('"','\\"') - s = s.split(',') - s = map(lambda x: '"' + x.strip() + '"', s) - s = ','.join(s) - try: - d = {} - d.update(get_args(s)) - d.update(get_kwargs(s)) - except Exception: - return # If there's a syntax error leave with {0}=attrs. - for k in d.keys(): # Drop any empty positional arguments. - if d[k] == '': del d[k] - dict.update(d) - assert len(d) > 0 - -def parse_named_attributes(s,attrs): - """Update a attrs dictionary with name="value" attributes from the s string. - Returns False if invalid syntax. - Example: - attrs: 'star="sun",planet="earth"' - dict: {'planet':'earth', 'star':'sun'} - """ - def f(**keywords): return keywords - - try: - d = {} - d = get_kwargs(s) - attrs.update(d) - return True - except Exception: - return False - -def parse_list(s): - """Parse comma separated string of Python literals. Return a tuple of of - parsed values.""" - try: - result = tuple(parse_to_list(s)) - except Exception: - raise EAsciiDoc,'malformed list: '+s - return result - -def parse_options(options,allowed,errmsg): - """Parse comma separated string of unquoted option names and return as a - tuple of valid options. 'allowed' is a list of allowed option values. - If allowed=() then all legitimate names are allowed. - 'errmsg' is an error message prefix if an illegal option error is thrown.""" - result = [] - if options: - for s in re.split(r'\s*,\s*',options): - if (allowed and s not in allowed) or not is_name(s): - raise EAsciiDoc,'%s: %s' % (errmsg,s) - result.append(s) - return tuple(result) - -def symbolize(s): - """Drop non-symbol characters and convert to lowercase.""" - return re.sub(r'(?u)[^\w\-_]', '', s).lower() - -def is_name(s): - """Return True if s is valid attribute, macro or tag name - (starts with alpha containing alphanumeric and dashes only).""" - return re.match(r'^'+NAME_RE+r'$',s) is not None - -def subs_quotes(text): - """Quoted text is marked up and the resulting text is - returned.""" - keys = config.quotes.keys() - for q in keys: - i = q.find('|') - if i != -1 and q != '|' and q != '||': - lq = q[:i] # Left quote. - rq = q[i+1:] # Right quote. - else: - lq = rq = q - tag = config.quotes[q] - if not tag: continue - # Unconstrained quotes prefix the tag name with a hash. - if tag[0] == '#': - tag = tag[1:] - # Unconstrained quotes can appear anywhere. - reo = re.compile(r'(?msu)(^|.)(\[(?P<attrlist>[^[\]]+?)\])?' \ - + r'(?:' + re.escape(lq) + r')' \ - + r'(?P<content>.+?)(?:'+re.escape(rq)+r')') - else: - # The text within constrained quotes must be bounded by white space. - # Non-word (\W) characters are allowed at boundaries to accomodate - # enveloping quotes and punctuation e.g. a='x', ('x'), 'x', ['x']. - reo = re.compile(r'(?msu)(^|[^\w;:}])(\[(?P<attrlist>[^[\]]+?)\])?' \ - + r'(?:' + re.escape(lq) + r')' \ - + r'(?P<content>\S|\S.*?\S)(?:'+re.escape(rq)+r')(?=\W|$)') - pos = 0 - while True: - mo = reo.search(text,pos) - if not mo: break - if text[mo.start()] == '\\': - # Delete leading backslash. - text = text[:mo.start()] + text[mo.start()+1:] - # Skip past start of match. - pos = mo.start() + 1 - else: - attrlist = {} - parse_attributes(mo.group('attrlist'), attrlist) - stag,etag = config.tag(tag, attrlist) - s = mo.group(1) + stag + mo.group('content') + etag - text = text[:mo.start()] + s + text[mo.end():] - pos = mo.start() + len(s) - return text - -def subs_tag(tag,dict={}): - """Perform attribute substitution and split tag string returning start, end - tag tuple (c.f. Config.tag()).""" - if not tag: - return [None,None] - s = subs_attrs(tag,dict) - if not s: - message.warning('tag \'%s\' dropped: contains undefined attribute' % tag) - return [None,None] - result = s.split('|') - if len(result) == 1: - return result+[None] - elif len(result) == 2: - return result - else: - raise EAsciiDoc,'malformed tag: %s' % tag - -def parse_entry(entry, dict=None, unquote=False, unique_values=False, - allow_name_only=False, escape_delimiter=True): - """Parse name=value entry to dictionary 'dict'. Return tuple (name,value) - or None if illegal entry. - If name= then value is set to ''. - If name and allow_name_only=True then value is set to ''. - If name! and allow_name_only=True then value is set to None. - Leading and trailing white space is striped from 'name' and 'value'. - 'name' can contain any printable characters. - If the '=' delimiter character is allowed in the 'name' then - it must be escaped with a backslash and escape_delimiter must be True. - If 'unquote' is True leading and trailing double-quotes are stripped from - 'name' and 'value'. - If unique_values' is True then dictionary entries with the same value are - removed before the parsed entry is added.""" - if escape_delimiter: - mo = re.search(r'(?:[^\\](=))',entry) - else: - mo = re.search(r'(=)',entry) - if mo: # name=value entry. - if mo.group(1): - name = entry[:mo.start(1)] - if escape_delimiter: - name = name.replace(r'\=','=') # Unescape \= in name. - value = entry[mo.end(1):] - elif allow_name_only and entry: # name or name! entry. - name = entry - if name[-1] == '!': - name = name[:-1] - value = None - else: - value = '' - else: - return None - if unquote: - name = strip_quotes(name) - if value is not None: - value = strip_quotes(value) - else: - name = name.strip() - if value is not None: - value = value.strip() - if not name: - return None - if dict is not None: - if unique_values: - for k,v in dict.items(): - if v == value: del dict[k] - dict[name] = value - return name,value - -def parse_entries(entries, dict, unquote=False, unique_values=False, - allow_name_only=False,escape_delimiter=True): - """Parse name=value entries from from lines of text in 'entries' into - dictionary 'dict'. Blank lines are skipped.""" - entries = config.expand_templates(entries) - for entry in entries: - if entry and not parse_entry(entry, dict, unquote, unique_values, - allow_name_only, escape_delimiter): - raise EAsciiDoc,'malformed section entry: %s' % entry - -def dump_section(name,dict,f=sys.stdout): - """Write parameters in 'dict' as in configuration file section format with - section 'name'.""" - f.write('[%s]%s' % (name,writer.newline)) - for k,v in dict.items(): - k = str(k) - k = k.replace('=',r'\=') # Escape = in name. - # Quote if necessary. - if len(k) != len(k.strip()): - k = '"'+k+'"' - if v and len(v) != len(v.strip()): - v = '"'+v+'"' - if v is None: - # Don't dump undefined attributes. - continue - else: - s = k+'='+v - if s[0] == '#': - s = '\\' + s # Escape so not treated as comment lines. - f.write('%s%s' % (s,writer.newline)) - f.write(writer.newline) - -def update_attrs(attrs,dict): - """Update 'attrs' dictionary with parsed attributes in dictionary 'dict'.""" - for k,v in dict.items(): - if not is_name(k): - raise EAsciiDoc,'illegal attribute name: %s' % k - attrs[k] = v - -def is_attr_defined(attrs,dic): - """ - Check if the sequence of attributes is defined in dictionary 'dic'. - Valid 'attrs' sequence syntax: - <attr> Return True if single attrbiute is defined. - <attr1>,<attr2>,... Return True if one or more attributes are defined. - <attr1>+<attr2>+... Return True if all the attributes are defined. - """ - if OR in attrs: - for a in attrs.split(OR): - if dic.get(a.strip()) is not None: - return True - else: return False - elif AND in attrs: - for a in attrs.split(AND): - if dic.get(a.strip()) is None: - return False - else: return True - else: - return dic.get(attrs.strip()) is not None - -def filter_lines(filter_cmd, lines, attrs={}): - """ - Run 'lines' through the 'filter_cmd' shell command and return the result. - The 'attrs' dictionary contains additional filter attributes. - """ - def findfilter(name,dir,filter): - """Find filter file 'fname' with style name 'name' in directory - 'dir'. Return found file path or None if not found.""" - if name: - result = os.path.join(dir,'filters',name,filter) - if os.path.isfile(result): - return result - result = os.path.join(dir,'filters',filter) - if os.path.isfile(result): - return result - return None - - # Return input lines if there's not filter. - if not filter_cmd or not filter_cmd.strip(): - return lines - # Perform attributes substitution on the filter command. - s = subs_attrs(filter_cmd, attrs) - if not s: - message.error('undefined filter attribute in command: %s' % filter_cmd) - return [] - filter_cmd = s.strip() - # Parse for quoted and unquoted command and command tail. - # Double quoted. - mo = re.match(r'^"(?P<cmd>[^"]+)"(?P<tail>.*)$', filter_cmd) - if not mo: - # Single quoted. - mo = re.match(r"^'(?P<cmd>[^']+)'(?P<tail>.*)$", filter_cmd) - if not mo: - # Unquoted catch all. - mo = re.match(r'^(?P<cmd>\S+)(?P<tail>.*)$', filter_cmd) - cmd = mo.group('cmd').strip() - found = None - if not os.path.dirname(cmd): - # Filter command has no directory path so search filter directories. - filtername = attrs.get('style') - d = document.attributes.get('docdir') - if d: - found = findfilter(filtername, d, cmd) - if not found: - if USER_DIR: - found = findfilter(filtername, USER_DIR, cmd) - if not found: - if localapp(): - found = findfilter(filtername, APP_DIR, cmd) - else: - found = findfilter(filtername, CONF_DIR, cmd) - else: - if os.path.isfile(cmd): - found = cmd - else: - message.warning('filter not found: %s' % cmd) - if found: - filter_cmd = '"' + found + '"' + mo.group('tail') - if found: - if cmd.endswith('.py'): - filter_cmd = '"%s" %s' % (document.attributes['python'], - filter_cmd) - elif cmd.endswith('.rb'): - filter_cmd = 'ruby ' + filter_cmd - - message.verbose('filtering: ' + filter_cmd) - if os.name == 'nt': - # Remove redundant quoting -- this is not just - # cosmetic, unnecessary quoting appears to cause - # command line truncation. - filter_cmd = re.sub(r'"([^ ]+?)"', r'\1', filter_cmd) - try: - p = subprocess.Popen(filter_cmd, shell=True, - stdin=subprocess.PIPE, stdout=subprocess.PIPE) - output = p.communicate(os.linesep.join(lines))[0] - except Exception: - raise EAsciiDoc,'filter error: %s: %s' % (filter_cmd, sys.exc_info()[1]) - if output: - result = [s.rstrip() for s in output.split(os.linesep)] - else: - result = [] - filter_status = p.wait() - if filter_status: - message.warning('filter non-zero exit code: %s: returned %d' % - (filter_cmd, filter_status)) - if lines and not result: - message.warning('no output from filter: %s' % filter_cmd) - return result - -def system(name, args, is_macro=False, attrs=None): - """ - Evaluate a system attribute ({name:args}) or system block macro - (name::[args]). - If is_macro is True then we are processing a system block macro otherwise - it's a system attribute. - The attrs dictionary is updated by the counter and set system attributes. - NOTE: The include1 attribute is used internally by the include1::[] macro - and is not for public use. - """ - if is_macro: - syntax = '%s::[%s]' % (name,args) - separator = '\n' - else: - syntax = '{%s:%s}' % (name,args) - separator = writer.newline - if name not in ('eval','eval3','sys','sys2','sys3','include','include1','counter','counter2','set','set2','template'): - if is_macro: - msg = 'illegal system macro name: %s' % name - else: - msg = 'illegal system attribute name: %s' % name - message.warning(msg) - return None - if is_macro: - s = subs_attrs(args) - if s is None: - message.warning('skipped %s: undefined attribute in: %s' % (name,args)) - return None - args = s - if name != 'include1': - message.verbose('evaluating: %s' % syntax) - if safe() and name not in ('include','include1'): - message.unsafe(syntax) - return None - result = None - if name in ('eval','eval3'): - try: - result = eval(args) - if result is True: - result = '' - elif result is False: - result = None - elif result is not None: - result = str(result) - except Exception: - message.warning('%s: evaluation error' % syntax) - elif name in ('sys','sys2','sys3'): - result = '' - fd,tmp = tempfile.mkstemp() - os.close(fd) - try: - cmd = args - cmd = cmd + (' > "%s"' % tmp) - if name == 'sys2': - cmd = cmd + ' 2>&1' - if os.name == 'nt': - # Remove redundant quoting -- this is not just - # cosmetic, unnecessary quoting appears to cause - # command line truncation. - cmd = re.sub(r'"([^ ]+?)"', r'\1', cmd) - message.verbose('shelling: %s' % cmd) - if os.system(cmd): - message.warning('%s: non-zero exit status' % syntax) - try: - if os.path.isfile(tmp): - f = open(tmp) - try: - lines = [s.rstrip() for s in f] - finally: - f.close() - else: - lines = [] - except Exception: - raise EAsciiDoc,'%s: temp file read error' % syntax - result = separator.join(lines) - finally: - if os.path.isfile(tmp): - os.remove(tmp) - elif name in ('counter','counter2'): - mo = re.match(r'^(?P<attr>[^:]*?)(:(?P<seed>.*))?$', args) - attr = mo.group('attr') - seed = mo.group('seed') - if seed and (not re.match(r'^\d+$', seed) and len(seed) > 1): - message.warning('%s: illegal counter seed: %s' % (syntax,seed)) - return None - if not is_name(attr): - message.warning('%s: illegal attribute name' % syntax) - return None - value = document.attributes.get(attr) - if value: - if not re.match(r'^\d+$', value) and len(value) > 1: - message.warning('%s: illegal counter value: %s' - % (syntax,value)) - return None - if re.match(r'^\d+$', value): - expr = value + '+1' - else: - expr = 'chr(ord("%s")+1)' % value - try: - result = str(eval(expr)) - except Exception: - message.warning('%s: evaluation error: %s' % (syntax, expr)) - else: - if seed: - result = seed - else: - result = '1' - document.attributes[attr] = result - if attrs is not None: - attrs[attr] = result - if name == 'counter2': - result = '' - elif name in ('set','set2'): - mo = re.match(r'^(?P<attr>[^:]*?)(:(?P<value>.*))?$', args) - attr = mo.group('attr') - value = mo.group('value') - if value is None: - value = '' - if attr.endswith('!'): - attr = attr[:-1] - value = None - if not is_name(attr): - message.warning('%s: illegal attribute name' % syntax) - else: - if attrs is not None: - attrs[attr] = value - if name != 'set2': # set2 only updates local attributes. - document.attributes[attr] = value - if value is None: - result = None - else: - result = '' - elif name == 'include': - if not os.path.exists(args): - message.warning('%s: file does not exist' % syntax) - elif not is_safe_file(args): - message.unsafe(syntax) - else: - f = open(args) - try: - result = [s.rstrip() for s in f] - finally: - f.close() - if result: - result = subs_attrs(result) - result = separator.join(result) - result = result.expandtabs(reader.tabsize) - else: - result = '' - elif name == 'include1': - result = separator.join(config.include1[args]) - elif name == 'template': - if not args in config.sections: - message.warning('%s: template does not exist' % syntax) - else: - result = [] - for line in config.sections[args]: - line = subs_attrs(line) - if line is not None: - result.append(line) - result = '\n'.join(result) - else: - assert False - if result and name in ('eval3','sys3'): - macros.passthroughs.append(result) - result = '\x07' + str(len(macros.passthroughs)-1) + '\x07' - return result - -def subs_attrs(lines, dictionary=None): - """Substitute 'lines' of text with attributes from the global - document.attributes dictionary and from 'dictionary' ('dictionary' - entries take precedence). Return a tuple of the substituted lines. 'lines' - containing undefined attributes are deleted. If 'lines' is a string then - return a string. - - - Attribute references are substituted in the following order: simple, - conditional, system. - - Attribute references inside 'dictionary' entry values are substituted. - """ - - def end_brace(text,start): - """Return index following end brace that matches brace at start in - text.""" - assert text[start] == '{' - n = 0 - result = start - for c in text[start:]: - # Skip braces that are followed by a backslash. - if result == len(text)-1 or text[result+1] != '\\': - if c == '{': n = n + 1 - elif c == '}': n = n - 1 - result = result + 1 - if n == 0: break - return result - - if type(lines) == str: - string_result = True - lines = [lines] - else: - string_result = False - if dictionary is None: - attrs = document.attributes - else: - # Remove numbered document attributes so they don't clash with - # attribute list positional attributes. - attrs = {} - for k,v in document.attributes.items(): - if not re.match(r'^\d+$', k): - attrs[k] = v - # Substitute attribute references inside dictionary values. - for k,v in dictionary.items(): - if v is None: - del dictionary[k] - else: - v = subs_attrs(str(v)) - if v is None: - del dictionary[k] - else: - dictionary[k] = v - attrs.update(dictionary) - # Substitute all attributes in all lines. - result = [] - for line in lines: - # Make it easier for regular expressions. - line = line.replace('\\{','{\\') - line = line.replace('\\}','}\\') - # Expand simple attributes ({name}). - # Nested attributes not allowed. - reo = re.compile(r'(?su)\{(?P<name>[^\\\W][-\w]*?)\}(?!\\)') - pos = 0 - while True: - mo = reo.search(line,pos) - if not mo: break - s = attrs.get(mo.group('name')) - if s is None: - pos = mo.end() - else: - s = str(s) - line = line[:mo.start()] + s + line[mo.end():] - pos = mo.start() + len(s) - # Expand conditional attributes. - # Single name -- higher precedence. - reo1 = re.compile(r'(?su)\{(?P<name>[^\\\W][-\w]*?)' \ - r'(?P<op>\=|\?|!|#|%|@|\$)' \ - r'(?P<value>.*?)\}(?!\\)') - # Multiple names (n1,n2,... or n1+n2+...) -- lower precedence. - reo2 = re.compile(r'(?su)\{(?P<name>[^\\\W][-\w'+OR+AND+r']*?)' \ - r'(?P<op>\=|\?|!|#|%|@|\$)' \ - r'(?P<value>.*?)\}(?!\\)') - for reo in [reo1,reo2]: - pos = 0 - while True: - mo = reo.search(line,pos) - if not mo: break - attr = mo.group() - name = mo.group('name') - if reo == reo2: - if OR in name: - sep = OR - else: - sep = AND - names = [s.strip() for s in name.split(sep) if s.strip() ] - for n in names: - if not re.match(r'^[^\\\W][-\w]*$',n): - message.error('illegal attribute syntax: %s' % attr) - if sep == OR: - # Process OR name expression: n1,n2,... - for n in names: - if attrs.get(n) is not None: - lval = '' - break - else: - lval = None - else: - # Process AND name expression: n1+n2+... - for n in names: - if attrs.get(n) is None: - lval = None - break - else: - lval = '' - else: - lval = attrs.get(name) - op = mo.group('op') - # mo.end() not good enough because '{x={y}}' matches '{x={y}'. - end = end_brace(line,mo.start()) - rval = line[mo.start('value'):end-1] - UNDEFINED = '{zzzzz}' - if lval is None: - if op == '=': s = rval - elif op == '?': s = '' - elif op == '!': s = rval - elif op == '#': s = UNDEFINED # So the line is dropped. - elif op == '%': s = rval - elif op in ('@','$'): - s = UNDEFINED # So the line is dropped. - else: - assert False, 'illegal attribute: %s' % attr - else: - if op == '=': s = lval - elif op == '?': s = rval - elif op == '!': s = '' - elif op == '#': s = rval - elif op == '%': s = UNDEFINED # So the line is dropped. - elif op in ('@','$'): - v = re.split(r'(?<!\\):',rval) - if len(v) not in (2,3): - message.error('illegal attribute syntax: %s' % attr) - s = '' - elif not is_re('^'+v[0]+'$'): - message.error('illegal attribute regexp: %s' % attr) - s = '' - else: - v = [s.replace('\\:',':') for s in v] - re_mo = re.match('^'+v[0]+'$',lval) - if op == '@': - if re_mo: - s = v[1] # {<name>@<re>:<v1>[:<v2>]} - else: - if len(v) == 3: # {<name>@<re>:<v1>:<v2>} - s = v[2] - else: # {<name>@<re>:<v1>} - s = '' - else: - if re_mo: - if len(v) == 2: # {<name>$<re>:<v1>} - s = v[1] - elif v[1] == '': # {<name>$<re>::<v2>} - s = UNDEFINED # So the line is dropped. - else: # {<name>$<re>:<v1>:<v2>} - s = v[1] - else: - if len(v) == 2: # {<name>$<re>:<v1>} - s = UNDEFINED # So the line is dropped. - else: # {<name>$<re>:<v1>:<v2>} - s = v[2] - else: - assert False, 'illegal attribute: %s' % attr - s = str(s) - line = line[:mo.start()] + s + line[end:] - pos = mo.start() + len(s) - # Drop line if it contains unsubstituted {name} references. - skipped = re.search(r'(?su)\{[^\\\W][-\w]*?\}(?!\\)', line) - if skipped: - trace('dropped line', line) - continue; - # Expand system attributes (eval has precedence). - reos = [ - re.compile(r'(?su)\{(?P<action>eval):(?P<expr>.*?)\}(?!\\)'), - re.compile(r'(?su)\{(?P<action>[^\\\W][-\w]*?):(?P<expr>.*?)\}(?!\\)'), - ] - skipped = False - for reo in reos: - pos = 0 - while True: - mo = reo.search(line,pos) - if not mo: break - expr = mo.group('expr') - action = mo.group('action') - expr = expr.replace('{\\','{') - expr = expr.replace('}\\','}') - s = system(action, expr, attrs=dictionary) - if dictionary is not None and action in ('counter','counter2','set','set2'): - # These actions create and update attributes. - attrs.update(dictionary) - if s is None: - # Drop line if the action returns None. - skipped = True - break - line = line[:mo.start()] + s + line[mo.end():] - pos = mo.start() + len(s) - if skipped: - break - if not skipped: - # Remove backslash from escaped entries. - line = line.replace('{\\','{') - line = line.replace('}\\','}') - result.append(line) - if string_result: - if result: - return '\n'.join(result) - else: - return None - else: - return tuple(result) - -def char_encoding(): - encoding = document.attributes.get('encoding') - if encoding: - try: - codecs.lookup(encoding) - except LookupError,e: - raise EAsciiDoc,str(e) - return encoding - -def char_len(s): - return len(char_decode(s)) - -east_asian_widths = {'W': 2, # Wide - 'F': 2, # Full-width (wide) - 'Na': 1, # Narrow - 'H': 1, # Half-width (narrow) - 'N': 1, # Neutral (not East Asian, treated as narrow) - 'A': 1} # Ambiguous (s/b wide in East Asian context, - # narrow otherwise, but that doesn't work) -"""Mapping of result codes from `unicodedata.east_asian_width()` to character -column widths.""" - -def column_width(s): - text = char_decode(s) - if isinstance(text, unicode): - width = 0 - for c in text: - width += east_asian_widths[unicodedata.east_asian_width(c)] - return width - else: - return len(text) - -def char_decode(s): - if char_encoding(): - try: - return s.decode(char_encoding()) - except Exception: - raise EAsciiDoc, \ - "'%s' codec can't decode \"%s\"" % (char_encoding(), s) - else: - return s - -def char_encode(s): - if char_encoding(): - return s.encode(char_encoding()) - else: - return s - -def time_str(t): - """Convert seconds since the Epoch to formatted local time string.""" - t = time.localtime(t) - s = time.strftime('%H:%M:%S',t) - if time.daylight and t.tm_isdst == 1: - result = s + ' ' + time.tzname[1] - else: - result = s + ' ' + time.tzname[0] - # Attempt to convert the localtime to the output encoding. - try: - result = char_encode(result.decode(locale.getdefaultlocale()[1])) - except Exception: - pass - return result - -def date_str(t): - """Convert seconds since the Epoch to formatted local date string.""" - t = time.localtime(t) - return time.strftime('%Y-%m-%d',t) - - -class Lex: - """Lexical analysis routines. Static methods and attributes only.""" - prev_element = None - prev_cursor = None - def __init__(self): - raise AssertionError,'no class instances allowed' - @staticmethod - def next(): - """Returns class of next element on the input (None if EOF). The - reader is assumed to be at the first line following a previous element, - end of file or line one. Exits with the reader pointing to the first - line of the next element or EOF (leading blank lines are skipped).""" - reader.skip_blank_lines() - if reader.eof(): return None - # Optimization: If we've already checked for an element at this - # position return the element. - if Lex.prev_element and Lex.prev_cursor == reader.cursor: - return Lex.prev_element - if AttributeEntry.isnext(): - result = AttributeEntry - elif AttributeList.isnext(): - result = AttributeList - elif BlockTitle.isnext() and not tables_OLD.isnext(): - result = BlockTitle - elif Title.isnext(): - if AttributeList.style() == 'float': - result = FloatingTitle - else: - result = Title - elif macros.isnext(): - result = macros.current - elif lists.isnext(): - result = lists.current - elif blocks.isnext(): - result = blocks.current - elif tables_OLD.isnext(): - result = tables_OLD.current - elif tables.isnext(): - result = tables.current - else: - if not paragraphs.isnext(): - raise EAsciiDoc,'paragraph expected' - result = paragraphs.current - # Optimization: Cache answer. - Lex.prev_cursor = reader.cursor - Lex.prev_element = result - return result - - @staticmethod - def canonical_subs(options): - """Translate composite subs values.""" - if len(options) == 1: - if options[0] == 'none': - options = () - elif options[0] == 'normal': - options = config.subsnormal - elif options[0] == 'verbatim': - options = config.subsverbatim - return options - - @staticmethod - def subs_1(s,options): - """Perform substitution specified in 'options' (in 'options' order).""" - if not s: - return s - if document.attributes.get('plaintext') is not None: - options = ('specialcharacters',) - result = s - options = Lex.canonical_subs(options) - for o in options: - if o == 'specialcharacters': - result = config.subs_specialchars(result) - elif o == 'attributes': - result = subs_attrs(result) - elif o == 'quotes': - result = subs_quotes(result) - elif o == 'specialwords': - result = config.subs_specialwords(result) - elif o in ('replacements','replacements2','replacements3'): - result = config.subs_replacements(result,o) - elif o == 'macros': - result = macros.subs(result) - elif o == 'callouts': - result = macros.subs(result,callouts=True) - else: - raise EAsciiDoc,'illegal substitution option: %s' % o - trace(o, s, result) - if not result: - break - return result - - @staticmethod - def subs(lines,options): - """Perform inline processing specified by 'options' (in 'options' - order) on sequence of 'lines'.""" - if not lines or not options: - return lines - options = Lex.canonical_subs(options) - # Join lines so quoting can span multiple lines. - para = '\n'.join(lines) - if 'macros' in options: - para = macros.extract_passthroughs(para) - for o in options: - if o == 'attributes': - # If we don't substitute attributes line-by-line then a single - # undefined attribute will drop the entire paragraph. - lines = subs_attrs(para.split('\n')) - para = '\n'.join(lines) - else: - para = Lex.subs_1(para,(o,)) - if 'macros' in options: - para = macros.restore_passthroughs(para) - return para.splitlines() - - @staticmethod - def set_margin(lines, margin=0): - """Utility routine that sets the left margin to 'margin' space in a - block of non-blank lines.""" - # Calculate width of block margin. - lines = list(lines) - width = len(lines[0]) - for s in lines: - i = re.search(r'\S',s).start() - if i < width: width = i - # Strip margin width from all lines. - for i in range(len(lines)): - lines[i] = ' '*margin + lines[i][width:] - return lines - -#--------------------------------------------------------------------------- -# Document element classes parse AsciiDoc reader input and write DocBook writer -# output. -#--------------------------------------------------------------------------- -class Document(object): - - # doctype property. - def getdoctype(self): - return self.attributes.get('doctype') - def setdoctype(self,doctype): - self.attributes['doctype'] = doctype - doctype = property(getdoctype,setdoctype) - - # backend property. - def getbackend(self): - return self.attributes.get('backend') - def setbackend(self,backend): - if backend: - backend = self.attributes.get('backend-alias-' + backend, backend) - self.attributes['backend'] = backend - backend = property(getbackend,setbackend) - - def __init__(self): - self.infile = None # Source file name. - self.outfile = None # Output file name. - self.attributes = InsensitiveDict() - self.level = 0 # 0 => front matter. 1,2,3 => sect1,2,3. - self.has_errors = False # Set true if processing errors were flagged. - self.has_warnings = False # Set true if warnings were flagged. - self.safe = False # Default safe mode. - def update_attributes(self,attrs=None): - """ - Set implicit attributes and attributes in 'attrs'. - """ - t = time.time() - self.attributes['localtime'] = time_str(t) - self.attributes['localdate'] = date_str(t) - self.attributes['asciidoc-version'] = VERSION - self.attributes['asciidoc-file'] = APP_FILE - self.attributes['asciidoc-dir'] = APP_DIR - if localapp(): - self.attributes['asciidoc-confdir'] = APP_DIR - else: - self.attributes['asciidoc-confdir'] = CONF_DIR - self.attributes['user-dir'] = USER_DIR - if config.verbose: - self.attributes['verbose'] = '' - # Update with configuration file attributes. - if attrs: - self.attributes.update(attrs) - # Update with command-line attributes. - self.attributes.update(config.cmd_attrs) - # Extract miscellaneous configuration section entries from attributes. - if attrs: - config.load_miscellaneous(attrs) - config.load_miscellaneous(config.cmd_attrs) - self.attributes['newline'] = config.newline - # File name related attributes can't be overridden. - if self.infile is not None: - if self.infile and os.path.exists(self.infile): - t = os.path.getmtime(self.infile) - elif self.infile == '<stdin>': - t = time.time() - else: - t = None - if t: - self.attributes['doctime'] = time_str(t) - self.attributes['docdate'] = date_str(t) - if self.infile != '<stdin>': - self.attributes['infile'] = self.infile - self.attributes['indir'] = os.path.dirname(self.infile) - self.attributes['docfile'] = self.infile - self.attributes['docdir'] = os.path.dirname(self.infile) - self.attributes['docname'] = os.path.splitext( - os.path.basename(self.infile))[0] - if self.outfile: - if self.outfile != '<stdout>': - self.attributes['outfile'] = self.outfile - self.attributes['outdir'] = os.path.dirname(self.outfile) - if self.infile == '<stdin>': - self.attributes['docname'] = os.path.splitext( - os.path.basename(self.outfile))[0] - ext = os.path.splitext(self.outfile)[1][1:] - elif config.outfilesuffix: - ext = config.outfilesuffix[1:] - else: - ext = '' - if ext: - self.attributes['filetype'] = ext - self.attributes['filetype-'+ext] = '' - def load_lang(self): - """ - Load language configuration file. - """ - lang = self.attributes.get('lang') - if lang is None: - filename = 'lang-en.conf' # Default language file. - else: - filename = 'lang-' + lang + '.conf' - if config.load_from_dirs(filename): - self.attributes['lang'] = lang # Reinstate new lang attribute. - else: - if lang is None: - # The default language file must exist. - message.error('missing conf file: %s' % filename, halt=True) - else: - message.warning('missing language conf file: %s' % filename) - def set_deprecated_attribute(self,old,new): - """ - Ensures the 'old' name of an attribute that was renamed to 'new' is - still honored. - """ - if self.attributes.get(new) is None: - if self.attributes.get(old) is not None: - self.attributes[new] = self.attributes[old] - else: - self.attributes[old] = self.attributes[new] - def consume_attributes_and_comments(self,comments_only=False,noblanks=False): - """ - Returns True if one or more attributes or comments were consumed. - If 'noblanks' is True then consumation halts if a blank line is - encountered. - """ - result = False - finished = False - while not finished: - finished = True - if noblanks and not reader.read_next(): return result - if blocks.isnext() and 'skip' in blocks.current.options: - result = True - finished = False - blocks.current.translate() - if noblanks and not reader.read_next(): return result - if macros.isnext() and macros.current.name == 'comment': - result = True - finished = False - macros.current.translate() - if not comments_only: - if AttributeEntry.isnext(): - result = True - finished = False - AttributeEntry.translate() - if AttributeList.isnext(): - result = True - finished = False - AttributeList.translate() - return result - def parse_header(self,doctype,backend): - """ - Parses header, sets corresponding document attributes and finalizes - document doctype and backend properties. - Returns False if the document does not have a header. - 'doctype' and 'backend' are the doctype and backend option values - passed on the command-line, None if no command-line option was not - specified. - """ - assert self.level == 0 - # Skip comments and attribute entries that preceed the header. - self.consume_attributes_and_comments() - if doctype is not None: - # Command-line overrides header. - self.doctype = doctype - elif self.doctype is None: - # Was not set on command-line or in document header. - self.doctype = DEFAULT_DOCTYPE - # Process document header. - has_header = (Title.isnext() and Title.level == 0 - and AttributeList.style() != 'float') - if self.doctype == 'manpage' and not has_header: - message.error('manpage document title is mandatory',halt=True) - if has_header: - Header.parse() - # Command-line entries override header derived entries. - self.attributes.update(config.cmd_attrs) - # DEPRECATED: revision renamed to revnumber. - self.set_deprecated_attribute('revision','revnumber') - # DEPRECATED: date renamed to revdate. - self.set_deprecated_attribute('date','revdate') - if doctype is not None: - # Command-line overrides header. - self.doctype = doctype - if backend is not None: - # Command-line overrides header. - self.backend = backend - elif self.backend is None: - # Was not set on command-line or in document header. - self.backend = DEFAULT_BACKEND - else: - # Has been set in document header. - self.backend = self.backend # Translate alias in header. - assert self.doctype in ('article','manpage','book'), 'illegal document type' - return has_header - def translate(self,has_header): - if self.doctype == 'manpage': - # Translate mandatory NAME section. - if Lex.next() is not Title: - message.error('name section expected') - else: - Title.translate() - if Title.level != 1: - message.error('name section title must be at level 1') - if not isinstance(Lex.next(),Paragraph): - message.error('malformed name section body') - lines = reader.read_until(r'^$') - s = ' '.join(lines) - mo = re.match(r'^(?P<manname>.*?)\s+-\s+(?P<manpurpose>.*)$',s) - if not mo: - message.error('malformed name section body') - self.attributes['manname'] = mo.group('manname').strip() - self.attributes['manpurpose'] = mo.group('manpurpose').strip() - names = [s.strip() for s in self.attributes['manname'].split(',')] - if len(names) > 9: - message.warning('too many manpage names') - for i,name in enumerate(names): - self.attributes['manname%d' % (i+1)] = name - if has_header: - # Do postponed substitutions (backend confs have been loaded). - self.attributes['doctitle'] = Title.dosubs(self.attributes['doctitle']) - if config.header_footer: - hdr = config.subs_section('header',{}) - writer.write(hdr,trace='header') - if 'title' in self.attributes: - del self.attributes['title'] - self.consume_attributes_and_comments() - if self.doctype in ('article','book'): - # Translate 'preamble' (untitled elements between header - # and first section title). - if Lex.next() is not Title: - stag,etag = config.section2tags('preamble') - writer.write(stag,trace='preamble open') - Section.translate_body() - writer.write(etag,trace='preamble close') - elif self.doctype == 'manpage' and 'name' in config.sections: - writer.write(config.subs_section('name',{}), trace='name') - else: - self.process_author_names() - if config.header_footer: - hdr = config.subs_section('header',{}) - writer.write(hdr,trace='header') - if Lex.next() is not Title: - Section.translate_body() - # Process remaining sections. - while not reader.eof(): - if Lex.next() is not Title: - raise EAsciiDoc,'section title expected' - Section.translate() - Section.setlevel(0) # Write remaining unwritten section close tags. - # Substitute document parameters and write document footer. - if config.header_footer: - ftr = config.subs_section('footer',{}) - writer.write(ftr,trace='footer') - def parse_author(self,s): - """ Return False if the author is malformed.""" - attrs = self.attributes # Alias for readability. - s = s.strip() - mo = re.match(r'^(?P<name1>[^<>\s]+)' - '(\s+(?P<name2>[^<>\s]+))?' - '(\s+(?P<name3>[^<>\s]+))?' - '(\s+<(?P<email>\S+)>)?$',s) - if not mo: - # Names that don't match the formal specification. - if s: - attrs['firstname'] = s - return - firstname = mo.group('name1') - if mo.group('name3'): - middlename = mo.group('name2') - lastname = mo.group('name3') - else: - middlename = None - lastname = mo.group('name2') - firstname = firstname.replace('_',' ') - if middlename: - middlename = middlename.replace('_',' ') - if lastname: - lastname = lastname.replace('_',' ') - email = mo.group('email') - if firstname: - attrs['firstname'] = firstname - if middlename: - attrs['middlename'] = middlename - if lastname: - attrs['lastname'] = lastname - if email: - attrs['email'] = email - return - def process_author_names(self): - """ Calculate any missing author related attributes.""" - attrs = self.attributes # Alias for readability. - firstname = attrs.get('firstname','') - middlename = attrs.get('middlename','') - lastname = attrs.get('lastname','') - author = attrs.get('author') - initials = attrs.get('authorinitials') - if author and not (firstname or middlename or lastname): - self.parse_author(author) - attrs['author'] = author.replace('_',' ') - self.process_author_names() - return - if not author: - author = '%s %s %s' % (firstname, middlename, lastname) - author = author.strip() - author = re.sub(r'\s+',' ', author) - if not initials: - initials = (char_decode(firstname)[:1] + - char_decode(middlename)[:1] + char_decode(lastname)[:1]) - initials = char_encode(initials).upper() - names = [firstname,middlename,lastname,author,initials] - for i,v in enumerate(names): - v = config.subs_specialchars(v) - v = subs_attrs(v) - names[i] = v - firstname,middlename,lastname,author,initials = names - if firstname: - attrs['firstname'] = firstname - if middlename: - attrs['middlename'] = middlename - if lastname: - attrs['lastname'] = lastname - if author: - attrs['author'] = author - if initials: - attrs['authorinitials'] = initials - if author: - attrs['authored'] = '' - - -class Header: - """Static methods and attributes only.""" - REV_LINE_RE = r'^(\D*(?P<revnumber>.*?),)?(?P<revdate>.*?)(:\s*(?P<revremark>.*))?$' - RCS_ID_RE = r'^\$Id: \S+ (?P<revnumber>\S+) (?P<revdate>\S+) \S+ (?P<author>\S+) (\S+ )?\$$' - def __init__(self): - raise AssertionError,'no class instances allowed' - @staticmethod - def parse(): - assert Lex.next() is Title and Title.level == 0 - attrs = document.attributes # Alias for readability. - # Postpone title subs until backend conf files have been loaded. - Title.translate(skipsubs=True) - attrs['doctitle'] = Title.attributes['title'] - document.consume_attributes_and_comments(noblanks=True) - s = reader.read_next() - mo = None - if s: - # Process first header line after the title that is not a comment - # or an attribute entry. - s = reader.read() - mo = re.match(Header.RCS_ID_RE,s) - if not mo: - document.parse_author(s) - document.consume_attributes_and_comments(noblanks=True) - if reader.read_next(): - # Process second header line after the title that is not a - # comment or an attribute entry. - s = reader.read() - s = subs_attrs(s) - if s: - mo = re.match(Header.RCS_ID_RE,s) - if not mo: - mo = re.match(Header.REV_LINE_RE,s) - document.consume_attributes_and_comments(noblanks=True) - s = attrs.get('revnumber') - if s: - mo = re.match(Header.RCS_ID_RE,s) - if mo: - revnumber = mo.group('revnumber') - if revnumber: - attrs['revnumber'] = revnumber.strip() - author = mo.groupdict().get('author') - if author and 'firstname' not in attrs: - document.parse_author(author) - revremark = mo.groupdict().get('revremark') - if revremark is not None: - revremark = [revremark] - # Revision remarks can continue on following lines. - while reader.read_next(): - if document.consume_attributes_and_comments(noblanks=True): - break - revremark.append(reader.read()) - revremark = Lex.subs(revremark,['normal']) - revremark = '\n'.join(revremark).strip() - attrs['revremark'] = revremark - revdate = mo.group('revdate') - if revdate: - attrs['revdate'] = revdate.strip() - elif revnumber or revremark: - # Set revision date to ensure valid DocBook revision. - attrs['revdate'] = attrs['docdate'] - document.process_author_names() - if document.doctype == 'manpage': - # manpage title formatted like mantitle(manvolnum). - mo = re.match(r'^(?P<mantitle>.*)\((?P<manvolnum>.*)\)$', - attrs['doctitle']) - if not mo: - message.error('malformed manpage title') - else: - mantitle = mo.group('mantitle').strip() - mantitle = subs_attrs(mantitle) - if mantitle is None: - message.error('undefined attribute in manpage title') - # mantitle is lowered only if in ALL CAPS - if mantitle == mantitle.upper(): - mantitle = mantitle.lower() - attrs['mantitle'] = mantitle; - attrs['manvolnum'] = mo.group('manvolnum').strip() - -class AttributeEntry: - """Static methods and attributes only.""" - pattern = None - subs = None - name = None - name2 = None - value = None - attributes = {} # Accumulates all the parsed attribute entries. - def __init__(self): - raise AssertionError,'no class instances allowed' - @staticmethod - def isnext(): - result = False # Assume not next. - if not AttributeEntry.pattern: - pat = document.attributes.get('attributeentry-pattern') - if not pat: - message.error("[attributes] missing 'attributeentry-pattern' entry") - AttributeEntry.pattern = pat - line = reader.read_next() - if line: - # Attribute entry formatted like :<name>[.<name2>]:[ <value>] - mo = re.match(AttributeEntry.pattern,line) - if mo: - AttributeEntry.name = mo.group('attrname') - AttributeEntry.name2 = mo.group('attrname2') - AttributeEntry.value = mo.group('attrvalue') or '' - AttributeEntry.value = AttributeEntry.value.strip() - result = True - return result - @staticmethod - def translate(): - assert Lex.next() is AttributeEntry - attr = AttributeEntry # Alias for brevity. - reader.read() # Discard attribute entry from reader. - while attr.value.endswith(' +'): - if not reader.read_next(): break - attr.value = attr.value[:-1] + reader.read().strip() - if attr.name2 is not None: - # Configuration file attribute. - if attr.name2 != '': - # Section entry attribute. - section = {} - # Some sections can have name! syntax. - if attr.name in ('attributes','miscellaneous') and attr.name2[-1] == '!': - section[attr.name] = [attr.name2] - else: - section[attr.name] = ['%s=%s' % (attr.name2,attr.value)] - config.load_sections(section) - config.load_miscellaneous(config.conf_attrs) - else: - # Markup template section attribute. - if attr.name in config.sections: - config.sections[attr.name] = [attr.value] - else: - message.warning('missing configuration section: %s' % attr.name) - else: - # Normal attribute. - if attr.name[-1] == '!': - # Names like name! undefine the attribute. - attr.name = attr.name[:-1] - attr.value = None - # Strip white space and illegal name chars. - attr.name = re.sub(r'(?u)[^\w\-_]', '', attr.name).lower() - # Don't override most command-line attributes. - if attr.name in config.cmd_attrs \ - and attr.name not in ('trace','numbered'): - return - # Update document attributes with attribute value. - if attr.value is not None: - mo = re.match(r'^pass:(?P<attrs>.*)\[(?P<value>.*)\]$', attr.value) - if mo: - # Inline passthrough syntax. - attr.subs = mo.group('attrs') - attr.value = mo.group('value') # Passthrough. - else: - # Default substitution. - # DEPRECATED: attributeentry-subs - attr.subs = document.attributes.get('attributeentry-subs', - 'specialcharacters,attributes') - attr.subs = parse_options(attr.subs, SUBS_OPTIONS, - 'illegal substitution option') - attr.value = Lex.subs((attr.value,), attr.subs) - attr.value = writer.newline.join(attr.value) - document.attributes[attr.name] = attr.value - elif attr.name in document.attributes: - del document.attributes[attr.name] - attr.attributes[attr.name] = attr.value - -class AttributeList: - """Static methods and attributes only.""" - pattern = None - match = None - attrs = {} - def __init__(self): - raise AssertionError,'no class instances allowed' - @staticmethod - def initialize(): - if not 'attributelist-pattern' in document.attributes: - message.error("[attributes] missing 'attributelist-pattern' entry") - AttributeList.pattern = document.attributes['attributelist-pattern'] - @staticmethod - def isnext(): - result = False # Assume not next. - line = reader.read_next() - if line: - mo = re.match(AttributeList.pattern, line) - if mo: - AttributeList.match = mo - result = True - return result - @staticmethod - def translate(): - assert Lex.next() is AttributeList - reader.read() # Discard attribute list from reader. - attrs = {} - d = AttributeList.match.groupdict() - for k,v in d.items(): - if v is not None: - if k == 'attrlist': - v = subs_attrs(v) - if v: - parse_attributes(v, attrs) - else: - AttributeList.attrs[k] = v - AttributeList.subs(attrs) - AttributeList.attrs.update(attrs) - @staticmethod - def subs(attrs): - '''Substitute single quoted attribute values normally.''' - reo = re.compile(r"^'.*'$") - for k,v in attrs.items(): - if reo.match(str(v)): - attrs[k] = Lex.subs_1(v[1:-1], config.subsnormal) - @staticmethod - def style(): - return AttributeList.attrs.get('style') or AttributeList.attrs.get('1') - @staticmethod - def consume(d={}): - """Add attribute list to the dictionary 'd' and reset the list.""" - if AttributeList.attrs: - d.update(AttributeList.attrs) - AttributeList.attrs = {} - # Generate option attributes. - if 'options' in d: - options = parse_options(d['options'], (), 'illegal option name') - for option in options: - d[option+'-option'] = '' - -class BlockTitle: - """Static methods and attributes only.""" - title = None - pattern = None - def __init__(self): - raise AssertionError,'no class instances allowed' - @staticmethod - def isnext(): - result = False # Assume not next. - line = reader.read_next() - if line: - mo = re.match(BlockTitle.pattern,line) - if mo: - BlockTitle.title = mo.group('title') - result = True - return result - @staticmethod - def translate(): - assert Lex.next() is BlockTitle - reader.read() # Discard title from reader. - # Perform title substitutions. - if not Title.subs: - Title.subs = config.subsnormal - s = Lex.subs((BlockTitle.title,), Title.subs) - s = writer.newline.join(s) - if not s: - message.warning('blank block title') - BlockTitle.title = s - @staticmethod - def consume(d={}): - """If there is a title add it to dictionary 'd' then reset title.""" - if BlockTitle.title: - d['title'] = BlockTitle.title - BlockTitle.title = None - -class Title: - """Processes Header and Section titles. Static methods and attributes - only.""" - # Class variables - underlines = ('==','--','~~','^^','++') # Levels 0,1,2,3,4. - subs = () - pattern = None - level = 0 - attributes = {} - sectname = None - section_numbers = [0]*len(underlines) - dump_dict = {} - linecount = None # Number of lines in title (1 or 2). - def __init__(self): - raise AssertionError,'no class instances allowed' - @staticmethod - def translate(skipsubs=False): - """Parse the Title.attributes and Title.level from the reader. The - real work has already been done by parse().""" - assert Lex.next() in (Title,FloatingTitle) - # Discard title from reader. - for i in range(Title.linecount): - reader.read() - Title.setsectname() - if not skipsubs: - Title.attributes['title'] = Title.dosubs(Title.attributes['title']) - @staticmethod - def dosubs(title): - """ - Perform title substitutions. - """ - if not Title.subs: - Title.subs = config.subsnormal - title = Lex.subs((title,), Title.subs) - title = writer.newline.join(title) - if not title: - message.warning('blank section title') - return title - @staticmethod - def isnext(): - lines = reader.read_ahead(2) - return Title.parse(lines) - @staticmethod - def parse(lines): - """Parse title at start of lines tuple.""" - if len(lines) == 0: return False - if len(lines[0]) == 0: return False # Title can't be blank. - # Check for single-line titles. - result = False - for level in range(len(Title.underlines)): - k = 'sect%s' % level - if k in Title.dump_dict: - mo = re.match(Title.dump_dict[k], lines[0]) - if mo: - Title.attributes = mo.groupdict() - Title.level = level - Title.linecount = 1 - result = True - break - if not result: - # Check for double-line titles. - if not Title.pattern: return False # Single-line titles only. - if len(lines) < 2: return False - title,ul = lines[:2] - title_len = column_width(title) - ul_len = char_len(ul) - if ul_len < 2: return False - # Fast elimination check. - if ul[:2] not in Title.underlines: return False - # Length of underline must be within +-3 of title. - if not ((ul_len-3 < title_len < ul_len+3) - # Next test for backward compatibility. - or (ul_len-3 < char_len(title) < ul_len+3)): - return False - # Check for valid repetition of underline character pairs. - s = ul[:2]*((ul_len+1)/2) - if ul != s[:ul_len]: return False - # Don't be fooled by back-to-back delimited blocks, require at - # least one alphanumeric character in title. - if not re.search(r'(?u)\w',title): return False - mo = re.match(Title.pattern, title) - if mo: - Title.attributes = mo.groupdict() - Title.level = list(Title.underlines).index(ul[:2]) - Title.linecount = 2 - result = True - # Check for expected pattern match groups. - if result: - if not 'title' in Title.attributes: - message.warning('[titles] entry has no <title> group') - Title.attributes['title'] = lines[0] - for k,v in Title.attributes.items(): - if v is None: del Title.attributes[k] - try: - Title.level += int(document.attributes.get('leveloffset','0')) - except: - pass - Title.attributes['level'] = str(Title.level) - return result - @staticmethod - def load(entries): - """Load and validate [titles] section entries dictionary.""" - if 'underlines' in entries: - errmsg = 'malformed [titles] underlines entry' - try: - underlines = parse_list(entries['underlines']) - except Exception: - raise EAsciiDoc,errmsg - if len(underlines) != len(Title.underlines): - raise EAsciiDoc,errmsg - for s in underlines: - if len(s) !=2: - raise EAsciiDoc,errmsg - Title.underlines = tuple(underlines) - Title.dump_dict['underlines'] = entries['underlines'] - if 'subs' in entries: - Title.subs = parse_options(entries['subs'], SUBS_OPTIONS, - 'illegal [titles] subs entry') - Title.dump_dict['subs'] = entries['subs'] - if 'sectiontitle' in entries: - pat = entries['sectiontitle'] - if not pat or not is_re(pat): - raise EAsciiDoc,'malformed [titles] sectiontitle entry' - Title.pattern = pat - Title.dump_dict['sectiontitle'] = pat - if 'blocktitle' in entries: - pat = entries['blocktitle'] - if not pat or not is_re(pat): - raise EAsciiDoc,'malformed [titles] blocktitle entry' - BlockTitle.pattern = pat - Title.dump_dict['blocktitle'] = pat - # Load single-line title patterns. - for k in ('sect0','sect1','sect2','sect3','sect4'): - if k in entries: - pat = entries[k] - if not pat or not is_re(pat): - raise EAsciiDoc,'malformed [titles] %s entry' % k - Title.dump_dict[k] = pat - # TODO: Check we have either a Title.pattern or at least one - # single-line title pattern -- can this be done here or do we need - # check routine like the other block checkers? - @staticmethod - def dump(): - dump_section('titles',Title.dump_dict) - @staticmethod - def setsectname(): - """ - Set Title section name: - If the first positional or 'template' attribute is set use it, - next search for section title in [specialsections], - if not found use default 'sect<level>' name. - """ - sectname = AttributeList.attrs.get('1') - if sectname and sectname != 'float': - Title.sectname = sectname - elif 'template' in AttributeList.attrs: - Title.sectname = AttributeList.attrs['template'] - else: - for pat,sect in config.specialsections.items(): - mo = re.match(pat,Title.attributes['title']) - if mo: - title = mo.groupdict().get('title') - if title is not None: - Title.attributes['title'] = title.strip() - else: - Title.attributes['title'] = mo.group().strip() - Title.sectname = sect - break - else: - Title.sectname = 'sect%d' % Title.level - @staticmethod - def getnumber(level): - """Return next section number at section 'level' formatted like - 1.2.3.4.""" - number = '' - for l in range(len(Title.section_numbers)): - n = Title.section_numbers[l] - if l == 0: - continue - elif l < level: - number = '%s%d.' % (number, n) - elif l == level: - number = '%s%d.' % (number, n + 1) - Title.section_numbers[l] = n + 1 - elif l > level: - # Reset unprocessed section levels. - Title.section_numbers[l] = 0 - return number - - -class FloatingTitle(Title): - '''Floated titles are translated differently.''' - @staticmethod - def isnext(): - return Title.isnext() and AttributeList.style() == 'float' - @staticmethod - def translate(): - assert Lex.next() is FloatingTitle - Title.translate() - Section.set_id() - AttributeList.consume(Title.attributes) - template = 'floatingtitle' - if template in config.sections: - stag,etag = config.section2tags(template,Title.attributes) - writer.write(stag,trace='floating title') - else: - message.warning('missing template section: [%s]' % template) - - -class Section: - """Static methods and attributes only.""" - endtags = [] # Stack of currently open section (level,endtag) tuples. - ids = [] # List of already used ids. - def __init__(self): - raise AssertionError,'no class instances allowed' - @staticmethod - def savetag(level,etag): - """Save section end.""" - Section.endtags.append((level,etag)) - @staticmethod - def setlevel(level): - """Set document level and write open section close tags up to level.""" - while Section.endtags and Section.endtags[-1][0] >= level: - writer.write(Section.endtags.pop()[1],trace='section close') - document.level = level - @staticmethod - def gen_id(title): - """ - The normalized value of the id attribute is an NCName according to - the 'Namespaces in XML' Recommendation: - NCName ::= NCNameStartChar NCNameChar* - NCNameChar ::= NameChar - ':' - NCNameStartChar ::= Letter | '_' - NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' - """ - # Replace non-alpha numeric characters in title with underscores and - # convert to lower case. - base_id = re.sub(r'(?u)\W+', '_', char_decode(title)).strip('_').lower() - if 'ascii-ids' in document.attributes: - # Replace non-ASCII characters with ASCII equivalents. - import unicodedata - base_id = unicodedata.normalize('NFKD', base_id).encode('ascii','ignore') - base_id = char_encode(base_id) - # Prefix the ID name with idprefix attribute or underscore if not - # defined. Prefix ensures the ID does not clash with existing IDs. - idprefix = document.attributes.get('idprefix','_') - base_id = idprefix + base_id - i = 1 - while True: - if i == 1: - id = base_id - else: - id = '%s_%d' % (base_id, i) - if id not in Section.ids: - Section.ids.append(id) - return id - else: - id = base_id - i += 1 - @staticmethod - def set_id(): - if not document.attributes.get('sectids') is None \ - and 'id' not in AttributeList.attrs: - # Generate ids for sections. - AttributeList.attrs['id'] = Section.gen_id(Title.attributes['title']) - @staticmethod - def translate(): - assert Lex.next() is Title - prev_sectname = Title.sectname - Title.translate() - if Title.level == 0 and document.doctype != 'book': - message.error('only book doctypes can contain level 0 sections') - if Title.level > document.level \ - and 'basebackend-docbook' in document.attributes \ - and prev_sectname in ('colophon','abstract', \ - 'dedication','glossary','bibliography'): - message.error('%s section cannot contain sub-sections' % prev_sectname) - if Title.level > document.level+1: - # Sub-sections of multi-part book level zero Preface and Appendices - # are meant to be out of sequence. - if document.doctype == 'book' \ - and document.level == 0 \ - and Title.level == 2 \ - and prev_sectname in ('preface','appendix'): - pass - else: - message.warning('section title out of sequence: ' - 'expected level %d, got level %d' - % (document.level+1, Title.level)) - Section.set_id() - Section.setlevel(Title.level) - if 'numbered' in document.attributes: - Title.attributes['sectnum'] = Title.getnumber(document.level) - else: - Title.attributes['sectnum'] = '' - AttributeList.consume(Title.attributes) - stag,etag = config.section2tags(Title.sectname,Title.attributes) - Section.savetag(Title.level,etag) - writer.write(stag,trace='section open: level %d: %s' % - (Title.level, Title.attributes['title'])) - Section.translate_body() - @staticmethod - def translate_body(terminator=Title): - isempty = True - next = Lex.next() - while next and next is not terminator: - if isinstance(terminator,DelimitedBlock) and next is Title: - message.error('section title not permitted in delimited block') - next.translate() - next = Lex.next() - isempty = False - # The section is not empty if contains a subsection. - if next and isempty and Title.level > document.level: - isempty = False - # Report empty sections if invalid markup will result. - if isempty: - if document.backend == 'docbook' and Title.sectname != 'index': - message.error('empty section is not valid') - -class AbstractBlock: - - blocknames = [] # Global stack of names for push_blockname() and pop_blockname(). - - def __init__(self): - # Configuration parameter names common to all blocks. - self.CONF_ENTRIES = ('delimiter','options','subs','presubs','postsubs', - 'posattrs','style','.*-style','template','filter') - self.start = None # File reader cursor at start delimiter. - self.defname=None # Configuration file block definition section name. - # Configuration parameters. - self.delimiter=None # Regular expression matching block delimiter. - self.delimiter_reo=None # Compiled delimiter. - self.template=None # template section entry. - self.options=() # options entry list. - self.presubs=None # presubs/subs entry list. - self.postsubs=() # postsubs entry list. - self.filter=None # filter entry. - self.posattrs=() # posattrs entry list. - self.style=None # Default style. - self.styles=OrderedDict() # Each entry is a styles dictionary. - # Before a block is processed it's attributes (from it's - # attributes list) are merged with the block configuration parameters - # (by self.merge_attributes()) resulting in the template substitution - # dictionary (self.attributes) and the block's processing parameters - # (self.parameters). - self.attributes={} - # The names of block parameters. - self.PARAM_NAMES=('template','options','presubs','postsubs','filter') - self.parameters=None - # Leading delimiter match object. - self.mo=None - def short_name(self): - """ Return the text following the first dash in the section name.""" - i = self.defname.find('-') - if i == -1: - return self.defname - else: - return self.defname[i+1:] - def error(self, msg, cursor=None, halt=False): - message.error('[%s] %s' % (self.defname,msg), cursor, halt) - def is_conf_entry(self,param): - """Return True if param matches an allowed configuration file entry - name.""" - for s in self.CONF_ENTRIES: - if re.match('^'+s+'$',param): - return True - return False - def load(self,defname,entries): - """Update block definition from section 'entries' dictionary.""" - self.defname = defname - self.update_parameters(entries, self, all=True) - def update_parameters(self, src, dst=None, all=False): - """ - Parse processing parameters from src dictionary to dst object. - dst defaults to self.parameters. - If all is True then copy src entries that aren't parameter names. - """ - dst = dst or self.parameters - msg = '[%s] malformed entry %%s: %%s' % self.defname - def copy(obj,k,v): - if isinstance(obj,dict): - obj[k] = v - else: - setattr(obj,k,v) - for k,v in src.items(): - if not re.match(r'\d+',k) and not is_name(k): - raise EAsciiDoc, msg % (k,v) - if k == 'template': - if not is_name(v): - raise EAsciiDoc, msg % (k,v) - copy(dst,k,v) - elif k == 'filter': - copy(dst,k,v) - elif k == 'options': - if isinstance(v,str): - v = parse_options(v, (), msg % (k,v)) - # Merge with existing options. - v = tuple(set(dst.options).union(set(v))) - copy(dst,k,v) - elif k in ('subs','presubs','postsubs'): - # Subs is an alias for presubs. - if k == 'subs': k = 'presubs' - if isinstance(v,str): - v = parse_options(v, SUBS_OPTIONS, msg % (k,v)) - copy(dst,k,v) - elif k == 'delimiter': - if v and is_re(v): - copy(dst,k,v) - else: - raise EAsciiDoc, msg % (k,v) - elif k == 'style': - if is_name(v): - copy(dst,k,v) - else: - raise EAsciiDoc, msg % (k,v) - elif k == 'posattrs': - v = parse_options(v, (), msg % (k,v)) - copy(dst,k,v) - else: - mo = re.match(r'^(?P<style>.*)-style$',k) - if mo: - if not v: - raise EAsciiDoc, msg % (k,v) - style = mo.group('style') - if not is_name(style): - raise EAsciiDoc, msg % (k,v) - d = {} - if not parse_named_attributes(v,d): - raise EAsciiDoc, msg % (k,v) - if 'subs' in d: - # Subs is an alias for presubs. - d['presubs'] = d['subs'] - del d['subs'] - self.styles[style] = d - elif all or k in self.PARAM_NAMES: - copy(dst,k,v) # Derived class specific entries. - def get_param(self,name,params=None): - """ - Return named processing parameter from params dictionary. - If the parameter is not in params look in self.parameters. - """ - if params and name in params: - return params[name] - elif name in self.parameters: - return self.parameters[name] - else: - return None - def get_subs(self,params=None): - """ - Return (presubs,postsubs) tuple. - """ - presubs = self.get_param('presubs',params) - postsubs = self.get_param('postsubs',params) - return (presubs,postsubs) - def dump(self): - """Write block definition to stdout.""" - write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) - write('['+self.defname+']') - if self.is_conf_entry('delimiter'): - write('delimiter='+self.delimiter) - if self.template: - write('template='+self.template) - if self.options: - write('options='+','.join(self.options)) - if self.presubs: - if self.postsubs: - write('presubs='+','.join(self.presubs)) - else: - write('subs='+','.join(self.presubs)) - if self.postsubs: - write('postsubs='+','.join(self.postsubs)) - if self.filter: - write('filter='+self.filter) - if self.posattrs: - write('posattrs='+','.join(self.posattrs)) - if self.style: - write('style='+self.style) - if self.styles: - for style,d in self.styles.items(): - s = '' - for k,v in d.items(): s += '%s=%r,' % (k,v) - write('%s-style=%s' % (style,s[:-1])) - def validate(self): - """Validate block after the complete configuration has been loaded.""" - if self.is_conf_entry('delimiter') and not self.delimiter: - raise EAsciiDoc,'[%s] missing delimiter' % self.defname - if self.style: - if not is_name(self.style): - raise EAsciiDoc, 'illegal style name: %s' % self.style - if not self.style in self.styles: - if not isinstance(self,List): # Lists don't have templates. - message.warning('[%s] \'%s\' style not in %s' % ( - self.defname,self.style,self.styles.keys())) - # Check all styles for missing templates. - all_styles_have_template = True - for k,v in self.styles.items(): - t = v.get('template') - if t and not t in config.sections: - # Defer check if template name contains attributes. - if not re.search(r'{.+}',t): - message.warning('missing template section: [%s]' % t) - if not t: - all_styles_have_template = False - # Check we have a valid template entry or alternatively that all the - # styles have templates. - if self.is_conf_entry('template') and not 'skip' in self.options: - if self.template: - if not self.template in config.sections: - # Defer check if template name contains attributes. - if not re.search(r'{.+}',self.template): - message.warning('missing template section: [%s]' - % self.template) - elif not all_styles_have_template: - if not isinstance(self,List): # Lists don't have templates. - message.warning('missing styles templates: [%s]' % self.defname) - def isnext(self): - """Check if this block is next in document reader.""" - result = False - reader.skip_blank_lines() - if reader.read_next(): - if not self.delimiter_reo: - # Cache compiled delimiter optimization. - self.delimiter_reo = re.compile(self.delimiter) - mo = self.delimiter_reo.match(reader.read_next()) - if mo: - self.mo = mo - result = True - return result - def translate(self): - """Translate block from document reader.""" - if not self.presubs: - self.presubs = config.subsnormal - if reader.cursor: - self.start = reader.cursor[:] - def push_blockname(self, blockname=None): - ''' - On block entry set the 'blockname' attribute. - Only applies to delimited blocks, lists and tables. - ''' - if blockname is None: - blockname = self.attributes.get('style', self.short_name()).lower() - trace('push blockname', blockname) - self.blocknames.append(blockname) - document.attributes['blockname'] = blockname - def pop_blockname(self): - ''' - On block exits restore previous (parent) 'blockname' attribute or - undefine it if we're no longer inside a block. - ''' - assert len(self.blocknames) > 0 - blockname = self.blocknames.pop() - trace('pop blockname', blockname) - if len(self.blocknames) == 0: - document.attributes['blockname'] = None - else: - document.attributes['blockname'] = self.blocknames[-1] - def merge_attributes(self,attrs,params=[]): - """ - Use the current block's attribute list (attrs dictionary) to build a - dictionary of block processing parameters (self.parameters) and tag - substitution attributes (self.attributes). - - 1. Copy the default parameters (self.*) to self.parameters. - self.parameters are used internally to render the current block. - Optional params array of additional parameters. - - 2. Copy attrs to self.attributes. self.attributes are used for template - and tag substitution in the current block. - - 3. If a style attribute was specified update self.parameters with the - corresponding style parameters; if there are any style parameters - remaining add them to self.attributes (existing attribute list entries - take precedence). - - 4. Set named positional attributes in self.attributes if self.posattrs - was specified. - - 5. Finally self.parameters is updated with any corresponding parameters - specified in attrs. - - """ - - def check_array_parameter(param): - # Check the parameter is a sequence type. - if not is_array(self.parameters[param]): - message.error('malformed %s parameter: %s' % - (param, self.parameters[param])) - # Revert to default value. - self.parameters[param] = getattr(self,param) - - params = list(self.PARAM_NAMES) + params - self.attributes = {} - if self.style: - # If a default style is defined make it available in the template. - self.attributes['style'] = self.style - self.attributes.update(attrs) - # Calculate dynamic block parameters. - # Start with configuration file defaults. - self.parameters = AttrDict() - for name in params: - self.parameters[name] = getattr(self,name) - # Load the selected style attributes. - posattrs = self.posattrs - if posattrs and posattrs[0] == 'style': - # Positional attribute style has highest precedence. - style = self.attributes.get('1') - else: - style = None - if not style: - # Use explicit style attribute, fall back to default style. - style = self.attributes.get('style',self.style) - if style: - if not is_name(style): - message.error('illegal style name: %s' % style) - style = self.style - # Lists have implicit styles and do their own style checks. - elif style not in self.styles and not isinstance(self,List): - message.warning('missing style: [%s]: %s' % (self.defname,style)) - style = self.style - if style in self.styles: - self.attributes['style'] = style - for k,v in self.styles[style].items(): - if k == 'posattrs': - posattrs = v - elif k in params: - self.parameters[k] = v - elif not k in self.attributes: - # Style attributes don't take precedence over explicit. - self.attributes[k] = v - # Set named positional attributes. - for i,v in enumerate(posattrs): - if str(i+1) in self.attributes: - self.attributes[v] = self.attributes[str(i+1)] - # Override config and style attributes with attribute list attributes. - self.update_parameters(attrs) - check_array_parameter('options') - check_array_parameter('presubs') - check_array_parameter('postsubs') - -class AbstractBlocks: - """List of block definitions.""" - PREFIX = '' # Conf file section name prefix set in derived classes. - BLOCK_TYPE = None # Block type set in derived classes. - def __init__(self): - self.current=None - self.blocks = [] # List of Block objects. - self.default = None # Default Block. - self.delimiters = None # Combined delimiters regular expression. - def load(self,sections): - """Load block definition from 'sections' dictionary.""" - for k in sections.keys(): - if re.match(r'^'+ self.PREFIX + r'.+$',k): - d = {} - parse_entries(sections.get(k,()),d) - for b in self.blocks: - if b.defname == k: - break - else: - b = self.BLOCK_TYPE() - self.blocks.append(b) - try: - b.load(k,d) - except EAsciiDoc,e: - raise EAsciiDoc,'[%s] %s' % (k,str(e)) - def dump(self): - for b in self.blocks: - b.dump() - def isnext(self): - for b in self.blocks: - if b.isnext(): - self.current = b - return True; - return False - def validate(self): - """Validate the block definitions.""" - # Validate delimiters and build combined lists delimiter pattern. - delimiters = [] - for b in self.blocks: - assert b.__class__ is self.BLOCK_TYPE - b.validate() - if b.delimiter: - delimiters.append(b.delimiter) - self.delimiters = re_join(delimiters) - -class Paragraph(AbstractBlock): - def __init__(self): - AbstractBlock.__init__(self) - self.text=None # Text in first line of paragraph. - def load(self,name,entries): - AbstractBlock.load(self,name,entries) - def dump(self): - AbstractBlock.dump(self) - write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) - write('') - def isnext(self): - result = AbstractBlock.isnext(self) - if result: - self.text = self.mo.groupdict().get('text') - return result - def translate(self): - AbstractBlock.translate(self) - attrs = self.mo.groupdict().copy() - if 'text' in attrs: del attrs['text'] - BlockTitle.consume(attrs) - AttributeList.consume(attrs) - self.merge_attributes(attrs) - reader.read() # Discard (already parsed item first line). - body = reader.read_until(paragraphs.terminators) - body = [self.text] + list(body) - presubs = self.parameters.presubs - postsubs = self.parameters.postsubs - if document.attributes.get('plaintext') is None: - body = Lex.set_margin(body) # Move body to left margin. - body = Lex.subs(body,presubs) - template = self.parameters.template - template = subs_attrs(template,attrs) - stag = config.section2tags(template, self.attributes,skipend=True)[0] - if self.parameters.filter: - body = filter_lines(self.parameters.filter,body,self.attributes) - body = Lex.subs(body,postsubs) - etag = config.section2tags(template, self.attributes,skipstart=True)[1] - # Write start tag, content, end tag. - writer.write(dovetail_tags(stag,body,etag),trace='paragraph') - -class Paragraphs(AbstractBlocks): - """List of paragraph definitions.""" - BLOCK_TYPE = Paragraph - PREFIX = 'paradef-' - def __init__(self): - AbstractBlocks.__init__(self) - self.terminators=None # List of compiled re's. - def initialize(self): - self.terminators = [ - re.compile(r'^\+$|^$'), - re.compile(AttributeList.pattern), - re.compile(blocks.delimiters), - re.compile(tables.delimiters), - re.compile(tables_OLD.delimiters), - ] - def load(self,sections): - AbstractBlocks.load(self,sections) - def validate(self): - AbstractBlocks.validate(self) - # Check we have a default paragraph definition, put it last in list. - for b in self.blocks: - if b.defname == 'paradef-default': - self.blocks.append(b) - self.default = b - self.blocks.remove(b) - break - else: - raise EAsciiDoc,'missing section: [paradef-default]' - -class List(AbstractBlock): - NUMBER_STYLES= ('arabic','loweralpha','upperalpha','lowerroman', - 'upperroman') - def __init__(self): - AbstractBlock.__init__(self) - self.CONF_ENTRIES += ('type','tags') - self.PARAM_NAMES += ('tags',) - # listdef conf file parameters. - self.type=None - self.tags=None # Name of listtags-<tags> conf section. - # Calculated parameters. - self.tag=None # Current tags AttrDict. - self.label=None # List item label (labeled lists). - self.text=None # Text in first line of list item. - self.index=None # Matched delimiter 'index' group (numbered lists). - self.type=None # List type ('numbered','bulleted','labeled'). - self.ordinal=None # Current list item ordinal number (1..) - self.number_style=None # Current numbered list style ('arabic'..) - def load(self,name,entries): - AbstractBlock.load(self,name,entries) - def dump(self): - AbstractBlock.dump(self) - write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) - write('type='+self.type) - write('tags='+self.tags) - write('') - def validate(self): - AbstractBlock.validate(self) - tags = [self.tags] - tags += [s['tags'] for s in self.styles.values() if 'tags' in s] - for t in tags: - if t not in lists.tags: - self.error('missing section: [listtags-%s]' % t,halt=True) - def isnext(self): - result = AbstractBlock.isnext(self) - if result: - self.label = self.mo.groupdict().get('label') - self.text = self.mo.groupdict().get('text') - self.index = self.mo.groupdict().get('index') - return result - def translate_entry(self): - assert self.type == 'labeled' - entrytag = subs_tag(self.tag.entry, self.attributes) - labeltag = subs_tag(self.tag.label, self.attributes) - writer.write(entrytag[0],trace='list entry open') - writer.write(labeltag[0],trace='list label open') - # Write labels. - while Lex.next() is self: - reader.read() # Discard (already parsed item first line). - writer.write_tag(self.tag.term, [self.label], - self.presubs, self.attributes,trace='list term') - if self.text: break - writer.write(labeltag[1],trace='list label close') - # Write item text. - self.translate_item() - writer.write(entrytag[1],trace='list entry close') - def translate_item(self): - if self.type == 'callout': - self.attributes['coids'] = calloutmap.calloutids(self.ordinal) - itemtag = subs_tag(self.tag.item, self.attributes) - writer.write(itemtag[0],trace='list item open') - # Write ItemText. - text = reader.read_until(lists.terminators) - if self.text: - text = [self.text] + list(text) - if text: - writer.write_tag(self.tag.text, text, self.presubs, self.attributes,trace='list text') - # Process explicit and implicit list item continuations. - while True: - continuation = reader.read_next() == '+' - if continuation: reader.read() # Discard continuation line. - while Lex.next() in (BlockTitle,AttributeList): - # Consume continued element title and attributes. - Lex.next().translate() - if not continuation and BlockTitle.title: - # Titled elements terminate the list. - break - next = Lex.next() - if next in lists.open: - break - elif isinstance(next,List): - next.translate() - elif isinstance(next,Paragraph) and 'listelement' in next.options: - next.translate() - elif continuation: - # This is where continued elements are processed. - if next is Title: - message.error('section title not allowed in list item',halt=True) - next.translate() - else: - break - writer.write(itemtag[1],trace='list item close') - - @staticmethod - def calc_style(index): - """Return the numbered list style ('arabic'...) of the list item index. - Return None if unrecognized style.""" - if re.match(r'^\d+[\.>]$', index): - style = 'arabic' - elif re.match(r'^[ivx]+\)$', index): - style = 'lowerroman' - elif re.match(r'^[IVX]+\)$', index): - style = 'upperroman' - elif re.match(r'^[a-z]\.$', index): - style = 'loweralpha' - elif re.match(r'^[A-Z]\.$', index): - style = 'upperalpha' - else: - assert False - return style - - @staticmethod - def calc_index(index,style): - """Return the ordinal number of (1...) of the list item index - for the given list style.""" - def roman_to_int(roman): - roman = roman.lower() - digits = {'i':1,'v':5,'x':10} - result = 0 - for i in range(len(roman)): - digit = digits[roman[i]] - # If next digit is larger this digit is negative. - if i+1 < len(roman) and digits[roman[i+1]] > digit: - result -= digit - else: - result += digit - return result - index = index[:-1] - if style == 'arabic': - ordinal = int(index) - elif style == 'lowerroman': - ordinal = roman_to_int(index) - elif style == 'upperroman': - ordinal = roman_to_int(index) - elif style == 'loweralpha': - ordinal = ord(index) - ord('a') + 1 - elif style == 'upperalpha': - ordinal = ord(index) - ord('A') + 1 - else: - assert False - return ordinal - - def check_index(self): - """Check calculated self.ordinal (1,2,...) against the item number - in the document (self.index) and check the number style is the same as - the first item (self.number_style).""" - assert self.type in ('numbered','callout') - if self.index: - style = self.calc_style(self.index) - if style != self.number_style: - message.warning('list item style: expected %s got %s' % - (self.number_style,style), offset=1) - ordinal = self.calc_index(self.index,style) - if ordinal != self.ordinal: - message.warning('list item index: expected %s got %s' % - (self.ordinal,ordinal), offset=1) - - def check_tags(self): - """ Check that all necessary tags are present. """ - tags = set(Lists.TAGS) - if self.type != 'labeled': - tags = tags.difference(['entry','label','term']) - missing = tags.difference(self.tag.keys()) - if missing: - self.error('missing tag(s): %s' % ','.join(missing), halt=True) - def translate(self): - AbstractBlock.translate(self) - if self.short_name() in ('bibliography','glossary','qanda'): - message.deprecated('old %s list syntax' % self.short_name()) - lists.open.append(self) - attrs = self.mo.groupdict().copy() - for k in ('label','text','index'): - if k in attrs: del attrs[k] - if self.index: - # Set the numbering style from first list item. - attrs['style'] = self.calc_style(self.index) - BlockTitle.consume(attrs) - AttributeList.consume(attrs) - self.merge_attributes(attrs,['tags']) - self.push_blockname() - if self.type in ('numbered','callout'): - self.number_style = self.attributes.get('style') - if self.number_style not in self.NUMBER_STYLES: - message.error('illegal numbered list style: %s' % self.number_style) - # Fall back to default style. - self.attributes['style'] = self.number_style = self.style - self.tag = lists.tags[self.parameters.tags] - self.check_tags() - if 'width' in self.attributes: - # Set horizontal list 'labelwidth' and 'itemwidth' attributes. - v = str(self.attributes['width']) - mo = re.match(r'^(\d{1,2})%?$',v) - if mo: - labelwidth = int(mo.group(1)) - self.attributes['labelwidth'] = str(labelwidth) - self.attributes['itemwidth'] = str(100-labelwidth) - else: - self.error('illegal attribute value: width="%s"' % v) - stag,etag = subs_tag(self.tag.list, self.attributes) - if stag: - writer.write(stag,trace='list open') - self.ordinal = 0 - # Process list till list syntax changes or there is a new title. - while Lex.next() is self and not BlockTitle.title: - self.ordinal += 1 - document.attributes['listindex'] = str(self.ordinal) - if self.type in ('numbered','callout'): - self.check_index() - if self.type in ('bulleted','numbered','callout'): - reader.read() # Discard (already parsed item first line). - self.translate_item() - elif self.type == 'labeled': - self.translate_entry() - else: - raise AssertionError,'illegal [%s] list type' % self.defname - if etag: - writer.write(etag,trace='list close') - if self.type == 'callout': - calloutmap.validate(self.ordinal) - calloutmap.listclose() - lists.open.pop() - if len(lists.open): - document.attributes['listindex'] = str(lists.open[-1].ordinal) - self.pop_blockname() - -class Lists(AbstractBlocks): - """List of List objects.""" - BLOCK_TYPE = List - PREFIX = 'listdef-' - TYPES = ('bulleted','numbered','labeled','callout') - TAGS = ('list', 'entry','item','text', 'label','term') - def __init__(self): - AbstractBlocks.__init__(self) - self.open = [] # A stack of the current and parent lists. - self.tags={} # List tags dictionary. Each entry is a tags AttrDict. - self.terminators=None # List of compiled re's. - def initialize(self): - self.terminators = [ - re.compile(r'^\+$|^$'), - re.compile(AttributeList.pattern), - re.compile(lists.delimiters), - re.compile(blocks.delimiters), - re.compile(tables.delimiters), - re.compile(tables_OLD.delimiters), - ] - def load(self,sections): - AbstractBlocks.load(self,sections) - self.load_tags(sections) - def load_tags(self,sections): - """ - Load listtags-* conf file sections to self.tags. - """ - for section in sections.keys(): - mo = re.match(r'^listtags-(?P<name>\w+)$',section) - if mo: - name = mo.group('name') - if name in self.tags: - d = self.tags[name] - else: - d = AttrDict() - parse_entries(sections.get(section,()),d) - for k in d.keys(): - if k not in self.TAGS: - message.warning('[%s] contains illegal list tag: %s' % - (section,k)) - self.tags[name] = d - def validate(self): - AbstractBlocks.validate(self) - for b in self.blocks: - # Check list has valid type. - if not b.type in Lists.TYPES: - raise EAsciiDoc,'[%s] illegal type' % b.defname - b.validate() - def dump(self): - AbstractBlocks.dump(self) - for k,v in self.tags.items(): - dump_section('listtags-'+k, v) - - -class DelimitedBlock(AbstractBlock): - def __init__(self): - AbstractBlock.__init__(self) - def load(self,name,entries): - AbstractBlock.load(self,name,entries) - def dump(self): - AbstractBlock.dump(self) - write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) - write('') - def isnext(self): - return AbstractBlock.isnext(self) - def translate(self): - AbstractBlock.translate(self) - reader.read() # Discard delimiter. - self.merge_attributes(AttributeList.attrs) - if not 'skip' in self.parameters.options: - BlockTitle.consume(self.attributes) - AttributeList.consume() - self.push_blockname() - options = self.parameters.options - if 'skip' in options: - reader.read_until(self.delimiter,same_file=True) - elif safe() and self.defname == 'blockdef-backend': - message.unsafe('Backend Block') - reader.read_until(self.delimiter,same_file=True) - else: - template = self.parameters.template - template = subs_attrs(template,self.attributes) - name = self.short_name()+' block' - if 'sectionbody' in options: - # The body is treated like a section body. - stag,etag = config.section2tags(template,self.attributes) - writer.write(stag,trace=name+' open') - Section.translate_body(self) - writer.write(etag,trace=name+' close') - else: - stag = config.section2tags(template,self.attributes,skipend=True)[0] - body = reader.read_until(self.delimiter,same_file=True) - presubs = self.parameters.presubs - postsubs = self.parameters.postsubs - body = Lex.subs(body,presubs) - if self.parameters.filter: - body = filter_lines(self.parameters.filter,body,self.attributes) - body = Lex.subs(body,postsubs) - # Write start tag, content, end tag. - etag = config.section2tags(template,self.attributes,skipstart=True)[1] - writer.write(dovetail_tags(stag,body,etag),trace=name) - trace(self.short_name()+' block close',etag) - if reader.eof(): - self.error('missing closing delimiter',self.start) - else: - delimiter = reader.read() # Discard delimiter line. - assert re.match(self.delimiter,delimiter) - self.pop_blockname() - -class DelimitedBlocks(AbstractBlocks): - """List of delimited blocks.""" - BLOCK_TYPE = DelimitedBlock - PREFIX = 'blockdef-' - def __init__(self): - AbstractBlocks.__init__(self) - def load(self,sections): - """Update blocks defined in 'sections' dictionary.""" - AbstractBlocks.load(self,sections) - def validate(self): - AbstractBlocks.validate(self) - -class Column: - """Table column.""" - def __init__(self, width=None, align_spec=None, style=None): - self.width = width or '1' - self.halign, self.valign = Table.parse_align_spec(align_spec) - self.style = style # Style name or None. - # Calculated attribute values. - self.abswidth = None # 1.. (page units). - self.pcwidth = None # 1..99 (percentage). - -class Cell: - def __init__(self, data, span_spec=None, align_spec=None, style=None): - self.data = data - self.span, self.vspan = Table.parse_span_spec(span_spec) - self.halign, self.valign = Table.parse_align_spec(align_spec) - self.style = style - self.reserved = False - def __repr__(self): - return '<Cell: %d.%d %s.%s %s "%s">' % ( - self.span, self.vspan, - self.halign, self.valign, - self.style or '', - self.data) - def clone_reserve(self): - """Return a clone of self to reserve vertically spanned cell.""" - result = copy.copy(self) - result.vspan = 1 - result.reserved = True - return result - -class Table(AbstractBlock): - ALIGN = {'<':'left', '>':'right', '^':'center'} - VALIGN = {'<':'top', '>':'bottom', '^':'middle'} - FORMATS = ('psv','csv','dsv') - SEPARATORS = dict( - csv=',', - dsv=r':|\n', - # The count and align group matches are not exact. - psv=r'((?<!\S)((?P<span>[\d.]+)(?P<op>[*+]))?(?P<align>[<\^>.]{,3})?(?P<style>[a-z])?)?\|' - ) - def __init__(self): - AbstractBlock.__init__(self) - self.CONF_ENTRIES += ('format','tags','separator') - # tabledef conf file parameters. - self.format='psv' - self.separator=None - self.tags=None # Name of tabletags-<tags> conf section. - # Calculated parameters. - self.abswidth=None # 1.. (page units). - self.pcwidth = None # 1..99 (percentage). - self.rows=[] # Parsed rows, each row is a list of Cells. - self.columns=[] # List of Columns. - @staticmethod - def parse_align_spec(align_spec): - """ - Parse AsciiDoc cell alignment specifier and return 2-tuple with - horizonatal and vertical alignment names. Unspecified alignments - set to None. - """ - result = (None, None) - if align_spec: - mo = re.match(r'^([<\^>])?(\.([<\^>]))?$', align_spec) - if mo: - result = (Table.ALIGN.get(mo.group(1)), - Table.VALIGN.get(mo.group(3))) - return result - @staticmethod - def parse_span_spec(span_spec): - """ - Parse AsciiDoc cell span specifier and return 2-tuple with horizonatal - and vertical span counts. Set default values (1,1) if not - specified. - """ - result = (None, None) - if span_spec: - mo = re.match(r'^(\d+)?(\.(\d+))?$', span_spec) - if mo: - result = (mo.group(1) and int(mo.group(1)), - mo.group(3) and int(mo.group(3))) - return (result[0] or 1, result[1] or 1) - def load(self,name,entries): - AbstractBlock.load(self,name,entries) - def dump(self): - AbstractBlock.dump(self) - write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) - write('format='+self.format) - write('') - def validate(self): - AbstractBlock.validate(self) - if self.format not in Table.FORMATS: - self.error('illegal format=%s' % self.format,halt=True) - self.tags = self.tags or 'default' - tags = [self.tags] - tags += [s['tags'] for s in self.styles.values() if 'tags' in s] - for t in tags: - if t not in tables.tags: - self.error('missing section: [tabletags-%s]' % t,halt=True) - if self.separator: - # Evaluate escape characters. - self.separator = literal_eval('"'+self.separator+'"') - #TODO: Move to class Tables - # Check global table parameters. - elif config.pagewidth is None: - self.error('missing [miscellaneous] entry: pagewidth') - elif config.pageunits is None: - self.error('missing [miscellaneous] entry: pageunits') - def validate_attributes(self): - """Validate and parse table attributes.""" - # Set defaults. - format = self.format - tags = self.tags - separator = self.separator - abswidth = float(config.pagewidth) - pcwidth = 100.0 - for k,v in self.attributes.items(): - if k == 'format': - if v not in self.FORMATS: - self.error('illegal %s=%s' % (k,v)) - else: - format = v - elif k == 'tags': - if v not in tables.tags: - self.error('illegal %s=%s' % (k,v)) - else: - tags = v - elif k == 'separator': - separator = v - elif k == 'width': - if not re.match(r'^\d{1,3}%$',v) or int(v[:-1]) > 100: - self.error('illegal %s=%s' % (k,v)) - else: - abswidth = float(v[:-1])/100 * config.pagewidth - pcwidth = float(v[:-1]) - # Calculate separator if it has not been specified. - if not separator: - separator = Table.SEPARATORS[format] - if format == 'csv': - if len(separator) > 1: - self.error('illegal csv separator=%s' % separator) - separator = ',' - else: - if not is_re(separator): - self.error('illegal regular expression: separator=%s' % - separator) - self.parameters.format = format - self.parameters.tags = tags - self.parameters.separator = separator - self.abswidth = abswidth - self.pcwidth = pcwidth - def get_tags(self,params): - tags = self.get_param('tags',params) - assert(tags and tags in tables.tags) - return tables.tags[tags] - def get_style(self,prefix): - """ - Return the style dictionary whose name starts with 'prefix'. - """ - if prefix is None: - return None - names = self.styles.keys() - names.sort() - for name in names: - if name.startswith(prefix): - return self.styles[name] - else: - self.error('missing style: %s*' % prefix) - return None - def parse_cols(self, cols, halign, valign): - """ - Build list of column objects from table 'cols', 'halign' and 'valign' - attributes. - """ - # [<multiplier>*][<align>][<width>][<style>] - COLS_RE1 = r'^((?P<count>\d+)\*)?(?P<align>[<\^>.]{,3})?(?P<width>\d+%?)?(?P<style>[a-z]\w*)?$' - # [<multiplier>*][<width>][<align>][<style>] - COLS_RE2 = r'^((?P<count>\d+)\*)?(?P<width>\d+%?)?(?P<align>[<\^>.]{,3})?(?P<style>[a-z]\w*)?$' - reo1 = re.compile(COLS_RE1) - reo2 = re.compile(COLS_RE2) - cols = str(cols) - if re.match(r'^\d+$',cols): - for i in range(int(cols)): - self.columns.append(Column()) - else: - for col in re.split(r'\s*,\s*',cols): - mo = reo1.match(col) - if not mo: - mo = reo2.match(col) - if mo: - count = int(mo.groupdict().get('count') or 1) - for i in range(count): - self.columns.append( - Column(mo.group('width'), mo.group('align'), - self.get_style(mo.group('style'))) - ) - else: - self.error('illegal column spec: %s' % col,self.start) - # Set column (and indirectly cell) default alignments. - for col in self.columns: - col.halign = col.halign or halign or document.attributes.get('halign') or 'left' - col.valign = col.valign or valign or document.attributes.get('valign') or 'top' - # Validate widths and calculate missing widths. - n = 0; percents = 0; props = 0 - for col in self.columns: - if col.width: - if col.width[-1] == '%': percents += int(col.width[:-1]) - else: props += int(col.width) - n += 1 - if percents > 0 and props > 0: - self.error('mixed percent and proportional widths: %s' - % cols,self.start) - pcunits = percents > 0 - # Fill in missing widths. - if n < len(self.columns) and percents < 100: - if pcunits: - width = float(100 - percents)/float(len(self.columns) - n) - else: - width = 1 - for col in self.columns: - if not col.width: - if pcunits: - col.width = str(int(width))+'%' - percents += width - else: - col.width = str(width) - props += width - # Calculate column alignment and absolute and percent width values. - percents = 0 - for col in self.columns: - if pcunits: - col.pcwidth = float(col.width[:-1]) - else: - col.pcwidth = (float(col.width)/props)*100 - col.abswidth = self.abswidth * (col.pcwidth/100) - if config.pageunits in ('cm','mm','in','em'): - col.abswidth = '%.2f' % round(col.abswidth,2) - else: - col.abswidth = '%d' % round(col.abswidth) - percents += col.pcwidth - col.pcwidth = int(col.pcwidth) - if round(percents) > 100: - self.error('total width exceeds 100%%: %s' % cols,self.start) - elif round(percents) < 100: - self.error('total width less than 100%%: %s' % cols,self.start) - def build_colspecs(self): - """ - Generate column related substitution attributes. - """ - cols = [] - i = 1 - for col in self.columns: - colspec = self.get_tags(col.style).colspec - if colspec: - self.attributes['halign'] = col.halign - self.attributes['valign'] = col.valign - self.attributes['colabswidth'] = col.abswidth - self.attributes['colpcwidth'] = col.pcwidth - self.attributes['colnumber'] = str(i) - s = subs_attrs(colspec, self.attributes) - if not s: - message.warning('colspec dropped: contains undefined attribute') - else: - cols.append(s) - i += 1 - if cols: - self.attributes['colspecs'] = writer.newline.join(cols) - def parse_rows(self, text): - """ - Parse the table source text into self.rows (a list of rows, each row - is a list of Cells. - """ - reserved = {} # Reserved cells generated by rowspans. - if self.parameters.format in ('psv','dsv'): - colcount = len(self.columns) - parsed_cells = self.parse_psv_dsv(text) - ri = 0 # Current row index 0.. - ci = 0 # Column counter 0..colcount - row = [] - i = 0 - while True: - resv = reserved.get(ri) and reserved[ri].get(ci) - if resv: - # We have a cell generated by a previous row span so - # process it before continuing with the current parsed - # cell. - cell = resv - else: - if i >= len(parsed_cells): - break # No more parsed or reserved cells. - cell = parsed_cells[i] - i += 1 - if cell.vspan > 1: - # Generate ensuing reserved cells spanned vertically by - # the current cell. - for j in range(1, cell.vspan): - if not ri+j in reserved: - reserved[ri+j] = {} - reserved[ri+j][ci] = cell.clone_reserve() - ci += cell.span - if ci <= colcount: - row.append(cell) - if ci >= colcount: - self.rows.append(row) - ri += 1 - row = [] - ci = 0 - elif self.parameters.format == 'csv': - self.rows = self.parse_csv(text) - else: - assert True,'illegal table format' - # Check for empty rows containing only reserved (spanned) cells. - for ri,row in enumerate(self.rows): - empty = True - for cell in row: - if not cell.reserved: - empty = False - break - if empty: - message.warning('table row %d: empty spanned row' % (ri+1)) - # Check that all row spans match. - for ri,row in enumerate(self.rows): - row_span = 0 - for cell in row: - row_span += cell.span - if ri == 0: - header_span = row_span - if row_span < header_span: - message.warning('table row %d: does not span all columns' % (ri+1)) - if row_span > header_span: - message.warning('table row %d: exceeds columns span' % (ri+1)) - def subs_rows(self, rows, rowtype='body'): - """ - Return a string of output markup from a list of rows, each row - is a list of raw data text. - """ - tags = tables.tags[self.parameters.tags] - if rowtype == 'header': - rtag = tags.headrow - elif rowtype == 'footer': - rtag = tags.footrow - else: - rtag = tags.bodyrow - result = [] - stag,etag = subs_tag(rtag,self.attributes) - for row in rows: - result.append(stag) - result += self.subs_row(row,rowtype) - result.append(etag) - return writer.newline.join(result) - def subs_row(self, row, rowtype): - """ - Substitute the list of Cells using the data tag. - Returns a list of marked up table cell elements. - """ - result = [] - i = 0 - for cell in row: - if cell.reserved: - # Skip vertically spanned placeholders. - i += cell.span - continue - if i >= len(self.columns): - break # Skip cells outside the header width. - col = self.columns[i] - self.attributes['halign'] = cell.halign or col.halign - self.attributes['valign'] = cell.valign or col.valign - self.attributes['colabswidth'] = col.abswidth - self.attributes['colpcwidth'] = col.pcwidth - self.attributes['colnumber'] = str(i+1) - self.attributes['colspan'] = str(cell.span) - self.attributes['colstart'] = self.attributes['colnumber'] - self.attributes['colend'] = str(i+cell.span) - self.attributes['rowspan'] = str(cell.vspan) - self.attributes['morerows'] = str(cell.vspan-1) - # Fill missing column data with blanks. - if i > len(self.columns) - 1: - data = '' - else: - data = cell.data - if rowtype == 'header': - # Use table style unless overriden by cell style. - colstyle = cell.style - else: - # If the cell style is not defined use the column style. - colstyle = cell.style or col.style - tags = self.get_tags(colstyle) - presubs,postsubs = self.get_subs(colstyle) - data = [data] - data = Lex.subs(data, presubs) - data = filter_lines(self.get_param('filter',colstyle), - data, self.attributes) - data = Lex.subs(data, postsubs) - if rowtype != 'header': - ptag = tags.paragraph - if ptag: - stag,etag = subs_tag(ptag,self.attributes) - text = '\n'.join(data).strip() - data = [] - for para in re.split(r'\n{2,}',text): - data += dovetail_tags([stag],para.split('\n'),[etag]) - if rowtype == 'header': - dtag = tags.headdata - elif rowtype == 'footer': - dtag = tags.footdata - else: - dtag = tags.bodydata - stag,etag = subs_tag(dtag,self.attributes) - result = result + dovetail_tags([stag],data,[etag]) - i += cell.span - return result - def parse_csv(self,text): - """ - Parse the table source text and return a list of rows, each row - is a list of Cells. - """ - import StringIO - import csv - rows = [] - rdr = csv.reader(StringIO.StringIO('\r\n'.join(text)), - delimiter=self.parameters.separator, skipinitialspace=True) - try: - for row in rdr: - rows.append([Cell(data) for data in row]) - except Exception: - self.error('csv parse error: %s' % row) - return rows - def parse_psv_dsv(self,text): - """ - Parse list of PSV or DSV table source text lines and return a list of - Cells. - """ - def append_cell(data, span_spec, op, align_spec, style): - op = op or '+' - if op == '*': # Cell multiplier. - span = Table.parse_span_spec(span_spec)[0] - for i in range(span): - cells.append(Cell(data, '1', align_spec, style)) - elif op == '+': # Column spanner. - cells.append(Cell(data, span_spec, align_spec, style)) - else: - self.error('illegal table cell operator') - text = '\n'.join(text) - separator = '(?msu)'+self.parameters.separator - format = self.parameters.format - start = 0 - span = None - op = None - align = None - style = None - cells = [] - data = '' - for mo in re.finditer(separator,text): - data += text[start:mo.start()] - if data.endswith('\\'): - data = data[:-1]+mo.group() # Reinstate escaped separators. - else: - append_cell(data, span, op, align, style) - span = mo.groupdict().get('span') - op = mo.groupdict().get('op') - align = mo.groupdict().get('align') - style = mo.groupdict().get('style') - if style: - style = self.get_style(style) - data = '' - start = mo.end() - # Last cell follows final separator. - data += text[start:] - append_cell(data, span, op, align, style) - # We expect a dummy blank item preceeding first PSV cell. - if format == 'psv': - if cells[0].data.strip() != '': - self.error('missing leading separator: %s' % separator, - self.start) - else: - cells.pop(0) - return cells - def translate(self): - AbstractBlock.translate(self) - reader.read() # Discard delimiter. - # Reset instance specific properties. - self.columns = [] - self.rows = [] - attrs = {} - BlockTitle.consume(attrs) - # Mix in document attribute list. - AttributeList.consume(attrs) - self.merge_attributes(attrs) - self.validate_attributes() - # Add global and calculated configuration parameters. - self.attributes['pagewidth'] = config.pagewidth - self.attributes['pageunits'] = config.pageunits - self.attributes['tableabswidth'] = int(self.abswidth) - self.attributes['tablepcwidth'] = int(self.pcwidth) - # Read the entire table. - text = reader.read_until(self.delimiter) - if reader.eof(): - self.error('missing closing delimiter',self.start) - else: - delimiter = reader.read() # Discard closing delimiter. - assert re.match(self.delimiter,delimiter) - if len(text) == 0: - message.warning('[%s] table is empty' % self.defname) - return - self.push_blockname('table') - cols = attrs.get('cols') - if not cols: - # Calculate column count from number of items in first line. - if self.parameters.format == 'csv': - cols = text[0].count(self.parameters.separator) + 1 - else: - cols = 0 - for cell in self.parse_psv_dsv(text[:1]): - cols += cell.span - self.parse_cols(cols, attrs.get('halign'), attrs.get('valign')) - # Set calculated attributes. - self.attributes['colcount'] = len(self.columns) - self.build_colspecs() - self.parse_rows(text) - # The 'rowcount' attribute is used by the experimental LaTeX backend. - self.attributes['rowcount'] = str(len(self.rows)) - # Generate headrows, footrows, bodyrows. - # Headrow, footrow and bodyrow data replaces same named attributes in - # the table markup template. In order to ensure this data does not get - # a second attribute substitution (which would interfere with any - # already substituted inline passthroughs) unique placeholders are used - # (the tab character does not appear elsewhere since it is expanded on - # input) which are replaced after template attribute substitution. - headrows = footrows = bodyrows = None - if self.rows and 'header' in self.parameters.options: - headrows = self.subs_rows(self.rows[0:1],'header') - self.attributes['headrows'] = '\x07headrows\x07' - self.rows = self.rows[1:] - if self.rows and 'footer' in self.parameters.options: - footrows = self.subs_rows( self.rows[-1:], 'footer') - self.attributes['footrows'] = '\x07footrows\x07' - self.rows = self.rows[:-1] - if self.rows: - bodyrows = self.subs_rows(self.rows) - self.attributes['bodyrows'] = '\x07bodyrows\x07' - table = subs_attrs(config.sections[self.parameters.template], - self.attributes) - table = writer.newline.join(table) - # Before we finish replace the table head, foot and body place holders - # with the real data. - if headrows: - table = table.replace('\x07headrows\x07', headrows, 1) - if footrows: - table = table.replace('\x07footrows\x07', footrows, 1) - if bodyrows: - table = table.replace('\x07bodyrows\x07', bodyrows, 1) - writer.write(table,trace='table') - self.pop_blockname() - -class Tables(AbstractBlocks): - """List of tables.""" - BLOCK_TYPE = Table - PREFIX = 'tabledef-' - TAGS = ('colspec', 'headrow','footrow','bodyrow', - 'headdata','footdata', 'bodydata','paragraph') - def __init__(self): - AbstractBlocks.__init__(self) - # Table tags dictionary. Each entry is a tags dictionary. - self.tags={} - def load(self,sections): - AbstractBlocks.load(self,sections) - self.load_tags(sections) - def load_tags(self,sections): - """ - Load tabletags-* conf file sections to self.tags. - """ - for section in sections.keys(): - mo = re.match(r'^tabletags-(?P<name>\w+)$',section) - if mo: - name = mo.group('name') - if name in self.tags: - d = self.tags[name] - else: - d = AttrDict() - parse_entries(sections.get(section,()),d) - for k in d.keys(): - if k not in self.TAGS: - message.warning('[%s] contains illegal table tag: %s' % - (section,k)) - self.tags[name] = d - def validate(self): - AbstractBlocks.validate(self) - # Check we have a default table definition, - for i in range(len(self.blocks)): - if self.blocks[i].defname == 'tabledef-default': - default = self.blocks[i] - break - else: - raise EAsciiDoc,'missing section: [tabledef-default]' - # Propagate defaults to unspecified table parameters. - for b in self.blocks: - if b is not default: - if b.format is None: b.format = default.format - if b.template is None: b.template = default.template - # Check tags and propagate default tags. - if not 'default' in self.tags: - raise EAsciiDoc,'missing section: [tabletags-default]' - default = self.tags['default'] - for tag in ('bodyrow','bodydata','paragraph'): # Mandatory default tags. - if tag not in default: - raise EAsciiDoc,'missing [tabletags-default] entry: %s' % tag - for t in self.tags.values(): - if t is not default: - if t.colspec is None: t.colspec = default.colspec - if t.headrow is None: t.headrow = default.headrow - if t.footrow is None: t.footrow = default.footrow - if t.bodyrow is None: t.bodyrow = default.bodyrow - if t.headdata is None: t.headdata = default.headdata - if t.footdata is None: t.footdata = default.footdata - if t.bodydata is None: t.bodydata = default.bodydata - if t.paragraph is None: t.paragraph = default.paragraph - # Use body tags if header and footer tags are not specified. - for t in self.tags.values(): - if not t.headrow: t.headrow = t.bodyrow - if not t.footrow: t.footrow = t.bodyrow - if not t.headdata: t.headdata = t.bodydata - if not t.footdata: t.footdata = t.bodydata - # Check table definitions are valid. - for b in self.blocks: - b.validate() - def dump(self): - AbstractBlocks.dump(self) - for k,v in self.tags.items(): - dump_section('tabletags-'+k, v) - -class Macros: - # Default system macro syntax. - SYS_RE = r'(?u)^(?P<name>[\\]?\w(\w|-)*?)::(?P<target>\S*?)' + \ - r'(\[(?P<attrlist>.*?)\])$' - def __init__(self): - self.macros = [] # List of Macros. - self.current = None # The last matched block macro. - self.passthroughs = [] - # Initialize default system macro. - m = Macro() - m.pattern = self.SYS_RE - m.prefix = '+' - m.reo = re.compile(m.pattern) - self.macros.append(m) - def load(self,entries): - for entry in entries: - m = Macro() - m.load(entry) - if m.name is None: - # Delete undefined macro. - for i,m2 in enumerate(self.macros): - if m2.pattern == m.pattern: - del self.macros[i] - break - else: - message.warning('unable to delete missing macro: %s' % m.pattern) - else: - # Check for duplicates. - for m2 in self.macros: - if m2.pattern == m.pattern: - message.verbose('macro redefinition: %s%s' % (m.prefix,m.name)) - break - else: - self.macros.append(m) - def dump(self): - write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) - write('[macros]') - # Dump all macros except the first (built-in system) macro. - for m in self.macros[1:]: - # Escape = in pattern. - macro = '%s=%s%s' % (m.pattern.replace('=',r'\='), m.prefix, m.name) - if m.subslist is not None: - macro += '[' + ','.join(m.subslist) + ']' - write(macro) - write('') - def validate(self): - # Check all named sections exist. - if config.verbose: - for m in self.macros: - if m.name and m.prefix != '+': - m.section_name() - def subs(self,text,prefix='',callouts=False): - # If callouts is True then only callout macros are processed, if False - # then all non-callout macros are processed. - result = text - for m in self.macros: - if m.prefix == prefix: - if callouts ^ (m.name != 'callout'): - result = m.subs(result) - return result - def isnext(self): - """Return matching macro if block macro is next on reader.""" - reader.skip_blank_lines() - line = reader.read_next() - if line: - for m in self.macros: - if m.prefix == '#': - if m.reo.match(line): - self.current = m - return m - return False - def match(self,prefix,name,text): - """Return re match object matching 'text' with macro type 'prefix', - macro name 'name'.""" - for m in self.macros: - if m.prefix == prefix: - mo = m.reo.match(text) - if mo: - if m.name == name: - return mo - if re.match(name, mo.group('name')): - return mo - return None - def extract_passthroughs(self,text,prefix=''): - """ Extract the passthrough text and replace with temporary - placeholders.""" - self.passthroughs = [] - for m in self.macros: - if m.has_passthrough() and m.prefix == prefix: - text = m.subs_passthroughs(text, self.passthroughs) - return text - def restore_passthroughs(self,text): - """ Replace passthough placeholders with the original passthrough - text.""" - for i,v in enumerate(self.passthroughs): - text = text.replace('\x07'+str(i)+'\x07', self.passthroughs[i]) - return text - -class Macro: - def __init__(self): - self.pattern = None # Matching regular expression. - self.name = '' # Conf file macro name (None if implicit). - self.prefix = '' # '' if inline, '+' if system, '#' if block. - self.reo = None # Compiled pattern re object. - self.subslist = [] # Default subs for macros passtext group. - def has_passthrough(self): - return self.pattern.find(r'(?P<passtext>') >= 0 - def section_name(self,name=None): - """Return macro markup template section name based on macro name and - prefix. Return None section not found.""" - assert self.prefix != '+' - if not name: - assert self.name - name = self.name - if self.prefix == '#': - suffix = '-blockmacro' - else: - suffix = '-inlinemacro' - if name+suffix in config.sections: - return name+suffix - else: - message.warning('missing macro section: [%s]' % (name+suffix)) - return None - def load(self,entry): - e = parse_entry(entry) - if e is None: - # Only the macro pattern was specified, mark for deletion. - self.name = None - self.pattern = entry - return - if not is_re(e[0]): - raise EAsciiDoc,'illegal macro regular expression: %s' % e[0] - pattern, name = e - if name and name[0] in ('+','#'): - prefix, name = name[0], name[1:] - else: - prefix = '' - # Parse passthrough subslist. - mo = re.match(r'^(?P<name>[^[]*)(\[(?P<subslist>.*)\])?$', name) - name = mo.group('name') - if name and not is_name(name): - raise EAsciiDoc,'illegal section name in macro entry: %s' % entry - subslist = mo.group('subslist') - if subslist is not None: - # Parse and validate passthrough subs. - subslist = parse_options(subslist, SUBS_OPTIONS, - 'illegal subs in macro entry: %s' % entry) - self.pattern = pattern - self.reo = re.compile(pattern) - self.prefix = prefix - self.name = name - self.subslist = subslist or [] - - def subs(self,text): - def subs_func(mo): - """Function called to perform macro substitution. - Uses matched macro regular expression object and returns string - containing the substituted macro body.""" - # Check if macro reference is escaped. - if mo.group()[0] == '\\': - return mo.group()[1:] # Strip leading backslash. - d = mo.groupdict() - # Delete groups that didn't participate in match. - for k,v in d.items(): - if v is None: del d[k] - if self.name: - name = self.name - else: - if not 'name' in d: - message.warning('missing macro name group: %s' % mo.re.pattern) - return '' - name = d['name'] - section_name = self.section_name(name) - if not section_name: - return '' - # If we're dealing with a block macro get optional block ID and - # block title. - if self.prefix == '#' and self.name != 'comment': - AttributeList.consume(d) - BlockTitle.consume(d) - # Parse macro attributes. - if 'attrlist' in d: - if d['attrlist'] in (None,''): - del d['attrlist'] - else: - if self.prefix == '': - # Unescape ] characters in inline macros. - d['attrlist'] = d['attrlist'].replace('\\]',']') - parse_attributes(d['attrlist'],d) - # Generate option attributes. - if 'options' in d: - options = parse_options(d['options'], (), - '%s: illegal option name' % name) - for option in options: - d[option+'-option'] = '' - # Substitute single quoted attribute values in block macros. - if self.prefix == '#': - AttributeList.subs(d) - if name == 'callout': - listindex =int(d['index']) - d['coid'] = calloutmap.add(listindex) - # The alt attribute is the first image macro positional attribute. - if name == 'image' and '1' in d: - d['alt'] = d['1'] - # Unescape special characters in LaTeX target file names. - if document.backend == 'latex' and 'target' in d and d['target']: - if not '0' in d: - d['0'] = d['target'] - d['target']= config.subs_specialchars_reverse(d['target']) - # BUG: We've already done attribute substitution on the macro which - # means that any escaped attribute references are now unescaped and - # will be substituted by config.subs_section() below. As a partial - # fix have withheld {0} from substitution but this kludge doesn't - # fix it for other attributes containing unescaped references. - # Passthrough macros don't have this problem. - a0 = d.get('0') - if a0: - d['0'] = chr(0) # Replace temporarily with unused character. - body = config.subs_section(section_name,d) - if len(body) == 0: - result = '' - elif len(body) == 1: - result = body[0] - else: - if self.prefix == '#': - result = writer.newline.join(body) - else: - # Internally processed inline macros use UNIX line - # separator. - result = '\n'.join(body) - if a0: - result = result.replace(chr(0), a0) - return result - - return self.reo.sub(subs_func, text) - - def translate(self): - """ Block macro translation.""" - assert self.prefix == '#' - s = reader.read() - before = s - if self.has_passthrough(): - s = macros.extract_passthroughs(s,'#') - s = subs_attrs(s) - if s: - s = self.subs(s) - if self.has_passthrough(): - s = macros.restore_passthroughs(s) - if s: - trace('macro block',before,s) - writer.write(s) - - def subs_passthroughs(self, text, passthroughs): - """ Replace macro attribute lists in text with placeholders. - Substitute and append the passthrough attribute lists to the - passthroughs list.""" - def subs_func(mo): - """Function called to perform inline macro substitution. - Uses matched macro regular expression object and returns string - containing the substituted macro body.""" - # Don't process escaped macro references. - if mo.group()[0] == '\\': - return mo.group() - d = mo.groupdict() - if not 'passtext' in d: - message.warning('passthrough macro %s: missing passtext group' % - d.get('name','')) - return mo.group() - passtext = d['passtext'] - if re.search('\x07\\d+\x07', passtext): - message.warning('nested inline passthrough') - return mo.group() - if d.get('subslist'): - if d['subslist'].startswith(':'): - message.error('block macro cannot occur here: %s' % mo.group(), - halt=True) - subslist = parse_options(d['subslist'], SUBS_OPTIONS, - 'illegal passthrough macro subs option') - else: - subslist = self.subslist - passtext = Lex.subs_1(passtext,subslist) - if passtext is None: passtext = '' - if self.prefix == '': - # Unescape ] characters in inline macros. - passtext = passtext.replace('\\]',']') - passthroughs.append(passtext) - # Tabs guarantee the placeholders are unambiguous. - result = ( - text[mo.start():mo.start('passtext')] + - '\x07' + str(len(passthroughs)-1) + '\x07' + - text[mo.end('passtext'):mo.end()] - ) - return result - - return self.reo.sub(subs_func, text) - - -class CalloutMap: - def __init__(self): - self.comap = {} # key = list index, value = callouts list. - self.calloutindex = 0 # Current callout index number. - self.listnumber = 1 # Current callout list number. - def listclose(self): - # Called when callout list is closed. - self.listnumber += 1 - self.calloutindex = 0 - self.comap = {} - def add(self,listindex): - # Add next callout index to listindex map entry. Return the callout id. - self.calloutindex += 1 - # Append the coindex to a list in the comap dictionary. - if not listindex in self.comap: - self.comap[listindex] = [self.calloutindex] - else: - self.comap[listindex].append(self.calloutindex) - return self.calloutid(self.listnumber, self.calloutindex) - @staticmethod - def calloutid(listnumber,calloutindex): - return 'CO%d-%d' % (listnumber,calloutindex) - def calloutids(self,listindex): - # Retieve list of callout indexes that refer to listindex. - if listindex in self.comap: - result = '' - for coindex in self.comap[listindex]: - result += ' ' + self.calloutid(self.listnumber,coindex) - return result.strip() - else: - message.warning('no callouts refer to list item '+str(listindex)) - return '' - def validate(self,maxlistindex): - # Check that all list indexes referenced by callouts exist. - for listindex in self.comap.keys(): - if listindex > maxlistindex: - message.warning('callout refers to non-existent list item ' - + str(listindex)) - -#--------------------------------------------------------------------------- -# Input stream Reader and output stream writer classes. -#--------------------------------------------------------------------------- - -UTF8_BOM = '\xef\xbb\xbf' - -class Reader1: - """Line oriented AsciiDoc input file reader. Processes include and - conditional inclusion system macros. Tabs are expanded and lines are right - trimmed.""" - # This class is not used directly, use Reader class instead. - READ_BUFFER_MIN = 10 # Read buffer low level. - def __init__(self): - self.f = None # Input file object. - self.fname = None # Input file name. - self.next = [] # Read ahead buffer containing - # [filename,linenumber,linetext] lists. - self.cursor = None # Last read() [filename,linenumber,linetext]. - self.tabsize = 8 # Tab expansion number of spaces. - self.parent = None # Included reader's parent reader. - self._lineno = 0 # The last line read from file object f. - self.current_depth = 0 # Current include depth. - self.max_depth = 5 # Initial maxiumum allowed include depth. - self.bom = None # Byte order mark (BOM). - self.infile = None # Saved document 'infile' attribute. - self.indir = None # Saved document 'indir' attribute. - def open(self,fname): - self.fname = fname - message.verbose('reading: '+fname) - if fname == '<stdin>': - self.f = sys.stdin - self.infile = None - self.indir = None - else: - self.f = open(fname,'rb') - self.infile = fname - self.indir = os.path.dirname(fname) - document.attributes['infile'] = self.infile - document.attributes['indir'] = self.indir - self._lineno = 0 # The last line read from file object f. - self.next = [] - # Prefill buffer by reading the first line and then pushing it back. - if Reader1.read(self): - if self.cursor[2].startswith(UTF8_BOM): - self.cursor[2] = self.cursor[2][len(UTF8_BOM):] - self.bom = UTF8_BOM - self.unread(self.cursor) - self.cursor = None - def closefile(self): - """Used by class methods to close nested include files.""" - self.f.close() - self.next = [] - def close(self): - self.closefile() - self.__init__() - def read(self, skip=False): - """Read next line. Return None if EOF. Expand tabs. Strip trailing - white space. Maintain self.next read ahead buffer. If skip=True then - conditional exclusion is active (ifdef and ifndef macros).""" - # Top up buffer. - if len(self.next) <= self.READ_BUFFER_MIN: - s = self.f.readline() - if s: - self._lineno = self._lineno + 1 - while s: - if self.tabsize != 0: - s = s.expandtabs(self.tabsize) - s = s.rstrip() - self.next.append([self.fname,self._lineno,s]) - if len(self.next) > self.READ_BUFFER_MIN: - break - s = self.f.readline() - if s: - self._lineno = self._lineno + 1 - # Return first (oldest) buffer entry. - if len(self.next) > 0: - self.cursor = self.next[0] - del self.next[0] - result = self.cursor[2] - # Check for include macro. - mo = macros.match('+',r'^include[1]?$',result) - if mo and not skip: - # Parse include macro attributes. - attrs = {} - parse_attributes(mo.group('attrlist'),attrs) - warnings = attrs.get('warnings', True) - # Don't process include macro once the maximum depth is reached. - if self.current_depth >= self.max_depth: - return result - # Perform attribute substitution on include macro file name. - fname = subs_attrs(mo.group('target')) - if not fname: - return Reader1.read(self) # Return next input line. - if self.fname != '<stdin>': - fname = os.path.expandvars(os.path.expanduser(fname)) - fname = safe_filename(fname, os.path.dirname(self.fname)) - if not fname: - return Reader1.read(self) # Return next input line. - if not os.path.isfile(fname): - if warnings: - message.warning('include file not found: %s' % fname) - return Reader1.read(self) # Return next input line. - if mo.group('name') == 'include1': - if not config.dumping: - if fname not in config.include1: - message.verbose('include1: ' + fname, linenos=False) - # Store the include file in memory for later - # retrieval by the {include1:} system attribute. - f = open(fname) - try: - config.include1[fname] = [ - s.rstrip() for s in f] - finally: - f.close() - return '{include1:%s}' % fname - else: - # This is a configuration dump, just pass the macro - # call through. - return result - # Clone self and set as parent (self assumes the role of child). - parent = Reader1() - assign(parent,self) - self.parent = parent - # Set attributes in child. - if 'tabsize' in attrs: - try: - val = int(attrs['tabsize']) - if not val >= 0: - raise ValueError, "not >= 0" - self.tabsize = val - except ValueError: - raise EAsciiDoc, 'illegal include macro tabsize argument' - else: - self.tabsize = config.tabsize - if 'depth' in attrs: - try: - val = int(attrs['depth']) - if not val >= 1: - raise ValueError, "not >= 1" - self.max_depth = self.current_depth + val - except ValueError: - raise EAsciiDoc, 'illegal include macro depth argument' - - # Process included file. - message.verbose('include: ' + fname, linenos=False) - self.open(fname) - self.current_depth = self.current_depth + 1 - result = Reader1.read(self) - else: - if not Reader1.eof(self): - result = Reader1.read(self) - else: - result = None - return result - def eof(self): - """Returns True if all lines have been read.""" - if len(self.next) == 0: - # End of current file. - if self.parent: - self.closefile() - assign(self,self.parent) # Restore parent reader. - document.attributes['infile'] = self.infile - document.attributes['indir'] = self.indir - return Reader1.eof(self) - else: - return True - else: - return False - def read_next(self): - """Like read() but does not advance file pointer.""" - if Reader1.eof(self): - return None - else: - return self.next[0][2] - def unread(self,cursor): - """Push the line (filename,linenumber,linetext) tuple back into the read - buffer. Note that it's up to the caller to restore the previous - cursor.""" - assert cursor - self.next.insert(0,cursor) - -class Reader(Reader1): - """ Wraps (well, sought of) Reader1 class and implements conditional text - inclusion.""" - def __init__(self): - Reader1.__init__(self) - self.depth = 0 # if nesting depth. - self.skip = False # true if we're skipping ifdef...endif. - self.skipname = '' # Name of current endif macro target. - self.skipto = -1 # The depth at which skipping is reenabled. - def read_super(self): - result = Reader1.read(self,self.skip) - if result is None and self.skip: - raise EAsciiDoc,'missing endif::%s[]' % self.skipname - return result - def read(self): - result = self.read_super() - if result is None: - return None - while self.skip: - mo = macros.match('+',r'ifdef|ifndef|ifeval|endif',result) - if mo: - name = mo.group('name') - target = mo.group('target') - attrlist = mo.group('attrlist') - if name == 'endif': - self.depth -= 1 - if self.depth < 0: - raise EAsciiDoc,'mismatched macro: %s' % result - if self.depth == self.skipto: - self.skip = False - if target and self.skipname != target: - raise EAsciiDoc,'mismatched macro: %s' % result - else: - if name in ('ifdef','ifndef'): - if not target: - raise EAsciiDoc,'missing macro target: %s' % result - if not attrlist: - self.depth += 1 - elif name == 'ifeval': - if not attrlist: - raise EAsciiDoc,'missing ifeval condition: %s' % result - self.depth += 1 - result = self.read_super() - if result is None: - return None - mo = macros.match('+',r'ifdef|ifndef|ifeval|endif',result) - if mo: - name = mo.group('name') - target = mo.group('target') - attrlist = mo.group('attrlist') - if name == 'endif': - self.depth = self.depth-1 - else: - if not target and name in ('ifdef','ifndef'): - raise EAsciiDoc,'missing macro target: %s' % result - defined = is_attr_defined(target, document.attributes) - if name == 'ifdef': - if attrlist: - if defined: return attrlist - else: - self.skip = not defined - elif name == 'ifndef': - if attrlist: - if not defined: return attrlist - else: - self.skip = defined - elif name == 'ifeval': - if safe(): - message.unsafe('ifeval invalid') - raise EAsciiDoc,'ifeval invalid safe document' - if not attrlist: - raise EAsciiDoc,'missing ifeval condition: %s' % result - cond = False - attrlist = subs_attrs(attrlist) - if attrlist: - try: - cond = eval(attrlist) - except Exception,e: - raise EAsciiDoc,'error evaluating ifeval condition: %s: %s' % (result, str(e)) - message.verbose('ifeval: %s: %r' % (attrlist, cond)) - self.skip = not cond - if not attrlist or name == 'ifeval': - if self.skip: - self.skipto = self.depth - self.skipname = target - self.depth = self.depth+1 - result = self.read() - if result: - # Expand executable block macros. - mo = macros.match('+',r'eval|sys|sys2',result) - if mo: - action = mo.group('name') - cmd = mo.group('attrlist') - result = system(action, cmd, is_macro=True) - self.cursor[2] = result # So we don't re-evaluate. - if result: - # Unescape escaped system macros. - if macros.match('+',r'\\eval|\\sys|\\sys2|\\ifdef|\\ifndef|\\endif|\\include|\\include1',result): - result = result[1:] - return result - def eof(self): - return self.read_next() is None - def read_next(self): - save_cursor = self.cursor - result = self.read() - if result is not None: - self.unread(self.cursor) - self.cursor = save_cursor - return result - def read_lines(self,count=1): - """Return tuple containing count lines.""" - result = [] - i = 0 - while i < count and not self.eof(): - result.append(self.read()) - return tuple(result) - def read_ahead(self,count=1): - """Same as read_lines() but does not advance the file pointer.""" - result = [] - putback = [] - save_cursor = self.cursor - try: - i = 0 - while i < count and not self.eof(): - result.append(self.read()) - putback.append(self.cursor) - i = i+1 - while putback: - self.unread(putback.pop()) - finally: - self.cursor = save_cursor - return tuple(result) - def skip_blank_lines(self): - reader.read_until(r'\s*\S+') - def read_until(self,terminators,same_file=False): - """Like read() but reads lines up to (but not including) the first line - that matches the terminator regular expression, regular expression - object or list of regular expression objects. If same_file is True then - the terminating pattern must occur in the file the was being read when - the routine was called.""" - if same_file: - fname = self.cursor[0] - result = [] - if not isinstance(terminators,list): - if isinstance(terminators,basestring): - terminators = [re.compile(terminators)] - else: - terminators = [terminators] - while not self.eof(): - save_cursor = self.cursor - s = self.read() - if not same_file or fname == self.cursor[0]: - for reo in terminators: - if reo.match(s): - self.unread(self.cursor) - self.cursor = save_cursor - return tuple(result) - result.append(s) - return tuple(result) - -class Writer: - """Writes lines to output file.""" - def __init__(self): - self.newline = '\r\n' # End of line terminator. - self.f = None # Output file object. - self.fname = None # Output file name. - self.lines_out = 0 # Number of lines written. - self.skip_blank_lines = False # If True don't output blank lines. - def open(self,fname,bom=None): - ''' - bom is optional byte order mark. - http://en.wikipedia.org/wiki/Byte-order_mark - ''' - self.fname = fname - if fname == '<stdout>': - self.f = sys.stdout - else: - self.f = open(fname,'wb+') - message.verbose('writing: '+writer.fname,False) - if bom: - self.f.write(bom) - self.lines_out = 0 - def close(self): - if self.fname != '<stdout>': - self.f.close() - def write_line(self, line=None): - if not (self.skip_blank_lines and (not line or not line.strip())): - self.f.write((line or '') + self.newline) - self.lines_out = self.lines_out + 1 - def write(self,*args,**kwargs): - """Iterates arguments, writes tuple and list arguments one line per - element, else writes argument as single line. If no arguments writes - blank line. If argument is None nothing is written. self.newline is - appended to each line.""" - if 'trace' in kwargs and len(args) > 0: - trace(kwargs['trace'],args[0]) - if len(args) == 0: - self.write_line() - self.lines_out = self.lines_out + 1 - else: - for arg in args: - if is_array(arg): - for s in arg: - self.write_line(s) - elif arg is not None: - self.write_line(arg) - def write_tag(self,tag,content,subs=None,d=None,**kwargs): - """Write content enveloped by tag. - Substitutions specified in the 'subs' list are perform on the - 'content'.""" - if subs is None: - subs = config.subsnormal - stag,etag = subs_tag(tag,d) - content = Lex.subs(content,subs) - if 'trace' in kwargs: - trace(kwargs['trace'],[stag]+content+[etag]) - if stag: - self.write(stag) - if content: - self.write(content) - if etag: - self.write(etag) - -#--------------------------------------------------------------------------- -# Configuration file processing. -#--------------------------------------------------------------------------- -def _subs_specialwords(mo): - """Special word substitution function called by - Config.subs_specialwords().""" - word = mo.re.pattern # The special word. - template = config.specialwords[word] # The corresponding markup template. - if not template in config.sections: - raise EAsciiDoc,'missing special word template [%s]' % template - if mo.group()[0] == '\\': - return mo.group()[1:] # Return escaped word. - args = {} - args['words'] = mo.group() # The full match string is argument 'words'. - args.update(mo.groupdict()) # Add other named match groups to the arguments. - # Delete groups that didn't participate in match. - for k,v in args.items(): - if v is None: del args[k] - lines = subs_attrs(config.sections[template],args) - if len(lines) == 0: - result = '' - elif len(lines) == 1: - result = lines[0] - else: - result = writer.newline.join(lines) - return result - -class Config: - """Methods to process configuration files.""" - # Non-template section name regexp's. - ENTRIES_SECTIONS= ('tags','miscellaneous','attributes','specialcharacters', - 'specialwords','macros','replacements','quotes','titles', - r'paradef-.+',r'listdef-.+',r'blockdef-.+',r'tabledef-.+', - r'tabletags-.+',r'listtags-.+','replacements[23]', - r'old_tabledef-.+') - def __init__(self): - self.sections = OrderedDict() # Keyed by section name containing - # lists of section lines. - # Command-line options. - self.verbose = False - self.header_footer = True # -s, --no-header-footer option. - # [miscellaneous] section. - self.tabsize = 8 - self.textwidth = 70 # DEPRECATED: Old tables only. - self.newline = '\r\n' - self.pagewidth = None - self.pageunits = None - self.outfilesuffix = '' - self.subsnormal = SUBS_NORMAL - self.subsverbatim = SUBS_VERBATIM - - self.tags = {} # Values contain (stag,etag) tuples. - self.specialchars = {} # Values of special character substitutions. - self.specialwords = {} # Name is special word pattern, value is macro. - self.replacements = OrderedDict() # Key is find pattern, value is - #replace pattern. - self.replacements2 = OrderedDict() - self.replacements3 = OrderedDict() - self.specialsections = {} # Name is special section name pattern, value - # is corresponding section name. - self.quotes = OrderedDict() # Values contain corresponding tag name. - self.fname = '' # Most recently loaded configuration file name. - self.conf_attrs = {} # Attributes entries from conf files. - self.cmd_attrs = {} # Attributes from command-line -a options. - self.loaded = [] # Loaded conf files. - self.include1 = {} # Holds include1::[] files for {include1:}. - self.dumping = False # True if asciidoc -c option specified. - self.filters = [] # Filter names specified by --filter option. - - def init(self, cmd): - """ - Check Python version and locate the executable and configuration files - directory. - cmd is the asciidoc command or asciidoc.py path. - """ - if float(sys.version[:3]) < float(MIN_PYTHON_VERSION): - message.stderr('FAILED: Python %s or better required' % - MIN_PYTHON_VERSION) - sys.exit(1) - if not os.path.exists(cmd): - message.stderr('FAILED: Missing asciidoc command: %s' % cmd) - sys.exit(1) - global APP_FILE - APP_FILE = os.path.realpath(cmd) - global APP_DIR - APP_DIR = os.path.dirname(APP_FILE) - global USER_DIR - USER_DIR = userdir() - if USER_DIR is not None: - USER_DIR = os.path.join(USER_DIR,'.asciidoc') - if not os.path.isdir(USER_DIR): - USER_DIR = None - - def load_file(self, fname, dir=None, include=[], exclude=[]): - """ - Loads sections dictionary with sections from file fname. - Existing sections are overlaid. - The 'include' list contains the section names to be loaded. - The 'exclude' list contains section names not to be loaded. - Return False if no file was found in any of the locations. - """ - def update_section(section): - """ Update section in sections with contents. """ - if section and contents: - if section in sections and self.entries_section(section): - if ''.join(contents): - # Merge entries. - sections[section] += contents - else: - del sections[section] - else: - if section.startswith('+'): - # Append section. - if section in sections: - sections[section] += contents - else: - sections[section] = contents - else: - # Replace section. - sections[section] = contents - if dir: - fname = os.path.join(dir, fname) - # Sliently skip missing configuration file. - if not os.path.isfile(fname): - return False - # Don't load conf files twice (local and application conf files are the - # same if the source file is in the application directory). - if os.path.realpath(fname) in self.loaded: - return True - rdr = Reader() # Reader processes system macros. - message.linenos = False # Disable document line numbers. - rdr.open(fname) - message.linenos = None - self.fname = fname - reo = re.compile(r'(?u)^\[(?P<section>\+?[^\W\d][\w-]*)\]\s*$') - sections = OrderedDict() - section,contents = '',[] - while not rdr.eof(): - s = rdr.read() - if s and s[0] == '#': # Skip comment lines. - continue - if s[:2] == '\\#': # Unescape lines starting with '#'. - s = s[1:] - s = s.rstrip() - found = reo.findall(s) - if found: - update_section(section) # Store previous section. - section = found[0].lower() - contents = [] - else: - contents.append(s) - update_section(section) # Store last section. - rdr.close() - if include: - for s in set(sections) - set(include): - del sections[s] - if exclude: - for s in set(sections) & set(exclude): - del sections[s] - attrs = {} - self.load_sections(sections,attrs) - if not include: - # If all sections are loaded mark this file as loaded. - self.loaded.append(os.path.realpath(fname)) - document.update_attributes(attrs) # So they are available immediately. - return True - - def load_sections(self,sections,attrs=None): - """ - Loads sections dictionary. Each dictionary entry contains a - list of lines. - Updates 'attrs' with parsed [attributes] section entries. - """ - # Delete trailing blank lines from sections. - for k in sections.keys(): - for i in range(len(sections[k])-1,-1,-1): - if not sections[k][i]: - del sections[k][i] - elif not self.entries_section(k): - break - # Update new sections. - for k,v in sections.items(): - if k.startswith('+'): - # Append section. - k = k[1:] - if k in self.sections: - self.sections[k] += v - else: - self.sections[k] = v - else: - # Replace section. - self.sections[k] = v - self.parse_tags() - # Internally [miscellaneous] section entries are just attributes. - d = {} - parse_entries(sections.get('miscellaneous',()), d, unquote=True, - allow_name_only=True) - parse_entries(sections.get('attributes',()), d, unquote=True, - allow_name_only=True) - update_attrs(self.conf_attrs,d) - if attrs is not None: - attrs.update(d) - d = {} - parse_entries(sections.get('titles',()),d) - Title.load(d) - parse_entries(sections.get('specialcharacters',()),self.specialchars,escape_delimiter=False) - parse_entries(sections.get('quotes',()),self.quotes) - self.parse_specialwords() - self.parse_replacements() - self.parse_replacements('replacements2') - self.parse_replacements('replacements3') - self.parse_specialsections() - paragraphs.load(sections) - lists.load(sections) - blocks.load(sections) - tables_OLD.load(sections) - tables.load(sections) - macros.load(sections.get('macros',())) - - def get_load_dirs(self): - """ - Return list of well known paths with conf files. - """ - result = [] - if localapp(): - # Load from folders in asciidoc executable directory. - result.append(APP_DIR) - else: - # Load from global configuration directory. - result.append(CONF_DIR) - # Load configuration files from ~/.asciidoc if it exists. - if USER_DIR is not None: - result.append(USER_DIR) - return result - - def find_in_dirs(self, filename, dirs=None): - """ - Find conf files from dirs list. - Return list of found file paths. - Return empty list if not found in any of the locations. - """ - result = [] - if dirs is None: - dirs = self.get_load_dirs() - for d in dirs: - f = os.path.join(d,filename) - if os.path.isfile(f): - result.append(f) - return result - - def load_from_dirs(self, filename, dirs=None, include=[]): - """ - Load conf file from dirs list. - If dirs not specified try all the well known locations. - Return False if no file was sucessfully loaded. - """ - count = 0 - for f in self.find_in_dirs(filename,dirs): - if self.load_file(f, include=include): - count += 1 - return count != 0 - - def load_backend(self, dirs=None): - """ - Load the backend configuration files from dirs list. - If dirs not specified try all the well known locations. - If a <backend>.conf file was found return it's full path name, - if not found return None. - """ - result = None - if dirs is None: - dirs = self.get_load_dirs() - conf = document.backend + '.conf' - conf2 = document.backend + '-' + document.doctype + '.conf' - # First search for filter backends. - for d in [os.path.join(d, 'backends', document.backend) for d in dirs]: - if self.load_file(conf,d): - result = os.path.join(d, conf) - self.load_file(conf2,d) - if not result: - # Search in the normal locations. - for d in dirs: - if self.load_file(conf,d): - result = os.path.join(d, conf) - self.load_file(conf2,d) - return result - - def load_filters(self, dirs=None): - """ - Load filter configuration files from 'filters' directory in dirs list. - If dirs not specified try all the well known locations. Suppress - loading if a file named __noautoload__ is in same directory as the conf - file unless the filter has been specified with the --filter - command-line option (in which case it is loaded unconditionally). - """ - if dirs is None: - dirs = self.get_load_dirs() - for d in dirs: - # Load filter .conf files. - filtersdir = os.path.join(d,'filters') - for dirpath,dirnames,filenames in os.walk(filtersdir): - subdirs = dirpath[len(filtersdir):].split(os.path.sep) - # True if processing a filter specified by a --filter option. - filter_opt = len(subdirs) > 1 and subdirs[1] in self.filters - if '__noautoload__' not in filenames or filter_opt: - for f in filenames: - if re.match(r'^.+\.conf$',f): - self.load_file(f,dirpath) - - def find_config_dir(self, *dirnames): - """ - Return path of configuration directory. - Try all the well known locations. - Return None if directory not found. - """ - for d in [os.path.join(d, *dirnames) for d in self.get_load_dirs()]: - if os.path.isdir(d): - return d - return None - - def set_theme_attributes(self): - theme = document.attributes.get('theme') - if theme and 'themedir' not in document.attributes: - themedir = self.find_config_dir('themes', theme) - if themedir: - document.attributes['themedir'] = themedir - iconsdir = os.path.join(themedir, 'icons') - if 'data-uri' in document.attributes and os.path.isdir(iconsdir): - document.attributes['iconsdir'] = iconsdir - else: - message.warning('missing theme: %s' % theme, linenos=False) - - def load_miscellaneous(self,d): - """Set miscellaneous configuration entries from dictionary 'd'.""" - def set_if_int_gt_zero(name, d): - if name in d: - try: - val = int(d[name]) - if not val > 0: - raise ValueError, "not > 0" - if val > 0: - setattr(self, name, val) - except ValueError: - raise EAsciiDoc, 'illegal [miscellaneous] %s entry' % name - set_if_int_gt_zero('tabsize', d) - set_if_int_gt_zero('textwidth', d) # DEPRECATED: Old tables only. - - if 'pagewidth' in d: - try: - val = float(d['pagewidth']) - self.pagewidth = val - except ValueError: - raise EAsciiDoc, 'illegal [miscellaneous] pagewidth entry' - - if 'pageunits' in d: - self.pageunits = d['pageunits'] - if 'outfilesuffix' in d: - self.outfilesuffix = d['outfilesuffix'] - if 'newline' in d: - # Convert escape sequences to their character values. - self.newline = literal_eval('"'+d['newline']+'"') - if 'subsnormal' in d: - self.subsnormal = parse_options(d['subsnormal'],SUBS_OPTIONS, - 'illegal [%s] %s: %s' % - ('miscellaneous','subsnormal',d['subsnormal'])) - if 'subsverbatim' in d: - self.subsverbatim = parse_options(d['subsverbatim'],SUBS_OPTIONS, - 'illegal [%s] %s: %s' % - ('miscellaneous','subsverbatim',d['subsverbatim'])) - - def validate(self): - """Check the configuration for internal consistancy. Called after all - configuration files have been loaded.""" - message.linenos = False # Disable document line numbers. - # Heuristic to validate that at least one configuration file was loaded. - if not self.specialchars or not self.tags or not lists: - raise EAsciiDoc,'incomplete configuration files' - # Check special characters are only one character long. - for k in self.specialchars.keys(): - if len(k) != 1: - raise EAsciiDoc,'[specialcharacters] ' \ - 'must be a single character: %s' % k - # Check all special words have a corresponding inline macro body. - for macro in self.specialwords.values(): - if not is_name(macro): - raise EAsciiDoc,'illegal special word name: %s' % macro - if not macro in self.sections: - message.warning('missing special word macro: [%s]' % macro) - # Check all text quotes have a corresponding tag. - for q in self.quotes.keys()[:]: - tag = self.quotes[q] - if not tag: - del self.quotes[q] # Undefine quote. - else: - if tag[0] == '#': - tag = tag[1:] - if not tag in self.tags: - message.warning('[quotes] %s missing tag definition: %s' % (q,tag)) - # Check all specialsections section names exist. - for k,v in self.specialsections.items(): - if not v: - del self.specialsections[k] - elif not v in self.sections: - message.warning('missing specialsections section: [%s]' % v) - paragraphs.validate() - lists.validate() - blocks.validate() - tables_OLD.validate() - tables.validate() - macros.validate() - message.linenos = None - - def entries_section(self,section_name): - """ - Return True if conf file section contains entries, not a markup - template. - """ - for name in self.ENTRIES_SECTIONS: - if re.match(name,section_name): - return True - return False - - def dump(self): - """Dump configuration to stdout.""" - # Header. - hdr = '' - hdr = hdr + '#' + writer.newline - hdr = hdr + '# Generated by AsciiDoc %s for %s %s.%s' % \ - (VERSION,document.backend,document.doctype,writer.newline) - t = time.asctime(time.localtime(time.time())) - hdr = hdr + '# %s%s' % (t,writer.newline) - hdr = hdr + '#' + writer.newline - sys.stdout.write(hdr) - # Dump special sections. - # Dump only the configuration file and command-line attributes. - # [miscellanous] entries are dumped as part of the [attributes]. - d = {} - d.update(self.conf_attrs) - d.update(self.cmd_attrs) - dump_section('attributes',d) - Title.dump() - dump_section('quotes',self.quotes) - dump_section('specialcharacters',self.specialchars) - d = {} - for k,v in self.specialwords.items(): - if v in d: - d[v] = '%s "%s"' % (d[v],k) # Append word list. - else: - d[v] = '"%s"' % k - dump_section('specialwords',d) - dump_section('replacements',self.replacements) - dump_section('replacements2',self.replacements2) - dump_section('replacements3',self.replacements3) - dump_section('specialsections',self.specialsections) - d = {} - for k,v in self.tags.items(): - d[k] = '%s|%s' % v - dump_section('tags',d) - paragraphs.dump() - lists.dump() - blocks.dump() - tables_OLD.dump() - tables.dump() - macros.dump() - # Dump remaining sections. - for k in self.sections.keys(): - if not self.entries_section(k): - sys.stdout.write('[%s]%s' % (k,writer.newline)) - for line in self.sections[k]: - sys.stdout.write('%s%s' % (line,writer.newline)) - sys.stdout.write(writer.newline) - - def subs_section(self,section,d): - """Section attribute substitution using attributes from - document.attributes and 'd'. Lines containing undefinded - attributes are deleted.""" - if section in self.sections: - return subs_attrs(self.sections[section],d) - else: - message.warning('missing section: [%s]' % section) - return () - - def parse_tags(self): - """Parse [tags] section entries into self.tags dictionary.""" - d = {} - parse_entries(self.sections.get('tags',()),d) - for k,v in d.items(): - if v is None: - if k in self.tags: - del self.tags[k] - elif v == '': - self.tags[k] = (None,None) - else: - mo = re.match(r'(?P<stag>.*)\|(?P<etag>.*)',v) - if mo: - self.tags[k] = (mo.group('stag'), mo.group('etag')) - else: - raise EAsciiDoc,'[tag] %s value malformed' % k - - def tag(self, name, d=None): - """Returns (starttag,endtag) tuple named name from configuration file - [tags] section. Raise error if not found. If a dictionary 'd' is - passed then merge with document attributes and perform attribute - substitution on tags.""" - if not name in self.tags: - raise EAsciiDoc, 'missing tag: %s' % name - stag,etag = self.tags[name] - if d is not None: - # TODO: Should we warn if substitution drops a tag? - if stag: - stag = subs_attrs(stag,d) - if etag: - etag = subs_attrs(etag,d) - if stag is None: stag = '' - if etag is None: etag = '' - return (stag,etag) - - def parse_specialsections(self): - """Parse specialsections section to self.specialsections dictionary.""" - # TODO: This is virtually the same as parse_replacements() and should - # be factored to single routine. - d = {} - parse_entries(self.sections.get('specialsections',()),d,unquote=True) - for pat,sectname in d.items(): - pat = strip_quotes(pat) - if not is_re(pat): - raise EAsciiDoc,'[specialsections] entry ' \ - 'is not a valid regular expression: %s' % pat - if sectname is None: - if pat in self.specialsections: - del self.specialsections[pat] - else: - self.specialsections[pat] = sectname - - def parse_replacements(self,sect='replacements'): - """Parse replacements section into self.replacements dictionary.""" - d = OrderedDict() - parse_entries(self.sections.get(sect,()), d, unquote=True) - for pat,rep in d.items(): - if not self.set_replacement(pat, rep, getattr(self,sect)): - raise EAsciiDoc,'[%s] entry in %s is not a valid' \ - ' regular expression: %s' % (sect,self.fname,pat) - - @staticmethod - def set_replacement(pat, rep, replacements): - """Add pattern and replacement to replacements dictionary.""" - pat = strip_quotes(pat) - if not is_re(pat): - return False - if rep is None: - if pat in replacements: - del replacements[pat] - else: - replacements[pat] = strip_quotes(rep) - return True - - def subs_replacements(self,s,sect='replacements'): - """Substitute patterns from self.replacements in 's'.""" - result = s - for pat,rep in getattr(self,sect).items(): - result = re.sub(pat, rep, result) - return result - - def parse_specialwords(self): - """Parse special words section into self.specialwords dictionary.""" - reo = re.compile(r'(?:\s|^)(".+?"|[^"\s]+)(?=\s|$)') - for line in self.sections.get('specialwords',()): - e = parse_entry(line) - if not e: - raise EAsciiDoc,'[specialwords] entry in %s is malformed: %s' \ - % (self.fname,line) - name,wordlist = e - if not is_name(name): - raise EAsciiDoc,'[specialwords] name in %s is illegal: %s' \ - % (self.fname,name) - if wordlist is None: - # Undefine all words associated with 'name'. - for k,v in self.specialwords.items(): - if v == name: - del self.specialwords[k] - else: - words = reo.findall(wordlist) - for word in words: - word = strip_quotes(word) - if not is_re(word): - raise EAsciiDoc,'[specialwords] entry in %s ' \ - 'is not a valid regular expression: %s' \ - % (self.fname,word) - self.specialwords[word] = name - - def subs_specialchars(self,s): - """Perform special character substitution on string 's'.""" - """It may seem like a good idea to escape special characters with a '\' - character, the reason we don't is because the escape character itself - then has to be escaped and this makes including code listings - problematic. Use the predefined {amp},{lt},{gt} attributes instead.""" - result = '' - for ch in s: - result = result + self.specialchars.get(ch,ch) - return result - - def subs_specialchars_reverse(self,s): - """Perform reverse special character substitution on string 's'.""" - result = s - for k,v in self.specialchars.items(): - result = result.replace(v, k) - return result - - def subs_specialwords(self,s): - """Search for word patterns from self.specialwords in 's' and - substitute using corresponding macro.""" - result = s - for word in self.specialwords.keys(): - result = re.sub(word, _subs_specialwords, result) - return result - - def expand_templates(self,entries): - """Expand any template::[] macros in a list of section entries.""" - result = [] - for line in entries: - mo = macros.match('+',r'template',line) - if mo: - s = mo.group('attrlist') - if s in self.sections: - result += self.expand_templates(self.sections[s]) - else: - message.warning('missing section: [%s]' % s) - result.append(line) - else: - result.append(line) - return result - - def expand_all_templates(self): - for k,v in self.sections.items(): - self.sections[k] = self.expand_templates(v) - - def section2tags(self, section, d={}, skipstart=False, skipend=False): - """Perform attribute substitution on 'section' using document - attributes plus 'd' attributes. Return tuple (stag,etag) containing - pre and post | placeholder tags. 'skipstart' and 'skipend' are - used to suppress substitution.""" - assert section is not None - if section in self.sections: - body = self.sections[section] - else: - message.warning('missing section: [%s]' % section) - body = () - # Split macro body into start and end tag lists. - stag = [] - etag = [] - in_stag = True - for s in body: - if in_stag: - mo = re.match(r'(?P<stag>.*)\|(?P<etag>.*)',s) - if mo: - if mo.group('stag'): - stag.append(mo.group('stag')) - if mo.group('etag'): - etag.append(mo.group('etag')) - in_stag = False - else: - stag.append(s) - else: - etag.append(s) - # Do attribute substitution last so {brkbar} can be used to escape |. - # But don't do attribute substitution on title -- we've already done it. - title = d.get('title') - if title: - d['title'] = chr(0) # Replace with unused character. - if not skipstart: - stag = subs_attrs(stag, d) - if not skipend: - etag = subs_attrs(etag, d) - # Put the {title} back. - if title: - stag = map(lambda x: x.replace(chr(0), title), stag) - etag = map(lambda x: x.replace(chr(0), title), etag) - d['title'] = title - return (stag,etag) - - -#--------------------------------------------------------------------------- -# Deprecated old table classes follow. -# Naming convention is an _OLD name suffix. -# These will be removed from future versions of AsciiDoc - -def join_lines_OLD(lines): - """Return a list in which lines terminated with the backslash line - continuation character are joined.""" - result = [] - s = '' - continuation = False - for line in lines: - if line and line[-1] == '\\': - s = s + line[:-1] - continuation = True - continue - if continuation: - result.append(s+line) - s = '' - continuation = False - else: - result.append(line) - if continuation: - result.append(s) - return result - -class Column_OLD: - """Table column.""" - def __init__(self): - self.colalign = None # 'left','right','center' - self.rulerwidth = None - self.colwidth = None # Output width in page units. - -class Table_OLD(AbstractBlock): - COL_STOP = r"(`|'|\.)" # RE. - ALIGNMENTS = {'`':'left', "'":'right', '.':'center'} - FORMATS = ('fixed','csv','dsv') - def __init__(self): - AbstractBlock.__init__(self) - self.CONF_ENTRIES += ('template','fillchar','format','colspec', - 'headrow','footrow','bodyrow','headdata', - 'footdata', 'bodydata') - # Configuration parameters. - self.fillchar=None - self.format=None # 'fixed','csv','dsv' - self.colspec=None - self.headrow=None - self.footrow=None - self.bodyrow=None - self.headdata=None - self.footdata=None - self.bodydata=None - # Calculated parameters. - self.underline=None # RE matching current table underline. - self.isnumeric=False # True if numeric ruler. - self.tablewidth=None # Optional table width scale factor. - self.columns=[] # List of Columns. - # Other. - self.check_msg='' # Message set by previous self.validate() call. - def load(self,name,entries): - AbstractBlock.load(self,name,entries) - """Update table definition from section entries in 'entries'.""" - for k,v in entries.items(): - if k == 'fillchar': - if v and len(v) == 1: - self.fillchar = v - else: - raise EAsciiDoc,'malformed table fillchar: %s' % v - elif k == 'format': - if v in Table_OLD.FORMATS: - self.format = v - else: - raise EAsciiDoc,'illegal table format: %s' % v - elif k == 'colspec': - self.colspec = v - elif k == 'headrow': - self.headrow = v - elif k == 'footrow': - self.footrow = v - elif k == 'bodyrow': - self.bodyrow = v - elif k == 'headdata': - self.headdata = v - elif k == 'footdata': - self.footdata = v - elif k == 'bodydata': - self.bodydata = v - def dump(self): - AbstractBlock.dump(self) - write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) - write('fillchar='+self.fillchar) - write('format='+self.format) - if self.colspec: - write('colspec='+self.colspec) - if self.headrow: - write('headrow='+self.headrow) - if self.footrow: - write('footrow='+self.footrow) - write('bodyrow='+self.bodyrow) - if self.headdata: - write('headdata='+self.headdata) - if self.footdata: - write('footdata='+self.footdata) - write('bodydata='+self.bodydata) - write('') - def validate(self): - AbstractBlock.validate(self) - """Check table definition and set self.check_msg if invalid else set - self.check_msg to blank string.""" - # Check global table parameters. - if config.textwidth is None: - self.check_msg = 'missing [miscellaneous] textwidth entry' - elif config.pagewidth is None: - self.check_msg = 'missing [miscellaneous] pagewidth entry' - elif config.pageunits is None: - self.check_msg = 'missing [miscellaneous] pageunits entry' - elif self.headrow is None: - self.check_msg = 'missing headrow entry' - elif self.footrow is None: - self.check_msg = 'missing footrow entry' - elif self.bodyrow is None: - self.check_msg = 'missing bodyrow entry' - elif self.headdata is None: - self.check_msg = 'missing headdata entry' - elif self.footdata is None: - self.check_msg = 'missing footdata entry' - elif self.bodydata is None: - self.check_msg = 'missing bodydata entry' - else: - # No errors. - self.check_msg = '' - def isnext(self): - return AbstractBlock.isnext(self) - def parse_ruler(self,ruler): - """Parse ruler calculating underline and ruler column widths.""" - fc = re.escape(self.fillchar) - # Strip and save optional tablewidth from end of ruler. - mo = re.match(r'^(.*'+fc+r'+)([\d\.]+)$',ruler) - if mo: - ruler = mo.group(1) - self.tablewidth = float(mo.group(2)) - self.attributes['tablewidth'] = str(float(self.tablewidth)) - else: - self.tablewidth = None - self.attributes['tablewidth'] = '100.0' - # Guess whether column widths are specified numerically or not. - if ruler[1] != self.fillchar: - # If the first column does not start with a fillchar then numeric. - self.isnumeric = True - elif ruler[1:] == self.fillchar*len(ruler[1:]): - # The case of one column followed by fillchars is numeric. - self.isnumeric = True - else: - self.isnumeric = False - # Underlines must be 3 or more fillchars. - self.underline = r'^' + fc + r'{3,}$' - splits = re.split(self.COL_STOP,ruler)[1:] - # Build self.columns. - for i in range(0,len(splits),2): - c = Column_OLD() - c.colalign = self.ALIGNMENTS[splits[i]] - s = splits[i+1] - if self.isnumeric: - # Strip trailing fillchars. - s = re.sub(fc+r'+$','',s) - if s == '': - c.rulerwidth = None - else: - try: - val = int(s) - if not val > 0: - raise ValueError, 'not > 0' - c.rulerwidth = val - except ValueError: - raise EAsciiDoc, 'malformed ruler: bad width' - else: # Calculate column width from inter-fillchar intervals. - if not re.match(r'^'+fc+r'+$',s): - raise EAsciiDoc,'malformed ruler: illegal fillchars' - c.rulerwidth = len(s)+1 - self.columns.append(c) - # Fill in unspecified ruler widths. - if self.isnumeric: - if self.columns[0].rulerwidth is None: - prevwidth = 1 - for c in self.columns: - if c.rulerwidth is None: - c.rulerwidth = prevwidth - prevwidth = c.rulerwidth - def build_colspecs(self): - """Generate colwidths and colspecs. This can only be done after the - table arguments have been parsed since we use the table format.""" - self.attributes['cols'] = len(self.columns) - # Calculate total ruler width. - totalwidth = 0 - for c in self.columns: - totalwidth = totalwidth + c.rulerwidth - if totalwidth <= 0: - raise EAsciiDoc,'zero width table' - # Calculate marked up colwidths from rulerwidths. - for c in self.columns: - # Convert ruler width to output page width. - width = float(c.rulerwidth) - if self.format == 'fixed': - if self.tablewidth is None: - # Size proportional to ruler width. - colfraction = width/config.textwidth - else: - # Size proportional to page width. - colfraction = width/totalwidth - else: - # Size proportional to page width. - colfraction = width/totalwidth - c.colwidth = colfraction * config.pagewidth # To page units. - if self.tablewidth is not None: - c.colwidth = c.colwidth * self.tablewidth # Scale factor. - if self.tablewidth > 1: - c.colwidth = c.colwidth/100 # tablewidth is in percent. - # Build colspecs. - if self.colspec: - cols = [] - i = 0 - for c in self.columns: - i += 1 - self.attributes['colalign'] = c.colalign - self.attributes['colwidth'] = str(int(c.colwidth)) - self.attributes['colnumber'] = str(i + 1) - s = subs_attrs(self.colspec,self.attributes) - if not s: - message.warning('colspec dropped: contains undefined attribute') - else: - cols.append(s) - self.attributes['colspecs'] = writer.newline.join(cols) - def split_rows(self,rows): - """Return a two item tuple containing a list of lines up to but not - including the next underline (continued lines are joined ) and the - tuple of all lines after the underline.""" - reo = re.compile(self.underline) - i = 0 - while not reo.match(rows[i]): - i = i+1 - if i == 0: - raise EAsciiDoc,'missing table rows' - if i >= len(rows): - raise EAsciiDoc,'closing [%s] underline expected' % self.defname - return (join_lines_OLD(rows[:i]), rows[i+1:]) - def parse_rows(self, rows, rtag, dtag): - """Parse rows list using the row and data tags. Returns a substituted - list of output lines.""" - result = [] - # Source rows are parsed as single block, rather than line by line, to - # allow the CSV reader to handle multi-line rows. - if self.format == 'fixed': - rows = self.parse_fixed(rows) - elif self.format == 'csv': - rows = self.parse_csv(rows) - elif self.format == 'dsv': - rows = self.parse_dsv(rows) - else: - assert True,'illegal table format' - # Substitute and indent all data in all rows. - stag,etag = subs_tag(rtag,self.attributes) - for row in rows: - result.append(' '+stag) - for data in self.subs_row(row,dtag): - result.append(' '+data) - result.append(' '+etag) - return result - def subs_row(self, data, dtag): - """Substitute the list of source row data elements using the data tag. - Returns a substituted list of output table data items.""" - result = [] - if len(data) < len(self.columns): - message.warning('fewer row data items then table columns') - if len(data) > len(self.columns): - message.warning('more row data items than table columns') - for i in range(len(self.columns)): - if i > len(data) - 1: - d = '' # Fill missing column data with blanks. - else: - d = data[i] - c = self.columns[i] - self.attributes['colalign'] = c.colalign - self.attributes['colwidth'] = str(int(c.colwidth)) - self.attributes['colnumber'] = str(i + 1) - stag,etag = subs_tag(dtag,self.attributes) - # Insert AsciiDoc line break (' +') where row data has newlines - # ('\n'). This is really only useful when the table format is csv - # and the output markup is HTML. It's also a bit dubious in that it - # assumes the user has not modified the shipped line break pattern. - subs = self.get_subs()[0] - if 'replacements2' in subs: - # Insert line breaks in cell data. - d = re.sub(r'(?m)\n',r' +\n',d) - d = d.split('\n') # So writer.newline is written. - else: - d = [d] - result = result + [stag] + Lex.subs(d,subs) + [etag] - return result - def parse_fixed(self,rows): - """Parse the list of source table rows. Each row item in the returned - list contains a list of cell data elements.""" - result = [] - for row in rows: - data = [] - start = 0 - # build an encoded representation - row = char_decode(row) - for c in self.columns: - end = start + c.rulerwidth - if c is self.columns[-1]: - # Text in last column can continue forever. - # Use the encoded string to slice, but convert back - # to plain string before further processing - data.append(char_encode(row[start:]).strip()) - else: - data.append(char_encode(row[start:end]).strip()) - start = end - result.append(data) - return result - def parse_csv(self,rows): - """Parse the list of source table rows. Each row item in the returned - list contains a list of cell data elements.""" - import StringIO - import csv - result = [] - rdr = csv.reader(StringIO.StringIO('\r\n'.join(rows)), - skipinitialspace=True) - try: - for row in rdr: - result.append(row) - except Exception: - raise EAsciiDoc,'csv parse error: %s' % row - return result - def parse_dsv(self,rows): - """Parse the list of source table rows. Each row item in the returned - list contains a list of cell data elements.""" - separator = self.attributes.get('separator',':') - separator = literal_eval('"'+separator+'"') - if len(separator) != 1: - raise EAsciiDoc,'malformed dsv separator: %s' % separator - # TODO If separator is preceeded by an odd number of backslashes then - # it is escaped and should not delimit. - result = [] - for row in rows: - # Skip blank lines - if row == '': continue - # Unescape escaped characters. - row = literal_eval('"'+row.replace('"','\\"')+'"') - data = row.split(separator) - data = [s.strip() for s in data] - result.append(data) - return result - def translate(self): - message.deprecated('old tables syntax') - AbstractBlock.translate(self) - # Reset instance specific properties. - self.underline = None - self.columns = [] - attrs = {} - BlockTitle.consume(attrs) - # Add relevant globals to table substitutions. - attrs['pagewidth'] = str(config.pagewidth) - attrs['pageunits'] = config.pageunits - # Mix in document attribute list. - AttributeList.consume(attrs) - # Validate overridable attributes. - for k,v in attrs.items(): - if k == 'format': - if v not in self.FORMATS: - raise EAsciiDoc, 'illegal [%s] %s: %s' % (self.defname,k,v) - self.format = v - elif k == 'tablewidth': - try: - self.tablewidth = float(attrs['tablewidth']) - except Exception: - raise EAsciiDoc, 'illegal [%s] %s: %s' % (self.defname,k,v) - self.merge_attributes(attrs) - # Parse table ruler. - ruler = reader.read() - assert re.match(self.delimiter,ruler) - self.parse_ruler(ruler) - # Read the entire table. - table = [] - while True: - line = reader.read_next() - # Table terminated by underline followed by a blank line or EOF. - if len(table) > 0 and re.match(self.underline,table[-1]): - if line in ('',None): - break; - if line is None: - raise EAsciiDoc,'closing [%s] underline expected' % self.defname - table.append(reader.read()) - # EXPERIMENTAL: The number of lines in the table, requested by Benjamin Klum. - self.attributes['rows'] = str(len(table)) - if self.check_msg: # Skip if table definition was marked invalid. - message.warning('skipping [%s] table: %s' % (self.defname,self.check_msg)) - return - self.push_blockname('table') - # Generate colwidths and colspecs. - self.build_colspecs() - # Generate headrows, footrows, bodyrows. - # Headrow, footrow and bodyrow data replaces same named attributes in - # the table markup template. In order to ensure this data does not get - # a second attribute substitution (which would interfere with any - # already substituted inline passthroughs) unique placeholders are used - # (the tab character does not appear elsewhere since it is expanded on - # input) which are replaced after template attribute substitution. - headrows = footrows = [] - bodyrows,table = self.split_rows(table) - if table: - headrows = bodyrows - bodyrows,table = self.split_rows(table) - if table: - footrows,table = self.split_rows(table) - if headrows: - headrows = self.parse_rows(headrows, self.headrow, self.headdata) - headrows = writer.newline.join(headrows) - self.attributes['headrows'] = '\x07headrows\x07' - if footrows: - footrows = self.parse_rows(footrows, self.footrow, self.footdata) - footrows = writer.newline.join(footrows) - self.attributes['footrows'] = '\x07footrows\x07' - bodyrows = self.parse_rows(bodyrows, self.bodyrow, self.bodydata) - bodyrows = writer.newline.join(bodyrows) - self.attributes['bodyrows'] = '\x07bodyrows\x07' - table = subs_attrs(config.sections[self.template],self.attributes) - table = writer.newline.join(table) - # Before we finish replace the table head, foot and body place holders - # with the real data. - if headrows: - table = table.replace('\x07headrows\x07', headrows, 1) - if footrows: - table = table.replace('\x07footrows\x07', footrows, 1) - table = table.replace('\x07bodyrows\x07', bodyrows, 1) - writer.write(table,trace='table') - self.pop_blockname() - -class Tables_OLD(AbstractBlocks): - """List of tables.""" - BLOCK_TYPE = Table_OLD - PREFIX = 'old_tabledef-' - def __init__(self): - AbstractBlocks.__init__(self) - def load(self,sections): - AbstractBlocks.load(self,sections) - def validate(self): - # Does not call AbstractBlocks.validate(). - # Check we have a default table definition, - for i in range(len(self.blocks)): - if self.blocks[i].defname == 'old_tabledef-default': - default = self.blocks[i] - break - else: - raise EAsciiDoc,'missing section: [OLD_tabledef-default]' - # Set default table defaults. - if default.format is None: default.subs = 'fixed' - # Propagate defaults to unspecified table parameters. - for b in self.blocks: - if b is not default: - if b.fillchar is None: b.fillchar = default.fillchar - if b.format is None: b.format = default.format - if b.template is None: b.template = default.template - if b.colspec is None: b.colspec = default.colspec - if b.headrow is None: b.headrow = default.headrow - if b.footrow is None: b.footrow = default.footrow - if b.bodyrow is None: b.bodyrow = default.bodyrow - if b.headdata is None: b.headdata = default.headdata - if b.footdata is None: b.footdata = default.footdata - if b.bodydata is None: b.bodydata = default.bodydata - # Check all tables have valid fill character. - for b in self.blocks: - if not b.fillchar or len(b.fillchar) != 1: - raise EAsciiDoc,'[%s] missing or illegal fillchar' % b.defname - # Build combined tables delimiter patterns and assign defaults. - delimiters = [] - for b in self.blocks: - # Ruler is: - # (ColStop,(ColWidth,FillChar+)?)+, FillChar+, TableWidth? - b.delimiter = r'^(' + Table_OLD.COL_STOP \ - + r'(\d*|' + re.escape(b.fillchar) + r'*)' \ - + r')+' \ - + re.escape(b.fillchar) + r'+' \ - + '([\d\.]*)$' - delimiters.append(b.delimiter) - if not b.headrow: - b.headrow = b.bodyrow - if not b.footrow: - b.footrow = b.bodyrow - if not b.headdata: - b.headdata = b.bodydata - if not b.footdata: - b.footdata = b.bodydata - self.delimiters = re_join(delimiters) - # Check table definitions are valid. - for b in self.blocks: - b.validate() - if config.verbose: - if b.check_msg: - message.warning('[%s] table definition: %s' % (b.defname,b.check_msg)) - -# End of deprecated old table classes. -#--------------------------------------------------------------------------- - -#--------------------------------------------------------------------------- -# filter and theme plugin commands. -#--------------------------------------------------------------------------- -import shutil, zipfile - -def die(msg): - message.stderr(msg) - sys.exit(1) - -def extract_zip(zip_file, destdir): - """ - Unzip Zip file to destination directory. - Throws exception if error occurs. - """ - zipo = zipfile.ZipFile(zip_file, 'r') - try: - for zi in zipo.infolist(): - outfile = zi.filename - if not outfile.endswith('/'): - d, outfile = os.path.split(outfile) - directory = os.path.normpath(os.path.join(destdir, d)) - if not os.path.isdir(directory): - os.makedirs(directory) - outfile = os.path.join(directory, outfile) - perms = (zi.external_attr >> 16) & 0777 - message.verbose('extracting: %s' % outfile) - flags = os.O_CREAT | os.O_WRONLY - if sys.platform == 'win32': - flags |= os.O_BINARY - if perms == 0: - # Zip files created under Windows do not include permissions. - fh = os.open(outfile, flags) - else: - fh = os.open(outfile, flags, perms) - try: - os.write(fh, zipo.read(zi.filename)) - finally: - os.close(fh) - finally: - zipo.close() - -def create_zip(zip_file, src, skip_hidden=False): - """ - Create Zip file. If src is a directory archive all contained files and - subdirectories, if src is a file archive the src file. - Files and directories names starting with . are skipped - if skip_hidden is True. - Throws exception if error occurs. - """ - zipo = zipfile.ZipFile(zip_file, 'w') - try: - if os.path.isfile(src): - arcname = os.path.basename(src) - message.verbose('archiving: %s' % arcname) - zipo.write(src, arcname, zipfile.ZIP_DEFLATED) - elif os.path.isdir(src): - srcdir = os.path.abspath(src) - if srcdir[-1] != os.path.sep: - srcdir += os.path.sep - for root, dirs, files in os.walk(srcdir): - arcroot = os.path.abspath(root)[len(srcdir):] - if skip_hidden: - for d in dirs[:]: - if d.startswith('.'): - message.verbose('skipping: %s' % os.path.join(arcroot, d)) - del dirs[dirs.index(d)] - for f in files: - filename = os.path.join(root,f) - arcname = os.path.join(arcroot, f) - if skip_hidden and f.startswith('.'): - message.verbose('skipping: %s' % arcname) - continue - message.verbose('archiving: %s' % arcname) - zipo.write(filename, arcname, zipfile.ZIP_DEFLATED) - else: - raise ValueError,'src must specify directory or file: %s' % src - finally: - zipo.close() - -class Plugin: - """ - --filter and --theme option commands. - """ - CMDS = ('install','remove','list','build') - - type = None # 'backend', 'filter' or 'theme'. - - @staticmethod - def get_dir(): - """ - Return plugins path (.asciidoc/filters or .asciidoc/themes) in user's - home direcory or None if user home not defined. - """ - result = userdir() - if result: - result = os.path.join(result, '.asciidoc', Plugin.type+'s') - return result - - @staticmethod - def install(args): - """ - Install plugin Zip file. - args[0] is plugin zip file path. - args[1] is optional destination plugins directory. - """ - if len(args) not in (1,2): - die('invalid number of arguments: --%s install %s' - % (Plugin.type, ' '.join(args))) - zip_file = args[0] - if not os.path.isfile(zip_file): - die('file not found: %s' % zip_file) - reo = re.match(r'^\w+',os.path.split(zip_file)[1]) - if not reo: - die('file name does not start with legal %s name: %s' - % (Plugin.type, zip_file)) - plugin_name = reo.group() - if len(args) == 2: - plugins_dir = args[1] - if not os.path.isdir(plugins_dir): - die('directory not found: %s' % plugins_dir) - else: - plugins_dir = Plugin.get_dir() - if not plugins_dir: - die('user home directory is not defined') - plugin_dir = os.path.join(plugins_dir, plugin_name) - if os.path.exists(plugin_dir): - die('%s is already installed: %s' % (Plugin.type, plugin_dir)) - try: - os.makedirs(plugin_dir) - except Exception,e: - die('failed to create %s directory: %s' % (Plugin.type, str(e))) - try: - extract_zip(zip_file, plugin_dir) - except Exception,e: - if os.path.isdir(plugin_dir): - shutil.rmtree(plugin_dir) - die('failed to extract %s: %s' % (Plugin.type, str(e))) - - @staticmethod - def remove(args): - """ - Delete plugin directory. - args[0] is plugin name. - args[1] is optional plugin directory (defaults to ~/.asciidoc/<plugin_name>). - """ - if len(args) not in (1,2): - die('invalid number of arguments: --%s remove %s' - % (Plugin.type, ' '.join(args))) - plugin_name = args[0] - if not re.match(r'^\w+$',plugin_name): - die('illegal %s name: %s' % (Plugin.type, plugin_name)) - if len(args) == 2: - d = args[1] - if not os.path.isdir(d): - die('directory not found: %s' % d) - else: - d = Plugin.get_dir() - if not d: - die('user directory is not defined') - plugin_dir = os.path.join(d, plugin_name) - if not os.path.isdir(plugin_dir): - die('cannot find %s: %s' % (Plugin.type, plugin_dir)) - try: - message.verbose('removing: %s' % plugin_dir) - shutil.rmtree(plugin_dir) - except Exception,e: - die('failed to delete %s: %s' % (Plugin.type, str(e))) - - @staticmethod - def list(args): - """ - List all plugin directories (global and local). - """ - for d in [os.path.join(d, Plugin.type+'s') for d in config.get_load_dirs()]: - if os.path.isdir(d): - for f in os.walk(d).next()[1]: - message.stdout(os.path.join(d,f)) - - @staticmethod - def build(args): - """ - Create plugin Zip file. - args[0] is Zip file name. - args[1] is plugin directory. - """ - if len(args) != 2: - die('invalid number of arguments: --%s build %s' - % (Plugin.type, ' '.join(args))) - zip_file = args[0] - plugin_source = args[1] - if not (os.path.isdir(plugin_source) or os.path.isfile(plugin_source)): - die('plugin source not found: %s' % plugin_source) - try: - create_zip(zip_file, plugin_source, skip_hidden=True) - except Exception,e: - die('failed to create %s: %s' % (zip_file, str(e))) - - -#--------------------------------------------------------------------------- -# Application code. -#--------------------------------------------------------------------------- -# Constants -# --------- -APP_FILE = None # This file's full path. -APP_DIR = None # This file's directory. -USER_DIR = None # ~/.asciidoc -# Global configuration files directory (set by Makefile build target). -CONF_DIR = '/etc/asciidoc' -HELP_FILE = 'help.conf' # Default (English) help file. - -# Globals -# ------- -document = Document() # The document being processed. -config = Config() # Configuration file reader. -reader = Reader() # Input stream line reader. -writer = Writer() # Output stream line writer. -message = Message() # Message functions. -paragraphs = Paragraphs() # Paragraph definitions. -lists = Lists() # List definitions. -blocks = DelimitedBlocks() # DelimitedBlock definitions. -tables_OLD = Tables_OLD() # Table_OLD definitions. -tables = Tables() # Table definitions. -macros = Macros() # Macro definitions. -calloutmap = CalloutMap() # Coordinates callouts and callout list. -trace = Trace() # Implements trace attribute processing. - -### Used by asciidocapi.py ### -# List of message strings written to stderr. -messages = message.messages - - -def asciidoc(backend, doctype, confiles, infile, outfile, options): - """Convert AsciiDoc document to DocBook document of type doctype - The AsciiDoc document is read from file object src the translated - DocBook file written to file object dst.""" - def load_conffiles(include=[], exclude=[]): - # Load conf files specified on the command-line and by the conf-files attribute. - files = document.attributes.get('conf-files','') - files = [f.strip() for f in files.split('|') if f.strip()] - files += confiles - if files: - for f in files: - if os.path.isfile(f): - config.load_file(f, include=include, exclude=exclude) - else: - raise EAsciiDoc,'missing configuration file: %s' % f - try: - document.attributes['python'] = sys.executable - for f in config.filters: - if not config.find_config_dir('filters', f): - raise EAsciiDoc,'missing filter: %s' % f - if doctype not in (None,'article','manpage','book'): - raise EAsciiDoc,'illegal document type' - # Set processing options. - for o in options: - if o == '-c': config.dumping = True - if o == '-s': config.header_footer = False - if o == '-v': config.verbose = True - document.update_attributes() - if '-e' not in options: - # Load asciidoc.conf files in two passes: the first for attributes - # the second for everything. This is so that locally set attributes - # available are in the global asciidoc.conf - if not config.load_from_dirs('asciidoc.conf',include=['attributes']): - raise EAsciiDoc,'configuration file asciidoc.conf missing' - load_conffiles(include=['attributes']) - config.load_from_dirs('asciidoc.conf') - if infile != '<stdin>': - indir = os.path.dirname(infile) - config.load_file('asciidoc.conf', indir, - include=['attributes','titles','specialchars']) - else: - load_conffiles(include=['attributes','titles','specialchars']) - document.update_attributes() - # Check the infile exists. - if infile != '<stdin>': - if not os.path.isfile(infile): - raise EAsciiDoc,'input file %s missing' % infile - document.infile = infile - AttributeList.initialize() - # Open input file and parse document header. - reader.tabsize = config.tabsize - reader.open(infile) - has_header = document.parse_header(doctype,backend) - # doctype is now finalized. - document.attributes['doctype-'+document.doctype] = '' - config.set_theme_attributes() - # Load backend configuration files. - if '-e' not in options: - f = document.backend + '.conf' - conffile = config.load_backend() - if not conffile: - raise EAsciiDoc,'missing backend conf file: %s' % f - document.attributes['backend-confdir'] = os.path.dirname(conffile) - # backend is now known. - document.attributes['backend-'+document.backend] = '' - document.attributes[document.backend+'-'+document.doctype] = '' - doc_conffiles = [] - if '-e' not in options: - # Load filters and language file. - config.load_filters() - document.load_lang() - if infile != '<stdin>': - # Load local conf files (files in the source file directory). - config.load_file('asciidoc.conf', indir) - config.load_backend([indir]) - config.load_filters([indir]) - # Load document specific configuration files. - f = os.path.splitext(infile)[0] - doc_conffiles = [ - f for f in (f+'.conf', f+'-'+document.backend+'.conf') - if os.path.isfile(f) ] - for f in doc_conffiles: - config.load_file(f) - load_conffiles() - # Build asciidoc-args attribute. - args = '' - # Add custom conf file arguments. - for f in doc_conffiles + confiles: - args += ' --conf-file "%s"' % f - # Add command-line and header attributes. - attrs = {} - attrs.update(AttributeEntry.attributes) - attrs.update(config.cmd_attrs) - if 'title' in attrs: # Don't pass the header title. - del attrs['title'] - for k,v in attrs.items(): - if v: - args += ' --attribute "%s=%s"' % (k,v) - else: - args += ' --attribute "%s"' % k - document.attributes['asciidoc-args'] = args - # Build outfile name. - if outfile is None: - outfile = os.path.splitext(infile)[0] + '.' + document.backend - if config.outfilesuffix: - # Change file extension. - outfile = os.path.splitext(outfile)[0] + config.outfilesuffix - document.outfile = outfile - # Document header attributes override conf file attributes. - document.attributes.update(AttributeEntry.attributes) - document.update_attributes() - # Configuration is fully loaded. - config.expand_all_templates() - # Check configuration for consistency. - config.validate() - # Initialize top level block name. - if document.attributes.get('blockname'): - AbstractBlock.blocknames.append(document.attributes['blockname']) - paragraphs.initialize() - lists.initialize() - if config.dumping: - config.dump() - else: - writer.newline = config.newline - try: - writer.open(outfile, reader.bom) - try: - document.translate(has_header) # Generate the output. - finally: - writer.close() - finally: - reader.closefile() - except KeyboardInterrupt: - raise - except Exception,e: - # Cleanup. - if outfile and outfile != '<stdout>' and os.path.isfile(outfile): - os.unlink(outfile) - # Build and print error description. - msg = 'FAILED: ' - if reader.cursor: - msg = message.format('', msg) - if isinstance(e, EAsciiDoc): - message.stderr('%s%s' % (msg,str(e))) - else: - if __name__ == '__main__': - message.stderr(msg+'unexpected error:') - message.stderr('-'*60) - traceback.print_exc(file=sys.stderr) - message.stderr('-'*60) - else: - message.stderr('%sunexpected error: %s' % (msg,str(e))) - sys.exit(1) - -def usage(msg=''): - if msg: - message.stderr(msg) - show_help('default', sys.stderr) - -def show_help(topic, f=None): - """Print help topic to file object f.""" - if f is None: - f = sys.stdout - # Select help file. - lang = config.cmd_attrs.get('lang') - if lang and lang != 'en': - help_file = 'help-' + lang + '.conf' - else: - help_file = HELP_FILE - # Print [topic] section from help file. - config.load_from_dirs(help_file) - if len(config.sections) == 0: - # Default to English if specified language help files not found. - help_file = HELP_FILE - config.load_from_dirs(help_file) - if len(config.sections) == 0: - message.stderr('no help topics found') - sys.exit(1) - n = 0 - for k in config.sections: - if re.match(re.escape(topic), k): - n += 1 - lines = config.sections[k] - if n == 0: - if topic != 'topics': - message.stderr('help topic not found: [%s] in %s' % (topic, help_file)) - message.stderr('available help topics: %s' % ', '.join(config.sections.keys())) - sys.exit(1) - elif n > 1: - message.stderr('ambiguous help topic: %s' % topic) - else: - for line in lines: - print >>f, line - -### Used by asciidocapi.py ### -def execute(cmd,opts,args): - """ - Execute asciidoc with command-line options and arguments. - cmd is asciidoc command or asciidoc.py path. - opts and args conform to values returned by getopt.getopt(). - Raises SystemExit if an error occurs. - - Doctests: - - 1. Check execution: - - >>> import StringIO - >>> infile = StringIO.StringIO('Hello *{author}*') - >>> outfile = StringIO.StringIO() - >>> opts = [] - >>> opts.append(('--backend','html4')) - >>> opts.append(('--no-header-footer',None)) - >>> opts.append(('--attribute','author=Joe Bloggs')) - >>> opts.append(('--out-file',outfile)) - >>> execute(__file__, opts, [infile]) - >>> print outfile.getvalue() - <p>Hello <strong>Joe Bloggs</strong></p> - - >>> - - """ - config.init(cmd) - if len(args) > 1: - usage('Too many arguments') - sys.exit(1) - backend = None - doctype = None - confiles = [] - outfile = None - options = [] - help_option = False - for o,v in opts: - if o in ('--help','-h'): - help_option = True - #DEPRECATED: --unsafe option. - if o == '--unsafe': - document.safe = False - if o == '--safe': - document.safe = True - if o == '--version': - print('asciidoc %s' % VERSION) - sys.exit(0) - if o in ('-b','--backend'): - backend = v - if o in ('-c','--dump-conf'): - options.append('-c') - if o in ('-d','--doctype'): - doctype = v - if o in ('-e','--no-conf'): - options.append('-e') - if o in ('-f','--conf-file'): - confiles.append(v) - if o == '--filter': - config.filters.append(v) - if o in ('-n','--section-numbers'): - o = '-a' - v = 'numbered' - if o == '--theme': - o = '-a' - v = 'theme='+v - if o in ('-a','--attribute'): - e = parse_entry(v, allow_name_only=True) - if not e: - usage('Illegal -a option: %s' % v) - sys.exit(1) - k,v = e - # A @ suffix denotes don't override existing document attributes. - if v and v[-1] == '@': - document.attributes[k] = v[:-1] - else: - config.cmd_attrs[k] = v - if o in ('-o','--out-file'): - outfile = v - if o in ('-s','--no-header-footer'): - options.append('-s') - if o in ('-v','--verbose'): - options.append('-v') - if help_option: - if len(args) == 0: - show_help('default') - else: - show_help(args[-1]) - sys.exit(0) - if len(args) == 0 and len(opts) == 0: - usage() - sys.exit(0) - if len(args) == 0: - usage('No source file specified') - sys.exit(1) - stdin,stdout = sys.stdin,sys.stdout - try: - infile = args[0] - if infile == '-': - infile = '<stdin>' - elif isinstance(infile, str): - infile = os.path.abspath(infile) - else: # Input file is file object from API call. - sys.stdin = infile - infile = '<stdin>' - if outfile == '-': - outfile = '<stdout>' - elif isinstance(outfile, str): - outfile = os.path.abspath(outfile) - elif outfile is None: - if infile == '<stdin>': - outfile = '<stdout>' - else: # Output file is file object from API call. - sys.stdout = outfile - outfile = '<stdout>' - # Do the work. - asciidoc(backend, doctype, confiles, infile, outfile, options) - if document.has_errors: - sys.exit(1) - finally: - sys.stdin,sys.stdout = stdin,stdout - -if __name__ == '__main__': - # Process command line options. - import getopt - try: - #DEPRECATED: --unsafe option. - opts,args = getopt.getopt(sys.argv[1:], - 'a:b:cd:ef:hno:svw:', - ['attribute=','backend=','conf-file=','doctype=','dump-conf', - 'help','no-conf','no-header-footer','out-file=', - 'section-numbers','verbose','version','safe','unsafe', - 'doctest','filter=','theme=']) - except getopt.GetoptError: - message.stderr('illegal command options') - sys.exit(1) - opt_names = [opt[0] for opt in opts] - if '--doctest' in opt_names: - # Run module doctests. - import doctest - options = doctest.NORMALIZE_WHITESPACE + doctest.ELLIPSIS - failures,tries = doctest.testmod(optionflags=options) - if failures == 0: - message.stderr('All doctests passed') - sys.exit(0) - else: - sys.exit(1) - # Look for plugin management commands. - count = 0 - for o,v in opts: - if o in ('-b','--backend','--filter','--theme'): - if o == '-b': - o = '--backend' - plugin = o[2:] - cmd = v - if cmd not in Plugin.CMDS: - continue - count += 1 - if count > 1: - die('--backend, --filter and --theme options are mutually exclusive') - if count == 1: - # Execute plugin management commands. - if not cmd: - die('missing --%s command' % plugin) - if cmd not in Plugin.CMDS: - die('illegal --%s command: %s' % (plugin, cmd)) - Plugin.type = plugin - config.init(sys.argv[0]) - config.verbose = bool(set(['-v','--verbose']) & set(opt_names)) - getattr(Plugin,cmd)(args) - else: - # Execute asciidoc. - try: - execute(sys.argv[0],opts,args) - except KeyboardInterrupt: - sys.exit(1) diff --git a/manual/src/bin/asciidoc/asciidocapi.py b/manual/src/bin/asciidoc/asciidocapi.py deleted file mode 100644 index dcdf262b86a0b..0000000000000 --- a/manual/src/bin/asciidoc/asciidocapi.py +++ /dev/null @@ -1,257 +0,0 @@ -#!/usr/bin/env python -""" -asciidocapi - AsciiDoc API wrapper class. - -The AsciiDocAPI class provides an API for executing asciidoc. Minimal example -compiles `mydoc.txt` to `mydoc.html`: - - import asciidocapi - asciidoc = asciidocapi.AsciiDocAPI() - asciidoc.execute('mydoc.txt') - -- Full documentation in asciidocapi.txt. -- See the doctests below for more examples. - -Doctests: - -1. Check execution: - - >>> import StringIO - >>> infile = StringIO.StringIO('Hello *{author}*') - >>> outfile = StringIO.StringIO() - >>> asciidoc = AsciiDocAPI() - >>> asciidoc.options('--no-header-footer') - >>> asciidoc.attributes['author'] = 'Joe Bloggs' - >>> asciidoc.execute(infile, outfile, backend='html4') - >>> print outfile.getvalue() - <p>Hello <strong>Joe Bloggs</strong></p> - - >>> asciidoc.attributes['author'] = 'Bill Smith' - >>> infile = StringIO.StringIO('Hello _{author}_') - >>> outfile = StringIO.StringIO() - >>> asciidoc.execute(infile, outfile, backend='docbook') - >>> print outfile.getvalue() - <simpara>Hello <emphasis>Bill Smith</emphasis></simpara> - -2. Check error handling: - - >>> import StringIO - >>> asciidoc = AsciiDocAPI() - >>> infile = StringIO.StringIO('---------') - >>> outfile = StringIO.StringIO() - >>> asciidoc.execute(infile, outfile) - Traceback (most recent call last): - File "<stdin>", line 1, in <module> - File "asciidocapi.py", line 189, in execute - raise AsciiDocError(self.messages[-1]) - AsciiDocError: ERROR: <stdin>: line 1: [blockdef-listing] missing closing delimiter - - -Copyright (C) 2009 Stuart Rackham. Free use of this software is granted -under the terms of the GNU General Public License (GPL). - -""" - -import sys,os,re,imp - -API_VERSION = '0.1.2' -MIN_ASCIIDOC_VERSION = '8.4.1' # Minimum acceptable AsciiDoc version. - - -def find_in_path(fname, path=None): - """ - Find file fname in paths. Return None if not found. - """ - if path is None: - path = os.environ.get('PATH', '') - for dir in path.split(os.pathsep): - fpath = os.path.join(dir, fname) - if os.path.isfile(fpath): - return fpath - else: - return None - - -class AsciiDocError(Exception): - pass - - -class Options(object): - """ - Stores asciidoc(1) command options. - """ - def __init__(self, values=[]): - self.values = values[:] - def __call__(self, name, value=None): - """Shortcut for append method.""" - self.append(name, value) - def append(self, name, value=None): - if type(value) in (int,float): - value = str(value) - self.values.append((name,value)) - - -class Version(object): - """ - Parse and compare AsciiDoc version numbers. Instance attributes: - - string: String version number '<major>.<minor>[.<micro>][suffix]'. - major: Integer major version number. - minor: Integer minor version number. - micro: Integer micro version number. - suffix: Suffix (begins with non-numeric character) is ignored when - comparing. - - Doctest examples: - - >>> Version('8.2.5') < Version('8.3 beta 1') - True - >>> Version('8.3.0') == Version('8.3. beta 1') - True - >>> Version('8.2.0') < Version('8.20') - True - >>> Version('8.20').major - 8 - >>> Version('8.20').minor - 20 - >>> Version('8.20').micro - 0 - >>> Version('8.20').suffix - '' - >>> Version('8.20 beta 1').suffix - 'beta 1' - - """ - def __init__(self, version): - self.string = version - reo = re.match(r'^(\d+)\.(\d+)(\.(\d+))?\s*(.*?)\s*$', self.string) - if not reo: - raise ValueError('invalid version number: %s' % self.string) - groups = reo.groups() - self.major = int(groups[0]) - self.minor = int(groups[1]) - self.micro = int(groups[3] or '0') - self.suffix = groups[4] or '' - def __cmp__(self, other): - result = cmp(self.major, other.major) - if result == 0: - result = cmp(self.minor, other.minor) - if result == 0: - result = cmp(self.micro, other.micro) - return result - - -class AsciiDocAPI(object): - """ - AsciiDoc API class. - """ - def __init__(self, asciidoc_py=None): - """ - Locate and import asciidoc.py. - Initialize instance attributes. - """ - self.options = Options() - self.attributes = {} - self.messages = [] - # Search for the asciidoc command file. - # Try ASCIIDOC_PY environment variable first. - cmd = os.environ.get('ASCIIDOC_PY') - if cmd: - if not os.path.isfile(cmd): - raise AsciiDocError('missing ASCIIDOC_PY file: %s' % cmd) - elif asciidoc_py: - # Next try path specified by caller. - cmd = asciidoc_py - if not os.path.isfile(cmd): - raise AsciiDocError('missing file: %s' % cmd) - else: - # Try shell search paths. - for fname in ['asciidoc.py','asciidoc.pyc','asciidoc']: - cmd = find_in_path(fname) - if cmd: break - else: - # Finally try current working directory. - for cmd in ['asciidoc.py','asciidoc.pyc','asciidoc']: - if os.path.isfile(cmd): break - else: - raise AsciiDocError('failed to locate asciidoc') - self.cmd = os.path.realpath(cmd) - self.__import_asciidoc() - - def __import_asciidoc(self, reload=False): - ''' - Import asciidoc module (script or compiled .pyc). - See - http://groups.google.com/group/asciidoc/browse_frm/thread/66e7b59d12cd2f91 - for an explanation of why a seemingly straight-forward job turned out - quite complicated. - ''' - if os.path.splitext(self.cmd)[1] in ['.py','.pyc']: - sys.path.insert(0, os.path.dirname(self.cmd)) - try: - try: - if reload: - import __builtin__ # Because reload() is shadowed. - __builtin__.reload(self.asciidoc) - else: - import asciidoc - self.asciidoc = asciidoc - except ImportError: - raise AsciiDocError('failed to import ' + self.cmd) - finally: - del sys.path[0] - else: - # The import statement can only handle .py or .pyc files, have to - # use imp.load_source() for scripts with other names. - try: - imp.load_source('asciidoc', self.cmd) - import asciidoc - self.asciidoc = asciidoc - except ImportError: - raise AsciiDocError('failed to import ' + self.cmd) - if Version(self.asciidoc.VERSION) < Version(MIN_ASCIIDOC_VERSION): - raise AsciiDocError( - 'asciidocapi %s requires asciidoc %s or better' - % (API_VERSION, MIN_ASCIIDOC_VERSION)) - - def execute(self, infile, outfile=None, backend=None): - """ - Compile infile to outfile using backend format. - infile can outfile can be file path strings or file like objects. - """ - self.messages = [] - opts = Options(self.options.values) - if outfile is not None: - opts('--out-file', outfile) - if backend is not None: - opts('--backend', backend) - for k,v in self.attributes.items(): - if v == '' or k[-1] in '!@': - s = k - elif v is None: # A None value undefines the attribute. - s = k + '!' - else: - s = '%s=%s' % (k,v) - opts('--attribute', s) - args = [infile] - # The AsciiDoc command was designed to process source text then - # exit, there are globals and statics in asciidoc.py that have - # to be reinitialized before each run -- hence the reload. - self.__import_asciidoc(reload=True) - try: - try: - self.asciidoc.execute(self.cmd, opts.values, args) - finally: - self.messages = self.asciidoc.messages[:] - except SystemExit, e: - if e.code: - raise AsciiDocError(self.messages[-1]) - - -if __name__ == "__main__": - """ - Run module doctests. - """ - import doctest - options = doctest.NORMALIZE_WHITESPACE + doctest.ELLIPSIS - doctest.testmod(optionflags=options) diff --git a/manual/src/bin/asciidoc/common.aap b/manual/src/bin/asciidoc/common.aap deleted file mode 100644 index 89c06956c9b81..0000000000000 --- a/manual/src/bin/asciidoc/common.aap +++ /dev/null @@ -1,9 +0,0 @@ -# -# Executed by all main.aap's before anything else. -# - -_parent.VERS = 8.6.7 -_parent.DATE = 17 March 2012 - -all: - :pass diff --git a/manual/src/bin/asciidoc/configure b/manual/src/bin/asciidoc/configure deleted file mode 100755 index 93426929d198f..0000000000000 --- a/manual/src/bin/asciidoc/configure +++ /dev/null @@ -1,2987 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for asciidoc 8.6.7. -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 </dev/null -exec 6>&1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='asciidoc' -PACKAGE_TARNAME='asciidoc' -PACKAGE_VERSION='8.6.7' -PACKAGE_STRING='asciidoc 8.6.7' -PACKAGE_BUGREPORT='' -PACKAGE_URL='' - -ac_subst_vars='LTLIBOBJS -LIBOBJS -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -LN_S -SED -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -' - ac_precious_vars='build_alias -host_alias -target_alias' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures asciidoc 8.6.7 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/asciidoc] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of asciidoc 8.6.7:";; - esac - cat <<\_ACEOF - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -asciidoc configure 8.6.7 -generated by GNU Autoconf 2.65 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by asciidoc $as_me 8.6.7, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_config_files="$ac_config_files Makefile" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done -done -if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by asciidoc $as_me 8.6.7, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -asciidoc config.status 8.6.7 -configured by $0, generated by GNU Autoconf 2.65, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' <conf$$subs.awk | sed ' -/^[^""]/{ - N - s/\n// -} -' >>$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/manual/src/bin/asciidoc/configure.ac b/manual/src/bin/asciidoc/configure.ac deleted file mode 100644 index 4dc1776db2216..0000000000000 --- a/manual/src/bin/asciidoc/configure.ac +++ /dev/null @@ -1,11 +0,0 @@ -AC_INIT(asciidoc, 8.6.7) - -AC_CONFIG_FILES(Makefile) - -AC_PROG_SED - -AC_PROG_LN_S - -AC_PROG_INSTALL - -AC_OUTPUT diff --git a/manual/src/bin/asciidoc/dblatex/asciidoc-dblatex.sty b/manual/src/bin/asciidoc/dblatex/asciidoc-dblatex.sty deleted file mode 100644 index 9d898390ca621..0000000000000 --- a/manual/src/bin/asciidoc/dblatex/asciidoc-dblatex.sty +++ /dev/null @@ -1,20 +0,0 @@ -%% -%% This style is derived from the docbook one. -%% -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{asciidoc}[2008/06/05 AsciiDoc DocBook Style] -%% Just use the original package and pass the options. -\RequirePackageWithOptions{docbook} - -% Sidebar is a boxed minipage that can contain verbatim. -% Changed shadow box to double box. -\renewenvironment{sidebar}[1][0.95\textwidth]{ - \hspace{0mm}\newline% - \noindent\begin{Sbox}\begin{minipage}{#1}% - \setlength\parskip{\medskipamount}% -}{ - \end{minipage}\end{Sbox}\doublebox{\TheSbox}% -} - -% For DocBook literallayout elements, see `./dblatex/dblatex-readme.txt`. -\usepackage{alltt} diff --git a/manual/src/bin/asciidoc/dblatex/asciidoc-dblatex.xsl b/manual/src/bin/asciidoc/dblatex/asciidoc-dblatex.xsl deleted file mode 100644 index 3df2d2ede5e7b..0000000000000 --- a/manual/src/bin/asciidoc/dblatex/asciidoc-dblatex.xsl +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -dblatex(1) XSL user stylesheet for asciidoc(1). -See dblatex(1) -p option. ---> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> - - <!-- TOC links in the titles, and in blue. --> - <xsl:param name="latex.hyperparam">colorlinks,linkcolor=blue,pdfstartview=FitH</xsl:param> - <xsl:param name="doc.publisher.show">1</xsl:param> - <xsl:param name="doc.lot.show"></xsl:param> - <xsl:param name="term.breakline">1</xsl:param> - <xsl:param name="doc.collab.show">0</xsl:param> - <xsl:param name="doc.section.depth">3</xsl:param> - <xsl:param name="table.in.float">0</xsl:param> - <xsl:param name="monoseq.hyphenation">0</xsl:param> - <xsl:param name="latex.output.revhistory">1</xsl:param> - - <!-- This doesn't work, don't know why, see: - http://dblatex.sourceforge.net/html/manual/apas03.html - ./docbook-xsl/common.xsl - --> - <!-- - <xsl:param name="doc.toc.show"> - <xsl:choose> - <xsl:when test="/processing-instruction('asciidoc-toc')"> -1 - </xsl:when> - <xsl:otherwise> -0 - </xsl:otherwise> - </xsl:choose> - </xsl:param> - <xsl:param name="doc.lot.show"> - <xsl:choose> - <xsl:when test="/book"> -figure,table,equation,example - </xsl:when> - </xsl:choose> - </xsl:param> - --> - <xsl:param name="doc.toc.show">1</xsl:param> - - <!-- - Override default literallayout template. - See `./dblatex/dblatex-readme.txt`. - --> - <xsl:template match="address|literallayout[@class!='monospaced']"> - <xsl:text>\begin{alltt}</xsl:text> - <xsl:text> \normalfont{} </xsl:text> - <xsl:apply-templates/> - <xsl:text> \end{alltt}</xsl:text> - </xsl:template> - - <xsl:template match="processing-instruction('asciidoc-pagebreak')"> - <!-- force hard pagebreak, varies from 0(low) to 4(high) --> - <xsl:text>\pagebreak[4] </xsl:text> - <xsl:apply-templates /> - <xsl:text> </xsl:text> - </xsl:template> - - <xsl:template match="processing-instruction('asciidoc-br')"> - <xsl:text>\newline </xsl:text> - </xsl:template> - - <xsl:template match="processing-instruction('asciidoc-hr')"> - <!-- draw a 444 pt line (centered) --> - <xsl:text>\begin{center} </xsl:text> - <xsl:text>\line(1,0){444} </xsl:text> - <xsl:text>\end{center} </xsl:text> - </xsl:template> - -</xsl:stylesheet> - diff --git a/manual/src/bin/asciidoc/dblatex/dblatex-readme.txt b/manual/src/bin/asciidoc/dblatex/dblatex-readme.txt deleted file mode 100644 index 39bb4371f05c4..0000000000000 --- a/manual/src/bin/asciidoc/dblatex/dblatex-readme.txt +++ /dev/null @@ -1,39 +0,0 @@ -AsciiDoc dblatex README -======================= - -Customization -------------- -The `./dblatex` directory contains: - -`./dblatex/asciidoc-dblatex.xsl`:: Optional dblatex XSL parameter -customization. - -`./dblatex/asciidoc-dblatex.sty`:: Optional customized LaTeX styles. - -Use these files with dblatex(1) `-p` and `-s` options, for example: - - dblatex -p ../dblatex/asciidoc-dblatex.xsl \ - -s ../dblatex/asciidoc-dblatex.sty article.xml - - -Limitations ------------ -Observed in dblatex 0.2.8. - -- dblatex doesn't seem to process the DocBook 'literallayout' element - correctly: it is rendered in a monospaced font and no inline - elements are processed. By default the normal font should be used - and almost all DocBook inline elements should be processed - (http://www.docbook.org/tdg/en/html/literallayout.html). I almost - fixed this by overriding the default dblatex literallayout template - (in `./dblatex/asciidoc-dblatex.xsl`) and using the LaTeX 'alltt' - package, but there are remaining problems: - - * Blank lines are replaced by a single space. - * The 'literallayout' element incorrectly wraps text when rendered - inside a table. - -- Callouts do not work inside DocBook 'literallayout' elements which - means callouts are not displayed inside AsciiDoc literal blocks. A - workaround is to change the AsciiDoc literal block to a listing - block. diff --git a/manual/src/bin/asciidoc/docbook-xsl/asciidoc-docbook-xsl.txt b/manual/src/bin/asciidoc/docbook-xsl/asciidoc-docbook-xsl.txt deleted file mode 100644 index fd71e63db9d58..0000000000000 --- a/manual/src/bin/asciidoc/docbook-xsl/asciidoc-docbook-xsl.txt +++ /dev/null @@ -1,65 +0,0 @@ -AsciiDoc DocBook XSL Stylesheets Notes -====================================== - -Output file customisation is achieved by tweaking the DocBook XSL -stylesheets. I've tried to keep customization to a minimum and -confine it to the separate XSL driver files in the distribution -`./docbook-xsl/` directory (see the User Guide for details). - -To polish some rough edges I've written some patches for the DocBook -XSL stylesheets -- you don't need them but they're documented below -and included in the distribution `./docbook-xsl/` directory. - - -Manually upgrading Debian to the latest DocBook XSL stylesheets ---------------------------------------------------------------- -The DocBook XSL Stylesheets distribution is just a directory full of -text files and you can switch between releases by changing the -directory name in the system XML catalog. - -To upgrade to the latest docbook-xsl stylesheets without having to -wait for the Debian `docbook-xsl` package: - -- Download the latest docbook-xsl tarball from - http://sourceforge.net/projects/docbook/. Bleeding edge snapshots - can be found at http://docbook.sourceforge.net/snapshots/ - -- Unzip the tarball to `/usr/share/xml/docbook/stylesheet/`: - - $ cd /usr/share/xml/docbook/stylesheet - $ sudo tar -xzf /tmp/docbook-xsl-1.72.0.tar.gz - -- Edit `/etc/xml/docbook-xsl.xml` catalog and replace occurences of - the current stylesheets directory with the new one (in our example - it would be `/usr/share/xml/docbook/stylesheet/docbook-xsl-1.72.0`. - - $ cd /etc/xml/ - $ sudo cp -p docbook-xsl.xml docbook-xsl.xml.ORIG - $ sudo vi docbook-xsl.xml - - -Customizing Generated Text --------------------------- -An example -http://www.sagehill.net/docbookxsl/CustomGentext.html#CustomGenText[DocBook -XSL Stylesheets customization file] for formatting chapter titles -without chapter numbering. - -.custom-chapter.xml ---------------------------------------------------------------------- -<!-- Customize chapter title --> -<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"> - <l:l10n language="en"> - <l:context name="title"> - <l:template name="chapter" text="%t"/> - </l:context> - </l:l10n> -</l:i18n> ---------------------------------------------------------------------- - -Executed with this 'xsltproc' parameter: - - --param local.l10n.xml document\(\'custom-chapter.xml\'\) - -NOTE: This example is hypothetical -- use the 'xsltproc' -`--stringparam chapter.autolabel 0` option to do the same job. diff --git a/manual/src/bin/asciidoc/docbook-xsl/chunked.xsl b/manual/src/bin/asciidoc/docbook-xsl/chunked.xsl deleted file mode 100644 index aafcca0085d00..0000000000000 --- a/manual/src/bin/asciidoc/docbook-xsl/chunked.xsl +++ /dev/null @@ -1,17 +0,0 @@ -<!-- - Generates chunked XHTML documents from DocBook XML source using DocBook XSL - stylesheets. - - NOTE: The URL reference to the current DocBook XSL stylesheets is - rewritten to point to the copy on the local disk drive by the XML catalog - rewrite directives so it doesn't need to go out to the Internet for the - stylesheets. This means you don't need to edit the <xsl:import> elements on - a machine by machine basis. ---> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> -<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"/> -<xsl:import href="common.xsl"/> -<xsl:param name="navig.graphics.path">images/icons/</xsl:param> -<xsl:param name="admon.graphics.path">images/icons/</xsl:param> -<xsl:param name="callout.graphics.path" select="'images/icons/callouts/'"/> -</xsl:stylesheet> diff --git a/manual/src/bin/asciidoc/docbook-xsl/common.xsl b/manual/src/bin/asciidoc/docbook-xsl/common.xsl deleted file mode 100644 index 2e5cbc2325c45..0000000000000 --- a/manual/src/bin/asciidoc/docbook-xsl/common.xsl +++ /dev/null @@ -1,106 +0,0 @@ -<!-- - Inlcuded in xhtml.xsl, xhtml.chunked.xsl, htmlhelp.xsl. - Contains common XSL stylesheets parameters. - Output documents styled by docbook.css. ---> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> -<xsl:param name="html.stylesheet" select="'docbook-xsl.css'"/> - -<xsl:param name="htmlhelp.chm" select="'htmlhelp.chm'"/> -<xsl:param name="htmlhelp.hhc.section.depth" select="5"/> - -<xsl:param name="section.autolabel"> - <xsl:choose> - <xsl:when test="/processing-instruction('asciidoc-numbered')">1</xsl:when> - <xsl:otherwise>0</xsl:otherwise> - </xsl:choose> -</xsl:param> - -<xsl:param name="suppress.navigation" select="0"/> -<xsl:param name="navig.graphics.extension" select="'.png'"/> -<xsl:param name="navig.graphics" select="0"/> -<xsl:param name="navig.graphics.path">images/icons/</xsl:param> -<xsl:param name="navig.showtitles">0</xsl:param> - -<xsl:param name="shade.verbatim" select="0"/> -<xsl:attribute-set name="shade.verbatim.style"> - <xsl:attribute name="border">0</xsl:attribute> - <xsl:attribute name="background-color">#E0E0E0</xsl:attribute> -</xsl:attribute-set> - -<xsl:param name="admon.graphics" select="1"/> -<xsl:param name="admon.graphics.path">images/icons/</xsl:param> -<xsl:param name="admon.graphics.extension" select="'.png'"/> -<xsl:param name="admon.style"> - <xsl:text>margin-left: 0; margin-right: 10%;</xsl:text> -</xsl:param> -<xsl:param name="admon.textlabel" select="1"/> - -<xsl:param name="callout.defaultcolumn" select="'60'"/> -<xsl:param name="callout.graphics.extension" select="'.png'"/> -<xsl:param name="callout.graphics" select="'1'"/> -<xsl:param name="callout.graphics.number.limit" select="'10'"/> -<xsl:param name="callout.graphics.path" select="'images/icons/callouts/'"/> -<xsl:param name="callout.list.table" select="'1'"/> - -<!-- This does not seem to work. --> -<xsl:param name="section.autolabel.max.depth" select="2"/> - -<xsl:param name="chunk.first.sections" select="1"/> -<xsl:param name="chunk.section.depth" select="1"/> -<xsl:param name="chunk.quietly" select="0"/> -<xsl:param name="chunk.toc" select="''"/> -<xsl:param name="chunk.tocs.and.lots" select="0"/> - -<xsl:param name="html.cellpadding" select="'4px'"/> -<xsl:param name="html.cellspacing" select="''"/> - -<xsl:param name="table.borders.with.css" select="1"/> -<xsl:param name="table.cell.border.color" select="'#527bbd'"/> - -<xsl:param name="table.cell.border.style" select="'solid'"/> -<xsl:param name="table.cell.border.thickness" select="'1px'"/> -<xsl:param name="table.footnote.number.format" select="'a'"/> -<xsl:param name="table.footnote.number.symbols" select="''"/> -<xsl:param name="table.frame.border.color" select="'#527bbd'"/> -<xsl:param name="table.frame.border.style" select="'solid'"/> -<xsl:param name="table.frame.border.thickness" select="'3px'"/> -<xsl:param name="tablecolumns.extension" select="'1'"/> - -<xsl:param name="highlight.source" select="1"/> - -<xsl:param name="section.label.includes.component.label" select="1"/> - -<!-- - Table of contents inserted by <?asciidoc-toc?> processing instruction. ---> -<xsl:param name="generate.toc"> - <xsl:choose> - <xsl:when test="/processing-instruction('asciidoc-toc')"> -article toc,title -book toc,title,figure,table,example,equation - <!-- The only way I could find that suppressed book chapter TOCs --> - <xsl:if test="$generate.section.toc.level != 0"> -chapter toc,title -part toc,title -preface toc,title -qandadiv toc -qandaset toc -reference toc,title -sect1 toc -sect2 toc -sect3 toc -sect4 toc -sect5 toc -section toc -set toc,title - </xsl:if> - </xsl:when> - <xsl:otherwise> -article nop -book nop - </xsl:otherwise> - </xsl:choose> -</xsl:param> - -</xsl:stylesheet> diff --git a/manual/src/bin/asciidoc/docbook-xsl/epub.xsl b/manual/src/bin/asciidoc/docbook-xsl/epub.xsl deleted file mode 100644 index b15748d36eea6..0000000000000 --- a/manual/src/bin/asciidoc/docbook-xsl/epub.xsl +++ /dev/null @@ -1,35 +0,0 @@ -<!-- - Generates EPUB XHTML documents from DocBook XML source using DocBook XSL - stylesheets. - - NOTE: The URL reference to the current DocBook XSL stylesheets is - rewritten to point to the copy on the local disk drive by the XML catalog - rewrite directives so it doesn't need to go out to the Internet for the - stylesheets. This means you don't need to edit the <xsl:import> elements on - a machine by machine basis. ---> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> - <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/epub/docbook.xsl"/> -<xsl:import href="common.xsl"/> - -<!-- -DocBook XSL 1.75.2: Nav headers are invalid XHTML (table width element). -Suppressed by default in Docbook XSL 1.76.1 epub.xsl. ---> -<xsl:param name="suppress.navigation" select="1"/> - -<!-- -DocBook XLS 1.75.2 doesn't handle TOCs ---> -<xsl:param name="generate.toc"> - <xsl:choose> - <xsl:when test="/article"> -/article nop - </xsl:when> - <xsl:when test="/book"> -/book nop - </xsl:when> - </xsl:choose> -</xsl:param> - -</xsl:stylesheet> diff --git a/manual/src/bin/asciidoc/docbook-xsl/fo.xsl b/manual/src/bin/asciidoc/docbook-xsl/fo.xsl deleted file mode 100644 index 5537e8e02cddc..0000000000000 --- a/manual/src/bin/asciidoc/docbook-xsl/fo.xsl +++ /dev/null @@ -1,152 +0,0 @@ -<!-- - Generates single FO document from DocBook XML source using DocBook XSL - stylesheets. - - See xsl-stylesheets/fo/param.xsl for all parameters. - - NOTE: The URL reference to the current DocBook XSL stylesheets is - rewritten to point to the copy on the local disk drive by the XML catalog - rewrite directives so it doesn't need to go out to the Internet for the - stylesheets. This means you don't need to edit the <xsl:import> elements on - a machine by machine basis. ---> -<xsl:stylesheet version="1.0" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:fo="http://www.w3.org/1999/XSL/Format"> -<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/> -<xsl:import href="common.xsl"/> - -<xsl:param name="fop1.extensions" select="1" /> -<xsl:param name="variablelist.as.blocks" select="1" /> - -<xsl:param name="paper.type" select="'A4'"/> -<!-- -<xsl:param name="paper.type" select="'USletter'"/> ---> -<xsl:param name="hyphenate">false</xsl:param> -<!-- justify, left or right --> -<xsl:param name="alignment">left</xsl:param> - -<xsl:param name="body.font.family" select="'serif'"/> -<xsl:param name="body.font.master">12</xsl:param> -<xsl:param name="body.font.size"> - <xsl:value-of select="$body.font.master"/><xsl:text>pt</xsl:text> -</xsl:param> - -<xsl:param name="body.margin.bottom" select="'0.5in'"/> -<xsl:param name="body.margin.top" select="'0.5in'"/> -<xsl:param name="bridgehead.in.toc" select="0"/> - -<!-- overide setting in common.xsl --> -<xsl:param name="table.frame.border.thickness" select="'2px'"/> - -<!-- Default fetches image from Internet (long timeouts) --> -<xsl:param name="draft.watermark.image" select="''"/> - -<!-- Line break --> -<xsl:template match="processing-instruction('asciidoc-br')"> - <fo:block/> -</xsl:template> - -<!-- Horizontal ruler --> -<xsl:template match="processing-instruction('asciidoc-hr')"> - <fo:block space-after="1em"> - <fo:leader leader-pattern="rule" rule-thickness="0.5pt" rule-style="solid" leader-length.minimum="100%"/> - </fo:block> -</xsl:template> - -<!-- Hard page break --> -<xsl:template match="processing-instruction('asciidoc-pagebreak')"> - <fo:block break-after='page'/> -</xsl:template> - -<!-- Sets title to body text indent --> -<xsl:param name="body.start.indent"> - <xsl:choose> - <xsl:when test="$fop.extensions != 0">0pt</xsl:when> - <xsl:when test="$passivetex.extensions != 0">0pt</xsl:when> - <xsl:otherwise>1pc</xsl:otherwise> - </xsl:choose> -</xsl:param> -<xsl:param name="title.margin.left"> - <xsl:choose> - <xsl:when test="$fop.extensions != 0">-1pc</xsl:when> - <xsl:when test="$passivetex.extensions != 0">0pt</xsl:when> - <xsl:otherwise>0pt</xsl:otherwise> - </xsl:choose> -</xsl:param> -<xsl:param name="page.margin.bottom" select="'0.25in'"/> -<xsl:param name="page.margin.inner"> - <xsl:choose> - <xsl:when test="$double.sided != 0">0.75in</xsl:when> - <xsl:otherwise>0.75in</xsl:otherwise> - </xsl:choose> -</xsl:param> -<xsl:param name="page.margin.outer"> - <xsl:choose> - <xsl:when test="$double.sided != 0">0.5in</xsl:when> - <xsl:otherwise>0.5in</xsl:otherwise> - </xsl:choose> -</xsl:param> - -<xsl:param name="page.margin.top" select="'0.5in'"/> -<xsl:param name="page.orientation" select="'portrait'"/> -<xsl:param name="page.width"> - <xsl:choose> - <xsl:when test="$page.orientation = 'portrait'"> - <xsl:value-of select="$page.width.portrait"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$page.height.portrait"/> - </xsl:otherwise> - </xsl:choose> -</xsl:param> - -<xsl:attribute-set name="monospace.properties"> - <xsl:attribute name="font-size">10pt</xsl:attribute> -</xsl:attribute-set> - -<xsl:attribute-set name="admonition.title.properties"> - <xsl:attribute name="font-size">14pt</xsl:attribute> - <xsl:attribute name="font-weight">bold</xsl:attribute> - <xsl:attribute name="hyphenate">false</xsl:attribute> - <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute> -</xsl:attribute-set> - -<xsl:attribute-set name="sidebar.properties" use-attribute-sets="formal.object.properties"> - <xsl:attribute name="border-style">solid</xsl:attribute> - <xsl:attribute name="border-width">1pt</xsl:attribute> - <xsl:attribute name="border-color">silver</xsl:attribute> - <xsl:attribute name="background-color">#ffffee</xsl:attribute> - <xsl:attribute name="padding-left">12pt</xsl:attribute> - <xsl:attribute name="padding-right">12pt</xsl:attribute> - <xsl:attribute name="padding-top">6pt</xsl:attribute> - <xsl:attribute name="padding-bottom">6pt</xsl:attribute> - <xsl:attribute name="margin-left">0pt</xsl:attribute> - <xsl:attribute name="margin-right">12pt</xsl:attribute> - <xsl:attribute name="margin-top">6pt</xsl:attribute> - <xsl:attribute name="margin-bottom">6pt</xsl:attribute> -</xsl:attribute-set> - -<xsl:param name="callout.graphics" select="'1'"/> - -<!-- Only shade programlisting and screen verbatim elements --> -<xsl:param name="shade.verbatim" select="1"/> -<xsl:attribute-set name="shade.verbatim.style"> - <xsl:attribute name="background-color"> - <xsl:choose> - <xsl:when test="self::programlisting|self::screen">#E0E0E0</xsl:when> - <xsl:otherwise>inherit</xsl:otherwise> - </xsl:choose> - </xsl:attribute> -</xsl:attribute-set> - -<!-- - Force XSL Stylesheets 1.72 default table breaks to be the same as the current - version (1.74) default which (for tables) is keep-together="auto". ---> -<xsl:attribute-set name="table.properties"> - <xsl:attribute name="keep-together.within-column">auto</xsl:attribute> -</xsl:attribute-set> - -</xsl:stylesheet> diff --git a/manual/src/bin/asciidoc/docbook-xsl/htmlhelp.xsl b/manual/src/bin/asciidoc/docbook-xsl/htmlhelp.xsl deleted file mode 100644 index f064c0ca730cf..0000000000000 --- a/manual/src/bin/asciidoc/docbook-xsl/htmlhelp.xsl +++ /dev/null @@ -1,16 +0,0 @@ -<!-- - Generates chunked HTML Help HTML documents from DocBook XML source using - DocBook XSL stylesheets. - - NOTE: The URL reference to the current DocBook XSL stylesheets is - rewritten to point to the copy on the local disk drive by the XML catalog - rewrite directives so it doesn't need to go out to the Internet for the - stylesheets. This means you don't need to edit the <xsl:import> elements on - a machine by machine basis. ---> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> -<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/htmlhelp/htmlhelp.xsl"/> -<xsl:import href="common.xsl"/> -<xsl:param name="htmlhelp.hhp" select="'asciidoc.hhp'"/> -<xsl:param name="suppress.navigation" select="1"/> -</xsl:stylesheet> diff --git a/manual/src/bin/asciidoc/docbook-xsl/manpage.xsl b/manual/src/bin/asciidoc/docbook-xsl/manpage.xsl deleted file mode 100644 index b5201a575bec0..0000000000000 --- a/manual/src/bin/asciidoc/docbook-xsl/manpage.xsl +++ /dev/null @@ -1,31 +0,0 @@ -<!-- - Generates single roff manpage document from DocBook XML source using DocBook - XSL stylesheets. - - NOTE: The URL reference to the current DocBook XSL stylesheets is - rewritten to point to the copy on the local disk drive by the XML catalog - rewrite directives so it doesn't need to go out to the Internet for the - stylesheets. This means you don't need to edit the <xsl:import> elements on - a machine by machine basis. ---> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> -<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"/> -<xsl:import href="common.xsl"/> - -<!-- Only render the link text --> -<xsl:template match="ulink"> - <xsl:variable name="content"> - <xsl:apply-templates/> - </xsl:variable> - <xsl:value-of select="$content"/> -</xsl:template> - -<!-- Don't automatically generate the REFERENCES section --> -<xsl:template name="endnotes.list"> -</xsl:template> -<!-- Next entry for backward compatibility with old docbook-xsl versions --> -<xsl:template name="format.links.list"> -</xsl:template> - -</xsl:stylesheet> - diff --git a/manual/src/bin/asciidoc/docbook-xsl/text.xsl b/manual/src/bin/asciidoc/docbook-xsl/text.xsl deleted file mode 100644 index 566884cb8592c..0000000000000 --- a/manual/src/bin/asciidoc/docbook-xsl/text.xsl +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0"?> -<!-- - Used by AsciiDoc a2x(1) for w3m(1) based text generation. - - NOTE: The URL reference to the current DocBook XSL stylesheets is - rewritten to point to the copy on the local disk drive by the XML catalog - rewrite directives so it doesn't need to go out to the Internet for the - stylesheets. This means you don't need to edit the <xsl:import> elements on - a machine by machine basis. ---> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - version="1.0"> - <xsl:import - href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"/> - - <!-- parameters for optimal text output --> - <xsl:param name="callout.graphics" select="0"/> - <xsl:param name="callout.unicode" select="0"/> - <xsl:param name="section.autolabel" select="1"/> - <xsl:param name="section.label.includes.component.label" select="1"/> - <xsl:param name="generate.toc"> - appendix title - article/appendix nop - article toc,title - book toc,title,figure,table,example,equation - chapter title - part toc,title - preface toc,title - qandadiv toc - qandaset toc - reference toc,title - section toc - set toc,title - </xsl:param> - - <xsl:template match="book/bookinfo/title | article/articleinfo/title" mode="titlepage.mode"> - <hr /> - <xsl:apply-imports/> - <hr /> - </xsl:template> - - <xsl:template match="book/*/title | article/*/title" mode="titlepage.mode"> - <br /><hr /> - <xsl:apply-imports/> - <hr /> - </xsl:template> - - <xsl:template match="book/chapter/*/title | article/section/*/title" mode="titlepage.mode"> - <br /> - <xsl:apply-imports/> - <hr width="100" align="left" /> - </xsl:template> - - -</xsl:stylesheet> diff --git a/manual/src/bin/asciidoc/docbook-xsl/xhtml.xsl b/manual/src/bin/asciidoc/docbook-xsl/xhtml.xsl deleted file mode 100644 index cdfe27f812611..0000000000000 --- a/manual/src/bin/asciidoc/docbook-xsl/xhtml.xsl +++ /dev/null @@ -1,14 +0,0 @@ -<!-- - Generates single XHTML document from DocBook XML source using DocBook XSL - stylesheets. - - NOTE: The URL reference to the current DocBook XSL stylesheets is - rewritten to point to the copy on the local disk drive by the XML catalog - rewrite directives so it doesn't need to go out to the Internet for the - stylesheets. This means you don't need to edit the <xsl:import> elements on - a machine by machine basis. ---> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> -<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"/> -<xsl:import href="common.xsl"/> -</xsl:stylesheet> diff --git a/manual/src/bin/asciidoc/docbook45.conf b/manual/src/bin/asciidoc/docbook45.conf deleted file mode 100644 index 6fff791127648..0000000000000 --- a/manual/src/bin/asciidoc/docbook45.conf +++ /dev/null @@ -1,759 +0,0 @@ -# -# docbook45.conf -# -# Asciidoc DocBook 4.5 configuration file. -# - -[miscellaneous] -outfilesuffix=.xml -# Printable page width and units. -# Used to calculate DocBook CALS tables absolute column and table widths. -pagewidth=425 -pageunits=* - -[attributes] -basebackend=docbook -basebackend-docbook= -basebackend-docbook45= -# For backward compatibility (docbook backend was renamed to docbook45 at 8.6.2) -backend-docbook= -# toc and numbered are set to maintain original default behavior. -toc= -numbered= - -[replacements2] -# Line break markup. Custom processing instruction in fo.xsl. -(?m)^(.*)\s\+$=\1<?asciidoc-br?> - -[replacements] -ifdef::asciidoc7compatible[] -# Superscripts. -\^(.+?)\^=<superscript>\1</superscript> -# Subscripts. -~(.+?)~=<subscript>\1</subscript> -endif::asciidoc7compatible[] - -[ruler-blockmacro] -# Uses custom processing instructions in fo.xsl and asciidoc-dblatex.xsl. -<simpara><?asciidoc-hr?></simpara> - -[pagebreak-blockmacro] -# Uses custom processing instructions in fo.xsl and asciidoc-dblatex.xsl. -<simpara><?asciidoc-pagebreak?></simpara> - -[blockdef-pass] -latexmath-style=template="latexmathblock",subs=() - -[macros] -# math macros. -(?su)[\\]?(?P<name>latexmath):(?P<subslist>\S*?)\[(?P<passtext>.*?)(?<!\\)\]=[] -(?u)^(?P<name>latexmath)::(?P<subslist>\S*?)(\[(?P<passtext>.*?)\])$=#[] - -[latexmath-inlinemacro] -<inlineequation> -<alt><![CDATA[{passtext}]]></alt> -<inlinemediaobject><textobject><phrase></phrase></textobject></inlinemediaobject> -</inlineequation> - -[latexmath-blockmacro] -<informalequation> -<alt><![CDATA[{passtext}]]></alt> -<mediaobject><textobject><phrase></phrase></textobject></mediaobject> -</informalequation> - -[latexmathblock] -<equation{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}><title>{title} -{title%} - - -{title#} -{title%} - -[image-inlinemacro] - - - - - {alt={target}} - - -[image-blockmacro] -{title} -{title%}{pgwide-option?} -# DocBook XSL Stylesheets custom processing instructions. - - - - - - - {alt={target}} - -{title#} -{title%} - -[indexterm-inlinemacro] -# Index term. -# Generate separate index entries for primary, secondary and tertiary -# descriptions. -# Primary only. -{2%} -{2%} {1} -{2%} -# Primary and secondary. -{2#}{3%} -{2#}{3%} {1}{2} -{2#}{3%} -{2#}{3%} -{2#}{3%} {2} -{2#}{3%} -# Primary, secondary and tertiary. -{3#} - {1}{2}{3} -{3#} -{3#} - {2}{3} -{3#} -{3#} - {3} -{3#} - -[indexterm2-inlinemacro] -# Index term. -# Single entry index term that is visible in the primary text flow. -{1}{1} - -[footnote-inlinemacro] -# Footnote. -{0} - -[footnoteref-inlinemacro] -# Footnote reference. -{2#}{2} -{2%} - -[callout-inlinemacro] -# Callout. - - -# List tags. -[listtags-bulleted] -list={unbreakable-option? }{title?{title}}| -item=| -text=| - -[listtags-numbered] -list={unbreakable-option? }{title?{title}}{start?}| -item=| -text=| - -[listtags-labeled] -list={title?{title}}| -entry=| -label= -term=| -item=| -text=| - -[listtags-horizontal] -# Horizontal labeled list (implemented with two column table). -# Hardwired column widths to 30%,70% because the current crop of PDF -# generators do not auto calculate column widths. - list=<{title?table}{title!informaltable}{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}{style? tabstyle="{style}"}{pgwide-option? pgwide="1"} frame="none" colsep="0" rowsep="0">{title?{title}}|<{title?/table}{title!/informaltable}> -entry=| -label=| -term=| -item=| -text=| - -[listtags-callout] -list={title?{title}}| -item=| -text=| - -[listtags-qanda] -list={title?{title}}| -entry=| -label=| -term=| -item=| -text=| - -[listtags-bibliography] -list={title?{title}}| -item=| -text=| - -[listtags-glossary] -list= -entry=| -label= -term=| -item=| -text=| - -[tags] -# Quoted text -emphasis={1?}|{1?} -strong={1?}|{1?} -monospaced={1?}|{1?} -singlequoted={lsquo}{1?}|{1?}{rsquo} -doublequoted={ldquo}{1?}|{1?}{rdquo} -unquoted={1?}|{1?} -subscript={1?}|{1?} -superscript={1?}|{1?} - -ifdef::deprecated-quotes[] -# Override with deprecated quote attributes. -emphasis={role?}|{role?} -strong={role?}|{role?} -monospaced={role?}|{role?} -singlequoted={role?}{amp}#8216;|{amp}#8217;{role?} -doublequoted={role?}{amp}#8220;|{amp}#8221;{role?} -unquoted={role?}|{role?} -subscript={role?}|{role?} -superscript={role?}|{role?} -endif::deprecated-quotes[] - -# Inline macros -[http-inlinemacro] -{0={name}:{target}} -[https-inlinemacro] -{0={name}:{target}} -[ftp-inlinemacro] -{0={name}:{target}} -[file-inlinemacro] -{0={name}:{target}} -[irc-inlinemacro] -{0={name}:{target}} -[mailto-inlinemacro] -{0={target}} -[callto-inlinemacro] -{0={target}} -[link-inlinemacro] -{0={target}} -# anchor:id[text] -[anchor-inlinemacro] - -# [[id,text]] -[anchor2-inlinemacro] - -# [[[id]]] -[anchor3-inlinemacro] -[{1}] -# xref:id[text] -[xref-inlinemacro] -{0} -{2%} -# <> -[xref2-inlinemacro] -{2} -{2%} -# // comment line -[comment-inlinemacro] -{showcomments#}{passtext} - -[comment-blockmacro] -{showcomments#}{passtext} - -[literal-inlinemacro] -# Inline literal. -{passtext} - -# Special word macros -[emphasizedwords] -{words} -[monospacedwords] -{words} -[strongwords] -{words} - -# Paragraph substitution. -[paragraph] -{title} -{title%} -| -{title%} -{title#} -{empty} - -[admonitionparagraph] -<{name}{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}>| - -# Delimited blocks. -[literalblock] -{title} -{title#} -{title%} -| - -{title#} - -[listingblock] -{title} -{title#} -{title%} -| - -{title#} - -[sidebarblock] - -{title} -| - - -[abstractblock] - -{title} -| - - -[openblock] -| - -[partintroblock] - -{title} -| - - -[quote-header] -# Common quote and verse element template. - -{title} -# Include attribution only if either {attribution} or {citetitle} is defined. -{attribution#} -{attribution%}{citetitle#} -{attribution} -{citetitle} -{attribution#} -{attribution%}{citetitle#} - -[quoteblock] -template::[quote-header] -| - - -[verseblock] -template::[quote-header] - -| - - - -[quoteparagraph] -template::[quote-header] - -| - - - -[exampleblock] -<{title?example}{title!informalexample}{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}> -# DocBook XSL Stylesheets custom processing instructions. - - -{title} -| - - -[admonitionblock] -<{name}{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}> -{title} -| - - -# Tables. -[tabletags-default] -colspec= -bodyrow=| -headdata=| -bodydata=| -paragraph=| - -[tabletags-emphasis] -paragraph=| - -[tabletags-header] -paragraph=| - -[tabletags-strong] -paragraph=| - -[tabletags-monospaced] -paragraph=| - -[tabletags-verse] -bodydata=| -paragraph= - -[tabletags-literal] -bodydata=| -paragraph= - -[tabletags-asciidoc] -paragraph= - -[table] -<{title?table}{title!informaltable}{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}{pgwide-option? pgwide="1"} -frame="{frame=all}" -{grid%rowsep="1" colsep="1"} -rowsep="{grid@none|cols:0:1}" colsep="{grid@none|rows:0:1}" -> -{title} -# DocBook XSL Stylesheets custom processing instructions. - - - - - - -{colspecs} -{headrows#} -{headrows} -{headrows#} -{footrows#} -{footrows} -{footrows#} - -{bodyrows} - - - - -#-------------------------------------------------------------------- -# Deprecated old table definitions. -# - -[old_tabledef-default] -template=old_table -colspec= -bodyrow=| -bodydata=| - -[old_table] -<{title?table}{title!informaltable}{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"} pgwide="0" -frame="{frame=topbot}" -{grid%rowsep="0" colsep="0"} -rowsep="{grid@none|cols:0:1}" colsep="{grid@none|rows:0:1}" -> -{title} - -{colspecs} -{headrows#} -{headrows} -{headrows#} -{footrows#} -{footrows} -{footrows#} - -{bodyrows} - - - - -# End of deprecated old table definitions. -#-------------------------------------------------------------------- - -# Special sections. -[preface] - -{title=} -| - - -[index] - -{title} -| - - -[bibliography] - -{title} -| - - -[glossary] - -{title} -| - - -[appendix] - -{title} -| - - -[floatingtitle] -{title} - - -[header-declarations] - - -{toc#} -{numbered#} - -[+docinfo] -{notitle%} {doctitle} - {revdate} -# To ensure valid articleinfo/bookinfo when there is no AsciiDoc header. - {doctitle%}{revdate%}{docdate} - {authored#} - {firstname} - {middlename} - {lastname} - {email} - {authored#} - {authorinitials} -{revnumber?{revnumber}}{revdate}{authorinitials?{authorinitials}}{revremark?{revremark}} -{docinfo1,docinfo2#}{include:{docdir}/docinfo.xml} -{docinfo,docinfo2#}{include:{docdir}/{docname}-docinfo.xml} -# DEPRECATED: Use docinfo. -{revisionhistory#}{include:{docdir}/{docname}-revhistory.xml} -# DEPRECATED: Use orgname in preference to companyname. -{companyname} -# DEPRECATED: Use orgname in preference to corpname. -{corpname} -{orgname} - -#------------------------- -# article document type -#------------------------- -ifdef::doctype-article[] - -[header] -template::[header-declarations] - -
- -template::[docinfo] - - -[footer] -
- -[preamble] -# Untitled elements between header and first section title. -| - -[abstract] - -| - - -[sect1] - -{title} -| - - -[sect2] - -{title} -| - - -[sect3] - -{title} -| - - -[sect4] - -{title} -| - - -endif::doctype-article[] - -#------------------------- -# manpage document type -#------------------------- -ifdef::doctype-manpage[] - -[replacements] -# The roff format does not substitute special characters so just print them as -# text. -\(C\)=(C) -\(TM\)=(TM) - -[header] -template::[header-declarations] - - -template::[docinfo] - - -{mantitle} -{manvolnum} -# Default source and manual to suppress DocBook XSL warnings. -{mansource= } -{manmanual= } -{manversion={revnumber}} - - - {manname1} - {manname2} - {manname3} - {manname4} - {manname5} - {manname6} - {manname7} - {manname8} - {manname9} - {manpurpose} - - -[footer] - - -# Section macros -[synopsis] - -| - - -[sect1] - -{title} -| - - -[sect2] - -{title} -| - - -[sect3] - -{title} -| - - -endif::doctype-manpage[] - -#------------------------- -# book document type -#------------------------- -ifdef::doctype-book[] - -[header] -template::[header-declarations] - - - -template::[docinfo] - - -[footer] - - -[preamble] -# Preamble is not allowed in DocBook book so wrap it in a preface. - -{title=} -| - - -[dedication] - -{title} -| - - -[colophon] - -{title} -| - - -[sect0] - -{title} -| - - -[sect1] - -{title} -| - - -[sect2] - -{title} -| - - -[sect3] - -{title} -| - - -[sect4] - -{title} -| - - -endif::doctype-book[] - -ifdef::sgml[] -# -# Optional DocBook SGML. -# -# Most of the differences between DocBook XML and DocBook SGML boils -# down to the empty element syntax: SGML does not like the XML empty -# element <.../> syntax, use <...> instead. -# -[miscellaneous] -outfilesuffix=.sgml - -[header-declarations] - - -[tabledef-default] -colspec= - -[image-inlinemacro] - - - - - {alt={target}} - - -[image-blockmacro] -
{title} -{title%} - - - - - {alt={target}} - -{title#}
-{title%} - -# Inline macros -[xref-inlinemacro] -{0} -{2%} -[xref2-inlinemacro] -# <> -{2} -{2%} -[anchor-inlinemacro] - -[anchor2-inlinemacro] -# [[id,text]] - - -endif::sgml[] diff --git a/manual/src/bin/asciidoc/filters/code/code-filter-readme.txt b/manual/src/bin/asciidoc/filters/code/code-filter-readme.txt deleted file mode 100644 index 2a35f86ce6325..0000000000000 --- a/manual/src/bin/asciidoc/filters/code/code-filter-readme.txt +++ /dev/null @@ -1,37 +0,0 @@ -AsciiDoc Code Filter -==================== - -This simple minded filter highlights source code keywords and -comments. - -NOTE: The filter is to demonstrate how to write a filter -- it's much -to simplistic to be passed off as a code syntax highlighter. If you -want a full featured highlighter use the 'source highlighter filter. - - -Files ------ -code-filter.py:: - The filter Python script. -code-filter.conf:: - The AsciiDoc filter configuration file. -code-filter-test.txt:: - Short AsciiDoc document to test the filter. - - -Installation ------------- -The code filter is installed in the distribution `filters` directory -as part of the standard AsciiDoc install. - -Test it on the `code-filter-test.txt` file: - - $ asciidoc -v code-filter-test.txt - $ firefox code-filter-test.txt & - - -Help ----- -Execute the filter with the help option: - - $ ./code-filter.py --help diff --git a/manual/src/bin/asciidoc/filters/code/code-filter-test.txt b/manual/src/bin/asciidoc/filters/code/code-filter-test.txt deleted file mode 100644 index c9e81921b2a96..0000000000000 --- a/manual/src/bin/asciidoc/filters/code/code-filter-test.txt +++ /dev/null @@ -1,15 +0,0 @@ -Code Filter Test -================ - -[python] -code~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -''' A multi-line - comment.''' -def sub_word(mo): - ''' Single line comment.''' - word = mo.group('word') # Inline comment - if word in keywords[language]: - return quote + word + quote - else: - return word -code~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/manual/src/bin/asciidoc/filters/code/code-filter.conf b/manual/src/bin/asciidoc/filters/code/code-filter.conf deleted file mode 100644 index 5cdab96ac2a17..0000000000000 --- a/manual/src/bin/asciidoc/filters/code/code-filter.conf +++ /dev/null @@ -1,8 +0,0 @@ -# -# AsciiDoc code filter configuration file. -# -# Documented in code-filter-readme.txt -# - -[blockdef-listing] -code-style=template="listingblock",presubs=(),postsubs=("callouts",),posattrs=("style","language"),filter="code-filter.py -b {basebackend} -l {language}" diff --git a/manual/src/bin/asciidoc/filters/code/code-filter.py b/manual/src/bin/asciidoc/filters/code/code-filter.py deleted file mode 100755 index 473fd6e4598f1..0000000000000 --- a/manual/src/bin/asciidoc/filters/code/code-filter.py +++ /dev/null @@ -1,239 +0,0 @@ -#!/usr/bin/env python -''' -NAME - code-filter - AsciiDoc filter to highlight language keywords - -SYNOPSIS - code-filter -b backend -l language [ -t tabsize ] - [ --help | -h ] [ --version | -v ] - -DESCRIPTION - This filter reads source code from the standard input, highlights language - keywords and comments and writes to the standard output. - - The purpose of this program is to demonstrate how to write an AsciiDoc - filter -- it's much to simplistic to be passed off as a code syntax - highlighter. Use the 'source-highlight-filter' instead. - - -OPTIONS - --help, -h - Print this documentation. - - -b - Backend output file format: 'docbook', 'linuxdoc', 'html', 'css'. - - -l - The name of the source code language: 'python', 'ruby', 'c++', 'c'. - - -t tabsize - Expand source tabs to tabsize spaces. - - --version, -v - Print program version number. - -BUGS - - Code on the same line as a block comment is treated as comment. - Keywords inside literal strings are highlighted. - - There doesn't appear to be an easy way to accomodate linuxdoc so - just pass it through without markup. - -AUTHOR - Written by Stuart Rackham, - -URLS - http://sourceforge.net/projects/asciidoc/ - http://www.methods.co.nz/asciidoc/ - -COPYING - Copyright (C) 2002-2006 Stuart Rackham. Free use of this software is - granted under the terms of the GNU General Public License (GPL). -''' - -import os, sys, re, string - -VERSION = '1.1.2' - -# Globals. -language = None -backend = None -tabsize = 8 -keywordtags = { - 'html': - ('',''), - 'css': - ('',''), - 'docbook': - ('',''), - 'linuxdoc': - ('','') -} -commenttags = { - 'html': - ('',''), - 'css': - ('',''), - 'docbook': - ('',''), - 'linuxdoc': - ('','') -} -keywords = { - 'python': - ('and', 'del', 'for', 'is', 'raise', 'assert', 'elif', 'from', - 'lambda', 'return', 'break', 'else', 'global', 'not', 'try', 'class', - 'except', 'if', 'or', 'while', 'continue', 'exec', 'import', 'pass', - 'yield', 'def', 'finally', 'in', 'print'), - 'ruby': - ('__FILE__', 'and', 'def', 'end', 'in', 'or', 'self', 'unless', - '__LINE__', 'begin', 'defined?' 'ensure', 'module', 'redo', 'super', - 'until', 'BEGIN', 'break', 'do', 'false', 'next', 'rescue', 'then', - 'when', 'END', 'case', 'else', 'for', 'nil', 'retry', 'true', 'while', - 'alias', 'class', 'elsif', 'if', 'not', 'return', 'undef', 'yield'), - 'c++': - ('asm', 'auto', 'bool', 'break', 'case', 'catch', 'char', 'class', - 'const', 'const_cast', 'continue', 'default', 'delete', 'do', 'double', - 'dynamic_cast', 'else', 'enum', 'explicit', 'export', 'extern', - 'false', 'float', 'for', 'friend', 'goto', 'if', 'inline', 'int', - 'long', 'mutable', 'namespace', 'new', 'operator', 'private', - 'protected', 'public', 'register', 'reinterpret_cast', 'return', - 'short', 'signed', 'sizeof', 'static', 'static_cast', 'struct', - 'switch', 'template', 'this', 'throw', 'true', 'try', 'typedef', - 'typeid', 'typename', 'union', 'unsigned', 'using', 'virtual', 'void', - 'volatile', 'wchar_t', 'while') -} -block_comments = { - 'python': ("'''","'''"), - 'ruby': None, - 'c++': ('/*','*/') -} -inline_comments = { - 'python': '#', - 'ruby': '#', - 'c++': '//' -} - -def print_stderr(line): - sys.stderr.write(line+os.linesep) - -def sub_keyword(mo): - '''re.subs() argument to tag keywords.''' - word = mo.group('word') - if word in keywords[language]: - stag,etag = keywordtags[backend] - return stag+word+etag - else: - return word - -def code_filter(): - '''This function does all the work.''' - global language, backend - inline_comment = inline_comments[language] - blk_comment = block_comments[language] - if blk_comment: - blk_comment = (re.escape(block_comments[language][0]), - re.escape(block_comments[language][1])) - stag,etag = commenttags[backend] - in_comment = 0 # True if we're inside a multi-line block comment. - tag_comment = 0 # True if we should tag the current line as a comment. - line = sys.stdin.readline() - while line: - line = string.rstrip(line) - line = string.expandtabs(line,tabsize) - # Escape special characters. - line = string.replace(line,'&','&') - line = string.replace(line,'<','<') - line = string.replace(line,'>','>') - # Process block comment. - if blk_comment: - if in_comment: - if re.match(r'.*'+blk_comment[1]+r'$',line): - in_comment = 0 - else: - if re.match(r'^\s*'+blk_comment[0]+r'.*'+blk_comment[1],line): - # Single line block comment. - tag_comment = 1 - elif re.match(r'^\s*'+blk_comment[0],line): - # Start of multi-line block comment. - tag_comment = 1 - in_comment = 1 - else: - tag_comment = 0 - if tag_comment: - if line: line = stag+line+etag - else: - if inline_comment: - pos = string.find(line,inline_comment) - else: - pos = -1 - if pos >= 0: - # Process inline comment. - line = re.sub(r'\b(?P\w+)\b',sub_keyword,line[:pos]) \ - + stag + line[pos:] + etag - else: - line = re.sub(r'\b(?P\w+)\b',sub_keyword,line) - sys.stdout.write(line + os.linesep) - line = sys.stdin.readline() - -def usage(msg=''): - if msg: - print_stderr(msg) - print_stderr('Usage: code-filter -b backend -l language [ -t tabsize ]') - print_stderr(' [ --help | -h ] [ --version | -v ]') - -def main(): - global language, backend, tabsize - # Process command line options. - import getopt - opts,args = getopt.getopt(sys.argv[1:], - 'b:l:ht:v', - ['help','version']) - if len(args) > 0: - usage() - sys.exit(1) - for o,v in opts: - if o in ('--help','-h'): - print __doc__ - sys.exit(0) - if o in ('--version','-v'): - print('code-filter version %s' % (VERSION,)) - sys.exit(0) - if o == '-b': backend = v - if o == '-l': - v = string.lower(v) - if v == 'c': v = 'c++' - language = v - if o == '-t': - try: - tabsize = int(v) - except: - usage('illegal tabsize') - sys.exit(1) - if tabsize <= 0: - usage('illegal tabsize') - sys.exit(1) - if backend is None: - usage('backend option is mandatory') - sys.exit(1) - if not keywordtags.has_key(backend): - usage('illegal backend option') - sys.exit(1) - if language is None: - usage('language option is mandatory') - sys.exit(1) - if not keywords.has_key(language): - usage('illegal language option') - sys.exit(1) - # Do the work. - code_filter() - -if __name__ == "__main__": - try: - main() - except (KeyboardInterrupt, SystemExit): - pass - except: - print_stderr("%s: unexpected exit status: %s" % - (os.path.basename(sys.argv[0]), sys.exc_info()[1])) - # Exit with previous sys.exit() status or zero if no sys.exit(). - sys.exit(sys.exc_info()[1]) diff --git a/manual/src/bin/asciidoc/filters/graphviz/asciidoc-graphviz-sample.txt b/manual/src/bin/asciidoc/filters/graphviz/asciidoc-graphviz-sample.txt deleted file mode 100644 index 4be6ba9e298a6..0000000000000 --- a/manual/src/bin/asciidoc/filters/graphviz/asciidoc-graphviz-sample.txt +++ /dev/null @@ -1,170 +0,0 @@ -= Graphviz filter for AsciiDoc = - -Author: Gouichi Iisaka - -Version: 1.1.3 - -== Introduction == - -The Graphviz(link:http://www.graphviz.org[]) is a way of representing structural information -as diagrams of abstract graphs and networks. - - -Automatic graph drawing has many important applications -in software engineering, database and web design, networking, -and in visual interfaces for many other domains. - -Graphviz take descriptions of graphs in a simple text language, -And has many useful features for concrete diagrams, -such as options for colors, fonts, tabular node layouts, -line styles, hyperlinks, and custom shapes. - -AsciiDoc can external shell commands used to process Paragraph and -DelimitedBlock content by Filter. - -So now, AsciiDoc can draw graphs via graphviz filter. - -== Examples == - -=== Simple === -..................................................................... -[graphviz] ---------------------------------------------------------------------- -digraph G { rankdir=LR; Graphviz->AsciiDoc->HTML} ---------------------------------------------------------------------- -..................................................................... - -[graphviz] ---------------------------------------------------------------------- -digraph G { rankdir=LR; Graphviz->AsciiDoc->HTML} ---------------------------------------------------------------------- - -=== Using options === -..................................................................... -["graphviz", "sample2.png"] ---------------------------------------------------------------------- -digraph automata_0 { - size ="8.5, 11"; - node [shape = circle]; - 0 [ style = filled, color=lightgrey ]; - 2 [ shape = doublecircle ]; - 0 -> 2 [ label = "a " ]; - 0 -> 1 [ label = "other " ]; - 1 -> 2 [ label = "a " ]; - 1 -> 1 [ label = "other " ]; - 2 -> 2 [ label = "a " ]; - 2 -> 1 [ label = "other " ]; - "Machine: a" [ shape = plaintext ]; -} ---------------------------------------------------------------------- -..................................................................... - -["graphviz", "sample2.png"] ---------------------------------------------------------------------- -digraph automata_0 { - size ="8.5, 11"; - node [shape = circle]; - 0 [ style = filled, color=lightgrey ]; - 2 [ shape = doublecircle ]; - 0 -> 2 [ label = "a " ]; - 0 -> 1 [ label = "other " ]; - 1 -> 2 [ label = "a " ]; - 1 -> 1 [ label = "other " ]; - 2 -> 2 [ label = "a " ]; - 2 -> 1 [ label = "other " ]; - "Machine: a" [ shape = plaintext ]; -} ---------------------------------------------------------------------- - -=== Using Layout === - -..................................................................... -["graphviz", "sample3.png", "dot"] ---------------------------------------------------------------------- -digraph finite_state_machine { - rankdir=LR; - size="8,5" - node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8; - node [shape = circle]; - LR_0 -> LR_2 [ label = "SS(B)" ]; - LR_0 -> LR_1 [ label = "SS(S)" ]; - LR_1 -> LR_3 [ label = "S($end)" ]; - LR_2 -> LR_6 [ label = "SS(b)" ]; - LR_2 -> LR_5 [ label = "SS(a)" ]; - LR_2 -> LR_4 [ label = "S(A)" ]; - LR_5 -> LR_7 [ label = "S(b)" ]; - LR_5 -> LR_5 [ label = "S(a)" ]; - LR_6 -> LR_6 [ label = "S(b)" ]; - LR_6 -> LR_5 [ label = "S(a)" ]; - LR_7 -> LR_8 [ label = "S(b)" ]; - LR_7 -> LR_5 [ label = "S(a)" ]; - LR_8 -> LR_6 [ label = "S(b)" ]; - LR_8 -> LR_5 [ label = "S(a)" ]; -} ---------------------------------------------------------------------- -..................................................................... - -["graphviz", "sample3.png", "dot"] ---------------------------------------------------------------------- -digraph finite_state_machine { - rankdir=LR; - size="8,5" - node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8; - node [shape = circle]; - LR_0 -> LR_2 [ label = "SS(B)" ]; - LR_0 -> LR_1 [ label = "SS(S)" ]; - LR_1 -> LR_3 [ label = "S($end)" ]; - LR_2 -> LR_6 [ label = "SS(b)" ]; - LR_2 -> LR_5 [ label = "SS(a)" ]; - LR_2 -> LR_4 [ label = "S(A)" ]; - LR_5 -> LR_7 [ label = "S(b)" ]; - LR_5 -> LR_5 [ label = "S(a)" ]; - LR_6 -> LR_6 [ label = "S(b)" ]; - LR_6 -> LR_5 [ label = "S(a)" ]; - LR_7 -> LR_8 [ label = "S(b)" ]; - LR_7 -> LR_5 [ label = "S(a)" ]; - LR_8 -> LR_6 [ label = "S(b)" ]; - LR_8 -> LR_5 [ label = "S(a)" ]; - } ---------------------------------------------------------------------- - - -== Layout == - -Layout for graphviz as follows. The default is `dot'. - - *dot;; - 'dot' draws directed graphs. - It works well on DAGs and other graphs that can be drawn as hierarchies. - It reads attributed graph files and writes drawings. - - *neato;; - 'neato' draws undirected graphs using ‘‘spring'' models (see Kamada and - Kawai, Information Processing Letters 31:1, April 1989). - Input files must be formatted in the dot attributed graph language. - - *twopi;; - 'twopi' draws graphs using a radial layout (see G. Wills, Symposium on - Graph Drawing GD'97, September, 1997). - Basically, one node is chosen as the center and put at the origin. - The remaining nodes are placed on a sequence of concentric circles - centered about the origin, each a fixed radial distance from - the previous circle. - - *circro;; - 'circo' draws graphs using a circular layout (see Six and Tollis, GD '99 - and ALENEX '99, and Kaufmann and Wiese, GD '02.) - The tool identifies biconnected components and draws the nodes - of the component on a circle. - The block‐cutpoint tree is then laid out using a recursive radial - algorithm. - Edge crossings within a circle are minimized by placing as - many edges on the circle's perimeter as possible. - In particular, if the component is outerplanar, - the component will have a planar layout. - - *fdp;; - 'fdp' draws undirected graphs using a ‘‘spring'' model. - It relies on a force‐directed approach in the spirit of Fruchterman - and Reingold - (cf. Software‐Practice & Experience 21(11), 1991, pp. 1129‐1164). diff --git a/manual/src/bin/asciidoc/filters/graphviz/graphviz-filter.conf b/manual/src/bin/asciidoc/filters/graphviz/graphviz-filter.conf deleted file mode 100644 index 5cd318394491b..0000000000000 --- a/manual/src/bin/asciidoc/filters/graphviz/graphviz-filter.conf +++ /dev/null @@ -1,43 +0,0 @@ -# -# AsciiDoc Graphviz filter configuration file. -# -# Version: 1.0 -# Gouici Iisaka - -[graphviz-filter-style] -graphviz-style=template="graphviz{format?-{format}}-block",subs=(),posattrs=("style","target","layout","format"),filter='graphviz2png.py {verbose?-v} -o "{outdir={indir}}/{imagesdir=}{imagesdir?/}{target}" -L {layout=dot} -F {format=png} -' - -[blockdef-listing] -template::[graphviz-filter-style] - -[paradef-default] -template::[graphviz-filter-style] - -[graphviz-block] -template::[filter-image-blockmacro] - -# EXPERIMENTAL: xhtml11 backend SVG image block. -ifdef::basebackend-xhtml11[] -[graphviz-svg-block] -
-
- - -{link#} - -
{caption={figure-caption} {counter:figure-number}. }{title}
- -endif::basebackend-xhtml11[] - -# -# DEPRECATED: Pre 8.2.7 filter definition. -# -[blockdef-graphviz] -delimiter=^graphviz~{4,}$ -template=graphviz-block -presubs=none -filter=graphviz2png.py {verbose?-v} -o "{outdir={indir}}/{target}" -L {layout=dot} - -posattrs=target,format -# -# DEPRECATED: End -# diff --git a/manual/src/bin/asciidoc/filters/graphviz/graphviz2png.py b/manual/src/bin/asciidoc/filters/graphviz/graphviz2png.py deleted file mode 100755 index a3d43f521f30e..0000000000000 --- a/manual/src/bin/asciidoc/filters/graphviz/graphviz2png.py +++ /dev/null @@ -1,169 +0,0 @@ -#!/usr/bin/env python - -import os, sys, subprocess -from optparse import * - -__AUTHOR__ = "Gouichi Iisaka " -__VERSION__ = '1.1.4' - -class EApp(Exception): - '''Application specific exception.''' - pass - -class Application(): - ''' -NAME - graphviz2png - Converts textual graphviz notation to PNG file - -SYNOPSIS - graphviz2png [options] INFILE - -DESCRIPTION - This filter reads Graphviz notation text from the input file - INFILE (or stdin if INFILE is -), converts it to a PNG image file. - - -OPTIONS - -o OUTFILE, --outfile=OUTFILE - The file name of the output file. If not specified the output file is - named like INFILE but with a .png file name extension. - - -L LAYOUT, --layout=LAYOUT - Graphviz layout: dot, neato, twopi, circo, fdp - Default is 'dot'. - - -F FORMAT, --format=FORMAT - Graphviz output format: png, svg, or any other format Graphviz - supports. Run dot -T? to get the full list. - Default is 'png'. - - -v, --verbose - Verbosely print processing information to stderr. - - -h, --help - Print this documentation. - - -V, --version - Print program version number. - -SEE ALSO - graphviz(1) - -AUTHOR - Written by Gouichi Iisaka, - Format support added by Elmo Todurov, - -THANKS - Stuart Rackham, - This script was inspired by his music2png.py and AsciiDoc - -LICENSE - Copyright (C) 2008-2009 Gouichi Iisaka. - Free use of this software is granted under the terms of - the GNU General Public License (GPL). - ''' - - def __init__(self, argv=None): - # Run dot, get the list of supported formats. It's prefixed by some junk. - format_output = subprocess.Popen(["dot", "-T?"], stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[1] - # The junk contains : and ends with :. So we split it, then strip the final endline, then split the list for future usage. - supported_formats = format_output.split(": ")[2][:-1].split(" ") - - if not argv: - argv = sys.argv - - self.usage = '%prog [options] inputfile' - self.version = 'Version: %s\n' % __VERSION__ - self.version += 'Copyright(c) 2008-2009: %s\n' % __AUTHOR__ - - self.option_list = [ - Option("-o", "--outfile", action="store", - dest="outfile", - help="Output file"), - Option("-L", "--layout", action="store", - dest="layout", default="dot", type="choice", - choices=['dot','neato','twopi','circo','fdp'], - help="Layout type. LAYOUT="), - Option("-F", "--format", action="store", - dest="format", default="png", type="choice", - choices=supported_formats, - help="Format type. FORMAT=<" + "|".join(supported_formats) + ">"), - Option("--debug", action="store_true", - dest="do_debug", - help=SUPPRESS_HELP), - Option("-v", "--verbose", action="store_true", - dest="do_verbose", default=False, - help="verbose output"), - ] - - self.parser = OptionParser( usage=self.usage, version=self.version, - option_list=self.option_list) - (self.options, self.args) = self.parser.parse_args() - - if len(self.args) != 1: - self.parser.print_help() - sys.exit(1) - - self.options.infile = self.args[0] - - def systemcmd(self, cmd): - if self.options.do_verbose: - msg = 'Execute: %s' % cmd - sys.stderr.write(msg + os.linesep) - else: - cmd += ' 2>%s' % os.devnull - if os.system(cmd): - raise EApp, 'failed command: %s' % cmd - - def graphviz2png(self, infile, outfile): - '''Convert Graphviz notation in file infile to - PNG file named outfile.''' - - outfile = os.path.abspath(outfile) - outdir = os.path.dirname(outfile) - - if not os.path.isdir(outdir): - raise EApp, 'directory does not exist: %s' % outdir - - basefile = os.path.splitext(outfile)[0] - saved_cwd = os.getcwd() - os.chdir(outdir) - try: - cmd = '%s -T%s "%s" > "%s"' % ( - self.options.layout, self.options.format, infile, outfile) - self.systemcmd(cmd) - finally: - os.chdir(saved_cwd) - - if not self.options.do_debug: - os.unlink(infile) - - def run(self): - if self.options.format == '': - self.options.format = 'png' - - if self.options.infile == '-': - if self.options.outfile is None: - sys.stderr.write('OUTFILE must be specified') - sys.exit(1) - infile = os.path.splitext(self.options.outfile)[0] + '.txt' - lines = sys.stdin.readlines() - open(infile, 'w').writelines(lines) - - if not os.path.isfile(infile): - raise EApp, 'input file does not exist: %s' % infile - - if self.options.outfile is None: - outfile = os.path.splitext(infile)[0] + '.png' - else: - outfile = self.options.outfile - - self.graphviz2png(infile, outfile) - - # To suppress asciidoc 'no output from filter' warnings. - if self.options.infile == '-': - sys.stdout.write(' ') - -if __name__ == "__main__": - app = Application() - app.run() diff --git a/manual/src/bin/asciidoc/filters/latex/latex-filter.conf b/manual/src/bin/asciidoc/filters/latex/latex-filter.conf deleted file mode 100644 index 9be382a012301..0000000000000 --- a/manual/src/bin/asciidoc/filters/latex/latex-filter.conf +++ /dev/null @@ -1,18 +0,0 @@ -# -# AsciiDoc latex filter configuration file. -# -# Documented in latex-filter.txt in AsciiDoc distribution -# ./examples/website/ directory. -# - -[latex-filter-style] -latex-style=template="latex-block",subs=(),posattrs=("style","target","dpi"),filter='latex2png.py -m{verbose? -v}{dpi? -D {dpi}} -o "{outdir={indir}}/{imagesdir=}{imagesdir?/}{target}" -' - -[blockdef-listing] -template::[latex-filter-style] - -[paradef-default] -template::[latex-filter-style] - -[latex-block] -template::[filter-image-blockmacro] diff --git a/manual/src/bin/asciidoc/filters/latex/latex2png.py b/manual/src/bin/asciidoc/filters/latex/latex2png.py deleted file mode 100755 index 3cae7c953c104..0000000000000 --- a/manual/src/bin/asciidoc/filters/latex/latex2png.py +++ /dev/null @@ -1,232 +0,0 @@ -#!/usr/bin/env python -''' -NAME - latex2png - Converts LaTeX source to PNG file - -SYNOPSIS - latex2png [options] INFILE - -DESCRIPTION - This filter reads LaTeX source text from the input file - INFILE (or stdin if INFILE is -) and renders it to PNG image file. - Typically used to render math equations. - - Requires latex(1), dvipng(1) commands and LaTeX math packages. - -OPTIONS - -D DPI - Set the output resolution to DPI dots per inch. Use this option to - scale the output image size. - - -o OUTFILE - The file name of the output file. If not specified the output file is - named like INFILE but with a .png file name extension. - - -m - Skip if the PNG output file is newer that than the INFILE. - Compares timestamps on INFILE and OUTFILE. If - INFILE is - (stdin) then compares MD5 checksum stored in file - named like OUTFILE but with a .md5 file name extension. - The .md5 file is created if the -m option is used and the - INFILE is - (stdin). - - -v - Verbosely print processing information to stderr. - - --help, -h - Print this documentation. - - --version - Print program version number. - -SEE ALSO - latex(1), dvipng(1) - -AUTHOR - Written by Stuart Rackham, - The code was inspired by Kjell Magne Fauske's code: - http://fauskes.net/nb/htmleqII/ - - See also: - http://www.amk.ca/python/code/mt-math - http://code.google.com/p/latexmath2png/ - -COPYING - Copyright (C) 2010 Stuart Rackham. Free use of this software is - granted under the terms of the MIT License. -''' - -# Suppress warning: "the md5 module is deprecated; use hashlib instead" -import warnings -warnings.simplefilter('ignore',DeprecationWarning) - -import os, sys, tempfile, md5 - -VERSION = '0.1.0' - -# Include LaTeX packages and commands here. -TEX_HEADER = r'''\documentclass{article} -\usepackage{amsmath} -\usepackage{amsthm} -\usepackage{amssymb} -\usepackage{bm} -\newcommand{\mx}[1]{\mathbf{\bm{#1}}} % Matrix command -\newcommand{\vc}[1]{\mathbf{\bm{#1}}} % Vector command -\newcommand{\T}{\text{T}} % Transpose -\pagestyle{empty} -\begin{document}''' - -TEX_FOOTER = r'''\end{document}''' - -# Globals. -verbose = False - -class EApp(Exception): pass # Application specific exception. - -def print_stderr(line): - sys.stderr.write(line + os.linesep) - -def print_verbose(line): - if verbose: - print_stderr(line) - -def write_file(filename, data, mode='w'): - f = open(filename, mode) - try: - f.write(data) - finally: - f.close() - -def read_file(filename, mode='r'): - f = open(filename, mode) - try: - return f.read() - finally: - f.close() - -def run(cmd): - global verbose - if verbose: - cmd += ' 1>&2' - else: - cmd += ' 2>%s 1>&2' % os.devnull - print_verbose('executing: %s' % cmd) - if os.system(cmd): - raise EApp, 'failed command: %s' % cmd - -def latex2png(infile, outfile, dpi, modified): - '''Convert LaTeX input file infile to PNG file named outfile.''' - outfile = os.path.abspath(outfile) - outdir = os.path.dirname(outfile) - if not os.path.isdir(outdir): - raise EApp, 'directory does not exist: %s' % outdir - texfile = tempfile.mktemp(suffix='.tex', dir=os.path.dirname(outfile)) - basefile = os.path.splitext(texfile)[0] - dvifile = basefile + '.dvi' - temps = [basefile + ext for ext in ('.tex','.dvi', '.aux', '.log')] - skip = False - if infile == '-': - tex = sys.stdin.read() - if modified: - checksum = md5.new(tex).digest() - md5_file = os.path.splitext(outfile)[0] + '.md5' - if os.path.isfile(md5_file) and os.path.isfile(outfile) and \ - checksum == read_file(md5_file,'rb'): - skip = True - else: - if not os.path.isfile(infile): - raise EApp, 'input file does not exist: %s' % infile - tex = read_file(infile) - if modified and os.path.isfile(outfile) and \ - os.path.getmtime(infile) <= os.path.getmtime(outfile): - skip = True - if skip: - print_verbose('skipped: no change: %s' % outfile) - return - tex = '%s\n%s\n%s\n' % (TEX_HEADER, tex.strip(), TEX_FOOTER) - print_verbose('tex:\n%s' % tex) - write_file(texfile, tex) - saved_pwd = os.getcwd() - os.chdir(outdir) - try: - # Compile LaTeX document to DVI file. - run('latex %s' % texfile) - # Convert DVI file to PNG. - cmd = 'dvipng' - if dpi: - cmd += ' -D %s' % dpi - cmd += ' -T tight -x 1000 -z 9 -bg Transparent --truecolor -o "%s" "%s" ' \ - % (outfile,dvifile) - run(cmd) - finally: - os.chdir(saved_pwd) - for f in temps: - if os.path.isfile(f): - print_verbose('deleting: %s' % f) - os.remove(f) - if 'md5_file' in locals(): - print_verbose('writing: %s' % md5_file) - write_file(md5_file, checksum, 'wb') - -def usage(msg=''): - if msg: - print_stderr(msg) - print_stderr('\n' - 'usage:\n' - ' latex2png [options] INFILE\n' - '\n' - 'options:\n' - ' -D DPI\n' - ' -o OUTFILE\n' - ' -m\n' - ' -v\n' - ' --help\n' - ' --version') - -def main(): - # Process command line options. - global verbose - dpi = None - outfile = None - modified = False - import getopt - opts,args = getopt.getopt(sys.argv[1:], 'D:o:mhv', ['help','version']) - for o,v in opts: - if o in ('--help','-h'): - print __doc__ - sys.exit(0) - if o =='--version': - print('latex2png version %s' % (VERSION,)) - sys.exit(0) - if o == '-D': dpi = v - if o == '-o': outfile = v - if o == '-m': modified = True - if o == '-v': verbose = True - if len(args) != 1: - usage() - sys.exit(1) - infile = args[0] - if dpi and not dpi.isdigit(): - usage('invalid DPI') - sys.exit(1) - if outfile is None: - if infile == '-': - usage('OUTFILE must be specified') - sys.exit(1) - outfile = os.path.splitext(infile)[0] + '.png' - # Do the work. - latex2png(infile, outfile, dpi, modified) - # Print something to suppress asciidoc 'no output from filter' warnings. - if infile == '-': - sys.stdout.write(' ') - -if __name__ == "__main__": - try: - main() - except SystemExit: - raise - except KeyboardInterrupt: - sys.exit(1) - except Exception, e: - print_stderr("%s: %s" % (os.path.basename(sys.argv[0]), str(e))) - sys.exit(1) diff --git a/manual/src/bin/asciidoc/filters/music/music-filter-test.txt b/manual/src/bin/asciidoc/filters/music/music-filter-test.txt deleted file mode 100644 index c1886bd492570..0000000000000 --- a/manual/src/bin/asciidoc/filters/music/music-filter-test.txt +++ /dev/null @@ -1,40 +0,0 @@ -Music Filter Test -================= - -Details of the filter can be found in `./doc/music-filter.txt`. - - -A tune generated from ABC notation ----------------------------------- - -[music,music1.png] ---------------------------------------------------------------------- -T:The Butterfly -R:slip jig -C:Tommy Potts -H:Fiddle player Tommy Potts made this tune from two older slip jigs, -H:one of which is called "Skin the Peelers" in Roche's collection. -D:Bothy Band: 1975. -M:9/8 -K:Em -vB2(E G2)(E F3)|B2(E G2)(E F)ED|vB2(E G2)(E F3)|(B2d) d2(uB A)FD:| -|:(vB2c) (e2f) g3|(uB2d) (g2e) (dBA)|(B2c) (e2f) g2(ua|b2a) (g2e) (dBA):| -|:~B3 (B2A) G2A|~B3 BA(uB d)BA|~B3 (B2A) G2(A|B2d) (g2e) (dBA):| ---------------------------------------------------------------------- - - -A fragment generated from LilyPond source ------------------------------------------- - -["music", "music2.png", "ly", link="music2.ly"] ---------------------------------------------------------------------- -\version "2.10.0" -\paper { - ragged-right = ##t -} -{ - \time 3/4 - \clef bass - c2 e4 g2. f4 e d c2 r4 -} ---------------------------------------------------------------------- diff --git a/manual/src/bin/asciidoc/filters/music/music-filter.conf b/manual/src/bin/asciidoc/filters/music/music-filter.conf deleted file mode 100644 index a296680b394db..0000000000000 --- a/manual/src/bin/asciidoc/filters/music/music-filter.conf +++ /dev/null @@ -1,31 +0,0 @@ -# -# AsciiDoc music filter configuration file. -# -# Documented in music-filter.txt in AsciiDoc distribution -# ./examples/website/ directory. -# - -[music-filter-style] -music-style=template="music-block",subs=(),posattrs=("style","target","format"),filter='music2png.py -m{verbose? -v}{format? -f {format}} -o "{outdir={indir}}/{imagesdir=}{imagesdir?/}{target}" -' - -[blockdef-listing] -template::[music-filter-style] - -[paradef-default] -template::[music-filter-style] - -[music-block] -template::[filter-image-blockmacro] - -# -# DEPRECATED: Pre 8.2.7 filter definition. -# -[blockdef-music] -delimiter=^music~{4,}$ -template=music-block -presubs=none -filter=music2png.py{verbose? -v} -f {format=abc} -o "{outdir={indir}}/{imagesdir=}{imagesdir?/}{target}" - -posattrs=target,format -# -# DEPRECATED: End -# diff --git a/manual/src/bin/asciidoc/filters/music/music2png.py b/manual/src/bin/asciidoc/filters/music/music2png.py deleted file mode 100755 index 011cd1de9df14..0000000000000 --- a/manual/src/bin/asciidoc/filters/music/music2png.py +++ /dev/null @@ -1,213 +0,0 @@ -#!/usr/bin/env python -''' -NAME - music2png - Converts textual music notation to classically notated PNG file - -SYNOPSIS - music2png [options] INFILE - -DESCRIPTION - This filter reads LilyPond or ABC music notation text from the input file - INFILE (or stdin if INFILE is -), converts it to classical music notation - and writes it to a trimmed PNG image file. - - This script is a wrapper for LilyPond and ImageMagick commands. - -OPTIONS - -f FORMAT - The INFILE music format. 'abc' for ABC notation, 'ly' for LilyPond - notation. Defaults to 'abc' unless source starts with backslash. - - -o OUTFILE - The file name of the output file. If not specified the output file is - named like INFILE but with a .png file name extension. - - -m - Skip if the PNG output file is newer that than the INFILE. - Compares timestamps on INFILE and OUTFILE. If - INFILE is - (stdin) then compares MD5 checksum stored in file - named like OUTFILE but with a .md5 file name extension. - The .md5 file is created if the -m option is used and the - INFILE is - (stdin). - - -v - Verbosely print processing information to stderr. - - --help, -h - Print this documentation. - - --version - Print program version number. - -SEE ALSO - lilypond(1), abc2ly(1), convert(1) - -AUTHOR - Written by Stuart Rackham, - -COPYING - Copyright (C) 2006 Stuart Rackham. Free use of this software is - granted under the terms of the GNU General Public License (GPL). -''' - -# Suppress warning: "the md5 module is deprecated; use hashlib instead" -import warnings -warnings.simplefilter('ignore',DeprecationWarning) - -import os, sys, tempfile, md5 - -VERSION = '0.1.1' - -# Globals. -verbose = False - -class EApp(Exception): pass # Application specific exception. - -def print_stderr(line): - sys.stderr.write(line + os.linesep) - -def print_verbose(line): - if verbose: - print_stderr(line) - -def write_file(filename, data, mode='w'): - f = open(filename, mode) - try: - f.write(data) - finally: - f.close() - -def read_file(filename, mode='r'): - f = open(filename, mode) - try: - return f.read() - finally: - f.close() - -def run(cmd): - global verbose - if not verbose: - cmd += ' 2>%s' % os.devnull - print_verbose('executing: %s' % cmd) - if os.system(cmd): - raise EApp, 'failed command: %s' % cmd - -def music2png(format, infile, outfile, modified): - '''Convert ABC notation in file infile to cropped PNG file named outfile.''' - outfile = os.path.abspath(outfile) - outdir = os.path.dirname(outfile) - if not os.path.isdir(outdir): - raise EApp, 'directory does not exist: %s' % outdir - basefile = tempfile.mktemp(dir=os.path.dirname(outfile)) - temps = [basefile + ext for ext in ('.abc', '.ly', '.ps', '.midi')] - skip = False - if infile == '-': - source = sys.stdin.read() - checksum = md5.new(source).digest() - filename = os.path.splitext(outfile)[0] + '.md5' - if modified: - if os.path.isfile(filename) and os.path.isfile(outfile) and \ - checksum == read_file(filename,'rb'): - skip = True - else: - write_file(filename, checksum, 'wb') - else: - if not os.path.isfile(infile): - raise EApp, 'input file does not exist: %s' % infile - if modified and os.path.isfile(outfile) and \ - os.path.getmtime(infile) <= os.path.getmtime(outfile): - skip = True - source = read_file(infile) - if skip: - print_verbose('skipped: no change: %s' % outfile) - return - if format is None: - if source and source.startswith('\\'): # Guess input format. - format = 'ly' - else: - format = 'abc' - # Write temporary source file. - write_file('%s.%s' % (basefile,format), source) - abc = basefile + '.abc' - ly = basefile + '.ly' - png = basefile + '.png' - saved_pwd = os.getcwd() - os.chdir(outdir) - try: - if format == 'abc': - run('abc2ly --beams=None -o "%s" "%s"' % (ly,abc)) - run('lilypond --png -o "%s" "%s"' % (basefile,ly)) - os.rename(png, outfile) - finally: - os.chdir(saved_pwd) - # Chop the bottom 75 pixels off to get rid of the page footer. - run('convert "%s" -gravity South -crop 1000x10000+0+75 "%s"' % (outfile, outfile)) - # Trim all blank areas from sides, top and bottom. - run('convert "%s" -trim "%s"' % (outfile, outfile)) - for f in temps: - if os.path.isfile(f): - print_verbose('deleting: %s' % f) - os.remove(f) - -def usage(msg=''): - if msg: - print_stderr(msg) - print_stderr('\n' - 'usage:\n' - ' music2png [options] INFILE\n' - '\n' - 'options:\n' - ' -f FORMAT\n' - ' -o OUTFILE\n' - ' -m\n' - ' -v\n' - ' --help\n' - ' --version') - -def main(): - # Process command line options. - global verbose - format = None - outfile = None - modified = False - import getopt - opts,args = getopt.getopt(sys.argv[1:], 'f:o:mhv', ['help','version']) - for o,v in opts: - if o in ('--help','-h'): - print __doc__ - sys.exit(0) - if o =='--version': - print('music2png version %s' % (VERSION,)) - sys.exit(0) - if o == '-f': format = v - if o == '-o': outfile = v - if o == '-m': modified = True - if o == '-v': verbose = True - if len(args) != 1: - usage() - sys.exit(1) - infile = args[0] - if format not in (None, 'abc', 'ly'): - usage('invalid FORMAT') - sys.exit(1) - if outfile is None: - if infile == '-': - usage('OUTFILE must be specified') - sys.exit(1) - outfile = os.path.splitext(infile)[0] + '.png' - # Do the work. - music2png(format, infile, outfile, modified) - # Print something to suppress asciidoc 'no output from filter' warnings. - if infile == '-': - sys.stdout.write(' ') - -if __name__ == "__main__": - try: - main() - except SystemExit: - raise - except KeyboardInterrupt: - sys.exit(1) - except Exception, e: - print_stderr("%s: %s" % (os.path.basename(sys.argv[0]), str(e))) - sys.exit(1) diff --git a/manual/src/bin/asciidoc/filters/source/source-highlight-filter-test.txt b/manual/src/bin/asciidoc/filters/source/source-highlight-filter-test.txt deleted file mode 100644 index cd2390c6bb698..0000000000000 --- a/manual/src/bin/asciidoc/filters/source/source-highlight-filter-test.txt +++ /dev/null @@ -1,19 +0,0 @@ -Source Hightlight Filter Test -============================= - -Details of the filter can be found in -`./doc/source-highlight-filter.txt`. - -[source,python] ---------------------------------------------------------------------- -''' A multi-line - comment.''' -def sub_word(mo): - ''' Single line comment.''' - word = mo.group('word') # Inline comment - if word in keywords[language]: - return quote + word + quote - else: - return word ---------------------------------------------------------------------- - diff --git a/manual/src/bin/asciidoc/filters/source/source-highlight-filter.conf b/manual/src/bin/asciidoc/filters/source/source-highlight-filter.conf deleted file mode 100644 index c09e987edb7b7..0000000000000 --- a/manual/src/bin/asciidoc/filters/source/source-highlight-filter.conf +++ /dev/null @@ -1,116 +0,0 @@ -# -# AsciiDoc source code highlight filter configuration file. -# -# Documented in source-hightlight-filter.txt in AsciiDoc distribution -# ./examples/website/ directory. -# -# HTML outputs require GNU source-highlight (xhtml11, html4 outputs) -# http://www.gnu.org/software/src-highlite/source-highlight.html -# -# or Pygments (xhtml11 outputs): -# http://pygments.org/ -# -# GNU source-hightlight is default, define the 'pygments' attribute to use -# Pygments. -# - -######################## -# Source block templates -######################## -[source-highlight-block] -template::[listingblock] - -ifdef::basebackend-html[] -[source-highlight-block] - -

{title}

-
-| -
-endif::basebackend-html[] - -ifdef::basebackend-xhtml11,basebackend-html5[] -[source-highlight-block] -
- -
{caption=}{title}
-
-| -
-endif::basebackend-xhtml11,basebackend-html5[] - -# Use DocBook programlisting element. -ifdef::basebackend-docbook[] -[source-highlight-block] -{title} - -| - -{title#} -endif::basebackend-docbook[] - -# Source styles template. -ifdef::basebackend-html[] -[source-filter-style] -ifndef::pygments[source-style=template="source-highlight-block",presubs=(),postsubs=("callouts",),posattrs=("style","language","src_numbered","src_tab"),filter="source-highlight -f xhtml -s {language} {src_numbered?--line-number} {src_tab?--tab={src_tab}} {args=}"] -ifdef::pygments[source-style=template="source-highlight-block",presubs=(),postsubs=("callouts",),posattrs=("style","language","src_numbered"),filter="pygmentize -f html -l {language} {src_numbered?-O linenos=table} {encoding?-O encoding={encoding}} {args=}"] -endif::basebackend-html[] - -ifdef::basebackend-html4[] -[source-filter-style] -# html4 does not use pygments. -source-style=template="source-highlight-block",presubs=(),postsubs=("callouts",),posattrs=("style","language","src_numbered","src_tab"),filter="source-highlight -f html -s {language} {src_numbered?--line-number} {src_tab?--tab={src_tab}} {args=}" -endif::basebackend-html4[] - -ifdef::basebackend-docbook[] -[source-filter-style] -source-style=template="source-highlight-block",presubs=(),postsubs=("specialcharacters","callouts"),posattrs=("style","language","src_numbered","src_tab") -endif::basebackend-docbook[] - -######################### -# Source paragraph styles -######################### -[paradef-default] -template::[source-filter-style] - -[paradef-literal] -template::[source-filter-style] - -######################### -# Source block styles -######################### -[blockdef-listing] -template::[source-filter-style] - - -# -# DEPRECATED: Pre 8.2.7 filter definition. -# - -######################### -# Source block definition -######################### -[blockdef-source-highlight] -# The old ^ delimiter is for backward compatibility, may be removed from -# in future versions. -delimiter=(^source~{4,}$)|(^\^{4,}$) -template=source-highlight-block -presubs=none -posattrs=language,src_numbered,src_tab - -ifndef::basebackend-docbook[] -postsubs=callouts -# GNU Source Highlight filter. -filter=source-highlight -f {basebackend-xhtml11?xhtml}{basebackend-html4?html} -s {language} {src_numbered?--line-number} {src_tab?--tab={src_tab}} -endif::basebackend-docbook[] - -ifdef::basebackend-docbook[] -postsubs=specialcharacters,callouts -# In the case of DocBook just pass the listing through and let the DocBook -# toolchain handle it. -filter= -endif::basebackend-docbook[] - -# -# DEPRECATED: End -# diff --git a/manual/src/bin/asciidoc/help.conf b/manual/src/bin/asciidoc/help.conf deleted file mode 100644 index 5adc92392feae..0000000000000 --- a/manual/src/bin/asciidoc/help.conf +++ /dev/null @@ -1,394 +0,0 @@ -# AsciiDoc help file. -# -# INI section format, each section contains a topic. -# Displayed with 'asciidoc --help sectionname' command. -# - -# -# Default help topic. -# -[default] - -Man page: asciidoc --help manpage -Syntax: asciidoc --help syntax - -[manpage] - -NAME - - asciidoc - converts an AsciiDoc text file to HTML or DocBook - -SYNOPSIS - - asciidoc [OPTIONS] FILE - -DESCRIPTION - - The asciidoc(1) command translates the AsciiDoc text file FILE to - DocBook or HTML. If FILE is - then the standard input is used. - -OPTIONS - - -a, --attribute=ATTRIBUTE - Define or delete document attribute. ATTRIBUTE is formatted like - NAME=VALUE. Command-line attributes take precedence over - document and configuration file attributes. Alternate acceptable - forms are NAME (the VALUE defaults to an empty string); NAME! - (delete the NAME attribute); NAME=VALUE@ (do not override - document or configuration file attributes). Values containing - spaces should be enclosed in double-quote characters. This - option may be specified more than once. A special attribute - named trace controls the output of diagnostic information. - - -b, --backend=BACKEND - Backend output file format: docbook45, xhtml11, html4, html5, - slidy, wordpress or latex (the latex backend is experimental). - You can also use the backend alias names html (aliased to - xhtml11) or docbook (aliased to docbook45). Defaults to - html. The --backend option is also used to manage backend - plugins (see [1]PLUGIN COMMANDS). - - -f, --conf-file=CONF_FILE - Use configuration file CONF_FILE.Configuration files processed - in command-line order (after implicit configuration files). This - option may be specified more than once. - - --doctest - Run Python doctests in asciidoc module. - - -d, --doctype=DOCTYPE - Document type: article, manpage or book. The book document type - is only supported by the docbook backend. Default document type - is article. - - -c, --dump-conf - Dump configuration to stdout. - - --filter=FILTER - Specify the name of a filter to be loaded (used to load filters - that are not auto-loaded). This option may be specified more - than once. The --filter option is also used to manage filter - plugins (see [2]PLUGIN COMMANDS). - - -h, --help [TOPIC] - Print help TOPIC. --help topics will print a list of help - topics, --help syntax summarizes AsciiDoc syntax, --help manpage - prints the AsciiDoc manpage. - - -e, --no-conf - Exclude implicitly loaded configuration files except for those - named like the input file (infile.conf and infile-backend.conf). - - -s, --no-header-footer - Suppress document header and footer output. - - -o, --out-file=OUT_FILE - Write output to file OUT_FILE. Defaults to the base name of - input file with backend extension. If the input is stdin then - the outfile defaults to stdout. If OUT_FILE is - then the - standard output is used. - - -n, --section-numbers - Auto-number HTML article section titles. Synonym for --attribute - numbered. - - --safe - Enable safe mode. Safe mode is disabled by default. AsciiDoc - safe mode skips potentially dangerous scripted sections in - AsciiDoc source files. - - --theme=THEME - Specify a theme name. Synonym for --attribute theme=THEME. The - --theme option is also used to manage theme plugins (see - [3]PLUGIN COMMANDS). - - -v, --verbose - Verbosely print processing information and configuration file - checks to stderr. - - --version - Print program version number. - -PLUGIN COMMANDS - - The asciidoc(1) --filter, --backend and --theme options are used to - install, remove and list AsciiDoc filter, backend and theme plugins. - Syntax: - - asciidoc OPTION install ZIP_FILE [PLUGINS_DIR] - asciidoc OPTION remove PLUGIN_NAME [PLUGINS_DIR] - asciidoc OPTION list - asciidoc OPTION build ZIP_FILE PLUGIN_SOURCE - - Where: - - OPTION - asciidoc(1) --filter, --backend or --theme option specifying the - type of plugin. - - PLUGIN_NAME - A unique plugin name containing only alphanumeric or underscore - characters. - - ZIP_FILE - A Zip file containing plugin resources, the name must start with - the plugin name e.g. my_filter-1.0.zip packages filter - my_filter. - - PLUGINS_DIR - The directory containing installed plugins. Each plugin is - contained in its own separate subdirectory which has the same - name as the plugin. PLUGINS_DIR defaults to the - $HOME/.asciidoc/filters (for filter plugins) or - $HOME/.asciidoc/backends (for backend plugins) or - $HOME/.asciidoc/themes (for theme plugins). - - PLUGIN_SOURCE - The name of a directory containing the plugin source files or - the name of a single source file. - - The plugin commands perform as follows: - - install - Create a subdirectory in PLUGINS_DIR with the same name as the - plugin then extract the ZIP_FILE into it. - - remove - Delete the PLUGIN_NAME plugin subdirectory and all its contents - from the PLUGINS_DIR. - - list - List the names and locations of all installed filter or theme - plugins (including standard plugins installed in the global - configuration directory). - - build - Create a plugin file named ZIP_FILE containing the files and - subdirectories specified by PLUGIN_SOURCE. File and directory - names starting with a period are skipped. - -EXIT STATUS - - 0 - Success - - 1 - Failure (syntax or usage error; configuration error; document - processing failure; unexpected error). - -BUGS - - See the AsciiDoc distribution BUGS file. - -AUTHOR - - AsciiDoc was originally written by Stuart Rackham. Many people have - contributed to it. - -RESOURCES - - SourceForge: [4]http://sourceforge.net/projects/asciidoc/ - - Main web site: [5]http://www.methods.co.nz/asciidoc/ - -COPYING - - Copyright (C) 2002-2011 Stuart Rackham. Free use of this software is - granted under the terms of the GNU General Public License (GPL). - - -[syntax] - -AsciiDoc Markup Syntax Summary -============================== - -A summary of the most commonly used markup. -For a complete reference see the 'AsciiDoc User Guide'. - -Text formatting ---------------- - *bold text* (boldface font) - _emphasized text_ (normally italics) - 'emphasized text' - +monospaced text+ (proportional font) - `monospaced text` (inline literal passthrough) - -Document links --------------- - [[id]] (define link target) - <> (link to target id) - link:filename#id[caption] (link to external HTML file) - -URLs ----- - Use normal URL and email addess syntax or: - - http:address[caption] (link to web page) - mailto:address[caption] (link to mail recipient) - -Images ------- - image:filename[caption] (inline image) - image::filename[caption] (block image) - -Document header ---------------- - - The Document Title - ================== - author - revision, date - -author, email, revision and date are optional. - -Section title underlines ------------------------- - Underlined: - - Level 0 (document title) - ======= - Level 1 - ------- - Level 2 - ~~~~~~~ - Level 3 - ^^^^^^^ - Level 4 (bottom level) - +++++++ - - Single line: - - = Level 0 = (document title) - == Level 1 == - === Level 2 === - ==== Level 3 ==== - ===== Level 4 ===== (bottom level) - -Paragraphs ----------- -A normal paragraph. (styles: literal,verse,quote,listing, - NOTE,TIP,WARNING,IMPORTANT,CAUTION) - An indented literal - paragraph. - -Delimited blocks ----------------- -Delimiters must begin at left margin. - - ------------------- (styles: source,music,graphviz) - listing block - ------------------- - - ................... (styles: listing,verse) - literal block - ................... - - ******************* - sidebar block - ******************* - - [style, author, cite] - ___________________ (styles: quote,verse) - quote block - ___________________ - - =================== (styles: NOTE,TIP,WARNING, - example block IMPORTANT,CAUTION) - =================== - - /////////////////// - comment block - /////////////////// - - +++++++++++++++++++ (styles: pass,asciimath,latexmath) - passthrough block - +++++++++++++++++++ - - [style] (styles: abstract,partintro) - -- - open block - -- - -More block elements -------------------- - [attributes list] - .Block title - // Comment line - include::filename[] - -Tables ------- - .An example table - [width="40%",cols="^,2m",frame="topbot",options="header,footer"] - |====================== - |Column 1 |Column 2 - |1 |Item 1 - |2 |Item 2 - |3 |Item 3 - |6 |Three items - |====================== - - Common attributes: - - grid: none,cols,rows,all - frame: topbot,none,sides,all - options: header,footer - format: psv,csv,dsv - valign: top,bottom,middle - width: 1%..100% - cols: colspec[,colspec,...] - - colspec: [multiplier*][align][width][style] - multiplier: 1... - width: 1... or 1%...100% - align: [horiz][.vert] - horiz: < (left), ^ (center), > (right) - vert: < (top), ^ (middle), > (bottom) - style: d[efault], e[mphasis], m[onospaced], a[sciidoc], - s[trong], l[iteral], v[erse], h[eader] - cell: [cellspec]|data - cellspec: [span*|+][align][style] - span: [colspan][.rowspan] - colspan: 1... - rowspan: 1... - -Bulleted lists --------------- - - item text - * item text - ** item text - *** item text - **** item text - ***** item text - - (styles: callout,bibliography) - -Numbered lists --------------- - 1. arabic (decimal) numbering - a. loweralpha numbering - F. upperalpha numbering - iii) lowerroman numbering - IX) upperroman numbering - - . arabic (decimal) numbering - .. loweralpha numbering - ... lowerroman numbering - .... upperalpha numbering - ..... upperroman numbering - - (styles: arabic,loweralpha,upperalpha,lowerroman,upperroman) - -Labeled lists -------------- - label:: item text - label;; item text - label::: item text - label:::: item text - - (styles: horizontal,vertical,glossary,qanda,bibliograpy) - -More inline elements --------------------- - footnote:[footnote text] (document footnote) - diff --git a/manual/src/bin/asciidoc/html4.conf b/manual/src/bin/asciidoc/html4.conf deleted file mode 100644 index 143a1c155fbd5..0000000000000 --- a/manual/src/bin/asciidoc/html4.conf +++ /dev/null @@ -1,506 +0,0 @@ -# -# html4.conf -# -# Asciidoc HTML 4.01 configuration file. -# - -[miscellaneous] -outfilesuffix=.html - -[attributes] -basebackend=html -basebackend-html= -basebackend-html4= - -[replacements2] -# Line break. -(?m)^(.*)\s\+$=\1
- -[replacements] -ifdef::asciidoc7compatible[] -# Superscripts. -\^(.+?)\^=\1 -# Subscripts. -~(.+?)~=\1 -endif::asciidoc7compatible[] - -[ruler-blockmacro] -
- -[pagebreak-blockmacro] -
- -[pi-blockmacro] - - -[pi-inlinemacro] -template::[pi-blockmacro] - -[image-inlinemacro] - -# src attribute must be first attribute for blogpost compatibility. -{alt={target}} -{link#} - -[image-blockmacro] - - - -{alt={target}} -{link#} -

{caption={figure-caption} {counter:figure-number}. }{title}

- - -[unfloat-blockmacro] -
- -[indexterm-inlinemacro] -# Index term. -{empty} - -[indexterm2-inlinemacro] -# Index term. -# Single entry index term that is visible in the primary text flow. -{1} - -[footnote-inlinemacro] -# footnote:[]. -
[{0}]
- -[footnoteref-inlinemacro] -# footnoteref:[], create reference to footnote. -{2%}
[{1}]
-# footnoteref:[,], create footnote with ID. -{2#}
[{2}]
- -[callout-inlinemacro] -# Callout. -<{index}> - -# Comment line macros. -[comment-inlinemacro] -{showcomments#}
{passtext}
- -[comment-blockmacro] -{showcomments#}

{passtext}

- -[literal-inlinemacro] -# Inline literal. -{passtext} - -# List tags. -[listtags-bulleted] -list={id?}{title?

{title}

}| -item=
  • |
  • -text=

    |

    - -[listtags-numbered] -list={id?}{title?

    {title}

    }
      |
    -item=
  • |
  • -text=

    |

    - -[listtags-labeled] -list={id?}{title?

    {title}

    }| -entry= -label= -term=
    {strong-option?}|{strong-option?}
    -item=
    |
    -text=

    |

    - -[listtags-horizontal] -list={id?}{title?

    {title}

    }|
    -entry=| -label={strong-option?}|{strong-option?} -term=|
    -item=| -text=

    |

    - -[listtags-callout] -list={id?}{title?

    {title}

    }| -item=
  • |
  • -text=

    |

    - -[listtags-qanda] -list={id?}{title?

    {title}

    }| -entry=
  • |
  • -label= -term=

    |

    -item= -text=

    |

    - -[listtags-glossary] -list={id?}{title?

    {title}

    }| -entry= -label= -term=
    |
    -item=
    |
    -text=

    |

    - -[listtags-bibliography] -list={id?}{title?

    {title}

    }| -item=
  • |
  • -text=

    |

    - -[tags] -# Quoted text. -emphasis={1?}|{1?} -strong={1?}|{1?} -monospaced={1?}|{1?} -singlequoted={lsquo}{1?}|{1?}{rsquo} -doublequoted={ldquo}{1?}|{1?}{rdquo} -unquoted={1?}|{1?} -superscript={1?}|{1?} -subscript={1?}|{1?} - -ifdef::deprecated-quotes[] -# Override with deprecated quote attributes. -emphasis={role?}|{role?} -strong={role?}|{role?} -monospaced={role?}|{role?} -singlequoted={role?}{1,2,3?}{amp}#8216;|{amp}#8217;{1,2,3?}{role?} -doublequoted={role?}{1,2,3?}{amp}#8220;|{amp}#8221;{1,2,3?}{role?} -unquoted={role?}{1,2,3?}|{1,2,3?}{role?} -superscript={role?}|{role?} -subscript={role?}|{role?} -endif::deprecated-quotes[] - -# Inline macros -[http-inlinemacro] -{0={name}:{target}} -[https-inlinemacro] -{0={name}:{target}} -[ftp-inlinemacro] -{0={name}:{target}} -[file-inlinemacro] -{0={name}:{target}} -[irc-inlinemacro] -{0={name}:{target}} -[mailto-inlinemacro] -{0={target}} -[callto-inlinemacro] -{0={target}} -[link-inlinemacro] -{0={target}} -# anchor:id[text] -[anchor-inlinemacro] - -# [[id,text]] -[anchor2-inlinemacro] - -# [[[id]]] -[anchor3-inlinemacro] -[{1}] -# xref:id[text] -[xref-inlinemacro] -{0=[{target}]} -# <> -[xref2-inlinemacro] -{2=[{1}]} - -# Special word substitution. -[emphasizedwords] -{words} -[monospacedwords] -{words} -[strongwords] -{words} - -# Paragraph substitution. -[paragraph] -{id?}{title?{title}
    } -| -

    - -[admonitionparagraph] -template::[admonitionblock] - -# Delimited blocks. -[passthroughblock] -| - -[listingblock] - -

    {title}

    -
    -
    -|
    -
    -
    - -[literalblock] - -

    {title}

    - -| - - -[sidebarblock] - - -
    -

    {title}

    -| -
    - -[openblock] - -

    {title}

    -| - - -[partintroblock] -template::[openblock] - -[abstractblock] -template::[quoteblock] - -[quoteblock] - - -

    {title}

    -| -

    -{citetitle}{attribution?
    } -— {attribution} -

    - - -[verseblock] - - -

    {title}

    -# Font inheritance broken in IE6. -
    -|
    -
    -

    -{citetitle}{attribution?
    } -— {attribution} -

    - - -[exampleblock] - -

    {caption={example-caption} {counter:example-number}. }{title}

    - -
    -| -
    - -[admonitionblock] - - - -

    {caption}

    -

    {title}

    -| -
    - -[mathblock] -# Here to suppress missing block warning (html4 does not include math -# JavaScripts). - -

    {title}

    - -| - - -# Tables. -[tabletags-default] -bodyrow=| -headdata=| -footdata=| -bodydata=| -paragraph=

    |

    - -[tabletags-header] -paragraph=

    |

    - -[tabletags-emphasis] -paragraph=

    |

    - -[tabletags-strong] -paragraph=

    |

    - -[tabletags-monospaced] -paragraph=

    |

    - -[tabletags-verse] -bodydata=
    |
    -paragraph= - -[tabletags-literal] -bodydata=
    |
    -paragraph= - -[tabletags-asciidoc] -bodydata=
    |
    -paragraph= - -[table] - - - - -{headrows#} -{headrows} -{headrows#} -{footrows#} -{footrows} -{footrows#} - -{bodyrows} - -
    {caption={table-caption} {counter:table-number}. }{title}
    - - -#-------------------------------------------------------------------- -# Deprecated old table definitions. -# - -[miscellaneous] -# Screen width in pixels. -pagewidth=800 -pageunits= - -[old_tabledef-default] -template=old_table -bodyrow=| -headdata=| -footdata=| -bodydata=| - -[old_table] -

    {caption={table-caption}}{title}

    - - -{headrows#} -{headrows} -{headrows#} -{footrows#} -{footrows} -{footrows#} - -{bodyrows} - -
    - -# End of deprecated old table definitions. -#-------------------------------------------------------------------- - -[floatingtitle] -{id?}{title} - -[preamble] -# Untitled elements between header and first section title. - -| - -[sect0] -{doctype-manpage%}
    -

    {id?}{title}

    -| - -[sect1] -{doctype-manpage%}
    -{id?}{numbered?{sectnum} }{title} -| - -[sect2] -{id?}{numbered?{sectnum} }{title} -| - -[sect3] -{id?}{numbered?{sectnum} }{title} -| - -[sect4] -{id?}{title} -| - -[appendix] -
    -{id?}{numbered?{sectnum} }{appendix-caption} {counter:appendix-number:A}: {title} -| - -[footer] -

    -

    -

    -template::[footer-text] -

    - - - -[header-declarations] - - - - - - - -{title} -{title%}{doctitle=} -{docinfo1,docinfo2#}{include:{docdir}/docinfo.html} -{docinfo,docinfo2#}{include:{docdir}/{docname}-docinfo.html} -template::[docinfo] - - -#-------------------------------- -# article and book document types -#-------------------------------- -ifndef::doctype-manpage[] - -[header] -template::[header-declarations] - -{notitle%}

    {doctitle}

    -{doctitle#}

    -{doctitle#}{author}
    -{doctitle#}<{email}>
    -{doctitle#}version {revnumber}{revdate?,} -{doctitle#}{revdate} -{doctitle#}
    {revremark} -{doctitle#}

    - -endif::doctype-manpage[] - -#------------------------- -# manpage document type -#------------------------- -ifdef::doctype-manpage[] - -[tags] -# This is more inline with man page convention. -emphasis=| -vlistterm=
    |
    - -[header] -template::[header-declarations] - -
    -

    - {doctitle} Manual Page -

    -
    - -[name] -

    {manname-title}

    -

    {manname} - - {manpurpose} -

    - -[synopsis] -template::[sect1] - -endif::doctype-manpage[] diff --git a/manual/src/bin/asciidoc/html5.conf b/manual/src/bin/asciidoc/html5.conf deleted file mode 100644 index b4630360d85aa..0000000000000 --- a/manual/src/bin/asciidoc/html5.conf +++ /dev/null @@ -1,684 +0,0 @@ -# -# html5.conf -# -# Asciidoc configuration file. -# html5 backend. -# - -[miscellaneous] -outfilesuffix=.html - -[attributes] -basebackend=html -basebackend-html= -basebackend-html5= - -[replacements2] -# Line break. -(?m)^(.*)\s\+$=\1
    - -[replacements] -ifdef::asciidoc7compatible[] -# Superscripts. -\^(.+?)\^=\1 -# Subscripts. -~(.+?)~=\1 -endif::asciidoc7compatible[] - -[ruler-blockmacro] -
    - -[pagebreak-blockmacro] -
    - -[blockdef-pass] -asciimath-style=template="asciimathblock",subs=() -latexmath-style=template="latexmathblock",subs=() - -[macros] -(?u)^(?Paudio|video)::(?P\S*?)(\[(?P.*?)\])$=# -# math macros. -# Special characters are escaped in HTML math markup. -(?su)[\\]?(?Pasciimath|latexmath):(?P\S*?)\[(?P.*?)(?asciimath|latexmath)::(?P\S*?)(\[(?P.*?)\])$=#[specialcharacters] - -[asciimath-inlinemacro] -`{passtext}` - -[asciimath-blockmacro] -
    -
    -
    {title}
    -`{passtext}` -
    - -[asciimathblock] -
    -
    -
    {title}
    -`|` -
    - -[latexmath-inlinemacro] -{passtext} - -[latexmath-blockmacro] -
    -
    -
    {title}
    -{passtext} -
    - -[latexmathblock] -
    -
    -
    {title}
    -| -
    - -[image-inlinemacro] - - -{data-uri%}{alt={target}} -{data-uri#}{alt={target}} -{link#} - - -[image-blockmacro] -
    - -
    {caption={figure-caption} {counter:figure-number}. }{title}
    -
    - -[audio-blockmacro] -
    -
    {caption=}{title}
    -
    - -
    - -[video-blockmacro] -
    -
    {caption=}{title}
    -
    - -
    - -[unfloat-blockmacro] -
    - -[toc-blockmacro] -template::[toc] - -[indexterm-inlinemacro] -# Index term. -{empty} - -[indexterm2-inlinemacro] -# Index term. -# Single entry index term that is visible in the primary text flow. -{1} - -[footnote-inlinemacro] -# footnote:[]. -
    [{0}]
    - -[footnoteref-inlinemacro] -# footnoteref:[], create reference to footnote. -{2%}
    [{1}]
    -# footnoteref:[,], create footnote with ID. -{2#}
    [{2}]
    - -[callout-inlinemacro] -ifndef::icons[] -<{index}> -endif::icons[] -ifdef::icons[] -ifndef::data-uri[] -{index} -endif::data-uri[] -ifdef::data-uri[] -{index} -endif::data-uri[] -endif::icons[] - -# Comment line macros. -[comment-inlinemacro] -{showcomments#}
    {passtext}
    - -[comment-blockmacro] -{showcomments#}

    {passtext}

    - -[literal-inlinemacro] -# Inline literal. -{passtext} - -# List tags. -[listtags-bulleted] -list=
    {title?
    {title}
    }
      |
    -item=
  • |
  • -text=

    |

    - -[listtags-numbered] -# The start attribute is not valid XHTML 1.1 but all browsers support it. -list=
    {title?
    {title}
    }
      |
    -item=
  • |
  • -text=

    |

    - -[listtags-labeled] -list=
    {title?
    {title}
    }
    |
    -entry= -label= -term=
    |
    -item=
    |
    -text=

    |

    - -[listtags-horizontal] -list=
    {title?
    {title}
    }{labelwidth?}{itemwidth?}|
    -label=| -term=|
    -entry=| -item=| -text=

    |

    - -[listtags-qanda] -list=
    {title?
    {title}
    }
      |
    -entry=
  • |
  • -label= -term=

    |

    -item= -text=

    |

    - -[listtags-callout] -ifndef::icons[] -list=
    {title?
    {title}
    }
      |
    -item=
  • |
  • -text=

    |

    -endif::icons[] -ifdef::icons[] -list=
    {title?
    {title}
    }|
    -ifndef::data-uri[] -item={listindex}| -endif::data-uri[] -ifdef::data-uri[] -item={listindex}| -endif::data-uri[] -text=| -endif::icons[] - -[listtags-glossary] -list=
    {title?
    {title}
    }
    |
    -label= -entry= -term=
    |
    -item=
    |
    -text=

    |

    - -[listtags-bibliography] -list=
    {title?
    {title}
    }
      |
    -item=
  • |
  • -text=

    |

    - -[tags] -# Quoted text. -emphasis={1?}|{1?} -strong={1?}|{1?} -monospaced=| -singlequoted={lsquo}{1?}|{1?}{rsquo} -doublequoted={ldquo}{1?}|{1?}{rdquo} -unquoted={1?}|{1?} -superscript={1?}|{1?} -subscript={1?}|{1?} - -ifdef::deprecated-quotes[] -# Override with deprecated quote attributes. -emphasis={role?}|{role?} -strong={role?}|{role?} -monospaced=| -singlequoted={role?}{1,2,3?}{amp}#8216;|{amp}#8217;{1,2,3?}{role?} -doublequoted={role?}{1,2,3?}{amp}#8220;|{amp}#8221;{1,2,3?}{role?} -unquoted={role?}{1,2,3?}|{1,2,3?}{role?} -superscript={role?}|{role?} -subscript={role?}|{role?} -endif::deprecated-quotes[] - -# Inline macros -[http-inlinemacro] -{0={name}:{target}} -[https-inlinemacro] -{0={name}:{target}} -[ftp-inlinemacro] -{0={name}:{target}} -[file-inlinemacro] -{0={name}:{target}} -[irc-inlinemacro] -{0={name}:{target}} -[mailto-inlinemacro] -{0={target}} -[link-inlinemacro] -{0={target}} -[callto-inlinemacro] -{0={target}} -# anchor:id[text] -[anchor-inlinemacro] - -# [[id,text]] -[anchor2-inlinemacro] - -# [[[id]]] -[anchor3-inlinemacro] -[{1}] -# xref:id[text] -[xref-inlinemacro] -{0=[{target}]} -# <> -[xref2-inlinemacro] -{2=[{1}]} - -# Special word substitution. -[emphasizedwords] -{words} -[monospacedwords] -{words} -[strongwords] -{words} - -# Paragraph substitution. -[paragraph] -
    {title?
    {title}
    }

    -| -

    - -[admonitionparagraph] -template::[admonitionblock] - -# Delimited blocks. -[listingblock] -
    -
    {caption=}{title}
    -
    -
    -|
    -
    -
    - -[literalblock] -
    -
    {title}
    -
    -
    -|
    -
    -
    - -[sidebarblock] -
    -
    -
    {title}
    -| -
    - -[openblock] -
    -
    {title}
    -
    -| -
    - -[partintroblock] -template::[openblock] - -[abstractblock] -template::[quoteblock] - -[quoteblock] -
    -
    {title}
    -
    -| -
    -
    -{citetitle}{attribution?
    } -— {attribution} -
    - -[verseblock] -
    -
    {title}
    -
    -|
    -
    -
    -{citetitle}{attribution?
    } -— {attribution} -
    - -[exampleblock] -
    -
    {caption={example-caption} {counter:example-number}. }{title}
    -
    -| -
    - -[admonitionblock] -
    - - - -
    -{data-uri%}{icons#}{caption} -{data-uri#}{icons#}{caption} -{icons%}
    {caption}
    -
    -
    {title}
    -| -
    -
    - -# Tables. -[tabletags-default] -colspec= -bodyrow=| -headdata=| -bodydata=| -paragraph=

    |

    - -[tabletags-header] -paragraph=

    |

    - -[tabletags-emphasis] -paragraph=

    |

    - -[tabletags-strong] -paragraph=

    |

    - -[tabletags-monospaced] -paragraph=

    |

    - -[tabletags-verse] -bodydata=
    |
    -paragraph= - -[tabletags-literal] -bodydata=
    |
    -paragraph= - -[tabletags-asciidoc] -bodydata=
    |
    -paragraph= - -[table] - - -{colspecs} -{headrows#} -{headrows} -{headrows#} -{footrows#} -{footrows} -{footrows#} - -{bodyrows} - -
    {caption={table-caption} {counter:table-number}. }{title}
    - -#-------------------------------------------------------------------- -# Deprecated old table definitions. -# - -[miscellaneous] -# Screen width in pixels. -pagewidth=800 -pageunits=px - -[old_tabledef-default] -template=old_table -colspec= -bodyrow=| -headdata=| -footdata=| -bodydata=| - -[old_table] - - -{colspecs} -{headrows#} -{headrows} -{headrows#} -{footrows#} -{footrows} -{footrows#} - -{bodyrows} - -
    {caption={table-caption}}{title}
    - -# End of deprecated old table definitions. -#-------------------------------------------------------------------- - -[floatingtitle] -{title} - -[preamble] -# Untitled elements between header and first section title. -
    -
    -| -
    -
    - -# Document sections. -[sect0] -{title} -| - -[sect1] -
    -{numbered?{sectnum} }{title} -
    -| -
    -
    - -[sect2] -
    -{numbered?{sectnum} }{title} -| -
    - -[sect3] -
    -{numbered?{sectnum} }{title} -| -
    - -[sect4] -
    -{title} -| -
    - -[appendix] -
    -{numbered?{sectnum} }{appendix-caption} {counter:appendix-number:A}: {title} -
    -| -
    -
    - -[toc] -
    -
    {toc-title}
    - -
    - -[header] - - - - - - - -{title} -{title%}{doctitle=} -ifdef::linkcss[] - -ifdef::pygments[] -ifdef::toc2[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -ifndef::disable-javascript[] -ifdef::linkcss[] - - - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::disable-javascript[] -ifdef::asciimath[] -ifdef::linkcss[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::asciimath[] -ifdef::latexmath[] -ifdef::linkcss[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::latexmath[] -{docinfo1,docinfo2#}{include:{docdir}/docinfo.html} -{docinfo,docinfo2#}{include:{docdir}/{docname}-docinfo.html} -template::[docinfo] - - -# Article, book header. -ifndef::doctype-manpage[] - -endif::doctype-manpage[] -# Man page header. -ifdef::doctype-manpage[] - -endif::doctype-manpage[] -
    - -[footer] -
    -{disable-javascript%

    } - - - - -ifdef::doctype-manpage[] -[synopsis] -template::[sect1] -endif::doctype-manpage[] - diff --git a/manual/src/bin/asciidoc/images/highlighter.png b/manual/src/bin/asciidoc/images/highlighter.png deleted file mode 100644 index b31145948076ac58ce95bd7bbc1cf4055f75cb0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128142 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

    8Q!rf|WXGM6o38 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

    "); - document.write(""); -} - -// GO1.1 Generic onload by Brothercake -// http://www.brothercake.com/ -//onload function (replaces the onload="translate()" in the tag) -function generic() -{ - translate(); -}; -//setup onload function -if(typeof window.addEventListener != 'undefined') -{ - //.. gecko, safari, konqueror and standard - window.addEventListener('load', generic, false); -} -else if(typeof document.addEventListener != 'undefined') -{ - //.. opera 7 - document.addEventListener('load', generic, false); -} -else if(typeof window.attachEvent != 'undefined') -{ - //.. win/ie - window.attachEvent('onload', generic); -} -//** remove this condition to degrade older browsers -else -{ - //.. mac/ie5 and anything else that gets this far - //if there's an existing onload function - if(typeof window.onload == 'function') - { - //store it - var existing = onload; - //add new onload handler - window.onload = function() - { - //call existing onload function - existing(); - //call generic onload function - generic(); - }; - } - else - { - //setup onload function - window.onload = generic; - } -} diff --git a/manual/src/bin/asciidoc/javascripts/LaTeXMathML.js b/manual/src/bin/asciidoc/javascripts/LaTeXMathML.js deleted file mode 100644 index 51dba70ce6d24..0000000000000 --- a/manual/src/bin/asciidoc/javascripts/LaTeXMathML.js +++ /dev/null @@ -1,1223 +0,0 @@ -/* -LaTeXMathML.js -============== - -This file, in this form, is due to Douglas Woodall, June 2006. -It contains JavaScript functions to convert (most simple) LaTeX -math notation to Presentation MathML. It was obtained by -downloading the file ASCIIMathML.js from - http://www1.chapman.edu/~jipsen/mathml/asciimathdownload/ -and modifying it so that it carries out ONLY those conversions -that would be carried out in LaTeX. A description of the original -file, with examples, can be found at - www1.chapman.edu/~jipsen/mathml/asciimath.html - ASCIIMathML: Math on the web for everyone - -Here is the header notice from the original file: - -ASCIIMathML.js -============== -This file contains JavaScript functions to convert ASCII math notation -to Presentation MathML. The conversion is done while the (X)HTML page -loads, and should work with Firefox/Mozilla/Netscape 7+ and Internet -Explorer 6+MathPlayer (http://www.dessci.com/en/products/mathplayer/). -Just add the next line to your (X)HTML page with this file in the same folder: -This is a convenient and inexpensive solution for authoring MathML. - -Version 1.4.7 Dec 15, 2005, (c) Peter Jipsen http://www.chapman.edu/~jipsen -Latest version at http://www.chapman.edu/~jipsen/mathml/ASCIIMathML.js -For changes see http://www.chapman.edu/~jipsen/mathml/asciimathchanges.txt -If you use it on a webpage, please send the URL to jipsen@chapman.edu - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at -your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License (at http://www.gnu.org/copyleft/gpl.html) -for more details. - -LaTeXMathML.js (ctd) -============== - -The instructions for use are the same as for the original -ASCIIMathML.js, except that of course the line you add to your -file should be -Or use absolute path names if the file is not in the same folder -as your (X)HTML page. -*/ - -var checkForMathML = true; // check if browser can display MathML -var notifyIfNoMathML = true; // display note if no MathML capability -var alertIfNoMathML = false; // show alert box if no MathML capability -// was "red": -var mathcolor = ""; // change it to "" (to inherit) or any other color -// was "serif": -var mathfontfamily = ""; // change to "" to inherit (works in IE) - // or another family (e.g. "arial") -var showasciiformulaonhover = true; // helps students learn ASCIIMath -/* -// Commented out by DRW -- not now used -- see DELIMITERS (twice) near the end -var displaystyle = false; // puts limits above and below large operators -var decimalsign = "."; // change to "," if you like, beware of `(1,2)`! -var AMdelimiter1 = "`", AMescape1 = "\\\\`"; // can use other characters -var AMdelimiter2 = "$", AMescape2 = "\\\\\\$", AMdelimiter2regexp = "\\$"; -var doubleblankmathdelimiter = false; // if true, x+1 is equal to `x+1` - // for IE this works only in -//var separatetokens;// has been removed (email me if this is a problem) -*/ -var isIE = document.createElementNS==null; - -if (document.getElementById==null) - alert("This webpage requires a recent browser such as\ -\nMozilla/Netscape 7+ or Internet Explorer 6+MathPlayer") - -// all further global variables start with "AM" - -function AMcreateElementXHTML(t) { - if (isIE) return document.createElement(t); - else return document.createElementNS("http://www.w3.org/1999/xhtml",t); -} - -function AMnoMathMLNote() { - var nd = AMcreateElementXHTML("h3"); - nd.setAttribute("align","center") - nd.appendChild(AMcreateElementXHTML("p")); - nd.appendChild(document.createTextNode("To view the ")); - var an = AMcreateElementXHTML("a"); - an.appendChild(document.createTextNode("LaTeXMathML")); - an.setAttribute("href","http://www.maths.nott.ac.uk/personal/drw/lm.html"); - nd.appendChild(an); - nd.appendChild(document.createTextNode(" notation use Internet Explorer 6+")); - an = AMcreateElementXHTML("a"); - an.appendChild(document.createTextNode("MathPlayer")); - an.setAttribute("href","http://www.dessci.com/en/products/mathplayer/download.htm"); - nd.appendChild(an); - nd.appendChild(document.createTextNode(" or Netscape/Mozilla/Firefox")); - nd.appendChild(AMcreateElementXHTML("p")); - return nd; -} - -function AMisMathMLavailable() { - if (navigator.appName.slice(0,8)=="Netscape") - if (navigator.appVersion.slice(0,1)>="5") return null; - else return AMnoMathMLNote(); - else if (navigator.appName.slice(0,9)=="Microsoft") - try { - var ActiveX = new ActiveXObject("MathPlayer.Factory.1"); - return null; - } catch (e) { - return AMnoMathMLNote(); - } - else return AMnoMathMLNote(); -} - -// character lists for Mozilla/Netscape fonts -var AMcal = [0xEF35,0x212C,0xEF36,0xEF37,0x2130,0x2131,0xEF38,0x210B,0x2110,0xEF39,0xEF3A,0x2112,0x2133,0xEF3B,0xEF3C,0xEF3D,0xEF3E,0x211B,0xEF3F,0xEF40,0xEF41,0xEF42,0xEF43,0xEF44,0xEF45,0xEF46]; -var AMfrk = [0xEF5D,0xEF5E,0x212D,0xEF5F,0xEF60,0xEF61,0xEF62,0x210C,0x2111,0xEF63,0xEF64,0xEF65,0xEF66,0xEF67,0xEF68,0xEF69,0xEF6A,0x211C,0xEF6B,0xEF6C,0xEF6D,0xEF6E,0xEF6F,0xEF70,0xEF71,0x2128]; -var AMbbb = [0xEF8C,0xEF8D,0x2102,0xEF8E,0xEF8F,0xEF90,0xEF91,0x210D,0xEF92,0xEF93,0xEF94,0xEF95,0xEF96,0x2115,0xEF97,0x2119,0x211A,0x211D,0xEF98,0xEF99,0xEF9A,0xEF9B,0xEF9C,0xEF9D,0xEF9E,0x2124]; - -var CONST = 0, UNARY = 1, BINARY = 2, INFIX = 3, LEFTBRACKET = 4, - RIGHTBRACKET = 5, SPACE = 6, UNDEROVER = 7, DEFINITION = 8, - TEXT = 9, BIG = 10, LONG = 11, STRETCHY = 12, MATRIX = 13; // token types - -var AMsqrt = {input:"\\sqrt", tag:"msqrt", output:"sqrt", ttype:UNARY}, - AMroot = {input:"\\root", tag:"mroot", output:"root", ttype:BINARY}, - AMfrac = {input:"\\frac", tag:"mfrac", output:"/", ttype:BINARY}, - AMover = {input:"\\stackrel", tag:"mover", output:"stackrel", ttype:BINARY}, - AMatop = {input:"\\atop", tag:"mfrac", output:"", ttype:INFIX}, - AMchoose = {input:"\\choose", tag:"mfrac", output:"", ttype:INFIX}, - AMsub = {input:"_", tag:"msub", output:"_", ttype:INFIX}, - AMsup = {input:"^", tag:"msup", output:"^", ttype:INFIX}, - AMtext = {input:"\\mathrm", tag:"mtext", output:"text", ttype:TEXT}, - AMmbox = {input:"\\mbox", tag:"mtext", output:"mbox", ttype:TEXT}; - -// Commented out by DRW to prevent 1/2 turning into a 2-line fraction -// AMdiv = {input:"/", tag:"mfrac", output:"/", ttype:INFIX}, -// Commented out by DRW so that " prints literally in equations -// AMquote = {input:"\"", tag:"mtext", output:"mbox", ttype:TEXT}; - -var AMsymbols = [ -//Greek letters -{input:"\\alpha", tag:"mi", output:"\u03B1", ttype:CONST}, -{input:"\\beta", tag:"mi", output:"\u03B2", ttype:CONST}, -{input:"\\gamma", tag:"mi", output:"\u03B3", ttype:CONST}, -{input:"\\delta", tag:"mi", output:"\u03B4", ttype:CONST}, -{input:"\\epsilon", tag:"mi", output:"\u03B5", ttype:CONST}, -{input:"\\varepsilon", tag:"mi", output:"\u025B", ttype:CONST}, -{input:"\\zeta", tag:"mi", output:"\u03B6", ttype:CONST}, -{input:"\\eta", tag:"mi", output:"\u03B7", ttype:CONST}, -{input:"\\theta", tag:"mi", output:"\u03B8", ttype:CONST}, -{input:"\\vartheta", tag:"mi", output:"\u03D1", ttype:CONST}, -{input:"\\iota", tag:"mi", output:"\u03B9", ttype:CONST}, -{input:"\\kappa", tag:"mi", output:"\u03BA", ttype:CONST}, -{input:"\\lambda", tag:"mi", output:"\u03BB", ttype:CONST}, -{input:"\\mu", tag:"mi", output:"\u03BC", ttype:CONST}, -{input:"\\nu", tag:"mi", output:"\u03BD", ttype:CONST}, -{input:"\\xi", tag:"mi", output:"\u03BE", ttype:CONST}, -{input:"\\pi", tag:"mi", output:"\u03C0", ttype:CONST}, -{input:"\\varpi", tag:"mi", output:"\u03D6", ttype:CONST}, -{input:"\\rho", tag:"mi", output:"\u03C1", ttype:CONST}, -{input:"\\varrho", tag:"mi", output:"\u03F1", ttype:CONST}, -{input:"\\varsigma", tag:"mi", output:"\u03C2", ttype:CONST}, -{input:"\\sigma", tag:"mi", output:"\u03C3", ttype:CONST}, -{input:"\\tau", tag:"mi", output:"\u03C4", ttype:CONST}, -{input:"\\upsilon", tag:"mi", output:"\u03C5", ttype:CONST}, -{input:"\\phi", tag:"mi", output:"\u03C6", ttype:CONST}, -{input:"\\varphi", tag:"mi", output:"\u03D5", ttype:CONST}, -{input:"\\chi", tag:"mi", output:"\u03C7", ttype:CONST}, -{input:"\\psi", tag:"mi", output:"\u03C8", ttype:CONST}, -{input:"\\omega", tag:"mi", output:"\u03C9", ttype:CONST}, -{input:"\\Gamma", tag:"mo", output:"\u0393", ttype:CONST}, -{input:"\\Delta", tag:"mo", output:"\u0394", ttype:CONST}, -{input:"\\Theta", tag:"mo", output:"\u0398", ttype:CONST}, -{input:"\\Lambda", tag:"mo", output:"\u039B", ttype:CONST}, -{input:"\\Xi", tag:"mo", output:"\u039E", ttype:CONST}, -{input:"\\Pi", tag:"mo", output:"\u03A0", ttype:CONST}, -{input:"\\Sigma", tag:"mo", output:"\u03A3", ttype:CONST}, -{input:"\\Upsilon", tag:"mo", output:"\u03A5", ttype:CONST}, -{input:"\\Phi", tag:"mo", output:"\u03A6", ttype:CONST}, -{input:"\\Psi", tag:"mo", output:"\u03A8", ttype:CONST}, -{input:"\\Omega", tag:"mo", output:"\u03A9", ttype:CONST}, - -//fractions -{input:"\\frac12", tag:"mo", output:"\u00BD", ttype:CONST}, -{input:"\\frac14", tag:"mo", output:"\u00BC", ttype:CONST}, -{input:"\\frac34", tag:"mo", output:"\u00BE", ttype:CONST}, -{input:"\\frac13", tag:"mo", output:"\u2153", ttype:CONST}, -{input:"\\frac23", tag:"mo", output:"\u2154", ttype:CONST}, -{input:"\\frac15", tag:"mo", output:"\u2155", ttype:CONST}, -{input:"\\frac25", tag:"mo", output:"\u2156", ttype:CONST}, -{input:"\\frac35", tag:"mo", output:"\u2157", ttype:CONST}, -{input:"\\frac45", tag:"mo", output:"\u2158", ttype:CONST}, -{input:"\\frac16", tag:"mo", output:"\u2159", ttype:CONST}, -{input:"\\frac56", tag:"mo", output:"\u215A", ttype:CONST}, -{input:"\\frac18", tag:"mo", output:"\u215B", ttype:CONST}, -{input:"\\frac38", tag:"mo", output:"\u215C", ttype:CONST}, -{input:"\\frac58", tag:"mo", output:"\u215D", ttype:CONST}, -{input:"\\frac78", tag:"mo", output:"\u215E", ttype:CONST}, - -//binary operation symbols -{input:"\\pm", tag:"mo", output:"\u00B1", ttype:CONST}, -{input:"\\mp", tag:"mo", output:"\u2213", ttype:CONST}, -{input:"\\triangleleft",tag:"mo", output:"\u22B2", ttype:CONST}, -{input:"\\triangleright",tag:"mo",output:"\u22B3", ttype:CONST}, -{input:"\\cdot", tag:"mo", output:"\u22C5", ttype:CONST}, -{input:"\\star", tag:"mo", output:"\u22C6", ttype:CONST}, -{input:"\\ast", tag:"mo", output:"\u002A", ttype:CONST}, -{input:"\\times", tag:"mo", output:"\u00D7", ttype:CONST}, -{input:"\\div", tag:"mo", output:"\u00F7", ttype:CONST}, -{input:"\\circ", tag:"mo", output:"\u2218", ttype:CONST}, -//{input:"\\bullet", tag:"mo", output:"\u2219", ttype:CONST}, -{input:"\\bullet", tag:"mo", output:"\u2022", ttype:CONST}, -{input:"\\oplus", tag:"mo", output:"\u2295", ttype:CONST}, -{input:"\\ominus", tag:"mo", output:"\u2296", ttype:CONST}, -{input:"\\otimes", tag:"mo", output:"\u2297", ttype:CONST}, -{input:"\\bigcirc", tag:"mo", output:"\u25CB", ttype:CONST}, -{input:"\\oslash", tag:"mo", output:"\u2298", ttype:CONST}, -{input:"\\odot", tag:"mo", output:"\u2299", ttype:CONST}, -{input:"\\land", tag:"mo", output:"\u2227", ttype:CONST}, -{input:"\\wedge", tag:"mo", output:"\u2227", ttype:CONST}, -{input:"\\lor", tag:"mo", output:"\u2228", ttype:CONST}, -{input:"\\vee", tag:"mo", output:"\u2228", ttype:CONST}, -{input:"\\cap", tag:"mo", output:"\u2229", ttype:CONST}, -{input:"\\cup", tag:"mo", output:"\u222A", ttype:CONST}, -{input:"\\sqcap", tag:"mo", output:"\u2293", ttype:CONST}, -{input:"\\sqcup", tag:"mo", output:"\u2294", ttype:CONST}, -{input:"\\uplus", tag:"mo", output:"\u228E", ttype:CONST}, -{input:"\\amalg", tag:"mo", output:"\u2210", ttype:CONST}, -{input:"\\bigtriangleup",tag:"mo",output:"\u25B3", ttype:CONST}, -{input:"\\bigtriangledown",tag:"mo",output:"\u25BD", ttype:CONST}, -{input:"\\dag", tag:"mo", output:"\u2020", ttype:CONST}, -{input:"\\dagger", tag:"mo", output:"\u2020", ttype:CONST}, -{input:"\\ddag", tag:"mo", output:"\u2021", ttype:CONST}, -{input:"\\ddagger", tag:"mo", output:"\u2021", ttype:CONST}, -{input:"\\lhd", tag:"mo", output:"\u22B2", ttype:CONST}, -{input:"\\rhd", tag:"mo", output:"\u22B3", ttype:CONST}, -{input:"\\unlhd", tag:"mo", output:"\u22B4", ttype:CONST}, -{input:"\\unrhd", tag:"mo", output:"\u22B5", ttype:CONST}, - - -//BIG Operators -{input:"\\sum", tag:"mo", output:"\u2211", ttype:UNDEROVER}, -{input:"\\prod", tag:"mo", output:"\u220F", ttype:UNDEROVER}, -{input:"\\bigcap", tag:"mo", output:"\u22C2", ttype:UNDEROVER}, -{input:"\\bigcup", tag:"mo", output:"\u22C3", ttype:UNDEROVER}, -{input:"\\bigwedge", tag:"mo", output:"\u22C0", ttype:UNDEROVER}, -{input:"\\bigvee", tag:"mo", output:"\u22C1", ttype:UNDEROVER}, -{input:"\\bigsqcap", tag:"mo", output:"\u2A05", ttype:UNDEROVER}, -{input:"\\bigsqcup", tag:"mo", output:"\u2A06", ttype:UNDEROVER}, -{input:"\\coprod", tag:"mo", output:"\u2210", ttype:UNDEROVER}, -{input:"\\bigoplus", tag:"mo", output:"\u2A01", ttype:UNDEROVER}, -{input:"\\bigotimes", tag:"mo", output:"\u2A02", ttype:UNDEROVER}, -{input:"\\bigodot", tag:"mo", output:"\u2A00", ttype:UNDEROVER}, -{input:"\\biguplus", tag:"mo", output:"\u2A04", ttype:UNDEROVER}, -{input:"\\int", tag:"mo", output:"\u222B", ttype:CONST}, -{input:"\\oint", tag:"mo", output:"\u222E", ttype:CONST}, - -//binary relation symbols -{input:":=", tag:"mo", output:":=", ttype:CONST}, -{input:"\\lt", tag:"mo", output:"<", ttype:CONST}, -{input:"\\gt", tag:"mo", output:">", ttype:CONST}, -{input:"\\ne", tag:"mo", output:"\u2260", ttype:CONST}, -{input:"\\neq", tag:"mo", output:"\u2260", ttype:CONST}, -{input:"\\le", tag:"mo", output:"\u2264", ttype:CONST}, -{input:"\\leq", tag:"mo", output:"\u2264", ttype:CONST}, -{input:"\\leqslant", tag:"mo", output:"\u2264", ttype:CONST}, -{input:"\\ge", tag:"mo", output:"\u2265", ttype:CONST}, -{input:"\\geq", tag:"mo", output:"\u2265", ttype:CONST}, -{input:"\\geqslant", tag:"mo", output:"\u2265", ttype:CONST}, -{input:"\\equiv", tag:"mo", output:"\u2261", ttype:CONST}, -{input:"\\ll", tag:"mo", output:"\u226A", ttype:CONST}, -{input:"\\gg", tag:"mo", output:"\u226B", ttype:CONST}, -{input:"\\doteq", tag:"mo", output:"\u2250", ttype:CONST}, -{input:"\\prec", tag:"mo", output:"\u227A", ttype:CONST}, -{input:"\\succ", tag:"mo", output:"\u227B", ttype:CONST}, -{input:"\\preceq", tag:"mo", output:"\u227C", ttype:CONST}, -{input:"\\succeq", tag:"mo", output:"\u227D", ttype:CONST}, -{input:"\\subset", tag:"mo", output:"\u2282", ttype:CONST}, -{input:"\\supset", tag:"mo", output:"\u2283", ttype:CONST}, -{input:"\\subseteq", tag:"mo", output:"\u2286", ttype:CONST}, -{input:"\\supseteq", tag:"mo", output:"\u2287", ttype:CONST}, -{input:"\\sqsubset", tag:"mo", output:"\u228F", ttype:CONST}, -{input:"\\sqsupset", tag:"mo", output:"\u2290", ttype:CONST}, -{input:"\\sqsubseteq", tag:"mo", output:"\u2291", ttype:CONST}, -{input:"\\sqsupseteq", tag:"mo", output:"\u2292", ttype:CONST}, -{input:"\\sim", tag:"mo", output:"\u223C", ttype:CONST}, -{input:"\\simeq", tag:"mo", output:"\u2243", ttype:CONST}, -{input:"\\approx", tag:"mo", output:"\u2248", ttype:CONST}, -{input:"\\cong", tag:"mo", output:"\u2245", ttype:CONST}, -{input:"\\Join", tag:"mo", output:"\u22C8", ttype:CONST}, -{input:"\\bowtie", tag:"mo", output:"\u22C8", ttype:CONST}, -{input:"\\in", tag:"mo", output:"\u2208", ttype:CONST}, -{input:"\\ni", tag:"mo", output:"\u220B", ttype:CONST}, -{input:"\\owns", tag:"mo", output:"\u220B", ttype:CONST}, -{input:"\\propto", tag:"mo", output:"\u221D", ttype:CONST}, -{input:"\\vdash", tag:"mo", output:"\u22A2", ttype:CONST}, -{input:"\\dashv", tag:"mo", output:"\u22A3", ttype:CONST}, -{input:"\\models", tag:"mo", output:"\u22A8", ttype:CONST}, -{input:"\\perp", tag:"mo", output:"\u22A5", ttype:CONST}, -{input:"\\smile", tag:"mo", output:"\u2323", ttype:CONST}, -{input:"\\frown", tag:"mo", output:"\u2322", ttype:CONST}, -{input:"\\asymp", tag:"mo", output:"\u224D", ttype:CONST}, -{input:"\\notin", tag:"mo", output:"\u2209", ttype:CONST}, - -//matrices -{input:"\\begin{eqnarray}", output:"X", ttype:MATRIX, invisible:true}, -{input:"\\begin{array}", output:"X", ttype:MATRIX, invisible:true}, -{input:"\\\\", output:"}&{", ttype:DEFINITION}, -{input:"\\end{eqnarray}", output:"}}", ttype:DEFINITION}, -{input:"\\end{array}", output:"}}", ttype:DEFINITION}, - -//grouping and literal brackets -- ieval is for IE -{input:"\\big", tag:"mo", output:"X", atval:"1.2", ieval:"2.2", ttype:BIG}, -{input:"\\Big", tag:"mo", output:"X", atval:"1.6", ieval:"2.6", ttype:BIG}, -{input:"\\bigg", tag:"mo", output:"X", atval:"2.2", ieval:"3.2", ttype:BIG}, -{input:"\\Bigg", tag:"mo", output:"X", atval:"2.9", ieval:"3.9", ttype:BIG}, -{input:"\\left", tag:"mo", output:"X", ttype:LEFTBRACKET}, -{input:"\\right", tag:"mo", output:"X", ttype:RIGHTBRACKET}, -{input:"{", output:"{", ttype:LEFTBRACKET, invisible:true}, -{input:"}", output:"}", ttype:RIGHTBRACKET, invisible:true}, - -{input:"(", tag:"mo", output:"(", atval:"1", ttype:STRETCHY}, -{input:"[", tag:"mo", output:"[", atval:"1", ttype:STRETCHY}, -{input:"\\lbrack", tag:"mo", output:"[", atval:"1", ttype:STRETCHY}, -{input:"\\{", tag:"mo", output:"{", atval:"1", ttype:STRETCHY}, -{input:"\\lbrace", tag:"mo", output:"{", atval:"1", ttype:STRETCHY}, -{input:"\\langle", tag:"mo", output:"\u2329", atval:"1", ttype:STRETCHY}, -{input:"\\lfloor", tag:"mo", output:"\u230A", atval:"1", ttype:STRETCHY}, -{input:"\\lceil", tag:"mo", output:"\u2308", atval:"1", ttype:STRETCHY}, - -// rtag:"mi" causes space to be inserted before a following sin, cos, etc. -// (see function AMparseExpr() ) -{input:")", tag:"mo",output:")", rtag:"mi",atval:"1",ttype:STRETCHY}, -{input:"]", tag:"mo",output:"]", rtag:"mi",atval:"1",ttype:STRETCHY}, -{input:"\\rbrack",tag:"mo",output:"]", rtag:"mi",atval:"1",ttype:STRETCHY}, -{input:"\\}", tag:"mo",output:"}", rtag:"mi",atval:"1",ttype:STRETCHY}, -{input:"\\rbrace",tag:"mo",output:"}", rtag:"mi",atval:"1",ttype:STRETCHY}, -{input:"\\rangle",tag:"mo",output:"\u232A", rtag:"mi",atval:"1",ttype:STRETCHY}, -{input:"\\rfloor",tag:"mo",output:"\u230B", rtag:"mi",atval:"1",ttype:STRETCHY}, -{input:"\\rceil", tag:"mo",output:"\u2309", rtag:"mi",atval:"1",ttype:STRETCHY}, - -// "|", "\\|", "\\vert" and "\\Vert" modified later: lspace = rspace = 0em -{input:"|", tag:"mo", output:"\u2223", atval:"1", ttype:STRETCHY}, -{input:"\\|", tag:"mo", output:"\u2225", atval:"1", ttype:STRETCHY}, -{input:"\\vert", tag:"mo", output:"\u2223", atval:"1", ttype:STRETCHY}, -{input:"\\Vert", tag:"mo", output:"\u2225", atval:"1", ttype:STRETCHY}, -{input:"\\mid", tag:"mo", output:"\u2223", atval:"1", ttype:STRETCHY}, -{input:"\\parallel", tag:"mo", output:"\u2225", atval:"1", ttype:STRETCHY}, -{input:"/", tag:"mo", output:"/", atval:"1.01", ttype:STRETCHY}, -{input:"\\backslash", tag:"mo", output:"\u2216", atval:"1", ttype:STRETCHY}, -{input:"\\setminus", tag:"mo", output:"\\", ttype:CONST}, - -//miscellaneous symbols -{input:"\\!", tag:"mspace", atname:"width", atval:"-0.167em", ttype:SPACE}, -{input:"\\,", tag:"mspace", atname:"width", atval:"0.167em", ttype:SPACE}, -{input:"\\>", tag:"mspace", atname:"width", atval:"0.222em", ttype:SPACE}, -{input:"\\:", tag:"mspace", atname:"width", atval:"0.222em", ttype:SPACE}, -{input:"\\;", tag:"mspace", atname:"width", atval:"0.278em", ttype:SPACE}, -{input:"~", tag:"mspace", atname:"width", atval:"0.333em", ttype:SPACE}, -{input:"\\quad", tag:"mspace", atname:"width", atval:"1em", ttype:SPACE}, -{input:"\\qquad", tag:"mspace", atname:"width", atval:"2em", ttype:SPACE}, -//{input:"{}", tag:"mo", output:"\u200B", ttype:CONST}, // zero-width -{input:"\\prime", tag:"mo", output:"\u2032", ttype:CONST}, -{input:"'", tag:"mo", output:"\u02B9", ttype:CONST}, -{input:"''", tag:"mo", output:"\u02BA", ttype:CONST}, -{input:"'''", tag:"mo", output:"\u2034", ttype:CONST}, -{input:"''''", tag:"mo", output:"\u2057", ttype:CONST}, -{input:"\\ldots", tag:"mo", output:"\u2026", ttype:CONST}, -{input:"\\cdots", tag:"mo", output:"\u22EF", ttype:CONST}, -{input:"\\vdots", tag:"mo", output:"\u22EE", ttype:CONST}, -{input:"\\ddots", tag:"mo", output:"\u22F1", ttype:CONST}, -{input:"\\forall", tag:"mo", output:"\u2200", ttype:CONST}, -{input:"\\exists", tag:"mo", output:"\u2203", ttype:CONST}, -{input:"\\Re", tag:"mo", output:"\u211C", ttype:CONST}, -{input:"\\Im", tag:"mo", output:"\u2111", ttype:CONST}, -{input:"\\aleph", tag:"mo", output:"\u2135", ttype:CONST}, -{input:"\\hbar", tag:"mo", output:"\u210F", ttype:CONST}, -{input:"\\ell", tag:"mo", output:"\u2113", ttype:CONST}, -{input:"\\wp", tag:"mo", output:"\u2118", ttype:CONST}, -{input:"\\emptyset", tag:"mo", output:"\u2205", ttype:CONST}, -{input:"\\infty", tag:"mo", output:"\u221E", ttype:CONST}, -{input:"\\surd", tag:"mo", output:"\\sqrt{}", ttype:DEFINITION}, -{input:"\\partial", tag:"mo", output:"\u2202", ttype:CONST}, -{input:"\\nabla", tag:"mo", output:"\u2207", ttype:CONST}, -{input:"\\triangle", tag:"mo", output:"\u25B3", ttype:CONST}, -{input:"\\therefore", tag:"mo", output:"\u2234", ttype:CONST}, -{input:"\\angle", tag:"mo", output:"\u2220", ttype:CONST}, -//{input:"\\\\ ", tag:"mo", output:"\u00A0", ttype:CONST}, -{input:"\\diamond", tag:"mo", output:"\u22C4", ttype:CONST}, -//{input:"\\Diamond", tag:"mo", output:"\u25CA", ttype:CONST}, -{input:"\\Diamond", tag:"mo", output:"\u25C7", ttype:CONST}, -{input:"\\neg", tag:"mo", output:"\u00AC", ttype:CONST}, -{input:"\\lnot", tag:"mo", output:"\u00AC", ttype:CONST}, -{input:"\\bot", tag:"mo", output:"\u22A5", ttype:CONST}, -{input:"\\top", tag:"mo", output:"\u22A4", ttype:CONST}, -{input:"\\square", tag:"mo", output:"\u25AB", ttype:CONST}, -{input:"\\Box", tag:"mo", output:"\u25A1", ttype:CONST}, -{input:"\\wr", tag:"mo", output:"\u2240", ttype:CONST}, - -//standard functions -//Note UNDEROVER *must* have tag:"mo" to work properly -{input:"\\arccos", tag:"mi", output:"arccos", ttype:UNARY, func:true}, -{input:"\\arcsin", tag:"mi", output:"arcsin", ttype:UNARY, func:true}, -{input:"\\arctan", tag:"mi", output:"arctan", ttype:UNARY, func:true}, -{input:"\\arg", tag:"mi", output:"arg", ttype:UNARY, func:true}, -{input:"\\cos", tag:"mi", output:"cos", ttype:UNARY, func:true}, -{input:"\\cosh", tag:"mi", output:"cosh", ttype:UNARY, func:true}, -{input:"\\cot", tag:"mi", output:"cot", ttype:UNARY, func:true}, -{input:"\\coth", tag:"mi", output:"coth", ttype:UNARY, func:true}, -{input:"\\csc", tag:"mi", output:"csc", ttype:UNARY, func:true}, -{input:"\\deg", tag:"mi", output:"deg", ttype:UNARY, func:true}, -{input:"\\det", tag:"mi", output:"det", ttype:UNARY, func:true}, -{input:"\\dim", tag:"mi", output:"dim", ttype:UNARY, func:true}, //CONST? -{input:"\\exp", tag:"mi", output:"exp", ttype:UNARY, func:true}, -{input:"\\gcd", tag:"mi", output:"gcd", ttype:UNARY, func:true}, //CONST? -{input:"\\hom", tag:"mi", output:"hom", ttype:UNARY, func:true}, -{input:"\\inf", tag:"mo", output:"inf", ttype:UNDEROVER}, -{input:"\\ker", tag:"mi", output:"ker", ttype:UNARY, func:true}, -{input:"\\lg", tag:"mi", output:"lg", ttype:UNARY, func:true}, -{input:"\\lim", tag:"mo", output:"lim", ttype:UNDEROVER}, -{input:"\\liminf", tag:"mo", output:"liminf", ttype:UNDEROVER}, -{input:"\\limsup", tag:"mo", output:"limsup", ttype:UNDEROVER}, -{input:"\\ln", tag:"mi", output:"ln", ttype:UNARY, func:true}, -{input:"\\log", tag:"mi", output:"log", ttype:UNARY, func:true}, -{input:"\\max", tag:"mo", output:"max", ttype:UNDEROVER}, -{input:"\\min", tag:"mo", output:"min", ttype:UNDEROVER}, -{input:"\\Pr", tag:"mi", output:"Pr", ttype:UNARY, func:true}, -{input:"\\sec", tag:"mi", output:"sec", ttype:UNARY, func:true}, -{input:"\\sin", tag:"mi", output:"sin", ttype:UNARY, func:true}, -{input:"\\sinh", tag:"mi", output:"sinh", ttype:UNARY, func:true}, -{input:"\\sup", tag:"mo", output:"sup", ttype:UNDEROVER}, -{input:"\\tan", tag:"mi", output:"tan", ttype:UNARY, func:true}, -{input:"\\tanh", tag:"mi", output:"tanh", ttype:UNARY, func:true}, - -//arrows -{input:"\\gets", tag:"mo", output:"\u2190", ttype:CONST}, -{input:"\\leftarrow", tag:"mo", output:"\u2190", ttype:CONST}, -{input:"\\to", tag:"mo", output:"\u2192", ttype:CONST}, -{input:"\\rightarrow", tag:"mo", output:"\u2192", ttype:CONST}, -{input:"\\leftrightarrow", tag:"mo", output:"\u2194", ttype:CONST}, -{input:"\\uparrow", tag:"mo", output:"\u2191", ttype:CONST}, -{input:"\\downarrow", tag:"mo", output:"\u2193", ttype:CONST}, -{input:"\\updownarrow", tag:"mo", output:"\u2195", ttype:CONST}, -{input:"\\Leftarrow", tag:"mo", output:"\u21D0", ttype:CONST}, -{input:"\\Rightarrow", tag:"mo", output:"\u21D2", ttype:CONST}, -{input:"\\Leftrightarrow", tag:"mo", output:"\u21D4", ttype:CONST}, -{input:"\\iff", tag:"mo", output:"~\\Longleftrightarrow~", ttype:DEFINITION}, -{input:"\\Uparrow", tag:"mo", output:"\u21D1", ttype:CONST}, -{input:"\\Downarrow", tag:"mo", output:"\u21D3", ttype:CONST}, -{input:"\\Updownarrow", tag:"mo", output:"\u21D5", ttype:CONST}, -{input:"\\mapsto", tag:"mo", output:"\u21A6", ttype:CONST}, -{input:"\\longleftarrow", tag:"mo", output:"\u2190", ttype:LONG}, -{input:"\\longrightarrow", tag:"mo", output:"\u2192", ttype:LONG}, -{input:"\\longleftrightarrow", tag:"mo", output:"\u2194", ttype:LONG}, -{input:"\\Longleftarrow", tag:"mo", output:"\u21D0", ttype:LONG}, -{input:"\\Longrightarrow", tag:"mo", output:"\u21D2", ttype:LONG}, -{input:"\\Longleftrightarrow", tag:"mo", output:"\u21D4", ttype:LONG}, -{input:"\\longmapsto", tag:"mo", output:"\u21A6", ttype:CONST}, - // disaster if LONG - -//commands with argument -AMsqrt, AMroot, AMfrac, AMover, AMsub, AMsup, AMtext, AMmbox, AMatop, AMchoose, -//AMdiv, AMquote, - -//diacritical marks -{input:"\\acute", tag:"mover", output:"\u00B4", ttype:UNARY, acc:true}, -//{input:"\\acute", tag:"mover", output:"\u0317", ttype:UNARY, acc:true}, -//{input:"\\acute", tag:"mover", output:"\u0301", ttype:UNARY, acc:true}, -//{input:"\\grave", tag:"mover", output:"\u0300", ttype:UNARY, acc:true}, -//{input:"\\grave", tag:"mover", output:"\u0316", ttype:UNARY, acc:true}, -{input:"\\grave", tag:"mover", output:"\u0060", ttype:UNARY, acc:true}, -{input:"\\breve", tag:"mover", output:"\u02D8", ttype:UNARY, acc:true}, -{input:"\\check", tag:"mover", output:"\u02C7", ttype:UNARY, acc:true}, -{input:"\\dot", tag:"mover", output:".", ttype:UNARY, acc:true}, -{input:"\\ddot", tag:"mover", output:"..", ttype:UNARY, acc:true}, -//{input:"\\ddot", tag:"mover", output:"\u00A8", ttype:UNARY, acc:true}, -{input:"\\mathring", tag:"mover", output:"\u00B0", ttype:UNARY, acc:true}, -{input:"\\vec", tag:"mover", output:"\u20D7", ttype:UNARY, acc:true}, -{input:"\\overrightarrow",tag:"mover",output:"\u20D7", ttype:UNARY, acc:true}, -{input:"\\overleftarrow",tag:"mover", output:"\u20D6", ttype:UNARY, acc:true}, -{input:"\\hat", tag:"mover", output:"\u005E", ttype:UNARY, acc:true}, -{input:"\\widehat", tag:"mover", output:"\u0302", ttype:UNARY, acc:true}, -{input:"\\tilde", tag:"mover", output:"~", ttype:UNARY, acc:true}, -//{input:"\\tilde", tag:"mover", output:"\u0303", ttype:UNARY, acc:true}, -{input:"\\widetilde", tag:"mover", output:"\u02DC", ttype:UNARY, acc:true}, -{input:"\\bar", tag:"mover", output:"\u203E", ttype:UNARY, acc:true}, -{input:"\\overbrace", tag:"mover", output:"\u23B4", ttype:UNARY, acc:true}, -{input:"\\overline", tag:"mover", output:"\u00AF", ttype:UNARY, acc:true}, -{input:"\\underbrace", tag:"munder", output:"\u23B5", ttype:UNARY, acc:true}, -{input:"\\underline", tag:"munder", output:"\u00AF", ttype:UNARY, acc:true}, -//{input:"underline", tag:"munder", output:"\u0332", ttype:UNARY, acc:true}, - -//typestyles and fonts -{input:"\\displaystyle",tag:"mstyle",atname:"displaystyle",atval:"true", ttype:UNARY}, -{input:"\\textstyle",tag:"mstyle",atname:"displaystyle",atval:"false", ttype:UNARY}, -{input:"\\scriptstyle",tag:"mstyle",atname:"scriptlevel",atval:"1", ttype:UNARY}, -{input:"\\scriptscriptstyle",tag:"mstyle",atname:"scriptlevel",atval:"2", ttype:UNARY}, -{input:"\\textrm", tag:"mstyle", output:"\\mathrm", ttype: DEFINITION}, -{input:"\\mathbf", tag:"mstyle", atname:"mathvariant", atval:"bold", ttype:UNARY}, -{input:"\\textbf", tag:"mstyle", atname:"mathvariant", atval:"bold", ttype:UNARY}, -{input:"\\mathit", tag:"mstyle", atname:"mathvariant", atval:"italic", ttype:UNARY}, -{input:"\\textit", tag:"mstyle", atname:"mathvariant", atval:"italic", ttype:UNARY}, -{input:"\\mathtt", tag:"mstyle", atname:"mathvariant", atval:"monospace", ttype:UNARY}, -{input:"\\texttt", tag:"mstyle", atname:"mathvariant", atval:"monospace", ttype:UNARY}, -{input:"\\mathsf", tag:"mstyle", atname:"mathvariant", atval:"sans-serif", ttype:UNARY}, -{input:"\\mathbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", ttype:UNARY, codes:AMbbb}, -{input:"\\mathcal",tag:"mstyle", atname:"mathvariant", atval:"script", ttype:UNARY, codes:AMcal}, -{input:"\\mathfrak",tag:"mstyle",atname:"mathvariant", atval:"fraktur",ttype:UNARY, codes:AMfrk} -]; - -function compareNames(s1,s2) { - if (s1.input > s2.input) return 1 - else return -1; -} - -var AMnames = []; //list of input symbols - -function AMinitSymbols() { - AMsymbols.sort(compareNames); - for (i=0; i=n where str appears or would be inserted -// assumes arr is sorted - if (n==0) { - var h,m; - n = -1; - h = arr.length; - while (n+1> 1; - if (arr[m]=str -} - -function AMgetSymbol(str) { -//return maximal initial substring of str that appears in names -//return null if there is none - var k = 0; //new pos - var j = 0; //old pos - var mk; //match pos - var st; - var tagst; - var match = ""; - var more = true; - for (var i=1; i<=str.length && more; i++) { - st = str.slice(0,i); //initial substring of length i - j = k; - k = AMposition(AMnames, st, j); - if (k=AMnames[k]; - } - AMpreviousSymbol=AMcurrentSymbol; - if (match!=""){ - AMcurrentSymbol=AMsymbols[mk].ttype; - return AMsymbols[mk]; - } - AMcurrentSymbol=CONST; - k = 1; - st = str.slice(0,1); //take 1 character - if ("0"<=st && st<="9") tagst = "mn"; - else tagst = (("A">st || st>"Z") && ("a">st || st>"z")?"mo":"mi"); -/* -// Commented out by DRW (not fully understood, but probably to do with -// use of "/" as an INFIX version of "\\frac", which we don't want): -//} -//if (st=="-" && AMpreviousSymbol==INFIX) { -// AMcurrentSymbol = INFIX; //trick "/" into recognizing "-" on second parse -// return {input:st, tag:tagst, output:st, ttype:UNARY, func:true}; -//} -*/ - return {input:st, tag:tagst, output:st, ttype:CONST}; -} - - -/*Parsing ASCII math expressions with the following grammar -v ::= [A-Za-z] | greek letters | numbers | other constant symbols -u ::= sqrt | text | bb | other unary symbols for font commands -b ::= frac | root | stackrel binary symbols -l ::= { | \left left brackets -r ::= } | \right right brackets -S ::= v | lEr | uS | bSS Simple expression -I ::= S_S | S^S | S_S^S | S Intermediate expression -E ::= IE | I/I Expression -Each terminal symbol is translated into a corresponding mathml node.*/ - -var AMpreviousSymbol,AMcurrentSymbol; - -function AMparseSexpr(str) { //parses str and returns [node,tailstr,(node)tag] - var symbol, node, result, result2, i, st,// rightvert = false, - newFrag = document.createDocumentFragment(); - str = AMremoveCharsAndBlanks(str,0); - symbol = AMgetSymbol(str); //either a token or a bracket or empty - if (symbol == null || symbol.ttype == RIGHTBRACKET) - return [null,str,null]; - if (symbol.ttype == DEFINITION) { - str = symbol.output+AMremoveCharsAndBlanks(str,symbol.input.length); - symbol = AMgetSymbol(str); - if (symbol == null || symbol.ttype == RIGHTBRACKET) - return [null,str,null]; - } - str = AMremoveCharsAndBlanks(str,symbol.input.length); - switch (symbol.ttype) { - case SPACE: - node = AMcreateElementMathML(symbol.tag); - node.setAttribute(symbol.atname,symbol.atval); - return [node,str,symbol.tag]; - case UNDEROVER: - if (isIE) { - if (symbol.input.substr(0,4) == "\\big") { // botch for missing symbols - str = "\\"+symbol.input.substr(4)+str; // make \bigcup = \cup etc. - symbol = AMgetSymbol(str); - symbol.ttype = UNDEROVER; - str = AMremoveCharsAndBlanks(str,symbol.input.length); - } - } - return [AMcreateMmlNode(symbol.tag, - document.createTextNode(symbol.output)),str,symbol.tag]; - case CONST: - var output = symbol.output; - if (isIE) { - if (symbol.input == "'") - output = "\u2032"; - else if (symbol.input == "''") - output = "\u2033"; - else if (symbol.input == "'''") - output = "\u2033\u2032"; - else if (symbol.input == "''''") - output = "\u2033\u2033"; - else if (symbol.input == "\\square") - output = "\u25A1"; // same as \Box - else if (symbol.input.substr(0,5) == "\\frac") { - // botch for missing fractions - var denom = symbol.input.substr(6,1); - if (denom == "5" || denom == "6") { - str = symbol.input.replace(/\\frac/,"\\frac ")+str; - return [node,str,symbol.tag]; - } - } - } - node = AMcreateMmlNode(symbol.tag,document.createTextNode(output)); - return [node,str,symbol.tag]; - case LONG: // added by DRW - node = AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)); - node.setAttribute("minsize","1.5"); - node.setAttribute("maxsize","1.5"); - node = AMcreateMmlNode("mover",node); - node.appendChild(AMcreateElementMathML("mspace")); - return [node,str,symbol.tag]; - case STRETCHY: // added by DRW - if (isIE && symbol.input == "\\backslash") - symbol.output = "\\"; // doesn't expand, but then nor does "\u2216" - node = AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)); - if (symbol.input == "|" || symbol.input == "\\vert" || - symbol.input == "\\|" || symbol.input == "\\Vert") { - node.setAttribute("lspace","0em"); - node.setAttribute("rspace","0em"); - } - node.setAttribute("maxsize",symbol.atval); // don't allow to stretch here - if (symbol.rtag != null) - return [node,str,symbol.rtag]; - else - return [node,str,symbol.tag]; - case BIG: // added by DRW - var atval = symbol.atval; - if (isIE) - atval = symbol.ieval; - symbol = AMgetSymbol(str); - if (symbol == null) - return [null,str,null]; - str = AMremoveCharsAndBlanks(str,symbol.input.length); - node = AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)); - if (isIE) { // to get brackets to expand - var space = AMcreateElementMathML("mspace"); - space.setAttribute("height",atval+"ex"); - node = AMcreateMmlNode("mrow",node); - node.appendChild(space); - } else { // ignored in IE - node.setAttribute("minsize",atval); - node.setAttribute("maxsize",atval); - } - return [node,str,symbol.tag]; - case LEFTBRACKET: //read (expr+) - if (symbol.input == "\\left") { // left what? - symbol = AMgetSymbol(str); - if (symbol != null) { - if (symbol.input == ".") - symbol.invisible = true; - str = AMremoveCharsAndBlanks(str,symbol.input.length); - } - } - result = AMparseExpr(str,true,false); - if (symbol==null || - (typeof symbol.invisible == "boolean" && symbol.invisible)) - node = AMcreateMmlNode("mrow",result[0]); - else { - node = AMcreateMmlNode("mo",document.createTextNode(symbol.output)); - node = AMcreateMmlNode("mrow",node); - node.appendChild(result[0]); - } - return [node,result[1],result[2]]; - case MATRIX: //read (expr+) - if (symbol.input == "\\begin{array}") { - var mask = ""; - symbol = AMgetSymbol(str); - str = AMremoveCharsAndBlanks(str,0); - if (symbol == null) - mask = "l"; - else { - str = AMremoveCharsAndBlanks(str,symbol.input.length); - if (symbol.input != "{") - mask = "l"; - else do { - symbol = AMgetSymbol(str); - if (symbol != null) { - str = AMremoveCharsAndBlanks(str,symbol.input.length); - if (symbol.input != "}") - mask = mask+symbol.input; - } - } while (symbol != null && symbol.input != "" && symbol.input != "}"); - } - result = AMparseExpr("{"+str,true,true); -// if (result[0]==null) return [AMcreateMmlNode("mo", -// document.createTextNode(symbol.input)),str]; - node = AMcreateMmlNode("mtable",result[0]); - mask = mask.replace(/l/g,"left "); - mask = mask.replace(/r/g,"right "); - mask = mask.replace(/c/g,"center "); - node.setAttribute("columnalign",mask); - node.setAttribute("displaystyle","false"); - if (isIE) - return [node,result[1],null]; -// trying to get a *little* bit of space around the array -// (IE already includes it) - var lspace = AMcreateElementMathML("mspace"); - lspace.setAttribute("width","0.167em"); - var rspace = AMcreateElementMathML("mspace"); - rspace.setAttribute("width","0.167em"); - var node1 = AMcreateMmlNode("mrow",lspace); - node1.appendChild(node); - node1.appendChild(rspace); - return [node1,result[1],null]; - } else { // eqnarray - result = AMparseExpr("{"+str,true,true); - node = AMcreateMmlNode("mtable",result[0]); - if (isIE) - node.setAttribute("columnspacing","0.25em"); // best in practice? - else - node.setAttribute("columnspacing","0.167em"); // correct (but ignored?) - node.setAttribute("columnalign","right center left"); - node.setAttribute("displaystyle","true"); - node = AMcreateMmlNode("mrow",node); - return [node,result[1],null]; - } - case TEXT: - if (str.charAt(0)=="{") i=str.indexOf("}"); - else i = 0; - if (i==-1) - i = str.length; - st = str.slice(1,i); - if (st.charAt(0) == " ") { - node = AMcreateElementMathML("mspace"); - node.setAttribute("width","0.33em"); // was 1ex - newFrag.appendChild(node); - } - newFrag.appendChild( - AMcreateMmlNode(symbol.tag,document.createTextNode(st))); - if (st.charAt(st.length-1) == " ") { - node = AMcreateElementMathML("mspace"); - node.setAttribute("width","0.33em"); // was 1ex - newFrag.appendChild(node); - } - str = AMremoveCharsAndBlanks(str,i+1); - return [AMcreateMmlNode("mrow",newFrag),str,null]; - case UNARY: - result = AMparseSexpr(str); - if (result[0]==null) return [AMcreateMmlNode(symbol.tag, - document.createTextNode(symbol.output)),str]; - if (typeof symbol.func == "boolean" && symbol.func) { // functions hack - st = str.charAt(0); -// if (st=="^" || st=="_" || st=="/" || st=="|" || st==",") { - if (st=="^" || st=="_" || st==",") { - return [AMcreateMmlNode(symbol.tag, - document.createTextNode(symbol.output)),str,symbol.tag]; - } else { - node = AMcreateMmlNode("mrow", - AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output))); - if (isIE) { - var space = AMcreateElementMathML("mspace"); - space.setAttribute("width","0.167em"); - node.appendChild(space); - } - node.appendChild(result[0]); - return [node,result[1],symbol.tag]; - } - } - if (symbol.input == "\\sqrt") { // sqrt - if (isIE) { // set minsize, for \surd - var space = AMcreateElementMathML("mspace"); - space.setAttribute("height","1.2ex"); - space.setAttribute("width","0em"); // probably no effect - node = AMcreateMmlNode(symbol.tag,result[0]) -// node.setAttribute("minsize","1"); // ignored -// node = AMcreateMmlNode("mrow",node); // hopefully unnecessary - node.appendChild(space); - return [node,result[1],symbol.tag]; - } else - return [AMcreateMmlNode(symbol.tag,result[0]),result[1],symbol.tag]; - } else if (typeof symbol.acc == "boolean" && symbol.acc) { // accent - node = AMcreateMmlNode(symbol.tag,result[0]); - var output = symbol.output; - if (isIE) { - if (symbol.input == "\\hat") - output = "\u0302"; - else if (symbol.input == "\\widehat") - output = "\u005E"; - else if (symbol.input == "\\bar") - output = "\u00AF"; - else if (symbol.input == "\\grave") - output = "\u0300"; - else if (symbol.input == "\\tilde") - output = "\u0303"; - } - var node1 = AMcreateMmlNode("mo",document.createTextNode(output)); - if (symbol.input == "\\vec" || symbol.input == "\\check") - // don't allow to stretch - node1.setAttribute("maxsize","1.2"); - // why doesn't "1" work? \vec nearly disappears in firefox - if (isIE && symbol.input == "\\bar") - node1.setAttribute("maxsize","0.5"); - if (symbol.input == "\\underbrace" || symbol.input == "\\underline") - node1.setAttribute("accentunder","true"); - else - node1.setAttribute("accent","true"); - node.appendChild(node1); - if (symbol.input == "\\overbrace" || symbol.input == "\\underbrace") - node.ttype = UNDEROVER; - return [node,result[1],symbol.tag]; - } else { // font change or displaystyle command - if (!isIE && typeof symbol.codes != "undefined") { - for (i=0; i64 && st.charCodeAt(j)<91) newst = newst + - String.fromCharCode(symbol.codes[st.charCodeAt(j)-65]); - else newst = newst + st.charAt(j); - if (result[0].nodeName=="mi") - result[0]=AMcreateElementMathML("mo"). - appendChild(document.createTextNode(newst)); - else result[0].replaceChild(AMcreateElementMathML("mo"). - appendChild(document.createTextNode(newst)),result[0].childNodes[i]); - } - } - node = AMcreateMmlNode(symbol.tag,result[0]); - node.setAttribute(symbol.atname,symbol.atval); - if (symbol.input == "\\scriptstyle" || - symbol.input == "\\scriptscriptstyle") - node.setAttribute("displaystyle","false"); - return [node,result[1],symbol.tag]; - } - case BINARY: - result = AMparseSexpr(str); - if (result[0]==null) return [AMcreateMmlNode("mo", - document.createTextNode(symbol.input)),str,null]; - result2 = AMparseSexpr(result[1]); - if (result2[0]==null) return [AMcreateMmlNode("mo", - document.createTextNode(symbol.input)),str,null]; - if (symbol.input=="\\root" || symbol.input=="\\stackrel") - newFrag.appendChild(result2[0]); - newFrag.appendChild(result[0]); - if (symbol.input=="\\frac") newFrag.appendChild(result2[0]); - return [AMcreateMmlNode(symbol.tag,newFrag),result2[1],symbol.tag]; - case INFIX: - str = AMremoveCharsAndBlanks(str,symbol.input.length); - return [AMcreateMmlNode("mo",document.createTextNode(symbol.output)), - str,symbol.tag]; - default: - return [AMcreateMmlNode(symbol.tag, //its a constant - document.createTextNode(symbol.output)),str,symbol.tag]; - } -} - -function AMparseIexpr(str) { - var symbol, sym1, sym2, node, result, tag, underover; - str = AMremoveCharsAndBlanks(str,0); - sym1 = AMgetSymbol(str); - result = AMparseSexpr(str); - node = result[0]; - str = result[1]; - tag = result[2]; - symbol = AMgetSymbol(str); - if (symbol.ttype == INFIX) { - str = AMremoveCharsAndBlanks(str,symbol.input.length); - result = AMparseSexpr(str); - if (result[0] == null) // show box in place of missing argument - result[0] = AMcreateMmlNode("mo",document.createTextNode("\u25A1")); - str = result[1]; - tag = result[2]; - if (symbol.input == "_" || symbol.input == "^") { - sym2 = AMgetSymbol(str); - tag = null; // no space between x^2 and a following sin, cos, etc. -// This is for \underbrace and \overbrace - underover = ((sym1.ttype == UNDEROVER) || (node.ttype == UNDEROVER)); -// underover = (sym1.ttype == UNDEROVER); - if (symbol.input == "_" && sym2.input == "^") { - str = AMremoveCharsAndBlanks(str,sym2.input.length); - var res2 = AMparseSexpr(str); - str = res2[1]; - tag = res2[2]; // leave space between x_1^2 and a following sin etc. - node = AMcreateMmlNode((underover?"munderover":"msubsup"),node); - node.appendChild(result[0]); - node.appendChild(res2[0]); - } else if (symbol.input == "_") { - node = AMcreateMmlNode((underover?"munder":"msub"),node); - node.appendChild(result[0]); - } else { - node = AMcreateMmlNode((underover?"mover":"msup"),node); - node.appendChild(result[0]); - } - node = AMcreateMmlNode("mrow",node); // so sum does not stretch - } else { - node = AMcreateMmlNode(symbol.tag,node); - if (symbol.input == "\\atop" || symbol.input == "\\choose") - node.setAttribute("linethickness","0ex"); - node.appendChild(result[0]); - if (symbol.input == "\\choose") - node = AMcreateMmlNode("mfenced",node); - } - } - return [node,str,tag]; -} - -function AMparseExpr(str,rightbracket,matrix) { - var symbol, node, result, i, tag, - newFrag = document.createDocumentFragment(); - do { - str = AMremoveCharsAndBlanks(str,0); - result = AMparseIexpr(str); - node = result[0]; - str = result[1]; - tag = result[2]; - symbol = AMgetSymbol(str); - if (node!=undefined) { - if ((tag == "mn" || tag == "mi") && symbol!=null && - typeof symbol.func == "boolean" && symbol.func) { - // Add space before \sin in 2\sin x or x\sin x - var space = AMcreateElementMathML("mspace"); - space.setAttribute("width","0.167em"); - node = AMcreateMmlNode("mrow",node); - node.appendChild(space); - } - newFrag.appendChild(node); - } - } while ((symbol.ttype != RIGHTBRACKET) - && symbol!=null && symbol.output!=""); - tag = null; - if (symbol.ttype == RIGHTBRACKET) { - if (symbol.input == "\\right") { // right what? - str = AMremoveCharsAndBlanks(str,symbol.input.length); - symbol = AMgetSymbol(str); - if (symbol != null && symbol.input == ".") - symbol.invisible = true; - if (symbol != null) - tag = symbol.rtag; - } - if (symbol!=null) - str = AMremoveCharsAndBlanks(str,symbol.input.length); // ready to return - var len = newFrag.childNodes.length; - if (matrix && - len>0 && newFrag.childNodes[len-1].nodeName == "mrow" && len>1 && - newFrag.childNodes[len-2].nodeName == "mo" && - newFrag.childNodes[len-2].firstChild.nodeValue == "&") { //matrix - var pos = []; // positions of ampersands - var m = newFrag.childNodes.length; - for (i=0; matrix && i -&-&...&-&- - n = node.childNodes.length; - k = 0; - for (j=0; j2) { - newFrag.removeChild(newFrag.firstChild); //remove - newFrag.removeChild(newFrag.firstChild); //remove & - } - table.appendChild(AMcreateMmlNode("mtr",row)); - } - return [table,str]; - } - if (typeof symbol.invisible != "boolean" || !symbol.invisible) { - node = AMcreateMmlNode("mo",document.createTextNode(symbol.output)); - newFrag.appendChild(node); - } - } - return [newFrag,str,tag]; -} - -function AMparseMath(str) { - var result, node = AMcreateElementMathML("mstyle"); - if (mathcolor != "") node.setAttribute("mathcolor",mathcolor); - if (mathfontfamily != "") node.setAttribute("fontfamily",mathfontfamily); - node.appendChild(AMparseExpr(str.replace(/^\s+/g,""),false,false)[0]); - node = AMcreateMmlNode("math",node); - if (showasciiformulaonhover) //fixed by djhsu so newline - node.setAttribute("title",str.replace(/\s+/g," "));//does not show in Gecko - if (mathfontfamily != "" && (isIE || mathfontfamily != "serif")) { - var fnode = AMcreateElementXHTML("font"); - fnode.setAttribute("face",mathfontfamily); - fnode.appendChild(node); - return fnode; - } - return node; -} - -function AMstrarr2docFrag(arr, linebreaks) { - var newFrag=document.createDocumentFragment(); - var expr = false; - for (var i=0; i1 || mtch) { - if (checkForMathML) { - checkForMathML = false; - var nd = AMisMathMLavailable(); - AMnoMathML = nd != null; - if (AMnoMathML && notifyIfNoMathML) - if (alertIfNoMathML) - alert("To view the ASCIIMathML notation use Internet Explorer 6 +\nMathPlayer (free from www.dessci.com)\n\ - or Firefox/Mozilla/Netscape"); - else AMbody.insertBefore(nd,AMbody.childNodes[0]); - } - if (!AMnoMathML) { - frg = AMstrarr2docFrag(arr,n.nodeType==8); - var len = frg.childNodes.length; - n.parentNode.replaceChild(frg,n); - return len-1; - } else return 0; - } - } - } else return 0; - } else if (n.nodeName!="math") { - for (i=0; i"); - document.write(""); -} - -// GO1.1 Generic onload by Brothercake -// http://www.brothercake.com/ -//onload function (replaces the onload="translate()" in the tag) -function generic() -{ - translate(); -}; -//setup onload function -if(typeof window.addEventListener != 'undefined') -{ - //.. gecko, safari, konqueror and standard - window.addEventListener('load', generic, false); -} -else if(typeof document.addEventListener != 'undefined') -{ - //.. opera 7 - document.addEventListener('load', generic, false); -} -else if(typeof window.attachEvent != 'undefined') -{ - //.. win/ie - window.attachEvent('onload', generic); -} -//** remove this condition to degrade older browsers -else -{ - //.. mac/ie5 and anything else that gets this far - //if there's an existing onload function - if(typeof window.onload == 'function') - { - //store it - var existing = onload; - //add new onload handler - window.onload = function() - { - //call existing onload function - existing(); - //call generic onload function - generic(); - }; - } - else - { - //setup onload function - window.onload = generic; - } -} diff --git a/manual/src/bin/asciidoc/javascripts/asciidoc.js b/manual/src/bin/asciidoc/javascripts/asciidoc.js deleted file mode 100644 index ac365639977cd..0000000000000 --- a/manual/src/bin/asciidoc/javascripts/asciidoc.js +++ /dev/null @@ -1,189 +0,0 @@ -var asciidoc = { // Namespace. - -///////////////////////////////////////////////////////////////////// -// Table Of Contents generator -///////////////////////////////////////////////////////////////////// - -/* Author: Mihai Bazon, September 2002 - * http://students.infoiasi.ro/~mishoo - * - * Table Of Content generator - * Version: 0.4 - * - * Feel free to use this script under the terms of the GNU General Public - * License, as long as you do not remove or alter this notice. - */ - - /* modified by Troy D. Hanson, September 2006. License: GPL */ - /* modified by Stuart Rackham, 2006, 2009. License: GPL */ - -// toclevels = 1..4. -toc: function (toclevels) { - - function getText(el) { - var text = ""; - for (var i = el.firstChild; i != null; i = i.nextSibling) { - if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants. - text += i.data; - else if (i.firstChild != null) - text += getText(i); - } - return text; - } - - function TocEntry(el, text, toclevel) { - this.element = el; - this.text = text; - this.toclevel = toclevel; - } - - function tocEntries(el, toclevels) { - var result = new Array; - var re = new RegExp('[hH]([1-'+(toclevels+1)+'])'); - // Function that scans the DOM tree for header elements (the DOM2 - // nodeIterator API would be a better technique but not supported by all - // browsers). - var iterate = function (el) { - for (var i = el.firstChild; i != null; i = i.nextSibling) { - if (i.nodeType == 1 /* Node.ELEMENT_NODE */) { - var mo = re.exec(i.tagName); - if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") { - result[result.length] = new TocEntry(i, getText(i), mo[1]-1); - } - iterate(i); - } - } - } - iterate(el); - return result; - } - - var toc = document.getElementById("toc"); - if (!toc) { - return; - } - - // Delete existing TOC entries in case we're reloading the TOC. - var tocEntriesToRemove = []; - var i; - for (i = 0; i < toc.childNodes.length; i++) { - var entry = toc.childNodes[i]; - if (entry.nodeName.toLowerCase() == 'div' - && entry.getAttribute("class") - && entry.getAttribute("class").match(/^toclevel/)) - tocEntriesToRemove.push(entry); - } - for (i = 0; i < tocEntriesToRemove.length; i++) { - toc.removeChild(tocEntriesToRemove[i]); - } - - // Rebuild TOC entries. - var entries = tocEntries(document.getElementById("content"), toclevels); - for (var i = 0; i < entries.length; ++i) { - var entry = entries[i]; - if (entry.element.id == "") - entry.element.id = "_toc_" + i; - var a = document.createElement("a"); - a.href = "#" + entry.element.id; - a.appendChild(document.createTextNode(entry.text)); - var div = document.createElement("div"); - div.appendChild(a); - div.className = "toclevel" + entry.toclevel; - toc.appendChild(div); - } - if (entries.length == 0) - toc.parentNode.removeChild(toc); -}, - - -///////////////////////////////////////////////////////////////////// -// Footnotes generator -///////////////////////////////////////////////////////////////////// - -/* Based on footnote generation code from: - * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html - */ - -footnotes: function () { - // Delete existing footnote entries in case we're reloading the footnodes. - var i; - var noteholder = document.getElementById("footnotes"); - if (!noteholder) { - return; - } - var entriesToRemove = []; - for (i = 0; i < noteholder.childNodes.length; i++) { - var entry = noteholder.childNodes[i]; - if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote") - entriesToRemove.push(entry); - } - for (i = 0; i < entriesToRemove.length; i++) { - noteholder.removeChild(entriesToRemove[i]); - } - - // Rebuild footnote entries. - var cont = document.getElementById("content"); - var spans = cont.getElementsByTagName("span"); - var refs = {}; - var n = 0; - for (i=0; i" + n + "
    ]"; - spans[i].setAttribute("data-note", note); - } - noteholder.innerHTML += - "
    " + - "" + - n + ". " + note + "
    "; - var id =spans[i].getAttribute("id"); - if (id != null) refs["#"+id] = n; - } - } - if (n == 0) - noteholder.parentNode.removeChild(noteholder); - else { - // Process footnoterefs. - for (i=0; i" + n + "]"; - } - } - } -}, - -install: function(toclevels) { - var timerId; - - function reinstall() { - asciidoc.footnotes(); - if (toclevels) { - asciidoc.toc(toclevels); - } - } - - function reinstallAndRemoveTimer() { - clearInterval(timerId); - reinstall(); - } - - timerId = setInterval(reinstall, 500); - if (document.addEventListener) - document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false); - else - window.onload = reinstallAndRemoveTimer; -} - -} diff --git a/manual/src/bin/asciidoc/javascripts/slidy.js b/manual/src/bin/asciidoc/javascripts/slidy.js deleted file mode 100644 index 04e51a2b38d66..0000000000000 --- a/manual/src/bin/asciidoc/javascripts/slidy.js +++ /dev/null @@ -1,2845 +0,0 @@ -/* slidy.js - - Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. - W3C liability, trademark, document use and software licensing - rules apply, see: - - http://www.w3.org/Consortium/Legal/copyright-documents - http://www.w3.org/Consortium/Legal/copyright-software -*/ - -// the slidy object implementation -var w3c_slidy = { - // classify which kind of browser we're running under - ns_pos: (typeof window.pageYOffset!='undefined'), - khtml: ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false), - opera: ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false), - ipad: ((navigator.userAgent).indexOf("iPad") >= 0 ? true : false), - iphone: ((navigator.userAgent).indexOf("iPhone") >= 0 ? true : false), - ie: (typeof document.all != "undefined" && !this.opera), - ie6: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 6") != -1), - ie7: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1), - ie8: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1), - ie9: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 9") != -1), - keyboardless: (this.ipad || this.iphone), - - // are we running as XHTML? (doesn't work on Opera) - is_xhtml: /xml/.test(document.contentType), - - slide_number: 0, // integer slide count: 0, 1, 2, ... - slide_number_element: null, // element containing slide number - slides: [], // set to array of slide div's - notes: [], // set to array of handout div's - backgrounds: [], // set to array of background div's - toolbar: null, // element containing toolbar - title: null, // document title - last_shown: null, // last incrementally shown item - eos: null, // span element for end of slide indicator - toc: null, // table of contents - outline: null, // outline element with the focus - selected_text_len: 0, // length of drag selection on document - view_all: 0, // 1 to view all slides + handouts - want_toolbar: true, // user preference to show/hide toolbar - mouse_click_enabled: true, // enables left click for next slide - scroll_hack: 0, // IE work around for position: fixed - disable_slide_click: false, // used by clicked anchors - - lang: "en", // updated to language specified by html file - - help_anchor: null, // used for keyboard focus hack in showToolbar() - help_page: "http://www.w3.org/Talks/Tools/Slidy2/help/help.html", - help_text: "Navigate with mouse click, space bar, Cursor Left/Right, " + - "or Pg Up and Pg Dn. Use S and B to change font size.", - - size_index: 0, - size_adjustment: 0, - sizes: new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt", - "22pt", "24pt", "26pt", "28pt", "30pt", "32pt"), - - // needed for efficient resizing - last_width: 0, - last_height: 0, - - - // Needed for cross browser support for relative width/height on - // object elements. The work around is to save width/height attributes - // and then to recompute absolute width/height dimensions on resizing - objects: [], - - // attach initialiation event handlers - set_up: function () { - var init = function() { w3c_slidy.init(); }; - if (typeof window.addEventListener != "undefined") - window.addEventListener("load", init, false); - else - window.attachEvent("onload", init); - }, - - hide_slides: function () { - if (document.body && !w3c_slidy.initialized) - document.body.style.visibility = "hidden"; - else - setTimeout(w3c_slidy.hide_slides, 50); - }, - - // hack to persuade IE to compute correct document height - // as needed for simulating fixed positioning of toolbar - ie_hack: function () { - window.resizeBy(0,-1); - window.resizeBy(0, 1); - }, - - init: function () { - //alert("slidy starting test 10"); - document.body.style.visibility = "visible"; - w3c_slidy_i18n.init(); - this.add_toolbar(); - this.wrap_implicit_slides(); - this.collect_slides(); - this.collect_notes(); - this.collect_backgrounds(); - this.objects = document.body.getElementsByTagName("object"); - this.patch_anchors(); - this.slide_number = this.find_slide_number(location.href); - window.offscreenbuffering = true; - this.size_adjustment = this.find_size_adjust(); - this.time_left = this.find_duration(); - this.hide_image_toolbar(); // suppress IE image toolbar popup - this.init_outliner(); // activate fold/unfold support - this.title = document.title; - - // work around for opera bug - this.is_xhtml = (document.body.tagName == "BODY" ? false : true); - - if (this.slides.length > 0) - { - var slide = this.slides[this.slide_number]; - - if (this.slide_number > 0) - { - this.set_visibility_all_incremental("visible"); - this.last_shown = this.previous_incremental_item(null); - this.set_eos_status(true); - } - else - { - this.last_shown = null; - this.set_visibility_all_incremental("hidden"); - this.set_eos_status(!this.next_incremental_item(this.last_shown)); - } - - this.set_location(); - this.add_class(this.slides[0], "first-slide"); - w3c_slidy.show_slide(slide); - } - - this.toc = this.table_of_contents(); - - this.add_initial_prompt(); - - // bind event handlers without interfering with custom page scripts - // Tap events behave too weirdly to support clicks reliably on - // iPhone and iPad, so exclude these from click handler - - if (!this.keyboardless) - this.add_listener(document.body, "click", this.mouse_button_click); - - this.add_listener(document, "keydown", this.key_down); - this.add_listener(document, "keypress", this.key_press); - this.add_listener(window, "resize", this.resized); - this.add_listener(window, "scroll", this.scrolled); - this.add_listener(window, "unload", this.unloaded); - - if (!document.body.onclick) - document.body.onclick = function () { }; - - this.single_slide_view(); - - //this.set_location(); - - this.resized(); - - if (this.ie7) - setTimeout(w3c_slidy.ie_hack, 100); - - this.show_toolbar(); - - // for back button detection - setInterval(function () { w3c_slidy.check_location(); }, 200); - w3c_slidy.initialized = true; - }, - - // create div element with links to each slide - table_of_contents: function () { - var toc = this.create_element("div"); - this.add_class(toc, "slidy_toc hidden"); - //toc.setAttribute("tabindex", "0"); - - var heading = this.create_element("div"); - this.add_class(heading, "toc-heading"); - heading.innerHTML = "Table of Contents".localize(); - - toc.appendChild(heading); - var previous = null; - - for (var i = 0; i < this.slides.length; ++i) - { - var title = this.has_class(this.slides[i], "title"); - var num = document.createTextNode((i + 1) + ". "); - - toc.appendChild(num); - - var a = this.create_element("a"); - a.setAttribute("href", "#(" + (i+1) + ")"); - - if (title) - this.add_class(a, "titleslide"); - - var name = document.createTextNode(this.slide_name(i)); - a.appendChild(name); - a.onclick = w3c_slidy.toc_click; - a.onkeydown = w3c_slidy.toc_keydown; - a.previous = previous; - - if (previous) - previous.next = a; - - toc.appendChild(a); - - if (i == 0) - toc.first = a; - - if (i < this.slides.length - 1) - { - var br = this.create_element("br"); - toc.appendChild(br); - } - - previous = a; - } - - toc.focus = function () { - if (this.first) - this.first.focus(); - } - - toc.onmouseup = w3c_slidy.mouse_button_up; - - toc.onclick = function (e) { - e||(e=window.event); - - if (w3c_slidy.selected_text_len <= 0) - w3c_slidy.hide_table_of_contents(); - - w3c_slidy.stop_propagation(e); - - if (e.cancel != undefined) - e.cancel = true; - - if (e.returnValue != undefined) - e.returnValue = false; - - return false; - }; - - document.body.insertBefore(toc, document.body.firstChild); - return toc; - }, - - is_shown_toc: function () { - return !w3c_slidy.has_class(w3c_slidy.toc, "hidden"); - }, - - show_table_of_contents: function () { - w3c_slidy.remove_class(w3c_slidy.toc, "hidden"); - var toc = w3c_slidy.toc; - toc.focus(); - - if (w3c_slidy.ie7 && w3c_slidy.slide_number == 0) - setTimeout(w3c_slidy.ie_hack, 100); - }, - - hide_table_of_contents: function () { - w3c_slidy.add_class(w3c_slidy.toc, "hidden"); - - if (!w3c_slidy.opera) - w3c_slidy.help_anchor.focus(); - }, - - toggle_table_of_contents: function () { - if (w3c_slidy.is_shown_toc()) - w3c_slidy.hide_table_of_contents(); - else - w3c_slidy.show_table_of_contents(); - }, - - // called on clicking toc entry - toc_click: function (e) { - if (!e) - e = window.event; - - var target = w3c_slidy.get_target(e); - - if (target && target.nodeType == 1) - { - var uri = target.getAttribute("href"); - - if (uri) - { - //alert("going to " + uri); - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri); - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.last_shown = null; - w3c_slidy.set_location(); - w3c_slidy.set_visibility_all_incremental("hidden"); - w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); - w3c_slidy.show_slide(slide); - //target.focus(); - - try - { - if (!w3c_slidy.opera) - w3c_slidy.help_anchor.focus(); - } - catch (e) - { - } - } - } - - w3c_slidy.hide_table_of_contents(e); - if (w3c_slidy.ie7) w3c_slidy.ie_hack(); - w3c_slidy.stop_propagation(e); - return w3c_slidy.cancel(e); - }, - - // called onkeydown for toc entry - toc_keydown: function (event) { - var key; - - if (!event) - var event = window.event; - - // kludge around NS/IE differences - if (window.event) - key = window.event.keyCode; - else if (event.which) - key = event.which; - else - return true; // Yikes! unknown browser - - // ignore event if key value is zero - // as for alt on Opera and Konqueror - if (!key) - return true; - - // check for concurrent control/command/alt key - // but are these only present on mouse events? - - if (event.ctrlKey || event.altKey) - return true; - - if (key == 13) - { - var uri = this.getAttribute("href"); - - if (uri) - { - //alert("going to " + uri); - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri); - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.last_shown = null; - w3c_slidy.set_location(); - w3c_slidy.set_visibility_all_incremental("hidden"); - w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); - w3c_slidy.show_slide(slide); - //target.focus(); - - try - { - if (!w3c_slidy.opera) - w3c_slidy.help_anchor.focus(); - } - catch (e) - { - } - } - - w3c_slidy.hide_table_of_contents(); - - if (self.ie7) - w3c_slidy.ie_hack(); - - return w3c_slidy.cancel(event); - } - - if (key == 40 && this.next) - { - this.next.focus(); - return w3c_slidy.cancel(event); - } - - if (key == 38 && this.previous) - { - this.previous.focus(); - return w3c_slidy.cancel(event); - } - - return true; - }, - - - // ### OBSOLETE ### - before_print: function () { - this.show_all_slides(); - this.hide_toolbar(); - alert("before print"); - }, - - // ### OBSOLETE ### - after_print: function () { - if (!this.view_all) - { - this.single_slide_view(); - this.show_toolbar(); - } - alert("after print"); - }, - - // ### OBSOLETE ### - print_slides: function () { - this.before_print(); - window.print(); - this.after_print(); - }, - - // ### OBSOLETE ?? ### - toggle_view: function () { - if (this.view_all) - { - this.single_slide_view(); - this.show_toolbar(); - this.view_all = 0; - } - else - { - this.show_all_slides(); - this.hide_toolbar(); - this.view_all = 1; - } - }, - - // prepare for printing ### OBSOLETE ### - show_all_slides: function () { - this.remove_class(document.body, "single_slide"); - this.set_visibility_all_incremental("visible"); - }, - - // restore after printing ### OBSOLETE ### - single_slide_view: function () { - this.add_class(document.body, "single_slide"); - this.set_visibility_all_incremental("visible"); - this.last_shown = this.previous_incremental_item(null); - }, - - // suppress IE's image toolbar pop up - hide_image_toolbar: function () { - if (!this.ns_pos) - { - var images = document.getElementsByTagName("IMG"); - - for (var i = 0; i < images.length; ++i) - images[i].setAttribute("galleryimg", "no"); - } - }, - - unloaded: function (e) { - //alert("unloaded"); - }, - - // Safari and Konqueror don't yet support getComputedStyle() - // and they always reload page when location.href is updated - is_KHTML: function () { - var agent = navigator.userAgent; - return (agent.indexOf("KHTML") >= 0 ? true : false); - }, - - // find slide name from first h1 element - // default to document title + slide number - slide_name: function (index) { - var name = null; - var slide = this.slides[index]; - - var heading = this.find_heading(slide); - - if (heading) - name = this.extract_text(heading); - - if (!name) - name = this.title + "(" + (index + 1) + ")"; - - name.replace(/\&/g, "&"); - name.replace(/\/g, ">"); - - return name; - }, - - // find first h1 element in DOM tree - find_heading: function (node) { - if (!node || node.nodeType != 1) - return null; - - if (node.nodeName == "H1" || node.nodeName == "h1") - return node; - - var child = node.firstChild; - - while (child) - { - node = this.find_heading(child); - - if (node) - return node; - - child = child.nextSibling; - } - - return null; - }, - - // recursively extract text from DOM tree - extract_text: function (node) { - if (!node) - return ""; - - // text nodes - if (node.nodeType == 3) - return node.nodeValue; - - // elements - if (node.nodeType == 1) - { - node = node.firstChild; - var text = ""; - - while (node) - { - text = text + this.extract_text(node); - node = node.nextSibling; - } - - return text; - } - - return ""; - }, - - // find copyright text from meta element - find_copyright: function () { - var name, content; - var meta = document.getElementsByTagName("meta"); - - for (var i = 0; i < meta.length; ++i) - { - name = meta[i].getAttribute("name"); - content = meta[i].getAttribute("content"); - - if (name == "copyright") - return content; - } - - return null; - }, - - find_size_adjust: function () { - var name, content, offset; - var meta = document.getElementsByTagName("meta"); - - for (var i = 0; i < meta.length; ++i) - { - name = meta[i].getAttribute("name"); - content = meta[i].getAttribute("content"); - - if (name == "font-size-adjustment") - return 1 * content; - } - - return 1; - }, - - // for 20 minutes - find_duration: function () { - var name, content, offset; - var meta = document.getElementsByTagName("meta"); - - for (var i = 0; i < meta.length; ++i) - { - name = meta[i].getAttribute("name"); - content = meta[i].getAttribute("content"); - - if (name == "duration") - return 60000 * content; - } - - return null; - }, - - replace_by_non_breaking_space: function (str) { - for (var i = 0; i < str.length; ++i) - str[i] = 160; - }, - - // ### CHECK ME ### is use of "li" okay for text/html? - // for XHTML do we also need to specify namespace? - init_outliner: function () { - var items = document.getElementsByTagName("li"); - - for (var i = 0; i < items.length; ++i) - { - var target = items[i]; - - if (!this.has_class(target.parentNode, "outline")) - continue; - - target.onclick = this.outline_click; -/* ### more work needed for IE6 - if (!this.ns_pos) - { - target.onmouseover = this.hover_outline; - target.onmouseout = this.unhover_outline; - } -*/ - if (this.foldable(target)) - { - target.foldable = true; - target.onfocus = function () {w3c_slidy.outline = this;}; - target.onblur = function () {w3c_slidy.outline = null;}; - - if (!target.getAttribute("tabindex")) - target.setAttribute("tabindex", "0"); - - if (this.has_class(target, "expand")) - this.unfold(target); - else - this.fold(target); - } - else - { - this.add_class(target, "nofold"); - target.visible = true; - target.foldable = false; - } - } - }, - - foldable: function (item) { - if (!item || item.nodeType != 1) - return false; - - var node = item.firstChild; - - while (node) - { - if (node.nodeType == 1 && this.is_block(node)) - return true; - - node = node.nextSibling; - } - - return false; - }, - - // ### CHECK ME ### switch to add/remove "hidden" class - fold: function (item) { - if (item) - { - this.remove_class(item, "unfolded"); - this.add_class(item, "folded"); - } - - var node = item ? item.firstChild : null; - - while (node) - { - if (node.nodeType == 1 && this.is_block(node)) // element - { - w3c_slidy.add_class(node, "hidden"); - } - - node = node.nextSibling; - } - - item.visible = false; - }, - - // ### CHECK ME ### switch to add/remove "hidden" class - unfold: function (item) { - if (item) - { - this.add_class(item, "unfolded"); - this.remove_class(item, "folded"); - } - - var node = item ? item.firstChild : null; - - while (node) - { - if (node.nodeType == 1 && this.is_block(node)) // element - { - w3c_slidy.remove_class(node, "hidden"); - } - - node = node.nextSibling; - } - - item.visible = true; - }, - - outline_click: function (e) { - if (!e) - e = window.event; - - var rightclick = false; - var target = w3c_slidy.get_target(e); - - while (target && target.visible == undefined) - target = target.parentNode; - - if (!target) - return true; - - if (e.which) - rightclick = (e.which == 3); - else if (e.button) - rightclick = (e.button == 2); - - if (!rightclick && target.visible != undefined) - { - if (target.foldable) - { - if (target.visible) - w3c_slidy.fold(target); - else - w3c_slidy.unfold(target); - } - - w3c_slidy.stop_propagation(e); - e.cancel = true; - e.returnValue = false; - } - - return false; - }, - - add_initial_prompt: function () { - var prompt = this.create_element("div"); - prompt.setAttribute("class", "initial_prompt"); - - var p1 = this.create_element("p"); - prompt.appendChild(p1); - p1.setAttribute("class", "help"); - - if (this.keyboardless) - p1.innerHTML = "Tap footer to move to next slide"; - else - p1.innerHTML = "Space or Right Arrow to move to next " + - "slide, click help below for more details"; - - this.add_listener(prompt, "click", function (e) { - document.body.removeChild(prompt); - w3c_slidy.stop_propagation(e); - - if (e.cancel != undefined) - e.cancel = true; - - if (e.returnValue != undefined) - e.returnValue = false; - - return false; - }); - - document.body.appendChild(prompt); - this.initial_prompt = prompt; - setTimeout(function() {document.body.removeChild(prompt);}, 5000); - }, - - add_toolbar: function () { - var counter, page; - - this.toolbar = this.create_element("div"); - this.toolbar.setAttribute("class", "toolbar"); - - // a reasonably behaved browser - if (this.ns_pos || !this.ie6) - { - var right = this.create_element("div"); - right.setAttribute("style", "float: right; text-align: right"); - - counter = this.create_element("span") - counter.innerHTML = "slide".localize() + " n/m"; - right.appendChild(counter); - this.toolbar.appendChild(right); - - var left = this.create_element("div"); - left.setAttribute("style", "text-align: left"); - - // global end of slide indicator - this.eos = this.create_element("span"); - this.eos.innerHTML = "* "; - left.appendChild(this.eos); - - var help = this.create_element("a"); - help.setAttribute("href", this.help_page); - help.setAttribute("title", this.help_text.localize()); - help.innerHTML = "help?".localize(); - left.appendChild(help); - this.help_anchor = help; // save for focus hack - - var gap1 = document.createTextNode(" "); - left.appendChild(gap1); - - var contents = this.create_element("a"); - contents.setAttribute("href", "javascript:w3c_slidy.toggle_table_of_contents()"); - contents.setAttribute("title", "table of contents".localize()); - contents.innerHTML = "contents?".localize(); - left.appendChild(contents); - - var gap2 = document.createTextNode(" "); - left.appendChild(gap2); - - var copyright = this.find_copyright(); - - if (copyright) - { - var span = this.create_element("span"); - span.className = "copyright"; - span.innerHTML = copyright; - left.appendChild(span); - } - - this.toolbar.setAttribute("tabindex", "0"); - this.toolbar.appendChild(left); - } - else // IE6 so need to work around its poor CSS support - { - this.toolbar.style.position = (this.ie7 ? "fixed" : "absolute"); - this.toolbar.style.zIndex = "200"; - this.toolbar.style.width = "99.9%"; - this.toolbar.style.height = "1.2em"; - this.toolbar.style.top = "auto"; - this.toolbar.style.bottom = "0"; - this.toolbar.style.left = "0"; - this.toolbar.style.right = "0"; - this.toolbar.style.textAlign = "left"; - this.toolbar.style.fontSize = "60%"; - this.toolbar.style.color = "red"; - this.toolbar.borderWidth = 0; - this.toolbar.className = "toolbar"; - this.toolbar.style.background = "rgb(240,240,240)"; - - // would like to have help text left aligned - // and page counter right aligned, floating - // div's don't work, so instead use nested - // absolutely positioned div's. - - var sp = this.create_element("span"); - sp.innerHTML = "  * "; - this.toolbar.appendChild(sp); - this.eos = sp; // end of slide indicator - - var help = this.create_element("a"); - help.setAttribute("href", this.help_page); - help.setAttribute("title", this.help_text.localize()); - help.innerHTML = "help?".localize(); - this.toolbar.appendChild(help); - this.help_anchor = help; // save for focus hack - - var gap1 = document.createTextNode(" "); - this.toolbar.appendChild(gap1); - - var contents = this.create_element("a"); - contents.setAttribute("href", "javascript:toggleTableOfContents()"); - contents.setAttribute("title", "table of contents".localize()); - contents.innerHTML = "contents?".localize(); - this.toolbar.appendChild(contents); - - var gap2 = document.createTextNode(" "); - this.toolbar.appendChild(gap2); - - var copyright = this.find_copyright(); - - if (copyright) - { - var span = this.create_element("span"); - span.innerHTML = copyright; - span.style.color = "black"; - span.style.marginLeft = "0.5em"; - this.toolbar.appendChild(span); - } - - counter = this.create_element("div") - counter.style.position = "absolute"; - counter.style.width = "auto"; //"20%"; - counter.style.height = "1.2em"; - counter.style.top = "auto"; - counter.style.bottom = 0; - counter.style.right = "0"; - counter.style.textAlign = "right"; - counter.style.color = "red"; - counter.style.background = "rgb(240,240,240)"; - - counter.innerHTML = "slide".localize() + " n/m"; - this.toolbar.appendChild(counter); - } - - // ensure that click isn't passed through to the page - this.toolbar.onclick = - function (e) { - if (!e) - e = window.event; - - var target = e.target; - - if (!target && e.srcElement) - target = e.srcElement; - - // work around Safari bug - if (target && target.nodeType == 3) - target = target.parentNode; - - w3c_slidy.stop_propagation(e); - - if (target && target.nodeName.toLowerCase() != "a") - w3c_slidy.mouse_button_click(e); - }; - - this.slide_number_element = counter; - this.set_eos_status(false); - document.body.appendChild(this.toolbar); - }, - - // wysiwyg editors make it hard to use div elements - // e.g. amaya loses the div when you copy and paste - // this function wraps div elements around implicit - // slides which start with an h1 element and continue - // up to the next heading or div element - wrap_implicit_slides: function () { - var i, heading, node, next, div; - var headings = document.getElementsByTagName("h1"); - - if (!headings) - return; - - for (i = 0; i < headings.length; ++i) - { - heading = headings[i]; - - if (heading.parentNode != document.body) - continue; - - node = heading.nextSibling; - - div = document.createElement("div"); - this.add_class(div, "slide"); - document.body.replaceChild(div, heading); - div.appendChild(heading); - - while (node) - { - if (node.nodeType == 1 && // an element - (node.nodeName == "H1" || - node.nodeName == "h1" || - node.nodeName == "DIV" || - node.nodeName == "div")) - break; - - next = node.nextSibling; - node = document.body.removeChild(node); - div.appendChild(node); - node = next; - } - } - }, - -// return new array of all slides - collect_slides: function () { - var slides = new Array(); - var divs = document.body.getElementsByTagName("div"); - - for (var i = 0; i < divs.length; ++i) - { - div = divs.item(i); - - if (this.has_class(div, "slide")) - { - // add slide to collection - slides[slides.length] = div; - - // hide each slide as it is found - this.add_class(div, "hidden"); - - // add dummy
    at end for scrolling hack - var node1 = document.createElement("br"); - div.appendChild(node1); - var node2 = document.createElement("br"); - div.appendChild(node2); - } - else if (this.has_class(div, "background")) - { // work around for Firefox SVG reload bug - // which otherwise replaces 1st SVG graphic with 2nd - div.style.display = "block"; - } - } - - this.slides = slides; - }, - - // return new array of all
    - collect_notes: function () { - var notes = new Array(); - var divs = document.body.getElementsByTagName("div"); - - for (var i = 0; i < divs.length; ++i) - { - div = divs.item(i); - - if (this.has_class(div, "handout")) - { - // add note to collection - notes[notes.length] = div; - - // and hide it - this.add_class(div, "hidden"); - } - } - - this.notes = notes; - }, - - // return new array of all
    - // including named backgrounds e.g. class="background titlepage" - collect_backgrounds: function () { - var backgrounds = new Array(); - var divs = document.body.getElementsByTagName("div"); - - for (var i = 0; i < divs.length; ++i) - { - div = divs.item(i); - - if (this.has_class(div, "background")) - { - // add background to collection - backgrounds[backgrounds.length] = div; - - // and hide it - this.add_class(div, "hidden"); - } - } - - this.backgrounds = backgrounds; - }, - - // set click handlers on all anchors - patch_anchors: function () { - var self = w3c_slidy; - var handler = function (event) { - // compare this.href with location.href - // for link to another slide in this doc - - if (self.page_address(this.href) == self.page_address(location.href)) - { - // yes, so find new slide number - var newslidenum = self.find_slide_number(this.href); - - if (newslidenum != self.slide_number) - { - var slide = self.slides[self.slide_number]; - self.hide_slide(slide); - self.slide_number = newslidenum; - slide = self.slides[self.slide_number]; - self.show_slide(slide); - self.set_location(); - } - } - else if (this.target == null) - location.href = this.href; - - this.blur(); - self.disable_slide_click = true; - }; - - var anchors = document.body.getElementsByTagName("a"); - - for (var i = 0; i < anchors.length; ++i) - { - if (window.addEventListener) - anchors[i].addEventListener("click", handler, false); - else - anchors[i].attachEvent("onclick", handler); - } - }, - - // ### CHECK ME ### see which functions are invoked via setTimeout - // either directly or indirectly for use of w3c_slidy vs this - show_slide_number: function () { - var timer = w3c_slidy.get_timer(); - w3c_slidy.slide_number_element.innerHTML = timer + "slide".localize() + " " + - (w3c_slidy.slide_number + 1) + "/" + w3c_slidy.slides.length; - }, - - // every 200mS check if the location has been changed as a - // result of the user activating the Back button/menu item - // doesn't work for Opera < 9.5 - check_location: function () { - var hash = location.hash; - - if (w3c_slidy.slide_number > 0 && (hash == "" || hash == "#")) - w3c_slidy.goto_slide(0); - else if (hash.length > 2 && hash != "#("+(w3c_slidy.slide_number+1)+")") - { - var num = parseInt(location.hash.substr(2)); - - if (!isNaN(num)) - w3c_slidy.goto_slide(num-1); - } - - if (w3c_slidy.time_left && w3c_slidy.slide_number > 0) - { - w3c_slidy.show_slide_number(); - - if (w3c_slidy.time_left > 0) - w3c_slidy.time_left -= 200; - } - }, - - get_timer: function () { - var timer = ""; - if (w3c_slidy.time_left) - { - var mins, secs; - secs = Math.floor(w3c_slidy.time_left/1000); - mins = Math.floor(secs / 60); - secs = secs % 60; - timer = (mins ? mins+"m" : "") + secs + "s "; - } - - return timer; - }, - - // this doesn't push location onto history stack for IE - // for which a hidden iframe hack is needed: load page into - // the iframe with script that set's parent's location.hash - // but that won't work for standalone use unless we can - // create the page dynamically via a javascript: URL - set_location: function () { - var uri = w3c_slidy.page_address(location.href); - var hash = "#(" + (w3c_slidy.slide_number+1) + ")"; - - if (w3c_slidy.slide_number >= 0) - uri = uri + hash; - - if (w3c_slidy.ie && !w3c_slidy.ie8) - w3c_slidy.push_hash(hash); - - if (uri != location.href) // && !khtml - location.href = uri; - - if (this.khtml) - hash = "(" + (w3c_slidy.slide_number+1) + ")"; - - if (!this.ie && location.hash != hash && location.hash != "") - location.hash = hash; - - document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")"; - w3c_slidy.show_slide_number(); - }, - - page_address: function (uri) { - var i = uri.indexOf("#"); - - if (i < 0) - i = uri.indexOf("%23"); - - // check if anchor is entire page - - if (i < 0) - return uri; // yes - - return uri.substr(0, i); - }, - - // only used for IE6 and IE7 - on_frame_loaded: function (hash) { - location.hash = hash; - var uri = w3c_slidy.page_address(location.href); - location.href = uri + hash; - }, - - // history hack with thanks to Bertrand Le Roy - push_hash: function (hash) { - if (hash == "") hash = "#(1)"; - window.location.hash = hash; - - var doc = document.getElementById("historyFrame").contentWindow.document; - doc.open("javascript:''"); - // PWL modified this string literal to break the close script tag - // which otherwise gets parsed when incorporated - doc.write(" -endif::linkcss[] -ifndef::linkcss[] - - -endif::linkcss[] -ifdef::asciimath[] -ifdef::linkcss[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::asciimath[] -ifdef::latexmath[] -ifdef::linkcss[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::latexmath[] - - - - -[footer] - - diff --git a/manual/src/bin/asciidoc/stylesheets/asciidoc.css b/manual/src/bin/asciidoc/stylesheets/asciidoc.css deleted file mode 100644 index 0942ce4bca0bb..0000000000000 --- a/manual/src/bin/asciidoc/stylesheets/asciidoc.css +++ /dev/null @@ -1,533 +0,0 @@ -/* Shared CSS for AsciiDoc xhtml11 and html5 backends */ - -/* Default font. */ -body { - font-family: Georgia,serif; -} - -/* Title font. */ -h1, h2, h3, h4, h5, h6, -div.title, caption.title, -thead, p.table.header, -#toctitle, -#author, #revnumber, #revdate, #revremark, -#footer { - font-family: Arial,Helvetica,sans-serif; -} - -body { - margin: 1em 5% 1em 5%; -} - -a { - color: blue; - text-decoration: underline; -} -a:visited { - color: fuchsia; -} - -em { - font-style: italic; - color: navy; -} - -strong { - font-weight: bold; - color: #083194; -} - -h1, h2, h3, h4, h5, h6 { - color: #527bbd; - margin-top: 1.2em; - margin-bottom: 0.5em; - line-height: 1.3; -} - -h1, h2, h3 { - border-bottom: 2px solid silver; -} -h2 { - padding-top: 0.5em; -} -h3 { - float: left; -} -h3 + * { - clear: left; -} -h5 { - font-size: 1.0em; -} - -div.sectionbody { - margin-left: 0; -} - -hr { - border: 1px solid silver; -} - -p { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -ul, ol, li > p { - margin-top: 0; -} -ul > li { color: #aaa; } -ul > li > * { color: black; } - -pre { - padding: 0; - margin: 0; -} - -#author { - color: #527bbd; - font-weight: bold; - font-size: 1.1em; -} -#email { -} -#revnumber, #revdate, #revremark { -} - -#footer { - font-size: small; - border-top: 2px solid silver; - padding-top: 0.5em; - margin-top: 4.0em; -} -#footer-text { - float: left; - padding-bottom: 0.5em; -} -#footer-badges { - float: right; - padding-bottom: 0.5em; -} - -#preamble { - margin-top: 1.5em; - margin-bottom: 1.5em; -} -div.imageblock, div.exampleblock, div.verseblock, -div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, -div.admonitionblock { - margin-top: 1.0em; - margin-bottom: 1.5em; -} -div.admonitionblock { - margin-top: 2.0em; - margin-bottom: 2.0em; - margin-right: 10%; - color: #606060; -} - -div.content { /* Block element content. */ - padding: 0; -} - -/* Block element titles. */ -div.title, caption.title { - color: #527bbd; - font-weight: bold; - text-align: left; - margin-top: 1.0em; - margin-bottom: 0.5em; -} -div.title + * { - margin-top: 0; -} - -td div.title:first-child { - margin-top: 0.0em; -} -div.content div.title:first-child { - margin-top: 0.0em; -} -div.content + div.title { - margin-top: 0.0em; -} - -div.sidebarblock > div.content { - background: #ffffee; - border: 1px solid #dddddd; - border-left: 4px solid #f0f0f0; - padding: 0.5em; -} - -div.listingblock > div.content { - border: 1px solid #dddddd; - border-left: 5px solid #f0f0f0; - background: #f8f8f8; - padding: 0.5em; -} - -div.quoteblock, div.verseblock { - padding-left: 1.0em; - margin-left: 1.0em; - margin-right: 10%; - border-left: 5px solid #f0f0f0; - color: #888; -} - -div.quoteblock > div.attribution { - padding-top: 0.5em; - text-align: right; -} - -div.verseblock > pre.content { - font-family: inherit; - font-size: inherit; -} -div.verseblock > div.attribution { - padding-top: 0.75em; - text-align: left; -} -/* DEPRECATED: Pre version 8.2.7 verse style literal block. */ -div.verseblock + div.attribution { - text-align: left; -} - -div.admonitionblock .icon { - vertical-align: top; - font-size: 1.1em; - font-weight: bold; - text-decoration: underline; - color: #527bbd; - padding-right: 0.5em; -} -div.admonitionblock td.content { - padding-left: 0.5em; - border-left: 3px solid #dddddd; -} - -div.exampleblock > div.content { - border-left: 3px solid #dddddd; - padding-left: 0.5em; -} - -div.imageblock div.content { padding-left: 0; } -span.image img { border-style: none; } -a.image:visited { color: white; } - -dl { - margin-top: 0.8em; - margin-bottom: 0.8em; -} -dt { - margin-top: 0.5em; - margin-bottom: 0; - font-style: normal; - color: navy; -} -dd > *:first-child { - margin-top: 0.1em; -} - -ul, ol { - list-style-position: outside; -} -ol.arabic { - list-style-type: decimal; -} -ol.loweralpha { - list-style-type: lower-alpha; -} -ol.upperalpha { - list-style-type: upper-alpha; -} -ol.lowerroman { - list-style-type: lower-roman; -} -ol.upperroman { - list-style-type: upper-roman; -} - -div.compact ul, div.compact ol, -div.compact p, div.compact p, -div.compact div, div.compact div { - margin-top: 0.1em; - margin-bottom: 0.1em; -} - -tfoot { - font-weight: bold; -} -td > div.verse { - white-space: pre; -} - -div.hdlist { - margin-top: 0.8em; - margin-bottom: 0.8em; -} -div.hdlist tr { - padding-bottom: 15px; -} -dt.hdlist1.strong, td.hdlist1.strong { - font-weight: bold; -} -td.hdlist1 { - vertical-align: top; - font-style: normal; - padding-right: 0.8em; - color: navy; -} -td.hdlist2 { - vertical-align: top; -} -div.hdlist.compact tr { - margin: 0; - padding-bottom: 0; -} - -.comment { - background: yellow; -} - -.footnote, .footnoteref { - font-size: 0.8em; -} - -span.footnote, span.footnoteref { - vertical-align: super; -} - -#footnotes { - margin: 20px 0 20px 0; - padding: 7px 0 0 0; -} - -#footnotes div.footnote { - margin: 0 0 5px 0; -} - -#footnotes hr { - border: none; - border-top: 1px solid silver; - height: 1px; - text-align: left; - margin-left: 0; - width: 20%; - min-width: 100px; -} - -div.colist td { - padding-right: 0.5em; - padding-bottom: 0.3em; - vertical-align: top; -} -div.colist td img { - margin-top: 0.3em; -} - -@media print { - #footer-badges { display: none; } -} - -#toc { - margin-bottom: 2.5em; -} - -#toctitle { - color: #527bbd; - font-size: 1.1em; - font-weight: bold; - margin-top: 1.0em; - margin-bottom: 0.1em; -} - -div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { - margin-top: 0; - margin-bottom: 0; -} -div.toclevel2 { - margin-left: 2em; - font-size: 0.9em; -} -div.toclevel3 { - margin-left: 4em; - font-size: 0.9em; -} -div.toclevel4 { - margin-left: 6em; - font-size: 0.9em; -} - -span.aqua { color: aqua; } -span.black { color: black; } -span.blue { color: blue; } -span.fuchsia { color: fuchsia; } -span.gray { color: gray; } -span.green { color: green; } -span.lime { color: lime; } -span.maroon { color: maroon; } -span.navy { color: navy; } -span.olive { color: olive; } -span.purple { color: purple; } -span.red { color: red; } -span.silver { color: silver; } -span.teal { color: teal; } -span.white { color: white; } -span.yellow { color: yellow; } - -span.aqua-background { background: aqua; } -span.black-background { background: black; } -span.blue-background { background: blue; } -span.fuchsia-background { background: fuchsia; } -span.gray-background { background: gray; } -span.green-background { background: green; } -span.lime-background { background: lime; } -span.maroon-background { background: maroon; } -span.navy-background { background: navy; } -span.olive-background { background: olive; } -span.purple-background { background: purple; } -span.red-background { background: red; } -span.silver-background { background: silver; } -span.teal-background { background: teal; } -span.white-background { background: white; } -span.yellow-background { background: yellow; } - -span.big { font-size: 2em; } -span.small { font-size: 0.6em; } - -span.underline { text-decoration: underline; } -span.overline { text-decoration: overline; } -span.line-through { text-decoration: line-through; } - -div.unbreakable { page-break-inside: avoid; } - - -/* - * xhtml11 specific - * - * */ - -tt { - font-family: "Courier New", Courier, monospace; - font-size: inherit; - color: navy; -} - -div.tableblock { - margin-top: 1.0em; - margin-bottom: 1.5em; -} -div.tableblock > table { - border: 3px solid #527bbd; -} -thead, p.table.header { - font-weight: bold; - color: #527bbd; -} -p.table { - margin-top: 0; -} -/* Because the table frame attribute is overriden by CSS in most browsers. */ -div.tableblock > table[frame="void"] { - border-style: none; -} -div.tableblock > table[frame="hsides"] { - border-left-style: none; - border-right-style: none; -} -div.tableblock > table[frame="vsides"] { - border-top-style: none; - border-bottom-style: none; -} - - -/* - * html5 specific - * - * */ - -.monospaced { - font-family: "Courier New", Courier, monospace; - font-size: inherit; - color: navy; -} - -table.tableblock { - margin-top: 1.0em; - margin-bottom: 1.5em; -} -thead, p.tableblock.header { - font-weight: bold; - color: #527bbd; -} -p.tableblock { - margin-top: 0; -} -table.tableblock { - border-width: 3px; - border-spacing: 0px; - border-style: solid; - border-color: #527bbd; - border-collapse: collapse; -} -th.tableblock, td.tableblock { - border-width: 1px; - padding: 4px; - border-style: solid; - border-color: #527bbd; -} - -table.tableblock.frame-topbot { - border-left-style: hidden; - border-right-style: hidden; -} -table.tableblock.frame-sides { - border-top-style: hidden; - border-bottom-style: hidden; -} -table.tableblock.frame-none { - border-style: hidden; -} - -th.tableblock.halign-left, td.tableblock.halign-left { - text-align: left; -} -th.tableblock.halign-center, td.tableblock.halign-center { - text-align: center; -} -th.tableblock.halign-right, td.tableblock.halign-right { - text-align: right; -} - -th.tableblock.valign-top, td.tableblock.valign-top { - vertical-align: top; -} -th.tableblock.valign-middle, td.tableblock.valign-middle { - vertical-align: middle; -} -th.tableblock.valign-bottom, td.tableblock.valign-bottom { - vertical-align: bottom; -} - - -/* - * manpage specific - * - * */ - -body.manpage h1 { - padding-top: 0.5em; - padding-bottom: 0.5em; - border-top: 2px solid silver; - border-bottom: 2px solid silver; -} -body.manpage h2 { - border-style: none; -} -body.manpage div.sectionbody { - margin-left: 3em; -} - -@media print { - body.manpage div#toc { display: none; } -} diff --git a/manual/src/bin/asciidoc/stylesheets/docbook-xsl.css b/manual/src/bin/asciidoc/stylesheets/docbook-xsl.css deleted file mode 100644 index ee9ca46d6f227..0000000000000 --- a/manual/src/bin/asciidoc/stylesheets/docbook-xsl.css +++ /dev/null @@ -1,329 +0,0 @@ -/* - CSS stylesheet for XHTML produced by DocBook XSL stylesheets. -*/ - -body { - font-family: Georgia,serif; -} - -code, pre { - font-family: "Courier New", Courier, monospace; -} - -span.strong { - font-weight: bold; -} - -body blockquote { - margin-top: .75em; - line-height: 1.5; - margin-bottom: .75em; -} - -html body { - margin: 1em 5% 1em 5%; - line-height: 1.2; -} - -body div { - margin: 0; -} - -h1, h2, h3, h4, h5, h6 -{ - color: #527bbd; - font-family: Arial,Helvetica,sans-serif; -} - -div.toc p:first-child, -div.list-of-figures p:first-child, -div.list-of-tables p:first-child, -div.list-of-examples p:first-child, -div.example p.title, -div.sidebar p.title -{ - font-weight: bold; - color: #527bbd; - font-family: Arial,Helvetica,sans-serif; - margin-bottom: 0.2em; -} - -body h1 { - margin: .0em 0 0 -4%; - line-height: 1.3; - border-bottom: 2px solid silver; -} - -body h2 { - margin: 0.5em 0 0 -4%; - line-height: 1.3; - border-bottom: 2px solid silver; -} - -body h3 { - margin: .8em 0 0 -3%; - line-height: 1.3; -} - -body h4 { - margin: .8em 0 0 -3%; - line-height: 1.3; -} - -body h5 { - margin: .8em 0 0 -2%; - line-height: 1.3; -} - -body h6 { - margin: .8em 0 0 -1%; - line-height: 1.3; -} - -body hr { - border: none; /* Broken on IE6 */ -} -div.footnotes hr { - border: 1px solid silver; -} - -div.navheader th, div.navheader td, div.navfooter td { - font-family: Arial,Helvetica,sans-serif; - font-size: 0.9em; - font-weight: bold; - color: #527bbd; -} -div.navheader img, div.navfooter img { - border-style: none; -} -div.navheader a, div.navfooter a { - font-weight: normal; -} -div.navfooter hr { - border: 1px solid silver; -} - -body td { - line-height: 1.2 -} - -body th { - line-height: 1.2; -} - -ol { - line-height: 1.2; -} - -ul, body dir, body menu { - line-height: 1.2; -} - -html { - margin: 0; - padding: 0; -} - -body h1, body h2, body h3, body h4, body h5, body h6 { - margin-left: 0 -} - -body pre { - margin: 0.5em 10% 0.5em 1em; - line-height: 1.0; - color: navy; -} - -tt.literal, code.literal { - color: navy; -} - -.programlisting, .screen { - border: 1px solid silver; - background: #f4f4f4; - margin: 0.5em 10% 0.5em 0; - padding: 0.5em 1em; -} - -div.sidebar { - background: #ffffee; - margin: 1.0em 10% 0.5em 0; - padding: 0.5em 1em; - border: 1px solid silver; -} -div.sidebar * { padding: 0; } -div.sidebar div { margin: 0; } -div.sidebar p.title { - margin-top: 0.5em; - margin-bottom: 0.2em; -} - -div.bibliomixed { - margin: 0.5em 5% 0.5em 1em; -} - -div.glossary dt { - font-weight: bold; -} -div.glossary dd p { - margin-top: 0.2em; -} - -dl { - margin: .8em 0; - line-height: 1.2; -} - -dt { - margin-top: 0.5em; -} - -dt span.term { - font-style: normal; - color: navy; -} - -div.variablelist dd p { - margin-top: 0; -} - -div.itemizedlist li, div.orderedlist li { - margin-left: -0.8em; - margin-top: 0.5em; -} - -ul, ol { - list-style-position: outside; -} - -div.sidebar ul, div.sidebar ol { - margin-left: 2.8em; -} - -div.itemizedlist p.title, -div.orderedlist p.title, -div.variablelist p.title -{ - margin-bottom: -0.8em; -} - -div.revhistory table { - border-collapse: collapse; - border: none; -} -div.revhistory th { - border: none; - color: #527bbd; - font-family: Arial,Helvetica,sans-serif; -} -div.revhistory td { - border: 1px solid silver; -} - -/* Keep TOC and index lines close together. */ -div.toc dl, div.toc dt, -div.list-of-figures dl, div.list-of-figures dt, -div.list-of-tables dl, div.list-of-tables dt, -div.indexdiv dl, div.indexdiv dt -{ - line-height: normal; - margin-top: 0; - margin-bottom: 0; -} - -/* - Table styling does not work because of overriding attributes in - generated HTML. -*/ -div.table table, -div.informaltable table -{ - margin-left: 0; - margin-right: 5%; - margin-bottom: 0.8em; -} -div.informaltable table -{ - margin-top: 0.4em -} -div.table thead, -div.table tfoot, -div.table tbody, -div.informaltable thead, -div.informaltable tfoot, -div.informaltable tbody -{ - /* No effect in IE6. */ - border-top: 3px solid #527bbd; - border-bottom: 3px solid #527bbd; -} -div.table thead, div.table tfoot, -div.informaltable thead, div.informaltable tfoot -{ - font-weight: bold; -} - -div.mediaobject img { - margin-bottom: 0.8em; -} -div.figure p.title, -div.table p.title -{ - margin-top: 1em; - margin-bottom: 0.4em; -} - -div.calloutlist p -{ - margin-top: 0em; - margin-bottom: 0.4em; -} - -a img { - border-style: none; -} - -@media print { - div.navheader, div.navfooter { display: none; } -} - -span.aqua { color: aqua; } -span.black { color: black; } -span.blue { color: blue; } -span.fuchsia { color: fuchsia; } -span.gray { color: gray; } -span.green { color: green; } -span.lime { color: lime; } -span.maroon { color: maroon; } -span.navy { color: navy; } -span.olive { color: olive; } -span.purple { color: purple; } -span.red { color: red; } -span.silver { color: silver; } -span.teal { color: teal; } -span.white { color: white; } -span.yellow { color: yellow; } - -span.aqua-background { background: aqua; } -span.black-background { background: black; } -span.blue-background { background: blue; } -span.fuchsia-background { background: fuchsia; } -span.gray-background { background: gray; } -span.green-background { background: green; } -span.lime-background { background: lime; } -span.maroon-background { background: maroon; } -span.navy-background { background: navy; } -span.olive-background { background: olive; } -span.purple-background { background: purple; } -span.red-background { background: red; } -span.silver-background { background: silver; } -span.teal-background { background: teal; } -span.white-background { background: white; } -span.yellow-background { background: yellow; } - -span.big { font-size: 2em; } -span.small { font-size: 0.6em; } - -span.underline { text-decoration: underline; } -span.overline { text-decoration: overline; } -span.line-through { text-decoration: line-through; } diff --git a/manual/src/bin/asciidoc/stylesheets/pygments.css b/manual/src/bin/asciidoc/stylesheets/pygments.css deleted file mode 100644 index 9ca3659cb18ee..0000000000000 --- a/manual/src/bin/asciidoc/stylesheets/pygments.css +++ /dev/null @@ -1,66 +0,0 @@ -/* - pygmentize filter -*/ -.highlight .hll { background-color: #ffffcc } -.highlight { background: #f4f4f4; } -.highlight .c { color: #008800; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #AA22FF; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .cm { color: #008800; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #008800 } /* Comment.Preproc */ -.highlight .c1 { color: #008800; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #008800; font-weight: bold } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #808080 } /* Generic.Output */ -.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0040D0 } /* Generic.Traceback */ -.highlight .kc { color: #AA22FF; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #AA22FF; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #AA22FF; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #AA22FF } /* Keyword.Pseudo */ -.highlight .kr { color: #AA22FF; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #00BB00; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #666666 } /* Literal.Number */ -.highlight .s { color: #BB4444 } /* Literal.String */ -.highlight .na { color: #BB4444 } /* Name.Attribute */ -.highlight .nb { color: #AA22FF } /* Name.Builtin */ -.highlight .nc { color: #0000FF } /* Name.Class */ -.highlight .no { color: #880000 } /* Name.Constant */ -.highlight .nd { color: #AA22FF } /* Name.Decorator */ -.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #00A000 } /* Name.Function */ -.highlight .nl { color: #A0A000 } /* Name.Label */ -.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #B8860B } /* Name.Variable */ -.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #666666 } /* Literal.Number.Float */ -.highlight .mh { color: #666666 } /* Literal.Number.Hex */ -.highlight .mi { color: #666666 } /* Literal.Number.Integer */ -.highlight .mo { color: #666666 } /* Literal.Number.Oct */ -.highlight .sb { color: #BB4444 } /* Literal.String.Backtick */ -.highlight .sc { color: #BB4444 } /* Literal.String.Char */ -.highlight .sd { color: #BB4444; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #BB4444 } /* Literal.String.Double */ -.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #BB4444 } /* Literal.String.Heredoc */ -.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ -.highlight .sx { color: #008000 } /* Literal.String.Other */ -.highlight .sr { color: #BB6688 } /* Literal.String.Regex */ -.highlight .s1 { color: #BB4444 } /* Literal.String.Single */ -.highlight .ss { color: #B8860B } /* Literal.String.Symbol */ -.highlight .bp { color: #AA22FF } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #B8860B } /* Name.Variable.Class */ -.highlight .vg { color: #B8860B } /* Name.Variable.Global */ -.highlight .vi { color: #B8860B } /* Name.Variable.Instance */ -.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ - diff --git a/manual/src/bin/asciidoc/stylesheets/slidy.css b/manual/src/bin/asciidoc/stylesheets/slidy.css deleted file mode 100644 index bbb790e749287..0000000000000 --- a/manual/src/bin/asciidoc/stylesheets/slidy.css +++ /dev/null @@ -1,445 +0,0 @@ -/* slidy.css - - Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. - W3C liability, trademark, document use and software licensing - rules apply, see: - - http://www.w3.org/Consortium/Legal/copyright-documents - http://www.w3.org/Consortium/Legal/copyright-software -*/ - -/* - SJR: 2010-09-29: Modified for AsciiDoc slidy backend. - Mostly just commented out stuff that is handled by AsciiDoc's CSS files. -*/ - -body -{ - margin: 0 0 0 0; - padding: 0 0 0 0; - width: 100%; - height: 100%; - color: black; - background-color: white; -/* - font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif; -*/ - font-size: 14pt; -} - -div.toolbar { - position: fixed; z-index: 200; - top: auto; bottom: 0; left: 0; right: 0; - height: 1.2em; text-align: right; - padding-left: 1em; - padding-right: 1em; - font-size: 60%; - color: red; - background-color: rgb(240,240,240); - border-top: solid 1px rgb(180,180,180); -} - -div.toolbar span.copyright { - color: black; - margin-left: 0.5em; -} - -div.initial_prompt { - position: absolute; - z-index: 1000; - bottom: 1.2em; - width: 90%; - background-color: rgb(200,200,200); - opacity: 0.35; - background-color: rgb(200,200,200, 0.35); - cursor: pointer; -} - -div.initial_prompt p.help { - text-align: center; -} - -div.initial_prompt p.close { - text-align: right; - font-style: italic; -} - -div.slidy_toc { - position: absolute; - z-index: 300; - width: 60%; - max-width: 30em; - height: 30em; - overflow: auto; - top: auto; - right: auto; - left: 4em; - bottom: 4em; - padding: 1em; - background: rgb(240,240,240); - border-style: solid; - border-width: 2px; - font-size: 60%; -} - -div.slidy_toc .toc_heading { - text-align: center; - width: 100%; - margin: 0; - margin-bottom: 1em; - border-bottom-style: solid; - border-bottom-color: rgb(180,180,180); - border-bottom-width: 1px; -} - -div.slide { - z-index: 20; - margin: 0 0 0 0; - padding-top: 0; - padding-bottom: 0; - padding-left: 20px; - padding-right: 20px; - border-width: 0; - clear: both; - top: 0; - bottom: 0; - left: 0; - right: 0; - line-height: 120%; - background-color: transparent; -} - -div.background { - display: none; -} - -div.handout { - margin-left: 20px; - margin-right: 20px; -} - -div.slide.titlepage { - text-align: center; -} - -div.slide.titlepage.h1 { - padding-top: 10%; -} - -div.slide h1 { - padding-left: 0; - padding-right: 20pt; - padding-top: 4pt; - padding-bottom: 4pt; - margin-top: 0; - margin-left: 0; - margin-right: 60pt; - margin-bottom: 0.5em; - display: block; - font-size: 160%; - line-height: 1.2em; - background: transparent; -} - -div.toc { - position: absolute; - top: auto; - bottom: 4em; - left: 4em; - right: auto; - width: 60%; - max-width: 30em; - height: 30em; - border: solid thin black; - padding: 1em; - background: rgb(240,240,240); - color: black; - z-index: 300; - overflow: auto; - display: block; - visibility: visible; -} - -div.toc-heading { - width: 100%; - border-bottom: solid 1px rgb(180,180,180); - margin-bottom: 1em; - text-align: center; -} - -/* -pre { - font-size: 80%; - font-weight: bold; - line-height: 120%; - padding-top: 0.2em; - padding-bottom: 0.2em; - padding-left: 1em; - padding-right: 1em; - border-style: solid; - border-left-width: 1em; - border-top-width: thin; - border-right-width: thin; - border-bottom-width: thin; - border-color: #95ABD0; - color: #00428C; - background-color: #E4E5E7; -} -*/ - -/* -li pre { margin-left: 0; } - -blockquote { font-style: italic } - -img { background-color: transparent } - -p.copyright { font-size: smaller } -*/ - -.center { text-align: center } -.footnote { font-size: smaller; margin-left: 2em; } - -/* -a img { border-width: 0; border-style: none } -*/ - -a:visited { color: navy } -a:link { color: navy } -a:hover { color: red; text-decoration: underline } -a:active { color: red; text-decoration: underline } - -a {text-decoration: none} -.navbar a:link {color: white} -.navbar a:visited {color: yellow} -.navbar a:active {color: red} -.navbar a:hover {color: red} - -/* -ul { list-style-type: square; } -ul ul { list-style-type: disc; } -ul ul ul { list-style-type: circle; } -ul ul ul ul { list-style-type: disc; } -li { margin-left: 0.5em; margin-top: 0.5em; } -li li { font-size: 85%; font-style: italic } -li li li { font-size: 85%; font-style: normal } -*/ - -div dt -{ - margin-left: 0; - margin-top: 1em; - margin-bottom: 0.5em; - font-weight: bold; -} -div dd -{ - margin-left: 2em; - margin-bottom: 0.5em; -} - - -/* -p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table { - margin-left: 1em; - margin-right: 1em; -} -*/ - -p.subhead { font-weight: bold; margin-top: 2em; } - -.smaller { font-size: smaller } -.bigger { font-size: 130% } - -/* -td,th { padding: 0.2em } -*/ - -ul { - margin: 0.5em 1.5em 0.5em 1.5em; - padding: 0; -} - -ol { - margin: 0.5em 1.5em 0.5em 1.5em; - padding: 0; -} - -ul { list-style-type: square; } -ul ul { list-style-type: disc; } -ul ul ul { list-style-type: circle; } -ul ul ul ul { list-style-type: disc; } - -/* -ul li { - list-style: square; - margin: 0.1em 0em 0.6em 0; - padding: 0 0 0 0; - line-height: 140%; -} - -ol li { - margin: 0.1em 0em 0.6em 1.5em; - padding: 0 0 0 0px; - line-height: 140%; - list-style-type: decimal; -} - -li ul li { - font-size: 85%; - font-style: italic; - list-style-type: disc; - background: transparent; - padding: 0 0 0 0; -} -li li ul li { - font-size: 85%; - font-style: normal; - list-style-type: circle; - background: transparent; - padding: 0 0 0 0; -} -li li li ul li { - list-style-type: disc; - background: transparent; - padding: 0 0 0 0; -} - -li ol li { - list-style-type: decimal; -} - - -li li ol li { - list-style-type: decimal; -} -*/ - -/* - setting class="outline" on ol or ul makes it behave as an - ouline list where blocklevel content in li elements is - hidden by default and can be expanded or collapsed with - mouse click. Set class="expand" on li to override default -*/ - -ol.outline li:hover { cursor: pointer } -ol.outline li.nofold:hover { cursor: default } - -ul.outline li:hover { cursor: pointer } -ul.outline li.nofold:hover { cursor: default } - -ol.outline { list-style:decimal; } -ol.outline ol { list-style-type:lower-alpha } - -ol.outline li.nofold { - padding: 0 0 0 20px; - background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em; -} -ol.outline li.unfolded { - padding: 0 0 0 20px; - background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em; -} -ol.outline li.folded { - padding: 0 0 0 20px; - background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em; -} -ol.outline li.unfolded:hover { - padding: 0 0 0 20px; - background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em; -} -ol.outline li.folded:hover { - padding: 0 0 0 20px; - background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em; -} - -ul.outline li.nofold { - padding: 0 0 0 20px; - background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em; -} -ul.outline li.unfolded { - padding: 0 0 0 20px; - background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em; -} -ul.outline li.folded { - padding: 0 0 0 20px; - background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em; -} -ul.outline li.unfolded:hover { - padding: 0 0 0 20px; - background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em; -} -ul.outline li.folded:hover { - padding: 0 0 0 20px; - background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em; -} - -/* for slides with class "title" in table of contents */ -a.titleslide { font-weight: bold; font-style: italic } - -/* - hide images for work around for save as bug - where browsers fail to save images used by CSS -*/ -img.hidden { display: none; visibility: hidden } -div.initial_prompt { display: none; visibility: hidden } - - div.slide { - visibility: visible; - position: inherit; - } - div.handout { - border-top-style: solid; - border-top-width: thin; - border-top-color: black; - } - -@media screen { - .hidden { display: none; visibility: visible } - - div.slide.hidden { display: block; visibility: visible } - div.handout.hidden { display: block; visibility: visible } - div.background { display: none; visibility: hidden } - body.single_slide div.initial_prompt { display: block; visibility: visible } - body.single_slide div.background { display: block; visibility: visible } - body.single_slide div.background.hidden { display: none; visibility: hidden } - body.single_slide .invisible { visibility: hidden } - body.single_slide .hidden { display: none; visibility: hidden } - body.single_slide div.slide { position: absolute } - body.single_slide div.handout { display: none; visibility: hidden } -} - -@media print { - .hidden { display: block; visibility: visible } - -/* - div.slide pre { font-size: 60%; padding-left: 0.5em; } -*/ - div.toolbar { display: none; visibility: hidden; } - div.slidy_toc { display: none; visibility: hidden; } - div.background { display: none; visibility: hidden; } - div.slide { page-break-before: always } - /* :first-child isn't reliable for print media */ - div.slide.first-slide { page-break-before: avoid } -} - - -/* SJR: AsciiDoc slidy backend tweaks */ - -ol, ul { - margin: 0.8em 1.5em 0.8em 1.8em; -} -li > ul, li > ol { - margin-top: 0.5em; -} - -.outline > li.folded, -.outline > li.unfolded { - color: #527bbd; -} -ul > li{ color: #aaa; } -ul > li > *, ol > li > * { color: black; } - -li { - margin-top: 0.5em; - margin-bottom: 0.5em; -} diff --git a/manual/src/bin/asciidoc/stylesheets/toc2.css b/manual/src/bin/asciidoc/stylesheets/toc2.css deleted file mode 100644 index c6e63f58b7a7b..0000000000000 --- a/manual/src/bin/asciidoc/stylesheets/toc2.css +++ /dev/null @@ -1,34 +0,0 @@ -@media screen { - body { - max-width: 50em; /* approximately 80 characters wide */ - margin-left: 16em; - } - - #toc { - position: fixed; - top: 0; - left: 0; - bottom: 0; - width: 13em; - padding: 0.5em; - padding-bottom: 1.5em; - margin: 0; - overflow: auto; - border-right: 3px solid #f8f8f8; - background-color: white; - } - - #toc .toclevel1 { - margin-top: 0.5em; - } - - #toc .toclevel2 { - margin-top: 0.25em; - display: list-item; - color: #aaaaaa; - } - - #toctitle { - margin-top: 0.5em; - } -} diff --git a/manual/src/bin/asciidoc/stylesheets/xhtml11-quirks.css b/manual/src/bin/asciidoc/stylesheets/xhtml11-quirks.css deleted file mode 100644 index b79352729fd24..0000000000000 --- a/manual/src/bin/asciidoc/stylesheets/xhtml11-quirks.css +++ /dev/null @@ -1,43 +0,0 @@ -/* Workarounds for IE6's broken and incomplete CSS2. */ - -div.sidebar-content { - background: #ffffee; - border: 1px solid silver; - padding: 0.5em; -} -div.sidebar-title, div.image-title { - color: #527bbd; - font-family: Arial,Helvetica,sans-serif; - font-weight: bold; - margin-top: 0.0em; - margin-bottom: 0.5em; -} - -div.listingblock div.content { - border: 1px solid silver; - background: #f4f4f4; - padding: 0.5em; -} - -div.quoteblock-attribution { - padding-top: 0.5em; - text-align: right; -} - -pre.verseblock-content { - font-family: inherit; -} -div.verseblock-attribution { - padding-top: 0.75em; - text-align: left; -} - -div.exampleblock-content { - border-left: 3px solid #dddddd; - padding-left: 0.5em; -} - -div.imageblock.latex div.image-title { margin-top: 0.5em; } - -/* IE6 sets dynamically generated links as visited. */ -div#toc a:visited { color: blue; } diff --git a/manual/src/bin/asciidoc/text.conf b/manual/src/bin/asciidoc/text.conf deleted file mode 100644 index 7bc665878f3c9..0000000000000 --- a/manual/src/bin/asciidoc/text.conf +++ /dev/null @@ -1,16 +0,0 @@ -# text.conf -# Used by the AsciiDoc a2x(1) toolchain wrapper utility. -# Filters to add leading blank line and margin indent to verbatim -# block elements so lynx(1) generated text output looks nicer. - -[paradef-default] -verse-style=template="verseparagraph",filter="echo; echo; sed 's/^/ /'" - -[paradef-literal] -filter=echo; echo; sed 's/^/ /' - -[blockdef-listing] -filter=echo; sed 's/^/ /' - -[blockdef-literal] -filter=echo; sed 's/^/ /' diff --git a/manual/src/bin/asciidoc/themes/flask/flask.css b/manual/src/bin/asciidoc/themes/flask/flask.css deleted file mode 100644 index 03abe3b469afc..0000000000000 --- a/manual/src/bin/asciidoc/themes/flask/flask.css +++ /dev/null @@ -1,597 +0,0 @@ -/* Shared CSS for AsciiDoc xhtml11 and html5 backends */ - -/* Default font. */ -body { - font-family: Georgia,serif; -} - -/* Title font. */ -h1, h2, h3, h4, h5, h6, -div.title, caption.title, -thead, p.table.header, -#toctitle, -#author, #revnumber, #revdate, #revremark, -#footer { - font-family: Arial,Helvetica,sans-serif; -} - -body { - margin: 1em 5% 1em 5%; -} - -a { - color: blue; - text-decoration: underline; -} -a:visited { - color: fuchsia; -} - -em { - font-style: italic; - color: navy; -} - -strong { - font-weight: bold; - color: #083194; -} - -h1, h2, h3, h4, h5, h6 { - color: #527bbd; - margin-top: 1.2em; - margin-bottom: 0.5em; - line-height: 1.3; -} - -h1, h2, h3 { - border-bottom: 2px solid silver; -} -h2 { - padding-top: 0.5em; -} -h3 { - float: left; -} -h3 + * { - clear: left; -} -h5 { - font-size: 1.0em; -} - -div.sectionbody { - margin-left: 0; -} - -hr { - border: 1px solid silver; -} - -p { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -ul, ol, li > p { - margin-top: 0; -} -ul > li { color: #aaa; } -ul > li > * { color: black; } - -pre { - padding: 0; - margin: 0; -} - -#author { - color: #527bbd; - font-weight: bold; - font-size: 1.1em; -} -#email { -} -#revnumber, #revdate, #revremark { -} - -#footer { - font-size: small; - border-top: 2px solid silver; - padding-top: 0.5em; - margin-top: 4.0em; -} -#footer-text { - float: left; - padding-bottom: 0.5em; -} -#footer-badges { - float: right; - padding-bottom: 0.5em; -} - -#preamble { - margin-top: 1.5em; - margin-bottom: 1.5em; -} -div.imageblock, div.exampleblock, div.verseblock, -div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, -div.admonitionblock { - margin-top: 1.0em; - margin-bottom: 1.5em; -} -div.admonitionblock { - margin-top: 2.0em; - margin-bottom: 2.0em; - margin-right: 10%; - color: #606060; -} - -div.content { /* Block element content. */ - padding: 0; -} - -/* Block element titles. */ -div.title, caption.title { - color: #527bbd; - font-weight: bold; - text-align: left; - margin-top: 1.0em; - margin-bottom: 0.5em; -} -div.title + * { - margin-top: 0; -} - -td div.title:first-child { - margin-top: 0.0em; -} -div.content div.title:first-child { - margin-top: 0.0em; -} -div.content + div.title { - margin-top: 0.0em; -} - -div.sidebarblock > div.content { - background: #ffffee; - border: 1px solid #dddddd; - border-left: 4px solid #f0f0f0; - padding: 0.5em; -} - -div.listingblock > div.content { - border: 1px solid #dddddd; - border-left: 5px solid #f0f0f0; - background: #f8f8f8; - padding: 0.5em; -} - -div.quoteblock, div.verseblock { - padding-left: 1.0em; - margin-left: 1.0em; - margin-right: 10%; - border-left: 5px solid #f0f0f0; - color: #777777; -} - -div.quoteblock > div.attribution { - padding-top: 0.5em; - text-align: right; -} - -div.verseblock > pre.content { - font-family: inherit; - font-size: inherit; -} -div.verseblock > div.attribution { - padding-top: 0.75em; - text-align: left; -} -/* DEPRECATED: Pre version 8.2.7 verse style literal block. */ -div.verseblock + div.attribution { - text-align: left; -} - -div.admonitionblock .icon { - vertical-align: top; - font-size: 1.1em; - font-weight: bold; - text-decoration: underline; - color: #527bbd; - padding-right: 0.5em; -} -div.admonitionblock td.content { - padding-left: 0.5em; - border-left: 3px solid #dddddd; -} - -div.exampleblock > div.content { - border-left: 3px solid #dddddd; - padding-left: 0.5em; -} - -div.imageblock div.content { padding-left: 0; } -span.image img { border-style: none; } -a.image:visited { color: white; } - -dl { - margin-top: 0.8em; - margin-bottom: 0.8em; -} -dt { - margin-top: 0.5em; - margin-bottom: 0; - font-style: normal; - color: navy; -} -dd > *:first-child { - margin-top: 0.1em; -} - -ul, ol { - list-style-position: outside; -} -ol.arabic { - list-style-type: decimal; -} -ol.loweralpha { - list-style-type: lower-alpha; -} -ol.upperalpha { - list-style-type: upper-alpha; -} -ol.lowerroman { - list-style-type: lower-roman; -} -ol.upperroman { - list-style-type: upper-roman; -} - -div.compact ul, div.compact ol, -div.compact p, div.compact p, -div.compact div, div.compact div { - margin-top: 0.1em; - margin-bottom: 0.1em; -} - -tfoot { - font-weight: bold; -} -td > div.verse { - white-space: pre; -} - -div.hdlist { - margin-top: 0.8em; - margin-bottom: 0.8em; -} -div.hdlist tr { - padding-bottom: 15px; -} -dt.hdlist1.strong, td.hdlist1.strong { - font-weight: bold; -} -td.hdlist1 { - vertical-align: top; - font-style: normal; - padding-right: 0.8em; - color: navy; -} -td.hdlist2 { - vertical-align: top; -} -div.hdlist.compact tr { - margin: 0; - padding-bottom: 0; -} - -.comment { - background: yellow; -} - -.footnote, .footnoteref { - font-size: 0.8em; -} - -span.footnote, span.footnoteref { - vertical-align: super; -} - -#footnotes { - margin: 20px 0 20px 0; - padding: 7px 0 0 0; -} - -#footnotes div.footnote { - margin: 0 0 5px 0; -} - -#footnotes hr { - border: none; - border-top: 1px solid silver; - height: 1px; - text-align: left; - margin-left: 0; - width: 20%; - min-width: 100px; -} - -div.colist td { - padding-right: 0.5em; - padding-bottom: 0.3em; - vertical-align: top; -} -div.colist td img { - margin-top: 0.3em; -} - -@media print { - #footer-badges { display: none; } -} - -#toc { - margin-bottom: 2.5em; -} - -#toctitle { - color: #527bbd; - font-size: 1.1em; - font-weight: bold; - margin-top: 1.0em; - margin-bottom: 0.1em; -} - -div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { - margin-top: 0; - margin-bottom: 0; -} -div.toclevel2 { - margin-left: 2em; - font-size: 0.9em; -} -div.toclevel3 { - margin-left: 4em; - font-size: 0.9em; -} -div.toclevel4 { - margin-left: 6em; - font-size: 0.9em; -} - -span.aqua { color: aqua; } -span.black { color: black; } -span.blue { color: blue; } -span.fuchsia { color: fuchsia; } -span.gray { color: gray; } -span.green { color: green; } -span.lime { color: lime; } -span.maroon { color: maroon; } -span.navy { color: navy; } -span.olive { color: olive; } -span.purple { color: purple; } -span.red { color: red; } -span.silver { color: silver; } -span.teal { color: teal; } -span.white { color: white; } -span.yellow { color: yellow; } - -span.aqua-background { background: aqua; } -span.black-background { background: black; } -span.blue-background { background: blue; } -span.fuchsia-background { background: fuchsia; } -span.gray-background { background: gray; } -span.green-background { background: green; } -span.lime-background { background: lime; } -span.maroon-background { background: maroon; } -span.navy-background { background: navy; } -span.olive-background { background: olive; } -span.purple-background { background: purple; } -span.red-background { background: red; } -span.silver-background { background: silver; } -span.teal-background { background: teal; } -span.white-background { background: white; } -span.yellow-background { background: yellow; } - -span.big { font-size: 2em; } -span.small { font-size: 0.6em; } - -span.underline { text-decoration: underline; } -span.overline { text-decoration: overline; } -span.line-through { text-decoration: line-through; } - - -/* - * xhtml11 specific - * - * */ - -tt { - font-family: monospace; - font-size: inherit; - color: navy; -} - -div.tableblock { - margin-top: 1.0em; - margin-bottom: 1.5em; -} -div.tableblock > table { - border: 3px solid #527bbd; -} -thead, p.table.header { - font-weight: bold; - color: #527bbd; -} -p.table { - margin-top: 0; -} -/* Because the table frame attribute is overriden by CSS in most browsers. */ -div.tableblock > table[frame="void"] { - border-style: none; -} -div.tableblock > table[frame="hsides"] { - border-left-style: none; - border-right-style: none; -} -div.tableblock > table[frame="vsides"] { - border-top-style: none; - border-bottom-style: none; -} - - -/* - * html5 specific - * - * */ - -.monospaced { - font-family: monospace; - font-size: inherit; - color: navy; -} - -table.tableblock { - margin-top: 1.0em; - margin-bottom: 1.5em; -} -thead, p.tableblock.header { - font-weight: bold; - color: #527bbd; -} -p.tableblock { - margin-top: 0; -} -table.tableblock { - border-width: 3px; - border-spacing: 0px; - border-style: solid; - border-color: #527bbd; - border-collapse: collapse; -} -th.tableblock, td.tableblock { - border-width: 1px; - padding: 4px; - border-style: solid; - border-color: #527bbd; -} - -table.tableblock.frame-topbot { - border-left-style: hidden; - border-right-style: hidden; -} -table.tableblock.frame-sides { - border-top-style: hidden; - border-bottom-style: hidden; -} -table.tableblock.frame-none { - border-style: hidden; -} - -th.tableblock.halign-left, td.tableblock.halign-left { - text-align: left; -} -th.tableblock.halign-center, td.tableblock.halign-center { - text-align: center; -} -th.tableblock.halign-right, td.tableblock.halign-right { - text-align: right; -} - -th.tableblock.valign-top, td.tableblock.valign-top { - vertical-align: top; -} -th.tableblock.valign-middle, td.tableblock.valign-middle { - vertical-align: middle; -} -th.tableblock.valign-bottom, td.tableblock.valign-bottom { - vertical-align: bottom; -} - - -/* - * manpage specific - * - * */ - -body.manpage h1 { - padding-top: 0.5em; - padding-bottom: 0.5em; - border-top: 2px solid silver; - border-bottom: 2px solid silver; -} -body.manpage h2 { - border-style: none; -} -body.manpage div.sectionbody { - margin-left: 3em; -} - -@media print { - body.manpage div#toc { display: none; } -} - - -/* - * Theme specific overrides of the preceding (asciidoc.css) CSS. - * - */ -body { - font-family: Garamond, Georgia, serif; - font-size: 17px; - color: #3E4349; - line-height: 1.3em; -} -h1, h2, h3, h4, h5, h6, -div.title, caption.title, -thead, p.table.header, -#toctitle, -#author, #revnumber, #revdate, #revremark, -#footer { - font-family: Garmond, Georgia, serif; - font-weight: normal; - border-bottom-width: 0; - color: #3E4349; -} -div.title, caption.title { color: #596673; font-weight: bold; } -h1 { font-size: 240%; } -h2 { font-size: 180%; } -h3 { font-size: 150%; } -h4 { font-size: 130%; } -h5 { font-size: 115%; } -h6 { font-size: 100%; } -#header h1 { margin-top: 0; } -#toc { - color: #444444; - line-height: 1.5; - padding-top: 1.5em; -} -#toctitle { - font-size: 20px; -} -#toc a { - border-bottom: 1px dotted #999999; - color: #444444 !important; - text-decoration: none !important; -} -#toc a:hover { - border-bottom: 1px solid #6D4100; - color: #6D4100 !important; - text-decoration: none !important; -} -div.toclevel1 { margin-top: 0.2em; font-size: 16px; } -div.toclevel2 { margin-top: 0.15em; font-size: 14px; } -em, dt, td.hdlist1 { color: black; } -strong { color: #3E4349; } -a { color: #004B6B; text-decoration: none; border-bottom: 1px dotted #004B6B; } -a:visited { color: #615FA0; border-bottom: 1px dotted #615FA0; } -a:hover { color: #6D4100; border-bottom: 1px solid #6D4100; } -div.tableblock > table, table.tableblock { border: 3px solid #E8E8E8; } -th.tableblock, td.tableblock { border: 1px solid #E8E8E8; } -ul > li > * { color: #3E4349; } -pre, tt, .monospaced { font-family: Consolas,Menlo,'Deja Vu Sans Mono','Bitstream Vera Sans Mono',monospace; } -tt, .monospaced { font-size: 0.9em; color: black; -} -div.exampleblock > div.content, div.sidebarblock > div.content, div.listingblock > div.content { border-width: 0 0 0 3px; border-color: #E8E8E8; } -div.verseblock { border-left-width: 0; margin-left: 3em; } -div.quoteblock { border-left-width: 3px; margin-left: 0; margin-right: 0;} -div.admonitionblock td.content { border-left: 3px solid #E8E8E8; } diff --git a/manual/src/bin/asciidoc/themes/volnitsky/volnitsky.css b/manual/src/bin/asciidoc/themes/volnitsky/volnitsky.css deleted file mode 100644 index 42ae7d239996b..0000000000000 --- a/manual/src/bin/asciidoc/themes/volnitsky/volnitsky.css +++ /dev/null @@ -1,435 +0,0 @@ -/* - * AsciiDoc 'volnitsky' theme for xhtml11 and html5 backends. - * Based on css from http://volnitsky.com, which was in turn based on default - * theme from AsciiDoc - * - * FIXME: The styling is still a bit rough in places. - * - */ - -/* Default font. */ -body { - font-family: Georgia,"Times New Roman",Times,serif; -} - -/* Title font. */ -h1, h2, h3, h4, h5, h6, -div.title, caption.title, -thead, p.table.header, -#toctitle, -#author, #revnumber, #revdate, #revremark, -#footer { - font-family: Candara,Arial,sans-serif; -} - - -#toc a { - border-bottom: 1px dotted #999999; - color: #3A3A4D !important; - text-decoration: none !important; -} -#toc a:hover { - border-bottom: 1px solid #6D4100; - color: #6D4100 !important; - text-decoration: none !important; -} -a { color: #666688; text-decoration: none; border-bottom: 1px dotted #666688; } -a:visited { color: #615FA0; border-bottom: 1px dotted #615FA0; } -a:hover { color: #6D4100; border-bottom: 1px solid #6D4100; } - -em { - font-style: italic; - color: #444466; -} - -strong { - font-weight: bold; - color: #444466; -} - -h1, h2, h3, h4, h5, h6 { - color: #666688; - margin-bottom: 0.5em; - line-height: 1.3; - letter-spacing:+0.15em; -} - -h1, h2, h3 { border-bottom: 2px solid #ccd; } -h2 { padding-top: 0.5em; } -h3 { float: left; } -h3 + * { clear: left; } - -div.sectionbody { - margin-left: 0; -} - -hr { - border: 1px solid #444466; -} - -p { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -ul, ol, li > p { - margin-top: 0; -} - -pre { - padding: 0; - margin: 0; -} - -#author { - color: #444466; - font-weight: bold; - font-size: 1.1em; -} - -#footer { - font-size: small; - border-top: 2px solid silver; - padding-top: 0.5em; - margin-top: 4.0em; -} - -#footer-text { - float: left; - padding-bottom: 0.5em; -} - -#footer-badges { - float: right; - padding-bottom: 0.5em; -} - -#preamble { - margin-top: 1.5em; - margin-bottom: 1.5em; -} - -div.tableblock, div.imageblock, div.exampleblock, div.verseblock, -div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, -div.admonitionblock { - margin-top: 1.5em; - margin-bottom: 1.5em; -} - -div.admonitionblock { - margin-top: 2.5em; - margin-bottom: 2.5em; -} - -div.content { /* Block element content. */ - padding: 0; -} - -/* Block element titles. */ -div.title, caption.title { - color: #444466; - font-weight: bold; - text-align: left; - margin-top: 1.0em; - margin-bottom: 0.5em; -} -div.title + * { - margin-top: 0; -} - -td div.title:first-child { - margin-top: 0.0em; -} -div.content div.title:first-child { - margin-top: 0.0em; -} -div.content + div.title { - margin-top: 0.0em; -} - -div.sidebarblock > div.content { - background: #ffffee; - border: 1px solid silver; - padding: 0.5em; -} - -div.listingblock > div.content { - border: 1px solid silver; - background: #f4f4f4; - padding: 0.5em; -} - -div.quoteblock { - padding-left: 2.0em; - margin-right: 10%; -} -div.quoteblock > div.attribution { - padding-top: 0.5em; - text-align: right; -} - -div.verseblock { - padding-left: 2.0em; - margin-right: 10%; -} -div.verseblock > pre.content { - font-family: inherit; -} -div.verseblock > div.attribution { - padding-top: 0.75em; - text-align: left; -} -/* DEPRECATED: Pre version 8.2.7 verse style literal block. */ -div.verseblock + div.attribution { - text-align: left; -} - -div.admonitionblock .icon { - vertical-align: top; - font-size: 1.1em; - font-weight: bold; - text-decoration: underline; - color: #444466; - padding-right: 0.5em; -} -div.admonitionblock td.content { - padding-left: 0.5em; - border-left: 2px solid silver; -} - -div.exampleblock > div.content { - border-left: 2px solid silver; - padding: 0.5em; -} - -div.imageblock div.content { padding-left: 0; } -span.image img { border-style: none; } -a.image:visited { color: white; } - -dl { - margin-top: 0.8em; - margin-bottom: 0.8em; -} -dt { - margin-top: 0.5em; - margin-bottom: 0; - font-style: normal; - color: #444466; -} -dd > *:first-child { - margin-top: 0.1em; -} - -ul, ol { - list-style-position: outside; -} -ol.arabic { - list-style-type: decimal; -} -ol.loweralpha { - list-style-type: lower-alpha; -} -ol.upperalpha { - list-style-type: upper-alpha; -} -ol.lowerroman { - list-style-type: lower-roman; -} -ol.upperroman { - list-style-type: upper-roman; -} - -div.compact ul, div.compact ol, -div.compact p, div.compact p, -div.compact div, div.compact div { - margin-top: 0.1em; - margin-bottom: 0.1em; -} - -div.tableblock > table { - border: 3px solid #444466; -} -thead { - font-weight: bold; - color: #444466; -} -tfoot { - font-weight: bold; -} -td > div.verse { - white-space: pre; -} -p.table { - margin-top: 0; -} -/* Because the table frame attribute is overriden by CSS in most browsers. */ -div.tableblock > table[frame="void"] { - border-style: none; -} -div.tableblock > table[frame="hsides"] { - border-left-style: none; - border-right-style: none; -} -div.tableblock > table[frame="vsides"] { - border-top-style: none; - border-bottom-style: none; -} - - -div.hdlist { - margin-top: 0.8em; - margin-bottom: 0.8em; -} -div.hdlist tr { - padding-bottom: 15px; -} -dt.hdlist1.strong, td.hdlist1.strong { - font-weight: bold; -} -td.hdlist1 { - vertical-align: top; - font-style: normal; - padding-right: 0.8em; - color: #444466; -} -td.hdlist2 { - vertical-align: top; -} -div.hdlist.compact tr { - margin: 0; - padding-bottom: 0; -} - -.comment { - background: yellow; -} - -@media print { - #footer-badges { display: none; } -} - -#toctitle { - color: #666688; - font-size: 1.2em; - font-weight: bold; - margin-top: 1.0em; - margin-bottom: 0.1em; -} - -div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { margin-top: 0; margin-bottom: 0; } -div.toclevel1 { margin-top: 0.3em; margin-left: 0; font-size: 1.0em; } -div.toclevel2 { margin-top: 0.25em; margin-left: 2em; font-size: 0.9em; } -div.toclevel3 { margin-left: 4em; font-size: 0.8em; } -div.toclevel4 { margin-left: 6em; font-size: 0.8em; } - -body { - margin: 1em 5%; - max-width: 55em; - padding-left: 0; - -} - -.monospaced, tt, div.listingblock > div.content { - font-family: Consolas, "Andale Mono", "Courier New", monospace; - color: #004400; - background: #f4f4f4; - max-width: 80em; - line-height: 1.2em; -} - -.paragraph p { - line-height: 1.5em; - margin-top: 1em; -} - -.paragraph p, li, dd, .content { max-width: 45em; } -.admonitionblock { max-width: 35em; } - -div.sectionbody div.ulist > ul > li { - list-style-type: square; - color: #aaa; -} - div.sectionbody div.ulist > ul > li > * { - color: black; - /*font-size: 50%;*/ - } - - -div.sectionbody div.ulist > ul > li div.ulist > ul > li { - color: #ccd ; -} - div.sectionbody div.ulist > ul > li div.ulist > ul > li > * { - color: black ; - } - -em { - font-style: normal ! important; - font-weight: bold ! important; - color: #662222 ! important; - letter-spacing:+0.08em ! important; -} - - -/* - * html5 specific - * - * */ - -table.tableblock { - margin-top: 1.0em; - margin-bottom: 1.5em; -} -thead, p.tableblock.header { - font-weight: bold; - color: #666688; -} -p.tableblock { - margin-top: 0; -} -table.tableblock { - border-width: 3px; - border-spacing: 0px; - border-style: solid; - border-color: #444466; - border-collapse: collapse; -} -th.tableblock, td.tableblock { - border-width: 1px; - padding: 4px; - border-style: solid; - border-color: #444466; -} - -table.tableblock.frame-topbot { - border-left-style: hidden; - border-right-style: hidden; -} -table.tableblock.frame-sides { - border-top-style: hidden; - border-bottom-style: hidden; -} -table.tableblock.frame-none { - border-style: hidden; -} - -th.tableblock.halign-left, td.tableblock.halign-left { - text-align: left; -} -th.tableblock.halign-center, td.tableblock.halign-center { - text-align: center; -} -th.tableblock.halign-right, td.tableblock.halign-right { - text-align: right; -} - -th.tableblock.valign-top, td.tableblock.valign-top { - vertical-align: top; -} -th.tableblock.valign-middle, td.tableblock.valign-middle { - vertical-align: middle; -} -th.tableblock.valign-bottom, td.tableblock.valign-bottom { - vertical-align: bottom; -} - - diff --git a/manual/src/bin/asciidoc/wordpress.conf b/manual/src/bin/asciidoc/wordpress.conf deleted file mode 100644 index 4ef8f46d2be2f..0000000000000 --- a/manual/src/bin/asciidoc/wordpress.conf +++ /dev/null @@ -1,88 +0,0 @@ -# AsciiDoc configuration file for Wordpress HTML generation. -# Resides in AsciiDoc global conf directory or $HOME/.asciidoc directory. -# Generates HTML which plays nicely with Wordpress. -# (the generated HTML is still valid HTML 4.01 Transitional though). -# -# NOTE: The resulting HTML needs to be further massaged with blogpost.py. -# http://srackham.wordpress.com/blogpost-readme/ - -include::html4.conf[] - -# Override various tags. -[listtags-bulleted] -text= - -[listtags-numbered] -text= - -[listtags-labeled] -text= - -[listtags-callout] -text= - -[listtags-qanda] -term=| -text= - -[listtags-glossary] -text= - -[listtags-bibliography] -text= - -[tabletags-default] -paragraph=
    |
    - -[tabletags-emphasis] -paragraph=
    |
    - -[tabletags-strong] -paragraph=
    |
    - -[tabletags-monospaced] -paragraph=
    |
    - -[listingblock] - -

    {title}

    - - -
    -
    -|
    -
    -
    - -[literalblock] - -

    {title}

    -
    -|
    -
    - -[sidebarblock] - - -
    -

    {title}

    -| -
    - -[exampleblock] - -

    {caption=}{title}

    - -
    -| -
    - -[admonitionblock] - - - -

    {caption}

    -

    {title}

    -| -
    - diff --git a/manual/src/bin/asciidoc/xhtml11-quirks.conf b/manual/src/bin/asciidoc/xhtml11-quirks.conf deleted file mode 100644 index 7c133661e2071..0000000000000 --- a/manual/src/bin/asciidoc/xhtml11-quirks.conf +++ /dev/null @@ -1,61 +0,0 @@ -# -# xhtml11-quirks.conf -# -# Workarounds for IE6's broken # and incomplete CSS2. -# - -[image-blockmacro] -
    - -
    {caption={figure-caption} {counter:figure-number}: }{title}
    -
    - -[sidebarblock] -
    -
    - -[quoteblock] -
    -
    {title}
    -
    -| -
    -
    -{citetitle}
    -— {attribution} -
    - -[verseblock] -
    -
    {title}
    -
    -|
    -
    -
    -{citetitle}
    -— {attribution} -
    - -[exampleblock] -
    -
    {caption={example-caption} {counter:example-number}: }{title}
    -
    -| -
    - -[sect2] -
    -# The
    is because the IE6 adjacent-sibling CSS selector is broken. -{numbered?{sectnum} }{title}
    -| -
    - diff --git a/manual/src/bin/asciidoc/xhtml11.conf b/manual/src/bin/asciidoc/xhtml11.conf deleted file mode 100644 index c1ebb915a9a85..0000000000000 --- a/manual/src/bin/asciidoc/xhtml11.conf +++ /dev/null @@ -1,682 +0,0 @@ -# -# xhtml11.conf -# -# Asciidoc configuration file. -# xhtml11 backend, generates XHTML 1.1 conformant markup. -# - -[miscellaneous] -outfilesuffix=.html - -[attributes] -basebackend=html -basebackend-html= -basebackend-xhtml11= - -[replacements2] -# Line break. -(?m)^(.*)\s\+$=\1
    - -[replacements] -ifdef::asciidoc7compatible[] -# Superscripts. -\^(.+?)\^=\1 -# Subscripts. -~(.+?)~=\1 -endif::asciidoc7compatible[] - -[ruler-blockmacro] -
    - -[pagebreak-blockmacro] -
    - -[blockdef-pass] -asciimath-style=template="asciimathblock",subs=() -latexmath-style=template="latexmathblock",subs=() - -[macros] -# math macros. -# Special characters are escaped in HTML math markup. -(?su)[\\]?(?Pasciimath|latexmath):(?P\S*?)\[(?P.*?)(?asciimath|latexmath)::(?P\S*?)(\[(?P.*?)\])$=#[specialcharacters] - -[asciimath-inlinemacro] -`{passtext}` - -[asciimath-blockmacro] -
    -
    -
    {title}
    -`{passtext}` -
    - -[asciimathblock] -
    -
    -
    {title}
    -`|` -
    - -[latexmath-inlinemacro] -{passtext} - -[latexmath-blockmacro] -
    -
    -
    {title}
    -{passtext} -
    - -[latexmathblock] -
    -
    -
    {title}
    -| -
    - -[image-inlinemacro] - - -{data-uri%}{alt={target}} -{data-uri#}{alt={target}} -{link#} - - -[image-blockmacro] -
    - -
    {caption={figure-caption} {counter:figure-number}. }{title}
    -
    - -[unfloat-blockmacro] -
    - -[toc-blockmacro] -template::[toc] - -[indexterm-inlinemacro] -# Index term. -{empty} - -[indexterm2-inlinemacro] -# Index term. -# Single entry index term that is visible in the primary text flow. -{1} - -[footnote-inlinemacro] -# footnote:[]. -
    [{0}]
    - -[footnoteref-inlinemacro] -# footnoteref:[], create reference to footnote. -{2%}
    [{1}]
    -# footnoteref:[,], create footnote with ID. -{2#}
    [{2}]
    - -[callout-inlinemacro] -ifndef::icons[] -<{index}> -endif::icons[] -ifdef::icons[] -ifndef::data-uri[] -{index} -endif::data-uri[] -ifdef::data-uri[] -{index} -endif::data-uri[] -endif::icons[] - -# Comment line macros. -[comment-inlinemacro] -{showcomments#}
    {passtext}
    - -[comment-blockmacro] -{showcomments#}

    {passtext}

    - -[literal-inlinemacro] -# Inline literal. -{passtext} - -# List tags. -[listtags-bulleted] -list=
    {title?
    {title}
    }
      |
    -item=
  • |
  • -text=

    |

    - -[listtags-numbered] -# The start attribute is not valid XHTML 1.1 but all browsers support it. -list=
    {title?
    {title}
    }
      |
    -item=
  • |
  • -text=

    |

    - -[listtags-labeled] -list=
    {title?
    {title}
    }
    |
    -entry= -label= -term=
    |
    -item=
    |
    -text=

    |

    - -[listtags-horizontal] -list=
    {title?
    {title}
    }{labelwidth?}{itemwidth?}|
    -label=| -term=|
    -entry=| -item=| -text=

    |

    - -[listtags-qanda] -list=
    {title?
    {title}
    }
      |
    -entry=
  • |
  • -label= -term=

    |

    -item= -text=

    |

    - -[listtags-callout] -ifndef::icons[] -list=
    {title?
    {title}
    }
      |
    -item=
  • |
  • -text=

    |

    -endif::icons[] -ifdef::icons[] -list=
    {title?
    {title}
    }|
    -ifndef::data-uri[] -item={listindex}| -endif::data-uri[] -ifdef::data-uri[] -item={listindex}| -endif::data-uri[] -text=| -endif::icons[] - -[listtags-glossary] -list=
    {title?
    {title}
    }
    |
    -label= -entry= -term=
    |
    -item=
    |
    -text=

    |

    - -[listtags-bibliography] -list=
    {title?
    {title}
    }
      |
    -item=
  • |
  • -text=

    |

    - -[tags] -# Quoted text. -emphasis={1?}|{1?} -strong={1?}|{1?} -monospaced={1?}|{1?} -singlequoted={lsquo}{1?}|{1?}{rsquo} -doublequoted={ldquo}{1?}|{1?}{rdquo} -unquoted={1?}|{1?} -superscript={1?}|{1?} -subscript={1?}|{1?} - -ifdef::deprecated-quotes[] -# Override with deprecated quote attributes. -emphasis={role?}|{role?} -strong={role?}|{role?} -monospaced={role?}|{role?} -singlequoted={role?}{1,2,3?}{amp}#8216;|{amp}#8217;{1,2,3?}{role?} -doublequoted={role?}{1,2,3?}{amp}#8220;|{amp}#8221;{1,2,3?}{role?} -unquoted={role?}{1,2,3?}|{1,2,3?}{role?} -superscript={role?}|{role?} -subscript={role?}|{role?} -endif::deprecated-quotes[] - -# Inline macros -[http-inlinemacro] -{0={name}:{target}} -[https-inlinemacro] -{0={name}:{target}} -[ftp-inlinemacro] -{0={name}:{target}} -[file-inlinemacro] -{0={name}:{target}} -[irc-inlinemacro] -{0={name}:{target}} -[mailto-inlinemacro] -{0={target}} -[link-inlinemacro] -{0={target}} -[callto-inlinemacro] -{0={target}} -# anchor:id[text] -[anchor-inlinemacro] - -# [[id,text]] -[anchor2-inlinemacro] - -# [[[id]]] -[anchor3-inlinemacro] -[{1}] -# xref:id[text] -[xref-inlinemacro] -{0=[{target}]} -# <> -[xref2-inlinemacro] -{2=[{1}]} - -# Special word substitution. -[emphasizedwords] -{words} -[monospacedwords] -{words} -[strongwords] -{words} - -# Paragraph substitution. -[paragraph] -
    {title?
    {title}
    }

    -| -

    - -[admonitionparagraph] -template::[admonitionblock] - -# Delimited blocks. -[listingblock] -
    -
    {caption=}{title}
    -
    -
    
    -|
    -
    -
    - -[literalblock] -
    -
    {title}
    -
    -
    
    -|
    -
    -
    - -[sidebarblock] -
    -
    -
    {title}
    -| -
    - -[openblock] -
    -
    {title}
    -
    -| -
    - -[partintroblock] -template::[openblock] - -[abstractblock] -template::[quoteblock] - -[quoteblock] -
    -
    {title}
    -
    -| -
    -
    -{citetitle}{attribution?
    } -— {attribution} -
    - -[verseblock] -
    -
    {title}
    -
    -|
    -
    -
    -{citetitle}{attribution?
    } -— {attribution} -
    - -[exampleblock] -
    -
    {caption={example-caption} {counter:example-number}. }{title}
    -
    -| -
    - -[admonitionblock] -
    - - - -
    -{data-uri%}{icons#}{caption} -{data-uri#}{icons#}{caption} -{icons%}
    {caption}
    -
    -
    {title}
    -| -
    -
    - -# Tables. -[tabletags-default] -colspec= -bodyrow=| -headdata=| -bodydata=| -paragraph=

    |

    - -[tabletags-header] -paragraph=

    |

    - -[tabletags-emphasis] -paragraph=

    |

    - -[tabletags-strong] -paragraph=

    |

    - -[tabletags-monospaced] -paragraph=

    |

    - -[tabletags-verse] -bodydata=
    |
    -paragraph= - -[tabletags-literal] -bodydata=
    |
    -paragraph= - -[tabletags-asciidoc] -bodydata=
    |
    -paragraph= - -[table] -
    - - -{colspecs} -{headrows#} -{headrows} -{headrows#} -{footrows#} -{footrows} -{footrows#} - -{bodyrows} - -
    {caption={table-caption} {counter:table-number}. }{title}
    -
    - -#-------------------------------------------------------------------- -# Deprecated old table definitions. -# - -[miscellaneous] -# Screen width in pixels. -pagewidth=800 -pageunits= - -[old_tabledef-default] -template=old_table -colspec= -bodyrow=| -headdata=| -footdata=| -bodydata=| - -[old_table] -
    - - -{colspecs} -{headrows#} -{headrows} -{headrows#} -{footrows#} -{footrows} -{footrows#} - -{bodyrows} - -
    {caption={table-caption}}{title}
    -
    - -# End of deprecated old table definitions. -#-------------------------------------------------------------------- - -[floatingtitle] -{title} - -[preamble] -# Untitled elements between header and first section title. -
    -
    -| -
    -
    - -# Document sections. -[sect0] -{title} -| - -[sect1] -
    -{numbered?{sectnum} }{title} -
    -| -
    -
    - -[sect2] -
    -{numbered?{sectnum} }{title} -| -
    - -[sect3] -
    -{numbered?{sectnum} }{title} -| -
    - -[sect4] -
    -{title} -| -
    - -[appendix] -
    -{numbered?{sectnum} }{appendix-caption} {counter:appendix-number:A}: {title} -
    -| -
    -
    - -[toc] -
    -
    {toc-title}
    - -
    - -[header] - - - - - - - -{title} -{title%}{doctitle=} -ifdef::linkcss[] - -ifdef::quirks[] - -endif::quirks[] -ifdef::pygments[] -ifdef::toc2[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -ifndef::disable-javascript[] -ifdef::linkcss[] - - - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::disable-javascript[] -ifdef::asciimath[] -ifdef::linkcss[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::asciimath[] -ifdef::latexmath[] -ifdef::linkcss[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::latexmath[] -{docinfo1,docinfo2#}{include:{docdir}/docinfo.html} -{docinfo,docinfo2#}{include:{docdir}/{docname}-docinfo.html} -template::[docinfo] - - -# Article, book header. -ifndef::doctype-manpage[] - -endif::doctype-manpage[] -# Man page header. -ifdef::doctype-manpage[] - -endif::doctype-manpage[] -
    - -[footer] -
    -{disable-javascript%

    } - - - - -ifdef::doctype-manpage[] -[synopsis] -template::[sect1] -endif::doctype-manpage[] - -ifdef::quirks[] -include::xhtml11-quirks.conf[] -endif::quirks[] diff --git a/manual/src/bin/fonts/FreeSans.ttf b/manual/src/bin/fonts/FreeSans.ttf deleted file mode 100644 index a23124617f57867247eeb1c5812d9ee6bc21a3fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460384 zcmeFa4Omsh`tW_vS{r0jGXqZ$~ zWLlV3)G?#7qN1X6JVm8NNkyea<;S)x(MVB{_55aSDC>02`9JS-z1MTS*Y$e-zwTKx z_uTV6Yu3!L|Dr^sJO6Qrd)l;=naLA+ZIVvD3HXLgPnbGw?hP{o#dmF;i0_K&$+Itf zX=lt0;`>gdNW6Rcg>$Cdn|~}rd>>2}8Cf^`!jYp-EPE5TDkuKjMb|9M{S7hCI`SC{! zt`aFp5uYIx>#iwqI$m@Nx zmoCokQF!TQk(6!dH;Jw*HF?$NKg_v%LD#rn4S&;vkJJQgGCO4Jl(x~n>5jfU`+<&O z|JU@i)yc)a&$LcyeaJVx-QNz>|LM9>`*hu?DkVd%C#GR*INJ^Q(K<@Ks*1&jvaL2= zmyuGWrFDt=Mn)-$Yxw&(4E@isxA#5P6gg#KwoKceK5LF!;>B%QrrU}YF+D1p47~Nt zaUH6fR(Gv!i{xU{CDA-z zNW2X4?A3{uWOK62z(0xbLFmr67_o! zcC_^aW$8u!hQc_~2u1dVD0I6c`@=N(TBgX?*3X1b#GOF;)3iTC!Z_%QovDO}6HnLS zWZW+D;fw4BK@h5D$uQ-hEVHniC^OL2^}hmrUH3ZObHHEgActXdfbp&Mi&`oJRkdAj zQM&GJznRqYrSg!jM|G+6fI!01h&S2jL%Vs~X)yj%)iso-T1J?Q<*arB(MzXZbe;YS z^l*Rj9z)p0r_-L_>C~Zxy9+u&V7G&AgVP~j3wRzt_?$nW+hU!}r#*C8b-n)!^uKUj zUxY=SPJ8;3N&f_HlQ3QX9qpjqzoYxuBD)PI3OK54+NQa*kfU~ ztuxl1b1o))q%IG34Qz?srld#ToyPMN>Olziwu5%ZFdt2(9X_#|urp29p&5j&GpNrB z3q**?(x=-o-gcrGX1EVY?+LmZp3Ab*>;0YE2kT`n=%L3b?=>@ zbw3zq&p}I>W4!Zuo=>REb5w#``a&``lU0=@IPPR@SJ>lw8u_uu2ea)&c4Z-d%r_Af6MbKl|OM-+$hB zpq-a##&|oPo)>g~=x6Mc33?v*7xE=VUB~O*!<5t(9I>|WHa}H%RM&Q=A^_;lX&a18?Tc7^j zw*%vO(mqK&wvv7ueWiplPloO?Tk%dL^8BtQ9{T}XMraVBr*$~_gV_T1J8PiS>vIpD_+CL3?sX*rUnbIFFgb28zofXKN z!2eI^JT3#BmTn6l=8!!|QEgI;>?*HO7c-?FbYnddY;>W|{FzRYXaG9BLFZ=_=)8^q zz2@nsrc09YA&)QFbjQz0d9Rfk35LGyQkS2|+5q;~6k>iW4Kw!%xmH&ENFfStDQU?-4%+oQT~%e%C9lH97>nzq$_ zO}}@2R1cYJcDL%yIICV=hn#HvV9rFkcphN=fR3JPXB*Sx0>lR)N>NaJe8 z{{-SjFsEcOmmXq$p>6JCJ$@!>KFFNBS0X9nH@3fyqr>qt5}5DylfRjK6J#-8F+bY= z(c;HEB*r+IV3$3S{5?V$?}aw%WExVhMf5vGe*@_`lKI*ZOI;mft*CW!(D@P;+us`( zvUccduV?g{hWMs_?_T^*0{9D3YdolGEf!{Cm4gDU{?+Q={kv@c7 zg=Bu#ag5~QGxI}!hwL`nnkS-Z$L*3af}2{q>srgd~abbd%n=fm7exnH8qPtp%)Q`1eF33^jFa8sW_Z9MendS(mO`_1F?TDwx zN{rz^>NWL!cAs!jhd%TTmyraew1)?K<%B&2x1jHY<@9@9&&x^wsGYBo>^(%957EEh z;$7E9I=U~>o_0SI(yZjWKY;IO-G6jjdXQ%#+img9nQYv^cL;Iq{;B(j?x#q5eYV8g zN9}&1*VUoeYnQ*JrN@BoKdfmPn{K-g({3Ho?!UU7I@+sU>b^;Tiqw7CZsR{o`m|kM z#)`U|^6EaV`;|`bNAmSB^T#RarN^gnHudl%^H&XJUxvQ!JGD>=Khs}6h1YQ(=9~OY zO_(FyrJa~bb``C884{W}1+e$V%U&RR0BPG*jq zMt_W8PMgg9HrbfUx?&-IgK@_qClE$|QbE}6$Ft7!5M&<^+_C6Iv2O1nljVeU$mojh z1Nal4az^MhsJB6eKYC%1$Q-`Jj-%s6D8{;(!}Ap8KfPbHo_2C$qnBJv9s^jZbm2wE zdyTb(NPhb>?;zpbCcG!*6POCu!#)lDnYDx5D0Ra7*tiw9wnu!m+Q{cycs6UEPnb96 zlCNv!Y^|pj@Qzp_XB+8q7Iig|v8v~<2}UaWR@(m>iLv!o$QWaRoMp_QFP%+zEMXzc z`?K)BR3_1P2bzAg-*c3$9J}jjmtu*PO7?M5ng3I9zb9j1G>n00)g)K_#!}YCOXVVC z66<=+N-5NmGKkua&F!Q)$*MF~dZBKw))>#oHT0tl=DO#NWrTg`MeRjCW4%DS3yl)( zMz=56;qsI%wLQ%(a;tH!Rq3^7>nwpXT0;n{|+|eo$^;4wSzE zYYy#JUE8I0JH2jJ%wqEllC_WR{#1O~Clzaw8bzJ%q^}4U7UMQxm1VpLPe3em14?TI!vYu!_cI4K zA!joN$+^~3dyw_WACQw->-Zpt^8CCP#<3VBUTmF}`0F_9kgTjI<2v=4^p;)LH*f-c z@f$5>+je9v?~z)&9#U8*`m&buZA+2{t5SYo&A7{&3DM$fUCR95Q@UDrQOynFY>O5r z{p9D<%B#z_7<75aug)X;7h+szlZ#w#Jg%1U?*Ey7d@)=HsgMD)U~xO)$lKvI_7AUO z&*(PYHso^$Jt9c?F*jad?K68>`_!k_*M_nV7=EmM23iM=3wW=7D>N(DJBt2M>nHUz{)eqYs?s_j zz1j+F`L^}EykUJQ+uHQE0WE3817D$SuSl!)vHW7aVBTo$HWymF&#jT1H2BL`ZHEkh z?3QA0i}fRA?4ip@oWr!mNA#D;d;`r??9KDN*i9YbyQ_)srSDj?9cQoAhxN?2l%2fV zJj(H;%sOV! zhio3Uj+ygt?;z}AJE{%eSLJ$|?Hd>is!o>$xc$Bnyr z&c}ZRJc!?N!mgtYRuX>=&)LYua36YKqmu=j(fNqFSc>1eb}qM$QD>L14*o?=p?t%w zaO&rzmo^vj8_E@?>kPTo$Rn>Ou~mevHOOKplQ7l*q0G@eZQ^-P&SV^&VqLb9HQocT zR=N=XV^~kx$BfUYpSO8$^x|8tw-v{Td)4e@?KF2;?-)tg9AmW@ovk*b&N^gnwLT(j z?{Dm~cA-}XyNt`Q^>_9amRP^yK5oq8nKBu-^Ss4sq<)%=0;`Fhc#O z!fG`#IbZl$4B|C0AOA|2L0ug;UbGGy&smN38e|sx*UXZ}nbg^H^!+Z@DRhn*XA@t` zfmVy0(Y9SZMxQt$aeS-ylrI?n?za1+C*Pri+U}5kZ6C<+wxu$pEk{PQ&6ba>1@fjf zL|(T1B+zo3f44p~U$Q=;KN_rm6?2fuxHHwSws;n!G1(95VZR(FMPWVFuun9HoQSvGuque^S<`_H_%VC zyAHp1Ufo zBE5Uu`up784{w+Hn?moM>$5q%@A%*3e>n#sJ$uiS_wL24&$`oY_Wmz+JI+7;BpD;o zyj$AC*_%Da9_2?mE|}P}_u2nNde1y2l4s67tbKoyU+et^(0iGGkfihP&O&T|^8454 zART++dXK_ee_r|5=OXRrBi4TM{nzIrfA-hka_#&7e<}Z`=Ovtt(w=%hz?P;yC*|Da zze)6a5l`>mbV%XAo%<~$1)@C{|}&Cs6zdhTVnxAoM&?GGL2JO4#eKYuvq;yc27 zw)0;k`Ty;l%dX!)KkNOj|Acohu8XnXI%+iW{@TVn>UHZUV$-u65{B6wEuwVK-Xm*H=nnTnlD<-=5tn)`2x(b_Gs9Di-uU%4oz?z zTHpkHU^9iY&&k%W>O1SG+J}1&>}8#?+G=3U_qDxGr}y3d1n>F7W+3T&O}bxMznC|W zkJ~7N-kxknj$g~bSdRo6Y&Oi>r=8)6M{a5Ai z_Ce+p(qaGDjA#8jlXZ2CeddsZTklzP{;M*uw|w06v%Y8E3N-VXzpiH77Rv>o&tE&! zXLiC@uooKPU0d2`d+Z0@#NaK4>RN8NWwz2~dZ&jv8YH0CJlOX~JLV;}u* z75l*&&V>G|uE^(G_C9#B^{zRBczCxvnBef(A{Vp5CJrRA6 zM9|M~JI*D)rJ?QgG_Ig+=Fz7X+3Taedac4*aJtVxneTW( zE@3}yG;8KK`sO&kha%~h!RYp6UpSoo;=z2c>-#(UeLbK3Fa6DR!izPIZ?yin*@Lmq zqlO^20cTOCM#0#2H{ZwlEQ@aqX-fw5+G5z>o`OHSFsE8U+k6GE)mCS|Pv6-ECs4XW>f=rg9y?49?cP6wFfjFa!k_hOj}LG7{! zGVrwL?(P2CPrG~RXY6NSFM~duVLor4YYjjSaJ(x6eD+}5>(>j}3qO4i&3pF3`dY6^ z8M9L;#}vln6#A~d-=ojLUCehb$33>&zVm}$H~hH!!#t+f>H1!aUe|s_-Ppkf zem3ZNp1py1zAq<{wl|OM>CrBORgGN6IcXv+zcLR*~+TmT*#Fz=9pZ!nZU8&!f+-Thao4xM;^la<3>z=Ov2Rr{8 z;o8ROblB;Tf0af@*#9l5^4jZ5OE^6rcK!Ts_@5s4|1Gy_`ePn-I_A~w?M~QVh5sQh z52E`gR5X4yW*+@a6U2V(LFRDIwalgLJ#A!s>H9{kMc5w-=Nl~I&(Exv#`6t3p83{> z{kbXXM%Eqo$!G`bKiihJr_ajT$Ce&X#2dl8k<)-S{l4_b_O?sy{e5XmQbRbi`oVgE z_i;~|)pjR)-4~)a7;ckn?vOmB?`51i#PehriF+0DO7#VM+xlM5VAf5exgXetz3;Ke z0QQ&fs$7sKV_fyDEo_g57MD_kiQ>zzxQX4lzo5o8Mf+q*8BZ?`HnRBX3_io zhtWMwUcRNA-?E45PkMUK|7N}ktJsTWKi=N=ujiiZ=j^-c{r*q5FRSVkudcSzIA`3-g@yZG1vNzZ`p&!Q`}iiWzC`yzI$F^4|yH) zu9h2k_otIjeTKrBC-t>QqkiQbK^+@m#D5&A-EG###;4ZDw9PJ!(OaME5)S&@#W48} z|H=A*cH77Iw|x%7p6PHS8C_5xQOXv;o!JAKPOxo)p-jcf702Cn1T$=QJ> zf&RdG4twYI#w~o)pCIfveqs==ouCR8~&OhsOALDA6Prfwz{70Vy`LRFH zeja3WqW(t^_7P$F9EkHF>g=GIiktpztfk(-?(4e0*U&C^;J<*eq@T5ZU-W_Wb}7Dx zjpwaTY_6i60ly>0JGd9qzj1T^-bX|GeuIrq`7RN&H|^Dxen|f`?r)dA)`!N0a1MR{ z73|JtUtZS*Qtjss_ZHF(WDma=It8S!8Hqa)nQ47aK0mi*3}rq}+YPk7|4nwLk9B9f zGX|*hBlcK0N&XoZX0i3TS>%O1oFg_H(7V5V%(S1Ck(XWc`-9Zq0exm>P9q(Ce%En! zciOp~KCiRK?&;@rYpBaToYQeuXOG*C^SWy6=(f`J+e$rC$Eue0?>Mj1mTm45#)PKdim9#P?!2RJPCj5}n< zS-w8&*64c!_Br}4?s@97bQ^21K8rVQYlqWFVOFXqXWr^YfecZs zzqt1@SY3(#EGWm1^wkykadSl@&AhvGTnFS49*R5%@Z)<})DuYdhBUU$1|0`C_O)HXn z2Bw>L%$L?n?0^2EPc~ub4nS&)OdHxVY^THouq@C!5wH*Ar<(8X?h?>!3d zU5buAp!Q$Kg7Ec6+D*TwDwI^Ta$79FN_I?}P@o^DU~Io-#` zFef)zCpjN>D0X+$-{}uiu|J=+7Hc)em!WRuTxT0+%dhgc5<9Inbs2XZPOxXyllual zi91=ZMbLXnpEdKm6n*~klDkn3wHgzPA_$f4npCD|aSNayR7@eP@Dihm-WHW88~+3l>5O?@s+Z3gTfB%!f_DXtMRD z;JyM%+n+B`=X1B@5bNgE^of3~7yLZC81f6r3`?6?nZ&@!x>T)m8&-AJ8Y6stWAJfN*U?upm&vHm6JA$A) zbOsOS1KfL5qZnJZ2Kwq-Aj@8h`BVg8!< z8-KcINk8eX7Vw_sj-~3t9gfrQSaQEob= zI{NZ==;jlzJM-$h=o|R!d4D0#*k$j)(CN|KRJ9w9yKTwzX-niVSH`$Xjxz}$xUWCrJj%n^gy6ikDqnUYP z2|7oB;y7mFe=~X0Hh7o#L=Z1q96r~=0@B*Y-+zB)S)}DKALd!Nv92fTMVD3eW}N-N zdU?N$SGDYEyn;N8+=M)cd{4%6E;EjI+jz<`o_FDRRgZfRGM}(`ND48 zfzMq&t9@Se+3xd$PgAGPouWIP=bYf2=}d7hb>87Dauz$wofXa(oUb~!J8PUDIzM;r zaenVS$#o)^E6^3?igAr`jdM+K#kr=q5?wQ0X|79MIj%cgce~cO?sb*BDqJtRUUmJ` z^`2{|tJc-vI_x^)e~15S|6>0K{MY%f_kYZPv;Q;xFZsXf|F(aP|4#qU{eSX55?CGh zYv75%mI03pI1$=2w14Q-(3znZh0Y6|A9_jX&7s>uw}&EY)sghVF_U~!e)it8uoD5lVQ(n zhX+Lux?<3h!SO>KL!BdfxA?U5ZW-4S*D|SPa!W$XZ0nR|(YkIaQ*Wx{27mowB%3*Q zixtpf_n4c^kIhE2$svwxN1o$$pFp3!KBIi*`7HEVw&wNs2!Ipdtk z&Q#}Z&Xvx!&ikFu&|)t;tDNsTKcK~SJHK)6cPW>TtE;PrYp83q>kL;cEjGzD-8I8C zj~2V!b(?D?EwvgNrDznyGrPc#hv9;E^$690EZ7s8|v#zk_S?61`tqIl`E8KEhq1J%56K&0H zKec&I?K!pk)EBK0tzoU9ts$*lT06J;w>n$>T06BmTGY&?1Br03*;lV6|Qaq_)m{f-43a~|_M z=r|~zlb&YJF;A1{sON~M(R0}Iv*(cKN6!x)kLQ4ApJ%VFaC)m^5 z)63J-6Xfac>E`L`ad}LSalkro>cGzjemZdQfakz>2O181ePH*2x&!YYs6O!4fj194 zb>Qv;1qZSZT)n?#f7AZk_D|jS+`hlCQ^$GJ>sh^&PlaKC|U1oG;r*GmcLjC&8VE3gi6 z{D_Q!^U!k&+s-fnH}&m|1D&r+kjapOo4R(U!cyEh$lKr!+-s35fjafM52>GvakJ`j z-Vf!t*CU^S3fwOs+tFok(#B4t&uhpkpe#Q01?Rg^gIi1PWH@OTpZAcoiN=Szb?yer zrCxjo zBQFQ))t7v@s9P6x>q}pEQMazUaZg09@!~rfNj(C)U&G`_f#bH?4q81=Od|S z*NeCrU#^#cdiKpgR>41UUx}oCUDT`ZG9>lvqF#NMBdJG??~TX?FTN{~)UE3<{x=~R z6B=Lg=ubcQ*Ll7Zsh?NlE<`fE{EKmGc^^E0n|%8}4C`?7?7!ZN??cE(;W7M6k(*#M zZuI;qpFd^u)w)}O^7x|X{|e}GJ%xM|-o}ld|2t5FTkF0Lx?ImA={p)<;`{#qKjEei z`cn>#?`tA~Wl)Wqu@y)i1pbP9H}Zs+P6o2YOD9u=CYAw@FqRxh;toKs6EYP4(4M$Y zBIzHY{rTCfK%^UJD?j>AXd=wS9fwSYi*Qdt&hz4T9&)}HKl)K9V^ZUngj@hO<0gJ+ zK5WCCg`_;8j3d8|Na`VU7w!t=XYdtn>M3*&(2joSg&u__+|*0xF=)g6rFW`!XW;%G zcQ#zdxFWx9`l*}tbdooBF_hq5j3hlb_3gY0NqTPT*qMv01@hp$1xX&W#Q>?8UEBucm^!SeLj-555F2W^%Q;$EW{lBIy?z|Fe)=y!cb^17GywPyG*k z!;61B@?9_flacSk2gIF%JnY3kL1a+07yqe9@;2xSbfzK6g zaL+|Lz4*@;89_hN_|rxdL0Wu7x|~4v0Q|dHNcvUFIDXBK_${$Ozv)UpYoQF9uGCQr z>9mmFu93)dfIM~`gd|TbvvEg>Sf{*n9WBbthYk3TK|Timz$iVOjCOa2{4MBD4kGiyFJ6X4Kq?= zxDz~D#>iOi{ElNkC{`xOL^)I9_&e-La<;^?FF8fdkp!8_F9%E)?&8UL+}TT#nKDcG z)dV?TF5s?Aip-I@a*?FUJh@orOPX9Fm&yW3mxbj2PPt1~$=!0ll**&BNgkKY@}xY$ z?dqrbTjghDi##jO$yRoio|hNdC*LM7^B3E%NR_A`QSiO#{!>zyIa{#{OXX>mH_M!!?+ zee{q5DUv&6jjWcnQY`n%J@SAs8l^>RIz_znkZ|>nc=_5y8VNRJ7au<;aRo!_rdS?&%TJ z7GC8}b!S`_+b=9^Ucaz;!z+yF85g8ZjhGiUyuysWGT2=apPU+25l@ICTAK`u2wRc5 zr{B(b{m@H2)$b>wRrm}`t(dlap6x$x9?AGbcTT%_c!h8D^WmzHOt}lw()v{hRysvL zA8C8V|K{Zv-MyQ8!pPwwmC9NvGb;R&Q=eDro_Wtt(+O4tQi`ApaOBVHPZrWrrNZH! zT44@LsPJ=7eZg^;G0cAG#Dm|&_6J`cI`PLyc8HIA>T8@zEtmFZr;c`G`-4jdI&Zbw z16758yYbFw`FA&lJ#S81PFew4ud{hSdhI@4w2!|Xv)!kw_UUrEPasCR#{U+jn^p)s zO<^A2a{vKjykWkjir*c$fm1zYXRV`^0)L zLpl(cpUhm?3_Acl2kMRx$OPtp2f9AY-9CkIh_xQ`pKpvFD!;==s<4bFYCA0~vt5fCjEFMM42IF}I@IWi#Nf=hm*I z(Up96#jk4}G_&3ef>=lc!UD0=Eei5r2S0Qh3FM(WdF>Go1+WD?B0(WQ+@STaTcjuP zdJ?Z^t#Bn9a-b5LMS7##I|Z=S8(Y2c3r+=eg3<3248-pf2js6WvhOx%73t@OIv`F6 z@%sk=dFh`Hd8~~IAAtS<@;0D~wI;Sgafg;cBWpnHx(Rm|K_zRUK!^l%!f}UJz;@UT zO(GH4k03mPI1wp;oyd4dg=`=Xk=hSik+tCAy(y3knUD{qfZc&L(7-!02#7a`c!P*H zhCscXyS|} z&S>I{CeCQ$j3&gZ~)($KXE(|1tQFseuNOvBVvl1qDzBl~4;F;q?f?5CiFu z3&l_l)ld(OBIEqP4U}UXcE+uTZLkCO0(lr81ksQK_>aebJpQrx$KoHG0BO)5G9eoZ zp$y2+gjyg!EZ1Zr`I#64iI6UGCUMWi)|uFf!&V%5jKh5v?z0Fx3!SqnpavSCS!7Zm zL_s{HLN*janaJ6GKpxL7g3V9`b#O=|-T@&n7Lp(X@&NmjNpCXoC*z(H0N9?V=qBq#@-&&T%p*?`^! zevkm<{XzlsE+n0lC@6$O(8}*!2SGBV1NoX$4CPP__0Y)Ab7O0+8_3UGbmwM5K9oWQ z)Ib9?i(C{8F@WAh=v`C@Wl#VOa!3rUaxc~AmdU_0!FCXodJ5D9UR0$ET1>qXM3mvqXOPTA5a+d@A`2FkWD zA1LQ#*t`szmtpfVY+i=VMc7<~%|+N;gv~|RT!hU<+n`1yV=N>>1rTp>5>$y?9tDL! z+E>Iv8K9Gy2DKtr1_FLpMME((id>xsxUcqzWRX@D@w2d%#q%|ZK-e|p{aQDW?zN>N zO9CMi@Lz(B>;%{>avgTBi-Tk!zt`;$7R8VRq_ea_WEs!Pf}jlcisYc5lMhY&Jd+=w zdp)+6hd?%9XE|vu-vV_aH{gE*`Zv^yD?hwf*EFXCrc5ib-DpZKvPWbKExIF>#p#;jIQREJE z?;sC%L_-{42)!coiqI=+6x(B^`(x3>+ zpc>FwOZeIlNP;{lhRsk3q_dX%6qBD~HzdG%sDSNI4~K-$DIhQRlFq&8+)IA$&4PSD z|6Xj}y8}q?KGM67@cW9O26jWE@QDf7xIYqNAqmnU7s%87TcDK>HaEmU3KX_O8YSeZ zgfvP>ql9ulKspb^19}f+!e)^N%YZZ=iUMprL_QwMf@-J}DRn?FL<4b4iCaqC(mWs! zrPwH~1kx#O0MdEb4~X;dSU~sTTquGnK=0wb&?>SHopmvQ-F3-;?z()y?z%GA4u=5U zM*<)Oa-aZ8pb~1JUSxeBxFG>jpb$!-Tx0`b8wlG#+zse%XcT$W5Ab_57Lp+o@}XJe zv23X1*o?5U%|QAaQ-SeFxApOVpLX*g*TquM(ksk`$QrX1M#2CfC~Ny zI}+j`1+t(3*7MV4_?Kg&ybLP&2{iKdH11~vi2IBONc(TGKz{$02~|LvTd=n!3DO`3 zu(<`@XG!DP64(OUVYkRuKL`fOxHTV0W9uPk6?qOD&tb2^0Uz#uO>h)ltY8aYmvb7YvlcP(tkY< zu>bmAz*bcj6u@r4eieRip!Wvx-oXEjI*~V{Apz2WwB9Tec}oDlw^ASjszj>EZ#DU< zP6o)gA~XDY<#gE zw!wC&gF_-;Iv@nb0%?7j0XcyFm*{_q{+ByoFSLq$6$H_c0BL~kS4FTH(EF;13*G?` z30p+=pudMa?xC*sP^LW|Xcqa}50ao5u>B3?`3C(4%GiM2hTS6HIso^#hq&CH03}et zPa@*~eGw3EZw%D&QF90&%|K7dirSU~R}`Ui6X_YWyhF7jh6kj{_j z9ZCf9@l!k`1G+zzKrImdb2Q-p^EQ#gl;Lm|Y!_(^f^1k19+4xNP%Uy4oug5Joul~w zLi}HH_%_$KoYEndQnC&jD-xS0OFZ(fZOC3Bpie}@?nc8A3q?j zPYw{@hrM?nk0{Qyl`qe}Jo^%-6Y)D0LY*i-H)O#!XcgrwfgOOJtGFHX{DXkJ`j?3c zz#WhZgaWqKq94LpqqPh^?g*3WGLpGEGHoKx5SR|?&al37XCQ;p!pb`k{F&46b zx(Et{G@xujTcBQ4&qyF{Pi*w8fZd|l_foy00smg)trz9(9Skv$4(RqKZZL6!i=kOm zAHw^PRv&Eije=}IuP^!UmnSL&dm-5FPuc?#p+;0_jwmLXR78rX z$UvwSH4qzvus=x4CQ*X}AWKvf;ZejJLf8<}8qz9iC~=1#5;ZIvszpVI0Aa&}pcLw% zQPc?HjKF^+;Uf!xbYfzlSnSKtqq0Sf4hH;2<2NP{(t!A5Nqa1D#*)q%__Hsg&ZrVK z&H<^gS=9Jw$N>Du6K8y@sMtgxEVfS6gaC*V#XgFfm;{+XekOWEohd-tXA*X1B4Gc_ zTqp)~;&Mcth3!e`O~Ur1CQ)Z&@9b0{JRW!adQp=jAzu`GA!-Wor&NkM2b<^McMjp_ zY!j6b2$^t5)Kt=$hRtc{O)nFbi2u3RIJZ{RdBmULfErOrsiI~^0eZ9I0681Gvl~Sv zCyP4Y574^+_l1d2FDeDwDabivfwboa18K}9-HRy8MOC6wv6YIP7X*Y|jGc>fV6Uk8 z=*(~BQg<5EiQ;=-U6KtAqAm>q+?V2BkOIVAupQ7(C;jwVQI}zJQ67|v%5X!zsKrsR zS=8l`K-^4pGPj7jvPRTZ*yMX!T}>YNo>p0bP%i44SittRq;suD)RH8q2Fj6*J3AM! zbzLTq)=~$Mx23y9EhFx-3{g4wN6V6}1ZeRfMg^#_C+aefLv1kj67(Aqlnt<@s9(WWW|tTl|2qE%-l6+-C`UHUSEN@MlT?*;Y}{Ve2{E7386! zQq=QNK==#6kSpp%?7T>v7s<;uH|!Sm5;`w6b7inh)GOq-l6bFTpEb97jkvGlejWd+ zB2jPThRxFe>xVBpJhOesLy%+yjD~_;q?`wzQFbuJ4AgM2RyS*R9|6ZcQ90m+CzGK z>O_5=BkG%IC=k^^SVN(xZwdQ056J&_Nr2t&Q=nYb-fU6(2;ZmWZc+QuI}ior(-Q<` zq7EVtrULPP$O80!7rPlsb8^utQ49=9Zv;hb3T*+`E0I+dT11Ng8ZIvLo6giCZKzQ_$Ml$ z1{$DQ)X6}If^tzU36KUkfZZ1I*s=rm0(oi;f@nam6}?vUT8m&aR6!ja62+QNvF1~! z#zGQg0AX#ZkPU@U29;0`jr<|7ACPA&7Lp+o$g@=n6;K1@*=iO;0wD_GAr-Qr5Xztu zYQZCh5(tJENQ89Ag<`0H8bHrL&u~L5q(U|nLK##-Eud$jX9hzIBtkmmLNSy>HPl0+ z7>+=Q0`wf{InZ;U=RnVao&!AxdOm*OhFD03Ovr~)sDK)15dOdhf&o2W^nB6tMb8&K zU-Vd)8opYuS&UAB5C!p&3fWKyWl#yV;1Po*x8WBIF^~x9kPF374%JW(jbb?czzwmG z44IG*rBDI2;1Pp6U4{!iS3IObE)+vKR6_$ai{T#(F^~+{@-Kuks03{Jd&CG3KraBj zfJ8`#d?*F<0?=daY;^X6D2Rtt$c92F1N1th*V!XR7lB}ifn>-8^tzzer5fs?S&XiM z5C!p&3fX{OSM<78LM?d22owm07)XS4$c17khia&YMlrhifg55W88RUsN}&R3paGi2 z=pG1B5D%%44TVq!l~4;FF?t9DLkuKBI^;qzltVStL!%f$e&B{!NQO+vhf=738fbuK zF?t3<6vRU+WJ4j8K_%3JM~q$q!4Lz9kPf*}4CPP__0T9rZ$EHDEF?oFwLp?N#(bo^$5DUqW3HeY86;J~W z&@4v3K!}2PNQG=DgfggvTJVSwA`lEQkO=9J3&l_l)ld(OV)XX|H^f3RWI{faLIu=7 z12l^Ka6>F4Lnh=yDO5lW zG(fW$VSx|@@sJAHPzYsE3ANx6BU~UDVjvOHAs31P-SB!i1g&C31VJ<;KpNyg5p0Gk zr~`B(9S{OzAqn`4%g8(^fi18dc0-dG0|Ouu;vfaGpa9mxHrN4sp;e4QK@bfIkOnzW z1m#c-jbaR@Jc9!v3gRIZvY`+t&)`a^1&{Z74d0?h6zTsTLt0VEkPdlJ3gjz_^r9$3 zRI?aE+>i+5X9)g7@EaNnxv&`;#2DrWkjCf&s1ajK08pke zDL|TIs$s7fW5+^<7-vwfGfDyfGdyC9BmTHpAiZ&|j_gMm#c}^d|cO=}!rQLNU(4{~YpoPK6i=*hwJ0sVPt? z#x&%#8X(?u^rmBTdNL4iIyR@1-t^sKB;uc#4kcooE06=)T@J)Qmpq;q2#JsjMNkH$ zaUSW-2oNKQu$iS$A;v81%_hCs4bUh?vY!~|r;2ewHdKpoVU!ptq?1A(=8(?ZNFeT9 z!Y+z~dNJmuiE*(T@Vl7w=i@&=3DU(#BY$ayK%BI4F)qdaf@C0UL7f=s#J?;S&|j1b z=q^Hc5xR>ip#fUO$cO^$W)L@nyk!)?ZfF!^aTU}8?#lxK-OCdp6AGaWs-Yg5#ke9E zVj&sG#}&Cy3Kf9f74^_8My4BL0b7~qW#&UMlmWV#)ldr_F|PCjH^cz?S7rjbSC&I1 zpm$}X7*`1d0=iel0D4!g2g0xRgFHYli+0IM2Kq}@K2(cwO(3L0AyfeQyrxNvYw^F9 zcDa_kvWH<@n+@n(yF-j6ge}2uNvRmw0;G4H1L6Q1*ENW-G!>}NrCR`d%SdC{HmDIJ zCmx8OL%wp#fHZT^x!w;5yPmM?N$+}WU0)4{#8{5|22C9_ijnIE@|KH@++x@U*uGI9 z8OYO(g<`CTf?UvU(zz)SDF010up3A>kLNt>7d=@cV!?DzA_(3^G-j=0rGhl zx_6PzT``aZ=-rhEgcU|XF_6Di2|(B?!d7jD8lb*bhd?4^LlKliEf8mQvlw^B0rBoG z0sM=w!@0Y$hIni8ph=8-NdKO(kPO(l2mANz7Go{tTwF&A<}=S0b0c<4F;Y| z$xkUZODmxc8pU{+I1gt-5tIYA9`=Z_E&!q-5lC-cKCB1gt|RU`;y!}TBW}R&u}EYGE%li?IP48?dnf8ym2(fwVTDyMeSekk$s$+CW;5 zqW37a9!-FB$b(YY2H1P_kQk5oK`dkf;g6Az$7+DI$^=NGEE%$ZG|DPqJ2XJ67#pJ@ z1+szkHxl=8;yoS$*nOO^#|eA92+E-fY61J3f*=tH+f)YIfcTpT+l-CP*w~DX&DhwC zjm?B_ZWiMSo}b|Pi9#UW6WDyB9-72>G7!kqlh}PS1M*=#R6-pb65}Zc1dH)>j2O?x zwUdlQ|5@~(ErD{_0j*+eMRzMUx5h&n<;{IQ(y?J1iMe;w~{XEYkAqhz)*W|t? zGn4z8nN044+;>6}APGsh5^_Kw97=$o2#6>kc%Z20;*H2EDk`4KDk>_gsH}?1dV=DO zE4t{CXMUgV=b2;z?tb4tUbHeZ{Zv=q)z#Hi^&DIXxQ__WcoN}-1AwD|Qvj6vBIv)k z901%Gj{(jS;V-D`Uupp;|4sfnc$EOw0#MFtBY<;6I0Bp_pAzA9+Zu zw^{&4i12nSU?BkQJJt$7ecu88I|qsIt|uT4u#*Vy;S+i_;kX-M6A}I%1Yn=%iSWKZ z0QGnu_4!~JaD)gSBJIQF0F-+IX&)5)YfFndWGn)usy8)2@n_(h+i}Y{L5aGKmMED+M z{eV0_pzI$zh;SBo(31&2og%`&juPQ#)bkuZe>p&eU-uB<-}pQa+~4s1cYH#JC0s}% z0(4OVbWef|T>Ga)B=-@KE+nE51wfP-@jMZw!$i~|%_R(g@2>lZ=ysfl?s-J?I7dWJ zyh&*?KE06UBLNV#Mf)KUeUZnnk%<1Yi5Refh&c0#x>6zrjSw*y&qIz9F%-1Iwi7WN zpAp{?F$(2Ip&rrr9C!C@j6b`!Cv6@WHOxsQm&yNFnV`ji5bk0G$ea zuS9wkepi7;HOi}L1)L{h?WaVn+fT&$AtE-QJ`Kl+*!VmVrvkqTb!l!SVoMZYHxZ{H z&otzjzLtnH(g3H3*b4l%eMD@>^O?ZyAb_1j>_iz|9};nP77^!o5^-)E5$Az^cN7tO zT8TIxzvm-w??EE=p`3oC4QwFdf=VJT3?kwn=q$1Tz9Zt|b3`0EO2j3ziMTY6h|BPN z*##nAmIOFU#LGcr1?oGzi-;>x?keD|2Hr>-0MFL|t^l1YpC{s4lyw!#S+|9V>pO_J z0rh}fAZ{!o;x%qW+=TC&juG+NA-Ld|5^*!qx3my(EAXzzvu%Wk+d=z=g+#nDi-E{_F!dLc~Y-;{b<<_}B;$AIJA6kPrM;JOG+c0_Vv+M0_d_aD<3YBkdsS@eG4=M11xr5uZc) z^ZSYT0zO~F??Wi#uSGZ`@48 zH$m@B;2gzo@Impd?}+#|;GHlczMDnF_we~1ejf+@zoV@8cM|b~ZX$lzNW>FyMEnS8 zCxLSkdH=bbh#wy&;wNa+r=Jq>Gtm4ZiioFB?&*U>{K_A2o``4g{p(61ev?JSZ}IFq ze14BSKU#=*7Ww`)OvIme67k#~BK}eYK>5GkOvHc30#MiUYl-+2KSO}? zM7)4>=*Y#>-kd05$>65y@o>kzB(7 z8;InFPq&+iGzoZM~M`$k4S+hiKNQ|pq!xDL<&wKQivPi0Fgpb zr?4WxheQfT{_yXJ6wv`d-bjDI7Qh7}MfCxW5Ggu~NHK&+dInxG7mlG)m&vJ$VNYBj! z93WC2KJ!KZpr20wvjHCxsQ~#3)&f2yQei0opGCERb3_7-htfL&j<)q+kP^45b^{ca*PbOX?q#@PVmn>tLS zrdYsvA~kO!QVX6>s|B1Q()8^_nz5Ehtw?M00UQKeAX57VBF)6_nacs7)q(OlfZvJq zE`I>>bbU&sSy=$2&qf)u4-sh&^32&oq`5(W14NqF0l>3)hl$kP3fKuaNTeQ5KoJ1t z_ncK={z4+nKTo9IC;-aqeID=~k@`vjpxG}0h5%=XG_apY3s8>*d4QutS~v_qJqKF> zpoep=v>5n{cM)l*1AzQXvH+)uw6ujt%fbNLiL@NFmw!m4%W45fh;%vVuW$qO0iGw) zFmQ1ul~y8sg9#;kdP^Yzxfa3~Wg>tS! zzI7;PJ@TyIN2CotfZas8+5#9M(ni#2<3S=_lLkOK&WIBB4GH^(bnST}UAL1+n=1jI z5^2j8B5eiUR?xp5={Uzp+dzLi@@z-Fwx1)?4M@9TKap+(-5ZY(>85S~K5s4pY$DPQ z0vHB>#x1b`)ah0?0McM*EbRpSouGXi>U&!Y;0%#&&jNt{9iVv!Xy0*xNV{4A=ZSP@ z2jDP~?ur6z2cQmrS_n8xq}_dhV??^!AFvz%{Ckk^9z44jb-54a-*=Ko_aol}vjL}w z^xy^}?I{I3Po#&CXD{eJjQkHH&%WbC`txogJz@c%-j7xiX+LP}2kv7n0ML3Iee?wI zpIA<$13m!!elm|pPXz&v66xt-A{|7YgGY$;3_hRPK%{5!`7G-2Eb8|h>hT=tJYNg= zkVr4I0)YD>XyJSyy$GDYbP(x~1n48uUy=UTLqvM18?cs0FXP$E&jWyWxCj7xuY>`R z_A2tf)(F@II7y@<$aCZZkzOwapo}+w`^I-fdJ|>7iQh+2hoc9H^tUj;PQW=Ly@fn) zp&f5W0X6`R5$PD}a142l?FRq{=K<-Rn*pbY^llyi-`~Zv_ap%Fy?2O6$BO`Gi1hbi zBE6pmI8LMwb`$BtQX-uIy%WguQ7iyu{bM%Z9Fb1q`9FgIhluns>h>|xK3NXH=cl0m z8Or?(?fM+gK0iyOFYxS?8{j@7od&Jb$B6VL=zn>fNVrp%aHlSv*#|)WuloQ8i1ZE0 z{$>bplt|xN0Gj~p`*|XL*9dr?NZ&^RP^a%f?+29m!%o0qBK?SZoke*+c@pVgNksY? z-+u<~&%pT^d4EP3Kd%J<|L6UHBY;l<=ZSRA2M`A+0<;2#0Gj~20S5uc0B4Bw3jqWH z(g48y1-QQe_tzF8{o5Y^ynml1(s>_18lVx-2LP?#mIJl`&JpSN5x{XG{RjQ>pPfXy z0J;}|dtn!mMnPv3_@n2EB%@vSwM0YG0LO`jZU^iEoCKUB8Ug80P-%pHfbWP##BXr~ za1ems5`If9fQ10yN%sK`1CU=revKy}7LW%3o(6at;AwUN4gih?RsF9{_&49RPevG?TIb$OE}W8o#`Gc4#35fC^2MX9c$6QHX9@lQ)IDJYfMO4IMF6CkQI-YuwHzWEE9z_Q0HB^$ zoWBvPfzacK=p_*ZglhxpEgRPmjX3r`Z@ju1kQ!Lwb1s1n3a z>#8?t{Q~sXV}Yi?<`&_E{KzMt(5BICeSN^S&|@@Rcm=o~z%>T|*~b4`IzvsNyV)P% zmBkx3E(S2#UWoJ@Av}Xv6u1(luI2ze2fa=23b2|vm|e{_5fA9;*v^5-{>x0Y#t}fz z(#VA?V{2pA=+j1`)(FoWE`6l*J^aJR;lqdJ^N*l)(e`zMiztv3VnMtLV(@oyMb%Si zJ~ca<3a(Q3)GSd?a)5{@@M%tYT!LX?hR5(^$d z{4xRq{9R&AH7yNuX{^RcX@nXUP63cE?rzKUsg;% zs+`wTR?$6{41HczS$EHtp7LCV6`z>fHEN>MyDM2@cX@7nLT+wcVlMj6g10BEL7gH< z0x_fiTwGmHChM~l^iL+QgsUzS-RbYD(~G>*^t`HmCf1FpF?}~9Dz~&_Nm*xVO!xI2 zdG%LEHs-7v{5dx%-DpY;etdUnW?g1geY$VVV0-Dz%-k}4@yyn;%-W=TZFy2x+pY9b zgC)k0mTC%3lpi>fSe9U|L3a^~Sj5N3^?a_WGcBzvG)|db{CSlT?HLb0}iGTif{*$@H{+$e3M&LqK#&C6d^s&htLH%7iRovqom0_}Swtv?%f5~cNFGcYkCr6@Q0%!(yTFQ=Ew zr?ym=(;01>>e77VEss9)9DPszL_WFwR?wnkKK`&d?S@a*0GnB>N2Hwj1-hJ8`di`T zl%`QEON!_-s1)#mQDUZ^te`}74qL{@s$4l){pmg(ide*!`|O$ zru+u)A3fF=MZRd%F(BGisUm8ZqA{7Vc9e#r?tb*7d?GBja{iT@7Q~k&8~n7A*c!RC zvbm)qJ|}XjRd{8_tBLFThpzVxj*m?B)vjo*ZI~HupzDv>*7yAIuPIGU1^JEDw4`fWli6qP40G1zbq!a{ z>$`@oYc4LGIisYanT=)2SYMz`E&@8<*A{JsecI;muDFpa<*S5Os&~t8?|qcIKRE+4 z(4h8#AGk~$2q-MiYH?yQ#_`&@#JH$@kY2Ou>UXbRnVGQS`4tJvhDu7ZY^B*7nx;-E zX{MLuteCTE^_{KNexM z-xoa5TI{!MC9)m#eYP6=`sjUZO#%n&{R57}I18SOfp1Ye{s0eaSNfgf*=S9{tbs+C{UyifhX|clERwUz{>CGp=xM4*f+wqxbd= zxxRJHQ{UXV?d7PFgaro&=e|&qS9Wse>h89>%KrMnJu~DtAE-52*0rRU@p@}f`K{oo zu8d z*xcO6q14cpt!K{2Pb69*vdjL%#x@OW?0)oVxPt?z3_y`7Y-S-kCPhrsrd6!0{ULFd zPuGlr)oTaaXKQCi%fHmDs7Te)?u@wu4VEA3>+jie?cF^C@+ao{{@J|UZK(epyxl&8 zm{IdU9~ZqzVP1)}jRtSN>rdA`zi;8t(87JfiI?PkFE?$!Zu55JrKBBsdytn&ivi&F zS^)lgnm#i63;j**rdw(4?@hvqrmvgE@JoQtB~iTtyAyMMIqhIw>OckUB((Vzv>E*0 z&p!gY7{nC4HCn4zCkorx9E|Ww_)CnS&@Eg8)5)!Q!Sp!3{#p$*5_}sT! zuln%#RjtCj(K~^EwXhlunaA2ui#!{V2V+IC>$6N$D{SnSuW9X}Yj}ejMjylHK7rXG zF@7w3iScqL{>Z`G?88`zA;!fgkS}QA%R{^Gdg-M*cmGxX)AH-Lo!NFhopaCo@6qY+ z9bb39{IC1(+i=|jtRDozm~KDHc1PShMk|pOkC~~#EU*|8snEY<=IKtFyznx);iZzA znv$0Uv2%(1rf_2M7p23jGg*CJ;q~!iySv7f&l+AKtV@%QZOyD=;6^6lpQ-)R`%$yI z?tHoTuC@kNv*met)ih^@nbq#yz5AA2Rn@k6jLz~e9G#m)EKEI_A3B27lNV^{amPT$P)jYg0r2palx|8#M+Y2KC3RHeO|`2gz!l* zZt+>Zx|FIZC57^B@5`)|y{gu7Mf2TmZE@7=)RbJ~OIMTUm|g){T_ z+&lldzH9I4eqdvtFk|!~WZ5q?GGKK_KH*yA1JAFk3#nX6rlUua>=kY%z^si1a!6PC5_eFqyIf zxNQ9dP%KI-#lBsJcVRs>`gi)2JYP7`GWxfsCc&!k#v*$X`5pM^Q@-}G{(tZ7eO5S8 zdEtvn@z1P$XSqKVEl&O3_B|TsCw$M^h5YQCkNi3-7B?Ue`HxqM;guJ_;8@#}Xcc`3 zG86jM&+Nw<|4P*zWvf<}39rZ-Xp#(H5&JjxMxoe_cd202FiE3$bk7wT8A|>@bm3RR zDbDwFdeb$t^L7ZQZoU~01(JaA)(N2qKxP4Tw( zFVR16ip$YC-N}y~9H7#8Yos&Gm{E~z6!eY~n`B^!6n&z_B;GXKdOuA%mRk?gL zUMQSoh^uR<&>6#neY{=WC5=l+NT4w;IZgg+RYI4ik7sgY601`t>g0hw@!}^FvzFJ2 zO+{0H9wM{jM4s84-QPDn(zhVD=5%pmV{z%UW=zWOrr&(!x;xuT=-(C}T)eogYe?yX zNbvW6qMbqLP(=*qyRgmd1(94`k@SNWw<1evU47YtfEKr*t_5qZ9GE#sJ8Zd&=XMTU zF?+#|E7$Fs%jgMso7C6zN7T_95*eFS&|f&{=(OUvw4C4y;-|f1&lJ(w3Go zR28FdDoani?dmnRPNm-RxuKaIix#RAU8AK5oT$6WA@F!R2x$1+a6$ zEzQuWxs09@Jm2f@XJrZYAM8eQ8}K}d4_kFwf6P8BXM*gIP~N<4vbV=1V?=Ya;5mBD zpjbg8Orn8jrYry){S|qce5JLSUH$YT6kyt|A1`?7{oco>vROLq<0s{ZXjtP>py3}S zZ1>yA>xDde?M~?U#$*$;TlgLQjq@tBd#t%SN1L^LQL=t;d?~MssjdgW2bidGGZ&P@>rJ@3pxm3O_%ugzJO^l;kO1E$4G^U`=pW}>-xe@JP zbWA|z%K`G`=QW1LoZ6X~98>C>t1L~kLid>*<+u<`0c5S)2 zOYoFu(1#cf_BP=#a4wMx5@rqbbnWa|&^^DmuZ!Lx_aILn-N}IEV{*y~ zHlkT)Gt<~7=d8ba)-#XJy5fp1u-Knof1P?z`r?Z$k3Z(Z$H;?~%}% zHB~iqxQh2*BJ`a8Sle9RgaHnRZ0s6{zk#{X9ma6U(*$)Gw%ANF_4hV}#HKWb7`#&~ z*)d5;G1(U3#FQ}8lV#<;#^EPTVN=Qq9xTh7R5mHM{K0}U)TbLV#BP;$K!oVd%M(sG zWQTB+?Sf}fT)tp?x5cK4x>juVtP;8aFUqQ<5BD*IHZ_GBd{Qkr(TR!CIhNzB++oAS zV)M#au_(8OdeRGc+X|aoF|K;XlOidf6lSnX2)a+Ex>zM!dT8inVSy0=)_zmMTpe9j zUtZ%=rZpJ1g%m>PVz;A@_&*;OwU_-~WjB+z1WzAt*z{Bjo`)Duu-G?&zbuDD!0s%x znQTu~ZWWk9g5M>u)3vB&;ylfo?c1Umn32$P*=0Qmt@AW3n(Wr~W%Mn%*JFA6pfqRh zq?=Z(+Ue2W<}z=3MxH!KZwWd$t(Ucly~$dK{<5M?{t;AX4$w2z7}wch=`bCL5n53b z(+rrfZ}OFE&WI3|wR@Ad(Pj50Z*xg*VRTc?7H7l(wD`?Tw7{6#RwV30cK#FoU|k8(kUb%PGu=75 z1KS^y7XW-Ii}c66d-t~P+qdu5zfF7QiD|FXx#l|aqmSYbWbhYhv3w`1|M(nbk}_s# zfHG6rT$LAZmYM96XitRh_yi=;Ld;fm+fbP!YbkC%xYi2;z(!eNk`C2!ifBbYu=AA{ z=JY-J@rhR3-t@!_ThfAEb6TuPMssk~jrnPV5xND9K`9nf@Ztxms_r&Lg?N=&(~KF$ z%VMh2Gb+N(=Cavy8^S_TZE1$Un1C)*b>_187)w;;Y`4&a>a?F%n+o&IgCWUz5Pev? zB7|-lhxe2!@&x)O8nCgCy7vih_TnFoJNBRPR@5Ky4#5!Ug458CUeeg+<1C7jC^pmh zqu8i1{hJWy;u;!V6gPe0VC#B)#pL9;?9#HV>HhM+Xx^uv-E;dVIDlO^`1F-mKSQ%Z z!-`@fubSV#?v9Ma&W6glBlM9^?%Msy=ezE@=lKomUwCfgdej-ZUz$qmP#+OG*km@Y z(a>U|V23VGk@nHaTzwDLV9qdkK{3X5NLnO+OJjU|Qr*(C(y~h1!U9TS!Zo?#6{~bo zi(hj}wjmP}z&tC-B{9*Gl%DP?cxfjm1w}3FdP29#&0QCs8ix&7K)D0-M(_?7wtHgk z1-R-0)Q{wy0|QpT7j3JW@o%N_fw>q*rVCMY1=p8EWBZDZqvy-zdb&dX zX>1Ha(dHDA4Rn4bfeR`e{jCm;_CUKI-J9!-D#U2`gxd@B-t4 zY)oj1{DbfUQxl`VZlzb!SMk2=iSm^tGjRN87Hl*@e-OlTORWBy(j>Zo07DH!9qJXL(jr zYLr$VmQz)0jEqW+N@U~agC$!G+6G1&x@?6s<7Rv{IPQ#aZ>+a+A?=|QeWAFus3yB& zT6twdfsmA(kQNo~o_i;@nZktVBW zVY93L`6WB@a2953nUX2?SRo4gIwt7Ydccv>Nz`FSV<9R!s9DVI%ZzPq&Pj*FlkApW zIH|cgj`B>d_T&-%gux$vZ3#GT%^39tRtqqy1 zi%jwM@k}u4CVLy>i?dVfw@5y&E+KvfH`k6VK_8Wv5revw(J=BQ`W!NhpWccU&n^k~ z%=6BSot#)8l%`Nkcp7_YJ>wT~;1{KwU+@z-o11=I!sjA1Bz!PqMR?AUe_LN#U9%Co zJyUXWeR2}x1rVuP8rs{NrnXy(Y*|Hxw(KI1MLSc#18$;EVV@tQhlHp@u-_s1xR0O8 z>opl?b)2ooYsWPE23+E(w|x23b+=ky`UPIjoFizTKblffQgGE+_31;Srr})bE}yk_ z-?n!zYYU@atI|)nm^%F*GkdJ8HqK|-9V?t}`fszIwbe&$tAT4@Z2wJbg3*=6@^?>x9n2_{_GO1RpMk#R#2D4nrEhZxMI-=!FGj4>{=qhLDTW{{;N`WFL9&X2)9j~=k%RK=6RVeo* z1t0tj@`?BqUt>6(@cSR=>>U3EL)!-XnxCij(nMjAyp_(Dchjroi01bWBdTmbkLiv+uWlhG3-fpgZm6o{$=+gHMC|5sq4Y>Nb zM_DiJVBkICZM^TFAy1+YAcUZAl=M51K7hcb&s>y#7t-hB%`F$FFXMfDfb1E=XT9)_ z$mlGvf5Y*ijsyJ)bWRXYAFzKro{lF>gU;~hBb|-8f)A-4_)8dl`&sgUl8&+RNB!BI zl?UF2!`8Lq+A7))+is>0*S80>m6g$u>+ZViI{C}aKQ9;>TJYzGX>$oJVOLnRS+;Md zf!ls6;q|Hoy^Z30ls`gVBe$WPbe_)dG{oCkJIJTxDWpRYirOmacOZR$oF-3Sl)js_ z1DyA{i_({J`d{$5=uAiHzt4I9F-0pSvq%g*Lmy^yk~$fv(5KRGyeZ?R8}Wbojr8FR z{v#bfZU8@uzg|9k%`>j?BR+fmVwJ+a!ZRd=*ww9Og z+&-tSpRTQ%yL=mcM_yCCVEHz`wt*Y>zBhGN?3{tS_P*EN@>hCq(fyD}6XcoI_itQ^ ze&9NObq&A9$1RKZ&v^O(`jd^Pb2=Yq^2R0UL%uN#&qu_HeS_Q&`jF^^9ir0DkMVxa zL;ooELwy*3Pc{>vcY|h!3lYl2B@?&~c6J`?8(!LW`lTsVRa0Ji;RQI-Etxm-vL@wv z2z^{)|4GOdK4h{2WkMS38K$S=R#A{k9EK)LS7*g7E;ZiKP}Nw_y7J^zxE=Ji6kWH} zKRPgQ?_MAJ@Dg)=Ww|T}{%s59HpOJddbxYe&$x1xYmIoz7B*iL-S~$-F~Wjn=g=EW zM>jEj;1AN@2LAk^Z!W=q4Cy0FPF<4zh))a|82aLp^nU?=)k3_KUMUxI1-c`#4!WZ> zlE-Wb4U8kHx?z(MmS6nnP@usPAEE)1q7*fuE-*l&DDAON8=`ri(Kl&CT6##20jlG+ zoURbbGpi@Jwj(5=ykdUrITA7q)4}6x ztxJ)(_RZ-QOl^ykJmbuAKeN^w10<%8cXd+IYnFFR_VO|$Ffj+rRvWG`Th9RZto+6# z9klhGP~Ok$9JsP;P~o%D@nd|JkENn-|A>w8<-ek@E7dU`Pahb*G@Xy}YBt6b@%dO@ z#>Uc-&d9wZaQfdcIzOxQr(pj2^7MhzPU-gFkRBv(`llIv2R=I!OcowxbLBLfLp&X8 zO3}N11+55^W|SSt$Tb5dTOi{i5fa4c7^9QkG&VdrFDop_WXhcrJ1xSJWT>7K*B+5j zo)|Oo`N;RGZk7r~J$WYY$#Ln)rZ`=Al22-~Azr7it6f%b%}qDarZI&r)(K81&>f@g z!pQQ^P`9aS8m!jbVH9A-=hCUJQ9vgHt*5pNa*Jk=g%vmzO_?k0EXVBNAWx=YkezjbYH-7j zg0iscie(#iOqsGr{yA-MR`JtxvSn~qDdQuGUX}OHLe@X6j=910tt@@u57PPESj^_e zM10;4i&#H6(iJ@?r!$q&?_l&XXPAE7U3laF)UP*Z_0L~5LBB5EXK&oK?h^ev+M<-j z>oA?wftQ7JMJ}wx9@-E2ZyTN{@}k09??fB>7k!FU2X9sIw*r3{_>WzL{}JT&|_OG0dp zRxuHZOp45OPj;ujDwaY5bW&!a1@nUIq$b>ts-zt@QDc{-k}cEBb-7G|;^(+6Epd61 z-7DE5|jX`6yyK@t4s-ctej-br$DZ)hq@DbCP-n9 zyCSCfG>c9u)*lKBtIOxkA7RVnmRp)npn$m=(v^@<#?>^Xc*EMsfJv4<%5*8+bSZ(;m1+U|`199t7h*%(d4 zUkv<}=)-$2qR+=@$=DtRnW`Ogd<)tP-Hy6~942AxB&8o)MM4o?5oNV%g?`D{yutgZZTNDUsJ}YB*j*Qfa_{!Qk z&DWMQKHL9Rww`jPFaMp{+Oai3ez5mlME@I<`#8NHk~uE{^=!t1*}%__^T`o%0O?S_ zAsuUvektAx{Q1~BA4hr(Ut3st!hXyPk)PMFiyCmx5)I(X0^&4V9Q&buO=8w|NlBgZ zbzMpHe0zK4ZTMF%yD%n7e`n;GeG9+4XVwy9QafKw{7%7fpRL~E7Zx_(a?3^c_^sC3 zTI{0$+Duuyv>6vveza&7M({NeXH@7AzatMSZN)frA^kDvI3Z8^Vf-Fr z_6x9k;Papxyl*MzvB{VpY~Cp6`C{Ccrt|bVvXiId9C{lWcSB@ z0XAk+X#hWl8HIe7ruE7)>i+S^@&)<)haU=_$~+bV#D~%50q8GY1N~G^zle>mntqC> zH}LdE)CcyLyxa$Qxe9(ZEUNBN((Rw~bQK@#ApkPFN$7w+B@pdZ@F9!PcHp!0+lhp9 zXM9F~B}IcK;KOW_rIU|&I`Gk6{1f6Z{y0DT;X;IIv9zvMo7Vj2haaY^<+#SiPI}AA z+ExE^uJ9!eezDbI0Zad9&i5xw7BWR~xs*%?I{bT%6^j2v_(imvE& zzQ3mPzF>>=E8(A5GXtxBL(ffRwPE<^qm61Gea!np#mAVzUWE7EW}c256X^G z{{a2o0a@pOofhpjzRdD+o_!CfO#Ag;# zTI(t%duv5OD3UL4?YUZLx$vwtOPoq`(}e+M;>ziiW9~A$7VK@*$%tpnTn0J_&U@%r zu;|f>#t3fVQpc@b=oZ;kG3}vGD~2wLoH~%MoOw7eS-^OS zIWJkrc*#V3Hco43Dj%mYe8EdN#nK@=5VZs*r+z2?1$L%kYz?aC zKk({( z9Q3&@FxN{m-S$&>0=Wou6q}$^tUfas{&clI3cezn@53vkCgL9h{`~3RB9-G~&7|2A zxUF$D`u_j0H5R-n&a}!6+eFp2Q4iHNH+%mdX2?OgD_Xq0yp;Q;F)g>3)+2I~kkr=u zKTVV4%1RTZsEJB%SC=x;)o<-gSJhgX*-0gEJEBF9PzTb<2-S&^Vu}i+qW0!n0nI-q=N}GDshcdkE;Y=Q4yVZodLtJ5? z6y^%a1UgkXckanzrvi;}2`~_w&aK750{k48i?@xH+bku-a+@*LgiJ$I9aX>_4*;K^ zs-Ej^;QS1?EJ%la8ogb3m9M#vgf7hH8R*DyTXk=6Gj45y&QRsf;jOIcTeo)7p30A! znm($;2G_&#Oj2##U^xp(iOZGaCl2O@!mU=&TzPs!gTv~rwpOuw+g`a%HGDfzxgC~o zsGFh>=kg_algpP`yv~Z=hRc^jOulsJTNHfdTz7<@>zwiVp0JSZ2@~;^J>dx76P)qK z_k@Y~Phf7XBCnFaf|4^n*B1{k{xK1s@sBms(@AfS`U}3oKlmQId}F0?g`1Xsu1|=K)P-nFZUxn|1ILXG zne6JH8y*zqo=n{`5)0BVGCsr@24Z8nTai&|7MD?T_!zoiJ{}g{K_AQ~FWJAtDB?s2 ze8^t7yV%LoA0ba5J&&g=`YnFOo6gR74*iyb?|fgW;6vUJDpWaZH=pnMoDS~r>Felw z@cMSv^Vp+!x`MBq{dV%ZCTIM|fxoix%S-STJ;|<1=yN{P%J>YYk3RQBxyhl7F+T)%W`_W8W@S3UMwq+6IdudLRs9d( zbbO6`)Zvye=7J!bg%ee8s*VY)-GcpX{9*owZfu6yxLz5p7Gc}KjWSs?P5X`)!Ljyu zXXpL5Y+BbXzq+=mDZi)@K4RYt&ll%iNnhTq&^p1+VW4$MJtw+OXiZM_bXYm()^v_l zlX{MOPjK4k6RsbGEaO3p!rz6r4xuA>+V_w(p)pYe10ce<*+_ z0}7eo*MYXGxk@O3 z`SLYPJ$8*fHs??VPJVnIcrnW!o7EC+wnoEU5}u(#CLFdV zOZM;d2+lHn@r5ZX_#@$i<4vQc#Io|7l=$Qj>K%$0o|nv9Wwlt0xN_$V9V;qB$BLoG z^5$t!S2o^Tle?gAWVo+CTRsYxs=p0&wJnDEylgIMzjNJ{H&1`FimeZ$Js0~%tdEB{ zMaUHV`CQ<7H1rY9pKz4o|7r18aD#eqD_lu`gG=cnv=*+UqoyX%NX0n9C)P)hpj}eu z67!FPY@$J%Va}?kTAeNixsfz%j3NXxq*{okULviVdU;;Rx_&43xLJj*3rl8u8|t%i zrzQHe(#*CFU1CLraZP&iLWgr)%FL#gl)(7JkO+${Qd8Y;g`Nd<5OCIH{;lAVI@P;1 zdi=!MuK2mi_f4&2C&bcP(SX*-75uEp^Ansg8E*{-F(yc*I=k15 zzNs8C1^;m;8%`JcL(vy~gER7f^`+&ezX3SUjV--D_Nu+HC2WSe`u>M=ZBvP|{FsZa zKqlKytA2Bsn+9B`bYtpJ4XTR#Q zN3+?-5S-~AEu4(C&Z@1G{rud-@}Qv5P&!xc5Zrv1*Ub(0b!+nEeOqMzNn~+gqQ?A7 zRAYv55fHK< zI4XN?KE7ql=X(2^9k+~>U$&X4$*@MDR}%fjFvw3BF~}&Y)3zUL9=}^*hiC4rV8e2C z4Ww5qKHT3bPTd6yi#>ybe6>Y}1^L2F4tH+(Eyck*HddVMrSs2B%BM$K>81%z0N{9y*H&y&BbL-bujKJERTTtGLY5$CwknL$1&#*r3N2KIu zhnLLuPxnnru$9(TELgE@-qnUQeX}k;Aq4es^4&9-+4^#>04tv>)L0B9MdG5%T3z0p zcUgITqd6tdJYQ_3bDvsN)mfitEU}eYc0JKvn^WfJ=cx~iO@!~>jH-f?KtK1Ga6>Xw zBbf9|XU%=l!NmMTrp)yd@yGh_6T)P9{y+Y~J<8YAf22bi7l8K0CygnMwk!JeKrzu-O?0m!`|$R% z2C(=9&=qMdut?|nFKr@?Q8W(v7{9^{`nMlD6PwaA-Ti`etA+MRoD!kz60TX!&T!~6 z=I>}n`%yPPc3vHCEEE|N#IZe!E=%!zbT~VAHBE4URGgj}-2m(%tZqJ#S3rkV%~2~O z)i8xrDeJn*se{5fsNa%v=~NN#W@I`f(M@dSCrHMCFAk}og{=q#E8z>n`mxXook4IR zZ%xdaKS^$O4zVB*>Y?yQrbGD}=Z4K(=HzrQRhy`ks|{P7{4*JCVRK^E0*zdGk+wu3 z4jEl*zaYS-8ghQ7fcwltto=;4bu-$Je&upH+nTvRF2dX}MS#yYct5ST)z!sy2F1k% znkvf8Q300t#D&*Cq4Q3fQ!TiUz7>@mILX_TKc`U0n%7@C<;A}~`Vwf{&tcpj0qtOn znbA~$a3MNGgkZNkVhVy{1jka*$IWN5zx$NrKfk|B{;Kl{s`Uu;2p0P5so<`eB#A}x zKjCav#v?hz&Z*z@)3(Vc zarE^MxT$fj)+a2=SQg_V)D}1RSke-6YaXt`r3xE6wu`cud2E;C+!P@g15B=tuzBbp zolS|)phV7FH{-!LN9??+SDn4*fqWga~{+}XFRp|G;B(wLcP zK%re47?~VnELCNK$wC;;Kak=4v;{8Q<_5vT9G9U8MkBepT&E9eFcn6H*b@5Yw6x^U zsxO{lD6g24YjTGQ>T#WScI=eQ@|gJe(Vy=SzHH1jbk(QNX)Y}`2D*TUsQ#YNrOe{` zP5h=_;3+X=)*^Njj#S>C8TKUjqbV^R6vrOMv=t2{T1ut7_wg_9UHpTi=%(`dErkLD7V)BwX{g3qm+xAL7r|D7pQdJ z<@A+w+*Myhe=5fZpMX!yz0gVb;@%lHlHkU1ItmkgiVtpH!Sn^x$5&haxiopJl!-bDN}Q?+0*rsA#&eE`7SN5guHxFc_pOEsXWDQFBCe`N+Dj5 z4zV^XWA-Mm!y{xX+Ke%SeZvy6mwMqjA3HIdwRzzPYVd&CW+mTCsM|{1A8vNaw~uPZ z@&&Vei#mJ+`nj49GNSmD*o*R(&?96oC~o3?ulNkSz|(#CT-$>jN}RUeAyX%V11NFY z*#4sgYvX$U{~oZdd{O9;k0bv=4*FlO_r-l%auP$q@@W6Kyb4HL%>?sOyU zyW%%L$l|Tl-_os^d4(%y_J3LuVr;(NZ{79qd&l?pJkYCgn0yU64(@C+u(Pb5$712J z0xl`nWkRuz^B~n`)utqL^jxuM$(ki`jot2xV^}gZq4Lf#hT6vS3TCDJ}!wCR= zz}qS|vv~&lmRm40_wv3`>T)fcuM3VM^;;Bz@f1W&*k+(q8?73fNyuE+?VGafZ< z)K?I|iCDV*6Mp7+W6Y+k_vmSk&v!bSJQqG->13V#XLU9xzD%XUSFoXX-a}m`ZlaoJ)h)C@AHTplYZlu>yYwl| zS=}*0qWr953yn@lm7_NZAMiaiX=YhtO0gg7qgo8+Mv>L2gzV;ZO6P4>Y_&c>pO)0K z8ckLERN)=U{qPX3(1_mg0Jk^ z3jJp}eFeW0{qvyOKhc~%w^gz~gZe-Z&+9+J>BCwHmz!B2y27Ve3B zjLe?K$5rSc`$s)MCkD1zh^K_~>1z4_PY(b-&g)2rGKJ$m$kV-G+X>wTx7D09>fz&} z+M7h#chPSl*MoatM{Rpgz!%(2;hc+anOwjpc1Pgq^su?tRK4Qs7Fcla zbsiDgprV=ns|~e|;MM63KIyBMR>u`+#2G%t9kG$|p_4pf!fG;t((+gsYwX2d_I-4f zz~eCU_y>xbhQ$ctg1D&wzH)FcQA<8#vQD4dP&+#&pj>Co=*Y>^dg$BBvVFr-s>ZZ?!lnD#jWb8R-`sSZ4B%il55Ipc!*wgSwx+&iAuK zp3eBom+F4Dk?&_Uyq;n9IIfR^hL*=h9MkjUkgrCBC5Oc&e44iR>;n z4mJ?n3pAdxjEF-SjaciB2x|y5zL$kj!buPzl~j5xni8Ta9dPK2F!lY5*&rszulhBEnbD7oa%7wGM#cVe=?mN_j>rn-(mf9 z^_cb3G}Zed-C^^DeK^h@!u=mo*;<%TqC*ORYvy=}KWED;(GleDcIP_uEE{uvP~!f1 z54MceMN;Gb?Ha4obl00#UB!a`4Y5#wO|vv=<={Z01Or4LDtv^=yi3SuG!cEclg|Op zN1Wu-gRBe3@W15vU(tBr-|B>)%l7%DS0MH23HZtweay$mnNRUC>c7ib63xPCm&*o3HlJfa`7{~eF# z$IDgr8z$SA3R9SDk8x!_La{;!VjSHTHiA-h$r8 zgZ_lGg(ojxiH~`yPM?me@xz_WI|H1|K2$yDA6clVH;1>WW-1tKHD)H-UQRElZTGOh zPe0)IB-jZMCBd44kdLl`Hm0XwEb5Z$dmY#%;$sQaEvr;;3DzZdhW|8kus$nImsXnQ z#P+j6iB`zR%N%i3RwTs#>_i543Z%z!Qf~Ki3zlDA?WGkw^LzZ{Up59*? zS6Ny$qiu>L@HutKc~vP>bP;l3j|92E5Urlc4ACs;jvCtyVfDDi*M;||h|5Gp?`AU6 zJ@Q99=BRu%T{j+*w7ama%)=Dr?ds+3>FOy>7LpSh^2_uJ4||{Upsh-f(t^&gEiID9 z!&U1VATCXYHAPu*7iV1<+_8HXrVmr^UDR-3V*wK#HX=AcW~$dN)2ECDOiWKJs7}l+ z%2Y00rW*}4YP7^?Yi(wva^Hga&UoJ6AWI11UEnUfT;Uk{q`=7r8LC7@r+9I%NW51d zAs9`(XVl)|=Es>uxrx;UY3b@E(9GGkX=Uzl(LU~42q0Q?OK?I=AZ!B)T&GMQi|ZJf zS!<2vH$!O+p<7#AUHvD8NlW4TQMaCp0ESx- z_6>ImFSRWjoRw@)>jgC^i;>FoxsV5NC(bWh#`bV_*HYeGSEt&$)Yl81$17#^wuk0H zs8;j715+E;Iv2qy;GwY-a zxT|ZfLlMx-FD`?^#{$ke>J$EldI<+##}yy9<8Z14W&^A1SY=wcG9pimEr{^)&;*Xv zgNM5vuZ$eZ6cTOv6pu>LARlxNd&}n@vv*@LP}%8{?=4*M`-frlFRz=MGW*)klC-r8 z7s2=^t1Gwja_{LLC56+bBh1vmv|{gk`P0hjw~y#68*)wUP3EKpC<6VjwTEyW`XqLv zp;PU9BB%*ASSBU5AD_f{>BE1#yeGSAW?Q0MZfW1Pt^F3G#a5fm z6t2T>bnmm|vju_dm0;?YlIX1{qn5i z$1BgCtps0F?4LaUm;IBcJk1dX_86a!p7{Ga);jbASnKSj01I5J_xz!%>IXza_pFpR zR8~@^k;lCo{yWldV6vfbkH_L86LkWE^UcW?!gDe@(cgq zH{UA$5}{gYml8b?+|I_fL|pjjUHByvssR_-0J^K zs8(2cRR!DjkRts4$HAYEP+v9pGrd;6l?8vMRgO>e1G{%%@ui{hQf-@*z%k%*PoF-azc=>fAG)^PFd$XM~9SsbuvfDK4bYJDZFQip$q@T5RU!)4HQg&(fqfecHCP z&1A>^wyS@j)79432i%8@!cSvuzI3|K3GoJ}!|JVsyHI$xG6Hc;lj5T^VohNyzdmu| zJLy4Z8`5vDY%5|-!b54ni3NdIwA|PdY^5aJmI(A8i+V(lfM!P#&9)TK{ktj)ikL8r zR>3T|2}Z_S7$+e6i_ktk7N1pLoxXF@UgFH`$+4#vgiaj|%52zj=(h!293uXCRA> ziqG}(7qC;&+301+$$X6VLwP3rI3Xj`iBLpw8}fFm>9-q^eVe^AWfR%Am3OS{5cZI~ z?v-~01dV{2B65hA6RZI~!GU{325-?t$kg2mLOf4tyv5i>6cb1^l>B|fxhH-R`Gefw zsr-bR`@0@|f!@K`;+^S{G4+|m;VL%HP9J`UGB)3=E(7EDppW&+_=x8yNP^=%Y($vJ z-90R+Cnh;LhTXqng~^i0SfYjIi}s6@_9h$vYKi($Nk#)RP-DEr_A8A|D^^Ib83Gpy z@q+RBZqNT$Ms#soBu;X2-+xbz z-j<`naf0dpN0#*H77uv`jC`;^{@~lhRn8%Oh1gdk$lk*W^+{A2H6NaGD0GMaQc>O* z*7-kt!DsYyz@5)M-xr(})k(Lg)Uv9MWvQ;be+KZ?xy6dP6+riJU{2?_a*dRbOH@g< z>cYitcCdQy$|5O5!5!L99p?5Mtj~|`qtyJ$Sd~r>XDh65_Us}c=Gs7kt=;C-Tyt5n zIleWgD9N6ut~|LrCcNRMIW0>J(Md@mk^bopL!ig?cxsPdqFW!m8jg-Q$3d98#2?1F zoy!9F&Enj8{Kp8+K&RnZflbsq)hd~`)SgB0)O0diOSPaCS8-ecoOkK!Q+*xJS3z--a(>t zH4K63uG#Q_om8C9E2LM?3tnf114xTc?AZ+QI9b80$E!b`VW8(Zz` zv%||8?eI*`42EZVD*z>AGWdK1ke^tjhrOTY|NbuA-@AXr>HTG?_eb2^0ee4mtjN6c zsPAL6A37ic^6X2>H#~|-R6G7VIAD>m>2sZ}C>-~bz zDT6*T?SC{azu8riGvgvelG}6{N{?5N5ZXim${ikGAj(OqIQnxQ7_I731}3` zLZ>Rho05`yde?fGsng0b=gs#*zTO~9{L03(vcw>qub}9-;3OX#XV)m>zF>|wr)D+y z*9)mJD$-x)_72F&kFr|BaN?LZ_tge4A73#gsWmd#5S_mY0i4scOu^W46&u{IJ2BGHXiBtb>bk!(LN zcbC+*kMtzQ6xFU<^p-b!uc-}XIy1Snnl*XpgBBMLEd3Dpr_L+HpBDgjPaUJV<{}0f zF+oCKn4MFViWA`cs)h0#|JO=+zuT>r%3C^`Cuoqcaf`bn*cn2!+DOg!nhDIsg~3nY zEO6~1z>Et!6WLILg-ub2YBTXj$g7WK&$csx1h7*pFBn@pr+W3^w&7Fu%Dmh(M@DIR zVS7U*)7^AYe~V&j+LDuzqFS0pR;LL1pT zO8%?5pYNoqJ$6OsSJ(WJSo0m2hgRhYq(3Sdujs6+>;RRhJY2vjHo`&7g4K0@Dp*0c zhY7TLSOlq=Xa6X8LBP~sR4$ONun3|(C9)H-EFqvXZJ^yDV()1Ww%`oGc^7&dPeKec2_ug4Cg#yKugO|B^2qHR=dKT|PkT^HI9 z&v}7=>v`ve3|oR2*-@f{_I$cxEuEVcD|(hKJMZj-lAhhCoSyUho<2Xby8V%Jv}{?= ziWNUNOMTRFsOL0^{Ud*di=dPGgKnC|+!dyWiCXAZ%{1FMZLr5P1DiI4qfjE1EJ>NM zhcnZRX}XeXn0SoSEck^+=}tC)F==1cXb)q|47yvLrldd6gwGurTCv4L{V+Lx`bRY6 zQ!|$GZg$DkLDgXYV>LqlO5h#& zKimvoPf#i~3i!Xvz9v%pA%;NiAd5$M#L2Jo-9J(qXyXFu-? zb<)l8p)?od(uREa56FjRipranEvH;0YMUN<#u`g1Fi{3}y($>5ixp*rZdJv^?pwoR z!)K)A+8}jI#jSqo9(FlZ8xms&$@`H9`6ldH^(?9I2eF{)=8ztZGYMM=G|*|FsM`yE zOGSLaGfp2xO2Bh{iuajs>ai>9G*+NN^ay>x9^?obR6?3r__uu%anF^@Xn&jrADn6yMjWyAkLg}T0{C*xMvf2k_9FFzmA zk4LQzRF*RNheg)>pt6+MFWjk%Jc&MJ5ft74sJ%+mg(nK464}F2lrl)LZZ%4`F>?3? z56F^b_8;WX%0a$`barXlp^zX=f4U~^5b!TSvxz;!mm(%A7&w5tcnALCNQ&PH>>ii& zflK+xm+q;pJ%zsl2ElR(*JCfp-a}?8p&Th;F2X#f*v+htC5rfY<*XP|-loW)QYuA` zGSgHM^CC;G+OL%lqhAYbZ`0Sgo{I@3D$D`tXJ#a>SCuef!ks=+DZo(LBq)#2CHux9l1*MgpEasXWvCgMWE)F>pJE={4W*Pf2zR zqfDl=OrxreB*y7143F~B`T5R^%!t(ov8PyW?JuPZqQg;UT~y+ZqI zHpo9bxfsuk>?X+hG>3joD7#tA!JzqwmGbBDY!DTnHi>6>s15T0p6Ps{CE`7NW)I@C z4WD6=R-R+7bJ>41$M~0|>mUH5fK)V`vty!eH~Y^_&F;DEINJSDw415$Jy)sk{l_0~ z2jrvbSTGD7D~mQS<9}Ql3ifZkcoOruj@N2Fr*-fVR_5(EMl_)v&+fupph$)p6}Dp( zH%E7c#>9lC6cq3;Gh+;)F_{G^<^r^j0(=~NN@Q15Za{=%C<*Dnc_D24EZ@S4d1HM| zb7qPm+*x7I;LjFjH8t0kS!#T}`GzAbKHZXjUSBgZhS@PKTSP>jWvMyV410w$+>nyl zTvOl3`I1~aUXN!-HgIp>8cP`>EYMdRH?drPhIGX+R0cwTLp%$6_g%g@ey*vmUhzv% z+hF|*Sc`YCSihZDuo(3{J8VUI^Fh;?wYAO4&-`NlejF*lO=#^|4Ds@8z{|(JUJwXuVF1b`53U5 zV>bB1G)ve6^c_w%Y}NWD+bVhTT7uIB`1`8net};m{>3qRb|G55ruilM9?@h@{Z72^ zuepxZu&XJ*CRITr1MnrTN$L1s9(lw?F%s(c=x04*z-`B9On=Qvyz^6{+!l{$i&t6A zX4fSC|NG|6uFac8yT7Ad7Qup{UzGAX&a%{cK*7A1m4P0WNwL!j5@#vK5Ee~qD#raD?D7H(!Kkkr(Jaj1H@Xa4=9V_Xnc;!lMI9f}6q@21WXn_+;@HES9BKOI{%c z!rj|DybW}X>gode*gdlaf6Gx(hy{tVLI)2XL_3DRpTO>0Lir^O4%LZ*3-gH8)>N<0 zF^2?2`WwBn(zDtOY~NUO*o|$$!B+j+tlPmfv4;l$>qoRPAq|>Cnnqri3sGM@57xYk zxj&1&)q-xW7j(0PU9MS+ni#?GRu5wP#Isnoo8|HU;Mp9Fj$NAheXLM-?EO^>2-J?x9`yPLj?h-xU0|LtTY6~_; zw6VMI#9V*0ok8@Zv|}sXZ2U*sIbi>p-R@2|x1ZY|<^{VGWDoYVw1CZVyHOj0#&bi? zIK_u)-gLKTGU9f!o$-;WkKM}mXmkp>pJ?Z>E^2W=G%=ub=wj)sM!-E1G5>|~i#Tsf zG+t*v7BG+Foh)0M1i#WXnlX5fu0d97+M_)74p`q);7jNppY5OxG4kI5OVBxPJx0&6 z@yv*4dcIKp{_MA+T?~Bnv*mx{*#cRb0u?~JSUCl><_kO?U{fzQxf(GJgWH_GAPI-z+$PB`bgP_~?1ExsFpR^1b8InW27LFR`W?=< z+3}#egMa?{o!AFWl>7+tP~QPq+yMFGj$<@llzbG=?!>c0nrHZ($7s*|0q+|5H0=pI z=s#)+&7&9qncGve>=6>=yhZI(lhhe3DnVcSf$4cW#DvxR)sobCZtq4*3Rtn&`Up z5OocI?qEE7PdwY`c_#gdx66NnT}casQQJvJ`677iy?|$1rk}mUH_7kw$0_=_srzS7s_q7oJyYEo~EC(Fg+jG(*9K6j#o+WQ9kk2}lHne?9gBIr&qKPvrNx=+mAfykK#;0thHYl2>BevXB@p68ECXP&1%(@df41niQ4(_gRI%n=`6?EIcCX4; zvnvR`Q?*o!74`+9O{k$auVw0{7QS@qM)95e2YmPWx!-+$_9Xh3xvT~5Jc#r7m~?^k zrdZ!W%=>QnEj)Wx+9YGmpk>!eC*(si+0w-h8ca@Xp>!?tmcIY}R-5#F-By9?(oSI0 z!}3#<@y%Pfg$dfMIL5)&59=u1u}C|AxPR9u+ee!h8%sZFUDB)EF2BaVqI0L6Rd=i{ zX=Eg6bcBA6@P9=$xT6{xqTCHp4R}X3ahJSD+eLD(7S}=!x^>58hmkHhHWlVstV=Bx zepytqE>jm8xWwQL$n*^hT!i7UXLs{fEcZje_BA9{7!!MNoOgm}f)@y$NxXQ5XX^NE zqRriW5LI^mDE97lS)4%+O$J8*2gP3A%=_fi{Ob_C)+qf1nd|A<@8mf+y0|w62^NUb|gLO*l4s7;@LhqM?Q=_vGP~WW}?Se&ORfaAC(RAe)%MxA9s7<`SC}+ z1l+#FS>Gw&PBazg8s|;=@<4g_(1E#t>6N@&KCTTV&j+pE?8J^J31*;p>OE@0@r2rp zU>~6wn4&GViabAGp)Q2-T?Gx^P!ocydbnk&n8Q-=Sg$}fxGS0m1j&c_(t zL}5)=@pAb&Z6?0kBJI(I)U) z5hEmSZDeC;abQ7qQAS|3pLF8c@XWxhykbkB12I$5Z@Ec+k)HwV#-zj44fd*px5`)Z zvv~HHCPr%$^SKRp^&(_ln)B82OW>uG@;lxej?r8@f^^AW6g@$U_*3M zTuEsh6UGC~u@vyRhJS`LHzI%Fog?P)IBGvwNG`)1n*>mpv_jD9$B37B+x4h{6{)u& zG68k6rDt-yI)XYKw(J~hL1$1$T~AzQL~X3g68`j|wP zo*17PgTyBW|6qL}U$jDUzw$ky6$ zqaGPiHn}+^EG)tgI*}pSoR~bhc``ZCoNPc2&m>FA#i0RupI~EfQdUB!Ux2|7;1`;Z zl@uQp2rLF}Jp!G)OX~}qIjix~W{NQ%gD^< z9(v0Zq&v*z?i`HXXn=VdIw+1Lr|De6rJ3}|OB|ZI-%;efkdt9C~sl57- zh2NT?4 z%Ve##7wuZ4XL+S~b~W0$MY}HPQnlTEc-ErzN4q}sqrCetFO`QOYX@sw7_Uyedpp|A z(e~k4gLH%1?kMKcr|rPAX6Z055$#rB+zo(zu%-j`HOj=Z_wlS+JnMzdqda>a{iSNF z(QYoDDdS#)XN_8pXY-^3YJWH5S+jUHApJynMz&myuL?ZjA(@r9f5OO~B_tSc@Xj5KO%k5fikXL$GduMwlV60gw zuh6_fcialEfS%QX`o*V#AGa}~DqZstICzkSnrAtAhK&|;HjAhlDFF@R>He3eN zRGw>n@!Y1hXfA~;h`DHvqbKz{*n#OC+q&8Be1f~(WHIJDYCD~_PJDhfSbdMbMSUuL zh3K>}Oku2#Iyvjq(p<@Z2d*SBb` z3_6Cv#0#Y@qwF-lbm~Gp#ve}6LHsp*00hbM!t7d;mcKT&fcdQdnq7fxENEJavHH<& zk?1>Bj1A&Sv7;EPTzu}v=S#%r4D>sbA5jac4c11EKXgT_lD&9R!;kf)(oMaSbx z_QG3#FWsV~MqpK4c}mX06FX;;Az&V~-%pBhKu7SI)=V{MMC}=@*?`acu^z0(Zl(&; z+Vx}1Ym#Y}zK*rn_y)Ywj5ZYGEwc9Ea|=FGO%zVIwwQZ0K932QDD?(0cP;*g;VSSYr6uf8#9c(&H94=j-{p?w!USI$0m+YBd+)f8~bxB`HZxIZP z8ZBa@-^To%kccVgxej?=DGIYpoI=obQTNG!oq(QU5e8Y(?Tyj=-GH1AS%fte}hx&YrzeE1>7LiSsL~FX$f&Iu6 zg$vFOJ>0||jVP_lzGBUaUCUafZ|-RCfAoqQo?P1VfOMwCH>Y(|^_m-QT{-r!xy7A* z@1niWKY3u;{h4loQ_#6tB-M#Rz2kpS?gT}CQsAmQ*E}Si=Zp5a&@>uwZq3?o4XhhD zp%vn}P5zp_jpxbQ@C%W3NLvG_(0)b9P4LV6M6|zDqr*3K;&~Cyc?SQ8+W*}PPd(>6 zU;dJPq@4dzI{!G=_yg<}bMBB<`1IHGN zar5O8_6_a|!YNx9#zn*gOcc}Mg94u*Un8hMDE#CthmrF`(>qH?mMuNJYNXU%n?*G`FyL4fJfw~l3w#~Tl0NjpZKKqPaAEa|>ea%kkWwuR$ zTZ;To)Iq1*cUib)5gMD4zAV945el^ku7fmK%JRvlyug~Wal|j`HFkycuV1hP-}u1j zfKVU(=1U=5f#-BaXAr5maZ??UEy`a?cU2GbkV^H(Uz2)=sg!9f@|p8CG7)4 zAyGq)F2Z32FT%+S$`Sk$!ptfmfoDy($t*HR0~9Yq9<0lf*s{A(p@_8{K3tY z9A8bs@fCUUv1>LGbD7oXY$?y!v*bOtaLrx!)z?{DlHF01ff1j8dm{SDa_d;21EenAO|NhzGw&hHxV zLc-3n`ucmM)9kQC>-NvH1TXAt(`QP4qy$mjp|9ZU_-E*{k(wkdLX8l#IzmWpwA%uNQK?K*&79X=*$Iy@8ir1r#O)q8Dz?SAQnc{gzU_+s=nPZiNT#lcRkyM zSFrXn{P+a#KtDH`wJ?pr%?)ZK`(*jO6@7g#uYH>NmA%LVUVZgxrG2pc6_3Yyl5tuP zfPp;AScfk1{6x&J2L;3=MIp&@WOzzUY*3^wg8%fqOw8QJmY5cZJj($ArqJAw5^t$# zb|Pk)8|16^xQ^sxWD0@^gt>)dr*QzC@SIjcDp*iPVRT<#fPYb1db!Rprz5H~AR+lI zfAP7-zF5hZNRjCM{&^f0|y^($}@JY2mOdy|#QfZccJs zsL5HBnC(uB_vb#%#Tjmc%hi*cQD49fd(*U5*iSa8p4)VU2EpPT@1Syr?rRG&H?ybys?*f)~kh6XG$V$a_CbP%$N#G6u49 zg8slS7yl>kTR*mCps6M%H!nUe)m@t7uFCEAPsmDjHRfj*v+#{qY#6C>8Eh>D*)^6Z zKQF(mvdoo95gkFH0bCnpNnB0qO9n2s@leP~pa=@>js%csjS$XMzt93WUMFWZw`V4X zF`wO47p+;hy?>y*vAyN`7UtEusyN!Kt84Lv*Im11VqkgyoYiZA7vb_*hN^uee^G`i zShNM`!2qx!EWa`D4)(`q45q;FFtb-}C$l#;O0Q?cd$;@HU4_4quef>!v1kYgG$UY@ z!M-=IyUZLB*f+kizCYX0_t64(Y;au}OObxNZBA^7+sOo@gajyJi~?YXGb^(Iv5TZz zVVMSuZR$@HeK0Q zEKa)N`xKpmBk5Sva=r*r8;H*5S^%c0)|^eQj#A*Lc~{w3y{LH;!qYNvEK@oD%f)3FHwO z|2=YBohQ?X=S%6ikZC|~l(UWeC6J{KQ0+x6q;ou1a74&PYv}1rds>sy{)}ip2WzD~ z*oeV2yUu}-N>(wYv^wJ$ujBaFKVyzVF6*uNp@RRy4hX5 zsIMr=TGZW;Q94|;@gQJM^6GK;xg_DV6HnCltR6v7wtx+2H0t!B zKAkrFCo-(6Lz>@;=VELvYT_bK<0YEc0kt8#p!LM!A-6z`h(`zQQI!E0QUrz(9WcNK z2Fo>Yta$gnz6)-MuUy%LUp@0j77VjDN9HdYV7d*59)9>In~R29GoExzK}xsh8M65h%tg74hl;0`@rlV9`(&l)ESgPA1r))d8cJu=Dv{ zcI~0DCF3ut@u*K9(C{`*F$4P=~y2FjQ;^mPQ>&> zdm4hkgZuMJ+i8d_b53Sq=ulpHJB?vU$j)HDO)VZ-^ec>0=B~7- zIEEL~AkGRGU|1}>AUlME&SVREjhf2S{0M{%tH5n0k#2``Hg76Ehc^|ZWnGzPyE&_F z#s6SZT?qxou88IKfpa+(&YnlF)v@_v-MNs@!ofqp#w^BUr1r+`D+Fd7sRUR@PYVsB z)}_1hN}a2wjfD!0qGe7?O%okW^hbK}fc84rN4AKYwOUl0{pIxY-P6yPiq=Taug(VjTP6N8Df88pFG8$o?9=S%&d$L zsHtJi#nL{$r=#N!({m^m`P{}edo>S0tGYm4o2X|)IKzbB9p!RX#3wsP6(2~@SZ;nK zcZLkl9i9we%cZMz+n4l@8b(dhzneETX=(_=o5F~i7WjM_$uzl~7o zp@@S^%?!uhmtGzoVtGURwp_|KjVgoOL3N~&{r4$WDm}fSpASy=uH@pTy#{WHy@pnC z-X0H~ySuFP2m87b`)bu*ByMQOkxA?U6}R@%e#5u#W3k`c1>8Y9fs4@f`K0D%&Aq^b zy;vjDbjzDX?L3n4K@x>W5mv~q?f7DtZ5-aU3)Up0sh_f;Z%B^(aopR4~3eJZoOL^azzBdYA>zDgu?_s?R|Bu@i5^WT$7wN?*j# zR;z13zrY0xh>v1lD#kdl?;&OwczWLub%s~b9`i_s=Y}7?*9*xQa|n+xhUkg#0yD5E zS{T!@X6ZZjVtqP$a-d`CXa|zI8JEUOuWd~F;;lQU*1WQ7*DIc}2QaoyllnD{O+05i z`i8uRI?lcfk@I##7}a#fiDU<*4^|=)<-_%7hR&>)K4kS9rB8-fo%9&ngn}{8vjXw= zu(XGs33z*ILcjv2)H(&SPJ6qEY$Ag2k&!_O;k1E}dn%fa)-La>9GO)LV%g5%)QTn5 zY0Yg#7B*eIG`pv3Alp+2VtH2H*7#zi(hf8`2g|1Gl+xbq#kzb!ZL!_Zmki9@(Z{wf z>XUZCP&aiaAAlKg&eT0Kd$L#5q@6?!$78@B;FY>J$Q4a+!ro9%1e*I$DkyK2bQil| zi}WZ?z>COiH|4pB1-$eZ{(qix#GQ7ysNVZ7o7wbn{oaonXc8V-CpRKv* z%Qe3_x(Z4@@=INaW{^oBrD?O!E(QN0{W=#?8f7FvA_R!M+1^BUOUbx}8d8+SKx=^X zLJYtc}k3POP14O24JGb$~|v z5pxEOpqkd=NZ~g(57%}~y*=Coz~TH5p`bM~${GlZG0_E$5Dw5bT$n=5?5U4h`-WOh z13kh9tC2C{sbaPs5Lfo)j5-E}z`oE=JA3iT;i(0~Pl`co3M~?2U{2aRw8vc2pySN^ zXEgKor&i&OCowza1wp{pyn^>c4i;@J-U}pJK~@5lc@Q;+kO3P}2K)Z+tWK0Jd`Br{ zh{CjL=|WM+5dCNgkF+sjzTsr|C!Ix18GKu$i=lo%Aq;#qRY0Ulh*G)Q+lt{2#z0c2 z%WIUvh&X6(&7!CNFviY*VA1eXsP$vD%pxgpnJ$Z6QrEdATW{Kgkuv#o30&erxb1?}St^7BTQwb_}8 z=88L>M==IjWhuu3Br_XK5ws6NL=-n43P81wK6=G--AO7?2k0>niCl9=`{fPA0k=u6dzn%7pa1iGY`-GE5Rs%Y$W{{R-Ya!{m4s&wF z#`&yqXqEKoN@iHJrn9W!uYYaezQb#$Y^+3jnw6|Ru%P98I;$ktg$X-K-C63JKEpc# zIss%2wHksDEn(tyB5A1|#}U`UaOD<)Cvaj@=BhPYsZdgIiYq^;GA$>nNoNepvven> zmRzG|n`W=OuG@`jNtd)-vZL2u>*pI17Z#tI5E9}Os`qOv_vD-g?vT)q_+991260aT z&Tk}8*$8RqUpA6`^`tTAz(m>RflDrdwJN)G!GhB4x-M6Jes)j8zixBgn33{MeC8Et z4|EiCCWn{hRHNVr?LYOe#->s<5~_T$!Vh|QK#Nob{J`y^yc;?_*#g60iGUFTn5(i$ zCys#lN1D_!@!b8nURe_oafj!sS<4Pfg_-&5d;S`uWJazhS)FFHCsgZ{uH znJ^HFD@nbXA>P5kZa+5hB?}#Yzx(}h7W(DHF&=RI_;=Eo5AcVDes^44CX&uBa@dhY z!zpl9oWyC)=&4fV$xgQg88ptzPWS7TKbnMYZsV+ca|&$KTsYu+_}^^Mnq57gF7N(y z1q|uPfurQZA-o|te!)dO~G#}-)1+Dgk)qdTID zipSg)o^g@CQ_TU2N;6{aT5RvqUAva{?9AVZJ(hmUTzG$is!d4ODdW>R5Iaru8~)GG zfyockh*f{rga3KJ8*fZ~_3_7OtDY5&VsnIdg#xd?<6ZDeW$uJcxAlCB*Jzqj6~PH! zzOi^mr|Aw+`@rQZ;fIUZEZP6r^`1Tm9}VUdw*Ej5ZZ3e5>=?b{jTp|C#NGGc7ersJ zvQ=BkkKj(ts>#Rupj)I55}CpKiqc88L^xc}I;SQjdP&f6_GZ??#miSL%&RbWCssNZ zEtyy}oY#GERc&omEi9o6YinxouNwCF@b#B%zs{T?{ewkhSr1%%*`eVNUtj*j^5ui0 zD_0DUET0&fze0fx-7mi&<~Z;bt;>aTMEe1_PBS2!BNw1k?!s1JX>@SJ-huD4d(jqj z4SOIcnAip=w7EUWQ8)DT{G@aa4|pm%`ae@&9j_@C{o`D%RQk8j0D{4QCth-}XX?$K zgFP+m*wk0bIARQ%&ppZ*Kj4WAr#`?N2Ybpq6H_LK_k_0rUyJvIWs+uP0ud6>o@R-! zKf?SsPAna6JhG)Gx2R+bJJ#~ZU{~XCOHP`DL>f9P!hT1*3;Zz5h)X5v0`!Zjs)^G~ z{P2b~+U3iJ8^7*R`+2pS2Rt%>ig&aQ>Wpb=O=4bzw^S=f@WUVN@x0#7>xy7Vbmars zE^s%Cn7|n%QeuDLY^?Cbbp48f@$FkDhFAOa7$>S*z5n{2e`85Ol@A*n9J^`f_Uk4_ zw+;8SHg=SfxCfZIz(Za^zfnZ7#GRyypU|9fwm?w90X^*FJHMp7xlZCB&bj#}|6wFl zYw~anM`&JMk&QTqwa8r&_c4y+p=n;hg$(tU*i(Wk7!+03b(mpq$;M@|;Db7&E67xp z`Atv#b4y;R?HU-^vnM@|ZHmgtO_=)X&wqYL*HTWb0@GH`H)uEcY}^FB5z%97XFq>_ z`uX@~s9u0ys652I!G|FgtGBCkd_A$;MzRqomI~Y(Q0O0fuqM5xxx1&Q`{zFo3{5XJ zH}^X`IuiW692c@dXYPVF>2uywRbO9qOGvmWw5d+|ta75t%u@N5K`}qt^DW4qg*xLA zr$KXXz$|DU;Mqh|lsk4}5VOlBdy4Mr?QG-&@7C%GV~<)id0>T}Dk+yV`k(r!XL#G_ z#C6-1VCjxVbPIT>dY@^_jWgzVemMc->Ncp!W~Vb}feTeSKYO$YW~${~74 zv?HAcd0=n|s5X2A{mTh61e8zp6yXSfr-Ed`IY2oIiHV6Jtb5IhiTSRt@3qww@%SxU zN{aG2GB4k^`DATh{Ty~|{=S~Sr;27C66`V$bE2VF~ z_iI7c(ffjlEn7;R`5zNby>YUpuYT?)hZC~X(g>cgJBWQH=}qz5{jq&D|HyWB|M))c z6mStd^EAPWk5|8k{kx5(4>;1ke!-6myTlFhhYB~vbA|2;9$QDA97O$TexPL@p5?Ji z5D8=@uKU5WCMOlLHznvWBt-2kz|lB@jFm%v3ymxco%t2S^=9OuXN8NKS1)umbaW{{ z(&}rhiwEpQ+t|*xej|Od=QWTeT*T43-m`ey?bq8P%soZY18tmbbln#=9 zgouvM4qwqVv5@}XHC$^>MmqA}|Kl&O(_iU>Gvk{!)B4NM#}lMaY8^iGS-tPT=U$8f zy%6-|pOB~jUv*ah>G2@?Kh;@P{FA`X(eMAvb}29peU)RvBuRQQb1LC|E{C%Wxlk?53(cHy1feci&XG`=(}REAy$1K5ndy ze(<*uHBryt@25Z$_&i>MxU|o-iNvp=VUr*PZVgZOOWbd|-EZ=-tD|eLjw0t3_%=$s zSCau>BOU)`89vK;J}TeCkB02x51)OSoz`fMX{ykY+R6cZvHSr49lm>r{Zm_@!8gam zcktbRgVzEYAJcim?F_@sCuv|*q%NCFTN7G*f9z z5-zjgKOG`p#sanTLahEnpw~8kSeN9@^jrF^@|(RN*~N3$*)#N8qdB`+eE;a#&qMTR zXP4|6pR-eP80*ze01u3~@y!7~HfnmPnwf|UQ6h>c5M7wrjrK4nyc!gz37ekc(crs5 z_hpezcH)#iz-%aO!Jp0Y;#{BT?PgA#f`sXIk zza(W2{mL(F5$Um;`3vBMbejsv468!kCM+4jNLpa@K3CrkCc)A7N($WB(<(F{wO z_9i7%_)1|gBQpq@%t$`ijeEIAp<{`DNz+ie!tLqoQAqVDb2WatqVk*oWTA$L5FrwzDus_W3WqUril0pn)_t3`q(j)Wc4Gj)H{PjzDt>0%9 zBo43Tv98HU*A~K3PPx(qt<}?9Evh#9!yY5p{(Kl$GSO2TX-!b>Iz!`M(H}p5t$=S~5~p0xdwm)ym^Q&w_+!oVe0blZo1#6gWw^ zi4p8Z;3WoOhppZ9R2kS5SCw~hWnOJg#r&$CR;m%a&e=P>dezZYK~?z|SLWBow;_P` zZ|x`%ydB^WcEVz9u?7kZ*_=Tt$m+arh|JET4-(uI-Dm~kA<-sG5EJM|ul2kJ)o9tT zq$;Hi?N)cRJz~f+8SLi)sS3-^}tR?_H)pDi#PzZ|FaC~Oj}vi zksy6Aq*&75pM)iSQhLAXm0iM&{sU7w_316|)}~{g(|uB=KW{S5Q~0gZ&iH#xE|Vm6 zOYmRKmHs*LZuh$r(m$(?PQHmh%!hfsi$Bs?>MLEg^CjTBCBow7F)uhk2cWW$KZ-EF zBVGb|@c>ECH5KQSuo}YS2)<;;#=@4OxZD_vJKD7262%f<)Mg3(5rh3RgOh&A&h!Gm zEWg4Si_ve#dSR1~Nl%MB-)>LyOGbVG$})(^oHEiR0Npi8+G=x{+x-ETA>+90fUD8AERw`qoAC9rf+NBOF`q3K^vuiXz zo7df)=UOuH>X%C{cl{y_-aYT;O<0y3U-RnvbOnd;{t?UrJeMKZ+jo*yt#m zn3NW>TUJWDhkAR5_$t@sxbahOeR!H{oNyKZoWdNa4-8J-IH?<~1Km`2H#886vfL#= z+cNfUcD8FA7%F`Oe7)X<_aS>~iH<-sCU-COp2c7$TlK8r$y80(jWbtH%Da3w##Y~* z9{BmA%ztK7sPuFwXh?Oh$>tAxg|gQ(*Pr~N+Kx_KnGE56khXgIl9O=6V-uNv4+0jE zW6($TQJJer=qA`_MJWMzX)LUb@~(sCss7_+>i~`97Y!@pup_uqn;wVgB#0k>6l)Ui zOpgIV#Xb^dEzl-q2x3WMJzZMLHxKQJ(RDFy*Uur5#Fg-uUo@La(&#{_v*%DsX{&Nk zr1a~O*YIyJ5Au&Xhh~zQ%cQtVC{&Xdt7P-r9(LOg=q8!cpwoOmLp#auc`rW*+GL?y zBgLy#+{r6h70D}tK{->4X${m%z;fbuB*)qQE%u+aD_j9;f7^>1x39ZT*FsI z#pY$jMb5gaZ)-cUZ||+|XLVH+-&ry+%Ki`=_^~7Mc3&_RfEl{?<;b%d3(XeFsFI}w zqeh-T4KmNsENBuSmY>dDIV+D@slBN%vth2gXM2Xl>}R}gtD=UlS}-&*H?uUaykc+^ zcSU{qslq>za%T2?Jgc}*G6-Tvgq%m**G^T+cMM5?Uw885 zRSe7*`BNU1Ze~=U+8cg&<>(hOp#^QlMJDSW`eNPvcdwcwTK-y10;t@1QoqpmEF^j= z9Shoqo0_-ZRtAvHy#4mj6RsF#2&q2C^#sQ8!#Fh1Kj2 zY=@o_D!3M@m?<0I)w4Svpl!}~p7<0- z1SO;G@eFTg;jUFfL#tegVt6)Z&mML$?%ce#ZuQK8=8yNu-i=#U=gjDy9*JPT>`gQ9 zanhxi7e=3Jp zl;@x;_AvrHc~vHbd8$l7QPk?Z{bH@PS#vf-oEBH7imL&nN3Jxj>Vi&<>$3E9{` zzD?KBW=~Ja@G9|&2=YseO%B*TmfMnR4)J9yyS01n{(@#p$g(-3dnQ?LMR9eOEj-#} z$yl)?##)}+kPPmLIYDODt^mx6;bU|@b<{fkPjJ&mgekD*H+zVtsc>Xo!4JUKy>B-7 zQeSW^oCf#|CD-Mai7K(1?^2IM;-xT8^luD}$u9l1+mHKiIDd(Nls{{x^V58U+; zT4g7=uR8l!bMHd${|Z@Yn`aAx7PS<9rfiF6`nHJROU8c`*kUVMM|{j|F?NRLF3yGK ze&9On(qT9Z_d`Ar-UF}|k?yG7uK0Md1mWYgRoL5<``O(z$yRf~298zD<9S@){ zX#KdXQKS@7a7go0jvC4K?B_Fj<9Cqog{-@2asQn{cRY@>_ZJenN$5nMkcV*J5 zg?bUfA4GQN^Z*bJ*qYk3<=sLlYi*ea^)an>o--FW!z6&R)|v}yS{rleqJ^Q}@@9TL z=16ke`MyGe@3DXVz+b4LqxZ)=hG3jgU>E_~NOw%=6L*>__ndVnyO4F4yPD6xl@->Q zW4URyeRU1l@g4Ei)oVKIrr}6FMWEFXTZu#o4&f0ng?|wV%fmwZo{?jxiV1|uoCt1o zM+q+$EI$^k+_s!D14H}01}~-z{Q!~4V(2EIaeun=UC~??YY?J znfr5`EAS#Zb0In}KnkDnlV7gATb!qRHP7QbZ4%EFKa+QH_c6JW=oO1H90 zrG$lhPo7k3xw2F?B8iI^E$jy$Yg<94T6%P_Gkg-Yx)RCK$rzEXd zU4r(;X$G=P@pC$X*dz~oR{WpNs_bH^;_tLb<;cXaX+Kc|o_!1dhG6YYJdx^);u+)! zey18U`zzXGFChGM+vz>_f(9j?Pt$76II{|zm`$sn5V-QTOjrS0jedmRsM^1RL)*l2 z<^EFi-$bnstNn{Q^>ja})~8PbeW4m%s7xPD{gHgNSGxo_yiD^a%{_P%W=}jP`RNOO zGjMp>M!LVdMeR>%ui)@;G2hwk#rTsnzNfwLyHw}J-wO2SRiySOeBfs9hxS_0UhxMI<9E{d53B7- zM;cJ!aah1(uV}B_PYQVS5IpWVr@aCX)VRktv)haQ=TQIWwtoch-l}Kjoi` z=T~Zcl{c_1tb-@3^S@2>e}w`E?9aUl{Q9W>`)NK3eH3n+2xbl_91X~cy80Y zk;=a1wWGn7w$j9c!bI<~L8mz|A-lXdersOV^09TBCK_7noY@0iJ=u|I>5yUo2hclV zFEx|i1iJxUTv0Z5vR6zC$hfE?Nf|Wa|6k2jj1vXfsSz|f5rdvDmv|VzgMIn~*+h{6 zeoQ>Ebq&H6Piu(4S$zcjDqhGZqBjUl!ihlj8iRxaNua=azKlX5L1RMdkGYSDv+@+D zypKAH*23o$_*@Yk(`kDA=rjEHK+(wOxkUI)lHB+Q&zZje;GM>Nya3=*bPXOq_~8Uf}G&Z=B;fXnOi!L zv^(#%3x=6KD8^dSxOyXe`|cg8Ta=P=(_wa48jCj`@#RCDwrhPLoIM9hnEA5@Q)X-D}EYy1GUJ%*`c$ls>6w1%E4J&We@?h7Yiti`=!z zZ1u*@t{m5JSq8xd{`#AdivqX~cnfI_d6SfwRUwuLkgsbS39^(gtm|G25D{dUJ}}l& z(z0q}XJ>I=SD}ez^et~;_g+8rNNiGJa(X1t4KcBR`(OAeiuxjUt%v-9Yh#;`4WYJE z>Wged&FNrOGGXorVMLVkm2s&B8Q~XRs_izVNb~ypw+ECCw3lQyxRU2x^qBNveEr2k z^;_q$*GrbV%T0b4$3-&xBhKK=nvIR+^RmL%E$fVL*|4zCu~pf3b}N5{;vmQr4>1@& zS=D!=-+kBK&R_YsRU!`I!4CzlkXr>j5o}3TY7rO)So6&SGm0Cnf$a6E7YHxv2w&JO z`}Y+$*CevU>egcEH*?u70x`1YE(dP7WJw!=+`qm;zZYaFGQXT5x(TZ$Bq@ZC7XSkM zz-WYp@BkxS3iCuXOLoD$LnB7V>dvChtQh^=$%iX@A4h#vazNNfjNv@)q7~y8?^to=;MnMydN)5A{!Oz?~MG0KR4GU%*S_M{IjCJ}*6RU5yePZ+gzf!E5iL*#+Q%)cVo)$6Ah=a2uLJ-N-7WS;Ih#B?@Pie@{ zu1$;f*N(9HeuKAU_N{1POxC0o)FQ)ZkSVz$JFR8v%{Pp~_8cz%8kMbHCyfKOqK#Ht zvYvSx&B%*pVTJ79nPE}!7Mt`1+mWP;%`q4eG_pR6zaG3KfoDrcAGkd+H`&kc9(I(( z7Q`^0-nk z$^sHn{gQ1qV}zD9r&rW+U1&y9>XCVw8FiLuy%d}q7HuvD9H9#V&)-zm3-cl!dmJ;B zMi#Q{@r&mlEAOmr9@)v?Tr((DHFNJO7cXmh{?-0?kKF&`7pOYy9g{~y5h%whj zQe3$nF%~uuT+lNo#pSh*oczT*9^uUIvecH5?TYVr8P4TfpzDI?;WFA_kJKwA#YO4>n1$J3 zQIjR;Pi#E8VokT;Q*F&jH7!o|vmqw^s&&PjbmCDcdEd8j6`gg4nkHXCmw%I_0cdI} z8ry+Rpu4zbp$I;hgFt-t2{6z*mGh3YP02#zTL)syv3@@U7tI#TM|Js4`z$?}|>=G%WSS znhKNCqC!?}yzaWj@p)o>$ghH$*?%Rzg$NROjCmVvxSbLy0Z2j>D+Y~CUD>sd{q&Nr z`kI5&%hN`$SW}9e7D23a-L>%vJ@dQcq=BvhonM?Qzsfaluf5n4(Rb8vW?A&7o!kcqni`vMu3a>D2nnZ=== z5sU!Ziz22Xyk8s18?u^uvVOv)l^0*MFQG8c)G(KgR5h=w7;~iH`eJ9N@Z%SxP|n8BWW6 z)3oXCmWUGa^!q=UpG;)q%m!!J~*vnSxr=ab7cvO?sZoVW*d|3)sD!a_0xR6 z;Hb0MZYwbAw0xeqp`$ESXRttVRQ8VUw{dTakeeA9>Ad}GZW|b|^)IVLHz zUSKSp2tn(KViC0;5!4>C7GzwjO7Ht0Q|bMpg-NF3#57~DLhjE_T{f)Jdpi3|fMeih zsFv(4vP(f0#horN3=yZ^p2H!W)wq9d>+ooMq4uf?_ws^7-GFXRS5tp}`~1=N{Oi}a zR@P*M%nN$jz3j-E;WxEn|cSjCOh&kU zV8zb@4f#9xZUQ{)ab_&p;(D9>T$DIHFPuU{ke5C@(vCx9wXwmtvf=uI{JNp?#Np7= z!ImOZah1Cua@d$zo|DX89)3=@YC*0xIJ0tnW5eo-%wR94(?7LxV@ugsb#81R&p}q4 zfTY|W$CIg+rxtC1`-Bqz(E+%H6EA~si3EnpHX+!HTUpfCMTia2O=1SwoQ*Bp;4y8C=g(gdXscY^xb6DbvQ1qz%PP}Ik)xbi-|!=VXCPJs-GXFITxE!!nG!BR z1)+s#Z4b8_Y$QXGj7?XBk-Ro8Co?iTJ1Q$HPMWtOIc+i5U9|kt>M^I;Z|JV9=z=2i zvZW*01Ez7Xk2N;}FUSUijmCVCT&jFH!ESW$6^lEH8)A~f+t4n7w`lHzEUra6I7%h- zIhXO4ojXMzvAmk)i`-#qTnlaljRaAkc5FalY)H8wGdDXsHYdEu!Y9L$wYkn*twWiQ zr*@Ez?(Z;8Aa7xL+Gvt3lv4w*Hgu&N7zgaa5Y7Wb%=I}XwFT+D&d?x>d!>_akIv6a zsLaW<&kv7Cb1q6pSLiE(7%S>k>Cl(05>B*6lYdWB=gYi2zlU{z^r8)P49L;}!h=)M z-_`o(G$?8C3MPnu@zna#zIJ0z!TN;qvD^Amij1jg(S7MPBmK-U_3y@%+<}4n*;46O zl~n-=)!8gh`gw5~jp0Imuupj;$rJERD4@&6cwt5-1)z{N8#ltA_Ay;xq%~$Qas< zuf1$(W_yI`4+~=Aa-!n`fB9C;GyFtrpE)LTDXookfFhoUKEr6{N+v5f915ff!vNPQ{UWFO=kuk9ntDT`Y^J=p2o$S3Q}cRVg9jF+JQ{i;tW-`R z%F|R8a2Rx260(S3L3I3V?%Fkroee=uwAhAAuIOp^0Yuxi{$}37zE0cofv_eAz8$I|n1^)Fe@QZd|X#Rq2 zsI2(^qwGE4Bdf~);hb|bnbgVj-h0cmJ0&xd-X}fTP2G|$*~YR3mbNUt2}p0s0yc_R z5K(LhVnILzQLrGOqJmgaQ4!SKdB5l0NeGDl_wy4|c5?4I&w0+%pXWS>^$}(h%C(*Y zJFZyRvE%HeK$8EM-4foGoS`@`-tefg38yWIm*#cLmWw89I2ggv5V zIFiB$yo&LF7*Oz&fHB-+o}cg7vOF=LCXXrHL%d++ZV<|Ydr>-0N}bFFsf@$;7Ctvz zL$D{QdSL$QJpJLyuGPOozJEueF~-Oejd2<2WVnuTHhJ^%`HB3A$v&?}MsAv)|8u1C zQ^dXUx8YffuP@i~(#qM~wGRnj>tQ{CJdoua{Ud5on2U<`-0upEId%=VtgK*?Qf%wc3b%ak!^+lsux?JSzPD_-UtJMbLmRo7M+Y zU438Gw3d=PcWpXQS>K;PcQEh8-W+TNB3}oXC?bu9aEoPrzI|!;2%R5fSR&??D6a0M z`;c8+`TIE{j_~dOitCr@lkdVcTl?$eS^5$phVahRuw!r}9X=XRDg`=Ov;l?-@WAd1 z1G`DelkuBy722|EoAlhs>{xwYe)){#&~S&mt4|gh;?x)P4}=TGx}kjgG`+b+u2d=1 z4Jxkr!X+HUGxN8emfkT`Of<==n>8)52B%DzoH-I3ZZ*#wM0$#?kIAPPdLl7?gJV!} zoDnTxf=SmwNo%Oxu2}xc)aly!X`88ssx9G=cIDMhn%Yb*7Z6UK^IAaOjNee(NB&J; zKwcJ_CzodD14QpxuS)1#36u{6;4nl#+Li3sy*C-S@$=|mxNC=#1VbLjkDp6+rH*Y( z1U~erP<9M#`AL*3ZM?936~;GE=k;60#Z3Rht3b>QF@M%>P{bhXgfH%?h_xI!HNr=X zEm6nV#;h$Iwr!M$8WGo1cTbUdZ#Y`8G*EKCE$i>{TfEAeK0~w5AIaN=iB_3Ku9C?H zv*c#s%9e;Z6^5sYJ1YK&JFh+uK2eIjzd2E*LD=HVjK5jeAS3hnQrM!h9BWiM^g8NV z`PJ6>x)B(Oco#D04e~vl7eY1zJswwi2(E*)2&MtF`l|Ahaei`cqI*i^8{@l|x{{sm zW5>QXY#B(C2X*G--AS@9_+l+Jr_OS5wWBGN z3>o@|8)~*)c3B{iwyFc~ul|n8YYl4sAJA0i^kH)yF1t%=^vc5(n)i6s6^aE) zRg3EIDfe}5djIb3`-E3$BX+ZpHAVJl&+n<=l=Zl6V07V2t=9=mq{0`jzHENHeQ$EW zqvfEU^`Wl&AXNV`I`52hhpc2kc+ne)o4`nw{lQt9C&hCgm3;s_>m;;Xl+d%ESudiW z|IZz*l8h#U!dFBY-Ch10*NSzrYz%{m*@L2F0HMN8WFi7PUa7VOgfne>6a8MTY}H!a z*uEFWM7Z-lVjY{ehdN?*M!glQQFwWD{_u7(Bs{-iqeN38UsUXqx3Rg(77UT=nc_ad z#;neF@`Px6La#7Q2z?;hp3K%_Z6p{Uh(|*@I1y~9K*lQwoH1w3bNUIJi&L~-?M@EI z9f`JpWk%MW47EC%x%}L|Q(wu#`WM{AGVI@~D~9HEYI+^UhOoy8D|#msnhL&M?z9DfQTSY~)DAn2S#pS=!7^X(&90hoVw?k3D%gtJPdzY|BpKnmv&+j< z_5DTP&|u`{^k{$K$}XbcbGEGe?w--n9y-u%PMdQ3Pn%g9+RfcJyH&JN{!Z(l4>jU# z%c3{QLS~Sz3dFM!O?ryb*PPzBx8Q9gFK8n(`Tg6qEi?Jn4H1}coOo{d5d2$q*E#cVnL#9~x5}Iz7PVV* zZ{eIUGVlZdMaEr2xYBl4dnw-0zHlOvhdFD@TwD>%$6ezene+AaUHR)wmTx8ZP4mK z`~G|J_cO(3&y=1$h-W`7j`4{(+yhws*$+#fpI4TX`^C@i`;7S3(&cOhIQj(hp3UZE z{<{q9K@@|7ZG)KiDSUpD1Wz{`>z;?Du^z%47fGN0S%l+W@vm`)>!rf7$`n?;i;z%vOHNoy`ky~*jOxvfcN?b2k8q8hEoCe z!_r(QT+Y_~+ixr7z{4JZ!f^8nv{97Ih@bt0T#FA$)hn1QT3HX~BGJLN2Oq@ee%eUx zqw{PIcK-#rPdJslAH^i>oul*y+#$O*|Ix=E$Nc!bqkJpwqJEIQ1OHalF}KX_U1gIK zdM<90c$7XSjt7|Oxd8extd_wwK+mhXl0F8wzOwQddmNt~#E&0~eOcg(V!tn^=aC;s z&y?Xq;(vsl@1p~N5qgM81cQfDP=qyD1}ea77|GI(sp1X0Usm~}bCYfOW#=4uxbK3% zGo-)KHe7UpsYLhjmz}CY#8S z-r3P$?{G+XhMmYjTnFD6zL=kZlk7ZhAHo4_=y;8X^xS*u(^GmmKgi=$?8e?!d20UC zpZ@O0Q@z%@QFQB_%?lTc^Fw!`_H3SU3oDAptUB`KoNylsI^c=``Iw3ERVTg`@LYpf z9SR=`55sNnWK3XE(sk@a&787(@vS*JuiSosW%Z^CO`|J!lhcLE#CbaK{YJcxeF9Ts zpXmI`-B?2a^9H5)SsgMv2l1o1IU;s1l4d93+(kTt=%0uq2B+wBl9#s+-;Reje|V0Z z(!L4s&Y!(qxCD=}TUJDPv6Eu00W(5icR(;z&N;2=<+icKts{y+V`JEV@apSM+dvYbp>Ln8q1t7 znyyvX37h7~o#f%nY$Vzg-qF`NeJ~hSS-LXjU*3rEr2S<$t`V`!pvT!j>8J!Tp8jdj z-<@Y{ynxQ1yM!y6=Fze#(lsM=Nw6d;xL&1U98HJ(5XZo2yF_?nqZ+U{R#a)~%VIe&@lhc!ju?m` zf&cgJ6WYVg!NHTdzi@Bcd`MGgjf|(}Hog-fx z*(pb*&hODi{Xdj8=_8KoB^>e1kNpH~Ah*n5z%DQ-Kv`@bFpdlWQNQ}cvrvkHTJvU^OgKb-D;%1u zDxbJRIVx*5X+l~Hk&k|6znhYF@0JL#Yaju163$Ld}d=D2AmV#lT^tD!NOLx&CNY2$t_gFFgZ-CTCuqK)#o76mU4ceKh7`pPwZD z(V%xfvib|bFK#^Xa^(Z8DP6U*>h`K<7{p>sqcY?E%8<{jz6x}rF6El4kHTKSvxc|9 z$nIO6{_STe}34pJ>(wLX4}dth%-8u!y5~ z%(@=h<;n(*2iL>3v1&V-hsw82ouJUt%GCTID}MCR2k@k{~Ab!I2?x_e~*iFz-qtX zb5*@P+IqyVr;PQ0`(P519TH_9txR~Z@>AMymy=jl-k^_TdPd!@RWMdQwffs%R)6{A z=FI>A>oZsVL+m|R&%B{^5Q($ZNr)lEl{d(8<<%$Ho22T}s{3$n&HSvrq%cov+MK3e&e`;>%{Ml%8^uuivPb`iX z*%;_MOfKM3VjVIP-t1Kv2p)8>O9#Fd*2%AUh}6~SH5bIZ06dWtGi_;uMPsp=P7w}}yM%v_k;Z#l%^ttTs0r-m>NunAb9#qWZ&Y5nNN#Eo z+84Pxy|TvPIU5(VFjy+{Ku@lphtHuOo-`G!wG-z;v8A5JY-X*=&Sv}Jj^GES`K+4y zY^OM%yqd@xJebj@)99{TJbql7lV}}mNzYxj7vZd_qMR9K%nC;>M>cj*85c^ad6A_Ly z>DqDTS=+WBJ(k=tK9%N&&zW01>+FS1XOgLrcxq&5hq%7`%CpS-V|f5s*? zJ$6^0{P;&fN>QO>aS5P`G_?Bex;NkX+S)tf^Z534oD2c|`vP)oT*g4Y4l8gU*>$^W zV%y@E01>X)Eq|`Of&K%|Bhy(PRD>3*WsZ$+cMiKOq+fR^xc@v|Hj#c?eKezhZ>dz}y ze_0t{rI87BXtv0x=d)k>M(4ziz6uR7JXUSTT`WHG0+TB;4-37y<(y9^GcYDc>Eurq zH+S`&avs?(2>qK&#jfXWoEw@TTTWV>xxZNIVu6gx-XEqPWHOq`7Vt1VyfQ?03p2yy z^NZx)y(>@QImUyhfe)Arf<+U8iOo6;aA*!nFBYzC-|*0L)I9Owt(TLZ%?tOw^_Dnx z)qdgQ^m@WE8?cigRwmzngnS_&Jlyu7T`P}!$u;a|%`cY)dLOyF$_UGw#TZd?Z_rm( zz^n{Li!N{lsnmvoq)~1wg`H8Sh(BaP1)GMWnU?PE4fB1w4+!5O$h_}8A?G)HwY3fI z+x&4|Ea<6Ile>xijv9%0L@@cc;e`L?Uk~ZrMp;`;L#?yk zy*zY0ytlr=taB4XwYACI)GS|x-1?PO(35Y&zBEj#?XgQz_cshh+_B^~ja|5#$g1la z)F$P7twkGTXccwH9pG2!F`tOn8ZZ*Feq2sthkKc$ckCbFdoA7?oSpHvMqliHFxVe$ z+c46ROZFufNr)VX2w(5$9T9mS->kF?Q2^LG(#@xxgn4a&njFh3AugLE8tFWC(-8iQVjp+ML; zCm$!IIJ@lYXr%Qkw|0K}T;X@2fndTe8+NsD-?xy4kh3fW(IMw>;#Vu@TH*S|*4eZ2OXt^bC@Js%X2--9wZ6LEJ>1!r*Vnp$QpiJm^MgOc*cXqXS!|qn zT&OA0{Y}wTWBT4pbcizCt^Ex?BF^L zMHSPZf2WR;_LlJ`bel`W9d-iTi96kSdht_nol)3KK3o4d`3Ct&{kMw6#eXg?kbeR{ zJ5lGopZtMk#L+-ltam_a79FpE7T_IH1l99obNxYeHa{{R1l0E)4BPkBYYW<-Eg0|3 z_kV0xSU7P5x%BJ9;Yi++_cOkyRo|l<$rYR$@IW#_14;MFzkSC%aUl9p<1?BUg8Hb} z?9Rvo?Q~fgG1~MeD7uZ!7Q52!vKTTLi&P0ulZVPzN@K}#?CxvB`Vq+ij3x7mV?{h{ ztYF85t3w$S;!tKIhQe4;;h$sz`EJo4W>IpMNFq@W{&(ai?)94(?Ej!)@)B1oJwpug zIKBepoAwcV4qx;k_4%r&@FlMEDKrrHa{2knc&pDIuRMFw+mB-0U(*bE6S_%^Ijysy z*Q*}#iI`}QAFTKs^p1)?IA>KaF#M7=7$J#)-5kR&fXtCAT3xNqR{O|D04)8?R?U)T zo9cos=c|_R&MK^U2UwIdJhHclEAL!;=acJS0n9I!9puLH7v9Df8q|5n$sW&59?!^4 zH;MQU@W7L zl`HQ4D-*MMhxPMXWR$w}pJ0ngC&2(F#9W5@9=`27Dm&i?^tq>j8w&Ug=+ zUGH&{kVLb&3eM?l1@0%;!%vAE>4MYCZ0`+N!MYW{W3bN3D9ka1zv_Bvb&yZ4{=)K- zAEz?%Jm8Y-yvlBh;!Co8BvJN`sL-mx_HILsp0Yad>d!SBjO`QVf;sU#;AXvSU9cua z^IWtW#Y>JQA633?Js)@L3@(Ss;Cy8DmuO{C2MsP~!ofaeKl)cE6zQSrlgJ}I$2GG3 z)!?F>PZGOQ_znHqcyyce_q)qOfa6!}?*^IN_W*Hfg=dpa~e@V zRv3JpumoX>VwnB>oL%qG+4XjvL+jN$3~s%**=z6^?FP5ehVOQx(_p86t}C+tYCGyW z>pSba>bn|)O?^$h^}UU~4LyxrjXjOsj6JJw^y(8$+KE&JOFNfc4h+uKpM)DlIK*(5hv*ZZcHji@D9A!c<;4N4lD1Pn6bRyt!>^ zMD4ML+x%7$NCFF+_LQOxiO5t(cbE%GJi(RATpQh0)m4$`YkMGpy&m6y9d`P9gp06C zI47^PP3H|0UVD5uxpr)DbcBZVR;~P&w)2K*fnhmoo@`G=m1d1B+d~FNlEv&Mx@)>! zLiE7k%5M;kd09g5%}WRD9vjeWolLgXwUKO`A-Fyf1%9i_`^fhJFXHW@y(RkTIC2Zy zl$CX(W{{b?t7tUf$Y;PU9hPB{8x%N`-ui`R`*_-I{HE|M`TpYXr^!=8X6~xpX>X#ICZvdrP3#Blw;z?AC}w&-9xJBX=3>Ef#u`!Vx&4DMmO9@Mjnz;p)5_>bG})J=mlIc4mG&9k#gL z4*ztxVgA2Xz~`IZwFGmlj!PPJ72v6pim%i__weR>AnQs{9sm z@VnS8sc^kmctX68nboy2A%Rm!>;R?c>qpRd7u^}Y2#ISmG?i-F=~X*8nnE0-@`CcHmAT5?FViTOD% z=0~nkk`DnEJ!D5+C1wBL0I_)wQr#G=Thl6B&}>54!K$!%e88+p@gXC(7Z<5>TZk2Is`$3r537_NH38Po3|YiWosKQ`I*8 zljNWWT#lBIs0Ugd8%xg&*m=%r`_reJsG0*XAFX(^D zZ(=V(R<>S>&x_cLg;m{wLpqWI|9@-<3;V89;uVF65!;)uJ>>T4p?6%xOCAJW4?QO+#M`%H5hPpIO_JyNLle#7=s`&y_mlItTyX3Wk@Z9jq zE7Ssuq_&~aXuWyM0jI|jY75vV3p`Y2F2+=*2)$@$adYV01lZqYXZdo5{{=qG6l~^u zZ3-cU4HfI^Kf+IvKU(g*YzBK#F{^HiY%3*c@#IY#M5793N*85@72Ak~Yz6+Cvlsoq zD}4Q(8_+s7Zty%J87rB@I{2$lxA-UU6?A?MJTDecL4HcIlW{lWez9<3?XU#|t(`bX zti}zAg__Rid_#KSPWmU|OZigkmZJlXjaqypRvT;otl5R9I%qrqm^HMNfhy?r6!lZm)mUF&T{C+5rZ>Au3`Nw!?5YjU*D zN4+t3%T+K4UnKL6q(xKHJWyR*aGG=9yT#8dsijcx6>xe0L?Owpf6{uujSPy00VA3y z=pw@GSGg*n^8AQXG@1Kj!Qz#)esJh6Qm5877y8r&?n9*#!5q}Px_+Ek-31R7Rm2*m zVR97{n5~PYe(*^pErXq8ds8Hai``jcKOHZX4$Uc3?cv*lsaSaS4BD^59?-LS%$y6)i@ycamrWK|_30)EEE4{kXdzqqcC@lG7lg*ut1zeiQw#cCpM8 z)60^ggUSH8Fa<3EhkqdT_OM#Bbt~2(1_^B{+5xh)e29Tfia07;IA{W=1#n4A>gsT- zXOdoYp3`oN49+cvX10^}$E;eLk&Mj>f7NY0Fve=n{8zV|)%2P#s zuzn3kcLR2~MeK%AiD4^P62ZoqZgwK5A`)xlhsVR0g)G*9edYJ`?o!FBHu1F9?CT59 zoSZ0)A0BZur|ZZ~{#%-Ke`Dx+rB>JMO8ISMwlHv7KGReq(&oQtE9QhUMIdCIJ0OPC z8FesG(7h-70pb0$^~@iJGWJL|s9fUvW{;hC^Xp>=4wp&~j0Qv9UW0r#e9G10URTwi zmTnh2E0IH79$N~pILCHb;=c9MDCiMuFd0w`^yIUnXU=Dr+T7cQt`a^waI)gkPPpe+!h*818|XJgiIx zh+5c8(}ShIbkd7`>83`t%j`1h8c3@x9Rb)7$|n~)K5EG})T>>Na3qn&o`nJH4Hz5s zg2-Gk`-RDYj6xCu5_vPd1nSed*--^a%j!wui|SVMUp>t=lhrZ5+1Rn!Bk3ukNr4+p^!scJxUbKt81%~{-3 ziWG2-WmkUN>qEm!CwmJ{ojli)8RTQVrC^d2bcqelM?c$||2JFnQ%icM-&$V`JLbZP zp~0ZT;Ufw6bfdC=Lwa?+Z;Jem=(!q1xo%rUatYh?WLQ|Bt%Jia)f<$gC+NFU+{KA` zW258~y~^HaI*xp~DhnMqf`LW)Bfr4f#JiVqwp%1Saa&PafjtHr{9CNq@!M6spV`hqmc1D$hyvlk{*C!|7te^Pkk2cBDfEs6iE!Tm?fX=Uer zd=SV&56r+HzZX;9l5F`JP-_IU4<|3xNe z7Td~;pNZ2@TSC>phcr&AiE=!eRiDO!o&*&RZ_*yj3HhiI+p?{)0BhGM>S`t-(|#r* zKz0D){8;HLjPk$Y)bFq~ge>Z`dc1Lf?u_R?`?R<{4Lci8HY!}lt;Tq>!)i^i(r8g8 z)LdLv7}`o}hDuM@>kK={o~Mbu$z2(BT%$N#div?gSW%2s zIcLuDlG5&ClmJ*Zi=#CeNt5dz%wI^OL&NP;+s@?_-cV+AvhU$gcg8{Xj&;SR|}4oXPROk-h)zq%)nsbRgx$)`v_BtVKFt z`LMDcv>L^!vLoq%PKD1fKHj=>bfLFr2v>DoGdLXI(a_^h#^M8SdPjIySIfYzME};o z9@$yqo^O+#9Co>avAQU;0jmo1M$Bgu>t(74i#Lc!(;+;@%qw;vRnkKSM#+*fsHj0o zo{4vdc^B5k#e8l|B@OT*mFM)DD6K(h;$rL^0P#Cl%UV048)R1;e?^ft?FqLzDoYMwba!+xO;9$ zF+fgKlYGDu)WZ36i7c2tp|fwVSbJ7g{tLYX$CohwL}M3euo2?l8s)Gk4ly~Ta#|$+Q2!IDIQppk>SU*g;>AsiR1I# zzhg`JPT<~WU-3snKNflMZ}b+d#UrkT!RZn2uwz~F-a*WACU@oZmcfxbEdD-aeQJC3 zJqViKa^0OWW(W|!FG@?N$Nrn7%U`^v8BmLS`W5mU%#BQZj+p_H=3<1kW;?n-Ph#nh zXz*0CljBU5)g1fyf=bc8G+pc-@t9r{?jgS!5niqJ>kD>QJ`XQUDc8|rl(Z-E^T%={ z99rLnOD*}QLSyT<^oNIX02R9V+NPeiQo_sj+gHf-a^$IxPawUg}0WL zCXiFDGL-*9zD!5Nd>T6rE!m%<0nIEhrgH%`Gtw^ZTwLrVJ4QmAyCWRGxJ@4mb#B_! z*}?zjcTGm}3uW8D=!~ap-WB!B`Q42ki?M&OG-gkB4Z;H>ZK=RPQ(|c4*VHzYHI6Tf<1yR)1#XVXOR*Y`6{9jj$nX`;rs#Ab>W+aeXAl&4bRHlk6Aa z`+`t@17o7XNRGx_qI)8aDsChQ?=po^i|!QuP@lQj9_Y_+-`Jafpt@GpK-Bya~2YZl)yO{<_58Oa(?0a;-E2Cty`tlR#VKR z)ae`A+>P2Mm0V2&p?-UN!E5O~#-=iR5u2%N1-NRLljG#o4Wt-qwr4#F50nw9 zrU- zW8k4@x$}|pUK^Q3BA*3l?Z0gQ%R&XBUloLxMV@21zZY=3I3Qbvq!PSjtLYK`n*8x{ z$63>r*RIN4^aGFZUCgt!Y{r?eR~bIxH}QGb19Oi$Sve*?(Ut#&^X{+XH)YihAQ%h` zIR#D4OIlhiu@EossklL)Ls5b;pBgRDn8~&3;et}xr_ksKVKWH_ia^MK<#g$>>FImU zzW>aD>3nvJpejyg^zLR&qq#TNZ|$9)>?wpDPM<3>)$9o-2ZIgPIByGXXiJ&$$EHGP zQW5i+ytWQL;857K<_0Zk4KL8UMpYY6I%#8epg(u_V)uYwuB?-#im5}J7mg$c6J7C} zs592$G@DwwTnc_@Bt>06jJtWOy1sT$lW+z@b#oe)#;Ox*R-UJRp$zX4^cdyF$|>%z?A#hB$C+5SoZYvCQ*+-- zq4YjzNd^rro!XgjX)N5dtUhAY>62bg<##Z0#(rMPwUMj1m)QF_?#6;H28J~%zqHn( zaV4B;oy!nR!ltm+a@~re!>{7JNxjY(VIdpQp1F_3g++hpXE+aDBSZF0{QN`~gB9(Z zPnW-n&k>muKNn-1;`86AIs>0e`Hiabmnh<6;`2CZfzLZD&!5BM8{+fj@>BS{uk!g` z7IRSgWvFOHMZ*@_U;dIf{+kp&6h0r9K1cW73Gwq^qpztneq&V%<4lX|uPXO(EOrPj zg=m?a`P@v@)%=&(W3JHuP9)}5(} zR}Be&jS#ZK?!GP}d(7-TZLzo4%Zgzu zOIy=iEN>07R}3yN`}Z@$erJ5HJJ#;dWTWk-I$zA^a67!Vgg=nCGzMaU5p5vrQ`$VQ z#I`HqnsYnS{o#O|GkL8|o}OS#rSRyYPJ_qMl3tH68bO@i!Y=ar8^ zSFk=6Tgc1gb+OJ(@@^%APmfwBNs$2;7J7S%+5RpP*uHPi&Tab- zyfoNR=o@J3=*3tkRaFxfM{g42e9-O?mf%;`6jO8|r16MuY)i?LAKuLEv$wjoce=e9 zx@*t0Fi&#Ug@Mx6+oSQ#P{`P)`SOG0b&SX2d~9z-b;3$>F(|fy-RuMF9l@x1!`bo0 zvpx9a+_v|t)w`;Dit)q-I^LPtNLCMJ4^<~m1tXHTP7)~?cQF-As>b>>i` z@D1aDc4P#~fK=@&|A!h-rv>RHF?8BdeT13tt2*l0^;Vo#w@>+FxU zXlfhCuR2You<**?9S1ip9dIjmCkER!&8^K_MV#*{e-L+OusjHpg-CBnp=gY_7Ssf` z#cFYEb479>9|&e7pPls%85iSST?tDg*JX1BT6G7^kvc-$AIYnRGstYjJ6R?X>vChs%h$g#+=U6m1l_5{4Z?vLohVt0h z1m5U$pA{@*Q}87kn1@2!NG2K5|WkJfH&80gf>*q6JdQ zmvOF%M;vhXtplT=`9obK}FqRm4~M0gXmq~Ru&uAx>*&bKFf z7XIvWD17mSFpz??wN+C%oT0@jEO<7E3QF-gs3MjYTn*RM+?y<=jrjsR52rC0b(unV zr8{j+4I~;Io`Z^rJ8E&kP6i&%r%w^e^^0-}HYK6w9;VUxi=t7K6#&yblGF-_`p=R+o_dW%w6lDH-ZYr~JJDxvCnpl|bK_f1|Ef z4_^)maAfDjaj`MEb;Cm1z1PPVH#v=J-nT#P4|aFEt$j<4?BA|K(O5pwOp=w-CNw=9d6_;#|DDA&S0oHuHDeKm89y_n@A_m3$o4UlnOic z6_gi$puHt9-d4YBKU=prC+DKa#2ZL))5rf~Hb_?yBvy-npem9rVyJ-Lp-;E`F91aN zE=DrGiE8Tk;bETKS5UqeFnI}3T0D$DyLY5%FfEdat9LN zoQOh)$v7zl2fEU8tWplbAEz`x7ZR>ma8$Au$a(UEXi75QVE1ZOC)%>ZibP{NWt+0( zhm==M-(l~%_A_?xn6GU-6EL@EYWUiP7DY7UqZ<`Qo>w(1b@JNQh}EZbH`?`eN#XGW zuHc8LD^7r%sqw7;KfGRxCxfWf8^1@P%M^4S!`2-&Qj10y7@q} ztGzkpGaGQPu-DWek8iFs4hMI3#I~$FMLuP;H@NQaPZAO)SfwGLwl$H<_U@mV(eFRG zuv{Mm=UIH7WtA$qsYaVhIhtzaI;RfcNVG;oo>XFUE?{6OQ_*acE71O0%IP4Hh{ef~mqT^B9d~^WxAbs( zgkRc}0d14Q7Esop8}-)KkgA&JY^mv3u+7qFcGoECn`)b63Zl=wPCi9q9lP&Tw=`Af z=IAG~{rtV5ltpc748~o`#Y25dXUzswt`kn5@$ex<*cYsAs;{j^jZ38E^E@Z3a~NxP zs}riEL(BN!cU4_9$C=r!tW1Yi*1^KMqE}1;%%Q_dM8Xo+0;a@DL~3M&7Ff5Gy|KP6 zf}l=yZ3uLCd!{b!r#ShXq zsowX+S?#r>mu}Tg-{y%oSUbXL(}sfa9$qG|u5oE-?QUgCf}JuQMd#`JA;Dk{Xb>L} z*;6GpZJJCpUQKmX`EajYQEc*9$s4WkkUh5u&jftr=w`6%3B|sM@W)fOjkgY^Ien9Y z8d6EEUukV@)DFgZt=wB@w?UtrQk6kZnxi<2E8-dDIdX>0ST(cQz{=Xnoi>o>;^&Ob zE6jt-qZEaKW)nqX&WtmOx%$fnEV1nL*6Hlk%h9mi;EXC7d}e#t>2J~6JQlKNq{9`l z$v9)t=SVwk3RQJ#IF|HVvO$A4Jl#6BPZ5^MlM!W;FAz7`n_arRt;MWDL<(>+3*#TO z$m||Q4=QwS@wmaf6|-thMmP~N1To;F3*JtcjIWgu#8 zww|Z0Y1HFBINMFM$Xf;NM4qE$XerZe>`E2_@(9_`tUJ@GmHCu$ZT?0k14UTqD7V0T zYv=`)Cmm<@)p}4^iy6cm-UAl#8UoNKUIApCgb7PKM@Q%Q9ePEBv0b}y3hyD@ngh1h8}=(|Rf&Q>AMDfW)b?)78Nh-xtZJshSFG%s-IobF z9-ZhVO}@I{SP^+6?o_!`Aw_T~m+^(nYQD~vX`5*Yw}!0l`a|hpU?!|Bo!NFN`OtvF z8F7Z&ZH?wYZ~IbTTIrcOINO#EB?5I^YOBSaHoDX?S67;)nI(AW6t|@cSwq%iXqC_3 z1rOkQoBjX~9+TrU@Q_5Uz@>~%O=hC+fU(xZw=E8m^_;`1aJl#3b;O|)vwPW<8d35EDhX8dV-nIsHroGYAFcL=yHeho2LB)0>&gd9j zQ3zh9ZxA!08(};6*)52g)#5ND?L;ArNS_qQV^=F@VgxEh4qe3IMkHdeo_VwI8G8Eb z`s`35?hXZ=R;yaJHGyV6w{+FW=vz&VzDOvj2wkQpz1zYuo{v$Le?0B!@dZpqLv3zU z*gYSAAGwmNR%mn@rF=dP{4!tUZ}cLu-k#wXO}Zp|0kg+R2bYEvlB(8L)i4fRmb~O3@PY2RK=lp(=q0q!4h7xSX8SFD{UwaY)f@CtK6Oac780z_xAF$TU`SU zbrZGjXg@kLmz<>88fY{-=V&rB^cYN(TC(kyoJVO6xn2E1r)8qfC~Ii;S(E6^i70Iq z{OcIvfe2)1ARFZ98maOyxdA_EHS5iAfn*_L<Go5JTeGTodL!750XnUDv9Bn4=47uChFIRbu){w4FDQ~WAnrpMm z^^+~bJIBttu&2K3=>G2hSR(39-(Yf?=NuhIf7026R1fg>3eM%;2fWoX3SymrnSlgf ziRmw#h0xiVl_7dH$2>dwM)&CDX7x_;r0|4$G+WR#JTRD9*k{rjoEG5M%2-=RWW+u${KnR+ zv?iSj;y`O#6OLlXLtay^J-}~HX-()u#&vFu>3_-dI(?(2wuTbYwK!tNy#tqs`BK=E zE9mDEV|@p5tGQ+11BMf$tyPhUKT$9ih>Y1_m2LJzSYcQl%=XG=*ZeNXH;ueP&lJ9H z7|E;KOj?^Q;q>%Ori^N<*JKZCd{N_u?x73S=;A`FIb)#5=kBrw-%Q0++mk$>3sk#0 zmWo3gn@K1oxAmrkgt~w(!;A+s=Y=+MML^j|x`bB;qw3A)}KP$2( zpVnI_%x1?%>()spB1xyi9~B-TM`4i6&hpCITD{Cr&FgRKtf{8|^qk~T)6k`6(z`tx z;f3$1y2*?4ywGko*4L>xC3pK=>LPLtS7h5f%L?3B@1iRD2UI4AZ}f-GdmNn9!>45ZU~k|dPuLdIx}%%w^b(YxaRp6!kc z&pL|Bc7@6Acez^%JJZp?GT9{CbiBzEwY$Q`?ewz)*&1HBKYK-=SLsF=Cwtn4&H$O< z8=F(Ku}&X%Izl$5A;#dL<-bEteUjSe-Rze@slTS9lB<*Pj75+7#-v7 zJ`2BPux-GaT}hwTvvJngIo8#562r?+tJ=`ZG{$OW(YZpZHd}LHn4FO_;fx+nYjTn_ zYlHuy1H!9nZ5o6&G8Xm*Pdd%U*V>a~iQ=?bJN;Tr{~exxMBidEsQLXp8`X;MKGA*h z!R}3bz;8o3hRypUtp6U&i+CvuT}jdnEsPB;X839ZGzsz6yyzhEvrxx<0Cma%rptDEKK^g zA{0&6lcU!9S{1F9hXxe(j*y-AD;xNwC4Rx1=^~d|JF9uJHKI-yg1Ue~{lrcv95NR< zy&Ze_3v}O|!5aKxhe^r96?sA|kdVbG4}VGG23S!($nXCsqPluhtAAwY?hT>-cu=pC z$&}T+%r?K!Gdhql8#RjTZ5?y%SFAn;aOaG%&P^Bcdj(e zr%70_6)nZG{uQrHF@sDQr+lIgbX2@ z5Ou=c5gE_~B0!Z^>V_O-Hw(*%rUIA&tcp;A0YPp!ZC5udSP9LX){bSa{TSL*X zEzt1cqcbhTNk66L`X*hoyryp$%a|P;(T6ta2h8oQCi_BL$>5JTC0cwAYj_@OU>a9s zK1{J%RiBBW(wJ!!!_KrP9aZk&h4U$$+7Tx8G&<*5&J>k(ALNa$;{_gV6=7 z3$qg_L?)jrh{Qx<<)KS&(22$=6ZWE2;SP`|>l&=3Hr{qyt8GWnyL+6TEbtw{Z2q(n zS-o=cMwWSnfD4ERtAAlZN)!u;YLBR*zz zW4&v~HgH%?(r_fKJf5$uah-F6@DTY@H*X&b1e$%9>K9^{((H~%gxPrHwi>Sv?MmmP z825KogR~ptMn&qcILz=#R=KSb{Ff+2^k2Y)jQz+hxIas++%}Tm(OYmU^S&E4Mkis! z@e?73Hmz_e8nq)nUN}VO$!8iHJg&U6>qv6=z*0ef{hd>tykjxf=}FiV7LC4;x&dqm zSbhuKejl)ySvLfn7(sg*OvLak3Kzx%lFQ5@Cx*)sP$ZzxfHcwA##!wyV>uArZ z@-cG0-=zXi2(o(|=l4b?mC-HH%Wl%OrZnR(fk24g$K#k26@%Z9r9|L z$e&_7eZa0)`0aXwjdX9#`q_L7@k>awZgb!-ZsAvYyUC)rBgoETXjKT1#u)#LIhIt8 z;Y{Ro>>-;AQ6{l0OT;Pq_!{KmZ=(r695gj84h|NRF@40~S5^xfXl$JC(rDErkZ0vl zzEGYdrp}vAM9jv<_ld-$RWJArwbfj0B9y`Wf5QA4oIybTSHo-oRu@t!`;ccuGbqc$ zdx0PlMbT=M0W1YE=W##Wn6`RtW{u8ZDrF36gD0H<}856WqUV|&DQYwvR zXB(Nf_-!GLtVNYB{iI_!wSOBmRra01-Q9Im$)FTZ&ORZFy;TsBi zUBJRS65Y{ib*(~Ct8F3wHn*m2{h#^rNKPwK^gpcQ>CW^CM!CCDBS+p4w)}U=tC&|j z_X=waK?OvuVE_Z8Ea=6AU`2amallFUV)n!v?_BVI;-~thg1=yG8uMCuERMwTqvR#> zhlRqS)TYC(2Zr)4YtYl^ZFBq7hOj*!8BsD0#S(>!%1grE%TFV>!Rpfx#SlqWxX7(H z+wEq%d7s_vNIBf>*)`Z;J8+nqxe)&wI3AtcLoMC!30$1~n;%z?ME)mqB5dXR@Z&l7 z=&H*8@=UF*Qrf5?HNB%r(WK%R7R1y6U)RvAt7HcVIxSUE8}3v=yc#VkWH>);)|u)R4pS!#E4YCVU9 zhWrMLrAY%clX92vTGer^5S}GV$05`zqKX9v@T)lG*L#w+F|>YZGPxqj;O)*!L%ct+ zBb3prJKZ$~jmvYT|70EFJY~J`0w52uIzBm~i%7ly{#s>Z`Qz#%C#0qZ&p}M$|KsdE z;3TWcwDCT-x~jTz&N=6tySl2Ys&mfMX?mu6at_SE3~5L+$P7pnLMbIu!|_dV|+&CfI^*k`2RzXC31 z`r=b=T=hN_p46Pu5 zmgNGRG@L|aRiFdFMG!tn;@W_5M%!2a=1Z~pP&lKD%G0O-<;z?7bHhwu^@&PSXH-)H zlKpPQixambGFfA~9}$PdgY*cK9m(wZQ0;`w0Fp}6-RSnU`eX3bmEd}h* z475z)+&L0*zIT`+M+i89&OQJT0-MBwxtxnxpci-+H2A+kK%FVzNt8nozfw05aRjs^ zR*v;|G64F|X>p=f8LW-9g6N8H`4POD3~?e)bxlCSnQM+m(=erFKp3 z#j8KU8Xn_i(QSx&Ru1r10-2A_mJKbCUaTP&OHVl&3x?$g(7=Rl^IMmST_kS3@>r+< zRE3aRDT?&G!#1!0J5gi4d>idH&@)*+u7tM@9q zdKvmb>vM**QKS{hl!nh^?V_gUn9iV;o2^|VOXD3ckPY)k8srN9kT}uFFuQhTFTR*b zYxOnj@{~EG{GnGHF^6+_4a2l%Kde`Z)E#Kt)i&Vf|tZD>c$542j8k)a`8Sjmh zbn$>IbdMq_9bDY0ENt#;AM5hq{%EHtfy}5~tGAM7F=mTp{Zc$bm<$L-QIeC1% zFF;BhZQC+f(oC>n zS)MkBRm@}jZ18Ps;EI~fMs^LTt-cxgsyI;fj<+KOY*EiTkhZbI;?6LXEN-2Q5%vx`mpqCYTL>8%*mYa!XVW*LrW0T|MeDKjs<`ILA z$1M7churfA2X6R40_S0wZkxo5^9%+MTc?zg=A+_km6u#n;ep z@*JXI(6Wg%7E)j;m~bN@Q*E5szJ~vAcuAH|=q_R57brY_zu} z3gmXUP`l)OT^qBs&Eb)`9s7r$*sO{CW2kwa{uonLa9F!D7;fPl=QFX zH=E7mxpe5vOvX{zb|kAl`@Xm3M2$t4S4}>-p4=qSzfOtnu5=+K+BY38KE7w>t%*^W z7l~0B%pvlj%~x^b(8b7$q5}#QAnJHSzXz!Hg3$eK5|kCIcTSrE2c{(g6zIkN(h`1n z@@v54IggTjE*G`A<4dtE0;^baK5yy>t>sNce<#V>=psa;^LJIe&Ui5>x7zeVfzhQ0 z1fdCAv%P7T*T7GiOKvsJrI7X1s^6b9o=>g*&k5PgtPw_&2*e^`n>AE+J5l8=kotHj ztz4s!%0*hK$M1#AztVgJcuSPltO&Ji?PHuC!C?*J+T2-}{cq=vwVSkQD(Swyv|MMC zh0MWZ*_P-oXbc`OsnMlVVloj+R+o$Z)N4$*9Z`!pXjSUucBw=m7RmMgya!dS5{aJ| zGblimOrn)}f^K9rTbQ%YG#|m4l3Q^v#GbcN#u3J&GWYlCYUO6aFlzg#SzTf_1uF75$<=ygGx*| zVa{FZF(zD?uPJ0TS?n^gv`yG%jxPk-&2+ZO^(~OOG2878)K+B!YEM?7Q*cWoQQ90y z>)O)^-MO`K0(_w|T5qY7`^YC?Hz2aK@?#BCe`{ApB=`^2v(yRQ`j6139j38IEkBL&9<72fgH97`4IGtsBAR;hB>{8-_ zzkNq4@p@-U!q-TYZKBpxX-pUKR^%0JSd!}LNj*NYHEDH}V1#&lzEC7Ej#O;fgexV@ zCKXnbT&#^GD_byTYW1t+1;#_Yb$arXsuF*Kfu2Lb5%`T(GT>Lp9drgUq0o$pr#_*yZ=c zRGLn#A3=N+#rblEW)o3ONW~khglcmDtnBTa=R-yu!1SvV<&-Pb==OecC8Lh)@AKxZ z>ejKUH)T+^OVQkck$JLnh5Dw1j$9(`y5S__3THj??n_WRq)llnGJn(#t6yp{;6Af1 z;CKd_x6iW}JoUQ)&R5tH1bVuXMnuq6tYc2=KPdvtmOFl7WA#X|y35zjyTIMBMSPhP zD}6naf$mzxUr4BI*^E6nnDBJPRW+yg-_`9lW-RHp0Ur*hwiE}4I|HeVb|m2|T4ge8 z(I0`ZQ$9+y@X2QwAJzjDX}E%KZs=AGO9Krr00q%f2iPp?`vnAlHdi}ldz{&rRt%0)`@J!yJ-vEy*Cqqxl`Q5pr|=E(JZOP6&9 zBO27~33Y9Jfg~=InDw5hrK`u^CgHRD)7E0foyi88eP`2$)CYnrqs|$`Ao;$&C~K8` z_!Z7Nxl+8~w0Kl)JVJO(q}3kMN|@GGVcey#>qKUUZtFmGPj5t!5mXM=QVlYkP8-w3 zutw}rX4KYLu&9Z>d#h>0!=g&aXyHE! z@KWI;6cMMn&Rl`|NCE1uu~$T83b*9~Qh~fpj%qi8$Z-_i35-I8UczS>MwPeTE83UW z2cr(HR!NTA{D^Z}`SPyW;pWW>UC5%3hW)~eDmx{P>|Fc(1repi+u}e8pdB@-lon*m zXn4f}Ol(u3wGMaz6%BoDY~%uB^a#cP%65`(hhsWB918K^y?_G3-wQf@{h%i+>gm9SL`lpq^6mh_v0yg*NWLgY_r_+GzZ zE}=J1vX~>qih0nGz~O-m(+dXJ45;p}kz*3Jl{Q@Gm5Trpza2Uzck}JF>UNz-1f+QG zE%-6!eSQofYJ-8+0>c2T1=#(s-+vC7{=R;>-5xz)&cA(>b%5IMpOD1G0|nVz26_un z&91ejWefQcvqG^aAmH3pgXI3w4=x=!xipecZ~56vnaaxP(_@(O>R(z0$PV;ga)L|j zWUb{LE#QY&O#?QnWoU*DEmZ@>q_tkR+7rF8Xm)dVskC83it%bwrQXa!!p}^G<63v1 zqjF?$u8|oUr6P)bH-nZRa$9S`WU!ImN1 zA;!`I9szGK!W?B;4hN!Yh1OKFT%jetj#ILX=9L?2R<}bM@ae*KbupM){B8783!;&3{`11lcj^ zQUu(!qG9Orshlh$s9!M|OE>1@QJGsDF9odyK~yG-x`xZU3jLbfJkAZbJhXJ+*^jw3 z-9?WTk&oGvQR*3kNf8KkR*Ivon6Ckm+$ko2s%n-Fq{VUVw_bN=oiZZTI1FjG z!9uVYYQ0#ZRfpf7()`|^5skiS=p5+`xxX%HRc930(Dw|v)OP5PNXxC{UF5gWWw5$z zU3MJCPYxpp>jNc*O44)s^`BEimXJ&8NW*osM?KP1pI52!^d;=2qG$Q5<3UfxDAC!x z7Lhw+6la{doRzQ1c7zn}uK2_@jKw2I87ca3v-kHRr-0>$GC=nf>Q2)f3*|yCxXrh! zHTJkIIu`MFX8FcUwqq`%w5P&R`I~k_!lDOS*bv72A>&MUaV0}fhVzY~iGo*SOY1FG z)X6`^JPon@JY)kWZ_nLD!X66XfeR3yp>V^_yHDrvDbOd=XiZoUgxSb^|KOaJky;D9 z&)W@Fqdn^Qg5D9dNGJF0ol^LcPAW^sm}l@#dZ%H_xv2qFEdgAVvmf!B1#1oLO|urcQy%BxOa<#)z|%zadudA5t z<*Ur`?P;CgD|TC4p)RQ>V(%*EyT!)*-nda}cZO_1H?zMRA9WW+X0Kg$so$N^p$a1S z89d|5b#)bKMZsmxkl15&1R|Kre`5~2n5$^7PwM+n+s-9LRk%f-^*j(I!OWwu8hk;C zMjX!8^U#NJ3&(A3dWYH2nvayferem_VrBHw5db@viz_3)X8T1Kn+5Ko;WKYZ$ zmE9|>OjCMW$3ZV!OT0!em%l;o;(tRkT)6WjlTUuIcJu#+YWe)^Td79XOz;1aa`DO_ z?DXnSvCc=)TQNzyG9bN1w;gn&u>taGRIb;$b^~l=j|w0k22~8Phr5TMI+G(e@=L|O zEc2u5cE2>Qxqrx8b=jm_^BZ5ZYVSHGzp{4u<$JeUvKi;$*rg9MFATSDIaPo4M%NCT z$0iM~92pp0*?HjXmzY|;{hFO>NXor;8J?hYy$-q_<2?XQrM$@ww3fhSSySj?#h)!| zp$kk2h6;Tf$v0ud=7{dLWAX*&JL$o$a9d5`X(U$mfAW*H`!;8Ww~kxa>D`vN@Ow-h zLpLv*Ufg-0e$|d@zrR*?@4TiRoWRsxZ8KF99MOTT2XPK&^}knZ%+Go6Q@RCMHziMC z#hnK1=gm*P?Q4lcyr(-9^3Qb zKX{)4zLB6+YZ`QXsPYOvwTs&iIS;p^cz_731(&USo7IYR{w{p4Y_~7DT($o|x zN!NcY-B?-3`4mEC%Wm^X?}e(sa4tLBnRXeZLekB&&c}FSQ)Hnc3zVkP`Cg`W)dW!{ zN4x4Io016Z;r?Q{K6lX5z1Nn{IxUf&uBCyk)kwYREG`m;A<416AT8yi>%z|G2j}MF z0{%|-^UwJ5Imm~P?k9I}3ura0ESu)kqJI~%jcAi4Cjr{>28Y*>4;B1m{J_OaTMuYs z%-L6%FCXGDf;NT9tZa1&4H8vbm$;s}>IrAuC)=~Y_lR-8+~`yl`U@9K&F#I|{@$K? zopBjszDzWuZyQmz+cOsTCuX|8N`v`3`CgH=O(ozDg0@#d+jXF=jaGnjT^0c-@o0fM zxIK;2CoBS-gB1usvt)eJ+U6g`p;`|;b}J^k_s$d1H{MlmZ2iEn&+$Z3ds}UxLQ*oL zTqRU6_0N0;EcA(v3$|>a>wxuPzJ;;$6uo>)*F4I@Dp=q+Z|#hT$L(C|yRi8s=Gkj& zXHF(Z;|@vZQhP}}bLtO0i;vb>wrp;=BUJ9qsoRgW|A^C>%$s;Owt~)r-fRMKrBt&z zk}Y{b?Y1fZQ8{lOf!?fx3CUYC1 zegf4+cY{7XrR{C2fD5xJBf3pJIXAI4Jj1(Fa9X?Ym2%crVNM@b z74z-oy;}_8v`kr+1cw3vr&;N@@_jN@DC3%q$#!lea&*O)2ls{DWuHbs-sh+c)$8?X zi*`0WHo=fiiPWzsMx7SDSx?$DF=uAPWV8w;3dyI3>aMI$jco$`Z=k;RCeY7kaRnNB z=J;#%2G}PEggyf$3yM)p2fjqa7;r<;W*;ywI&I zITD&vYqdPBi6|t%&twQyYnAfx;|0+78Lz<>t=%FH84D&`QiGlst!)yyT5nbE0zL3~ zK+kQU2bzJyws3}?V^1CJ#lbC8Ce4^H8L9qMyBExvV%~qfKRQ((8}fu6NO-DlmsoU# zZTp2?zjj?yuRqO*%^@7b8AiUJ&i8ff*N5?b8H=8Ac9i<=JONmr@*!8JgbDzPK@vuA zY8bCJAJ{Q>yVf4^e@PpkuV~`E zrF7e&di{_nRqTyxJLcmUm+F4XZwXYWQ$G_6$_gEH{u*Wt{|$Ty&mM|_^+8yMLA4my zQ8oQu-MI14RMW+LsjgR7_Z*4E6cPy$mR1x z?hHyaWEOH^u%J}bAF0=W=St1R_77(Y?Y9nH-uy+W7K{qC0v1zZ?E|F)6|%G!i6Mte z0;pI)DH(LMYMCw%%L@3{H66nE7q09m%LeorgF|{Zb8mCP@zb8Zw8FdF)!%15J!5@b zDsCJ|I>&dalOzuXYM^@j!9kjQAhA@6v zb1`TjM6%~2Q!GO+%StnJIo(W@9p+2Njox&^l)rsP@E`hX<^2oc;kJ=Z+dlV|Ap%wQ zUZys3INrHESoN7i@tm=cU-lY2Z492Bh&QO`MUJlH<(bSAlG#xkA z@o<9D1qVo3{%alRVhaJzFK*7`b}UBp#M3l0AAeW#gHyYMC)z}zh1|fl zyrExDs<}!1;J?8T{PN%>Nr5aL2~TY6VR?$`S?X6P5o5jcY~W@<7*t8KRkV}2^@iH~ z<}G}Y-dLUQ+4Y;o4Y5d?PT>9u`Ik&Qw_|9cgKVVx^BUy%8oU=6IAPV4LB}OS*qz`C zc;rG3yYLf#{bEA6=s=g?=&f(j6#?XxD8j2LVtN7jV{&%4G&DnMWT!>?ZkBU3rP$HnB-9^W_|N;*vYm24(92bM3Xw zGpf$&gAXS6iytp--f$6wwI^eNxaf&R=CGkpP`%zc75ic{UN&51K1lsiI{qaXKTdsS zZY`iB*{BR?7zBdV+Ayk6o9z1FkR9zgz_uG@D~E_Nd}v&w$S>D}Ws4-XYj>z@kt)1H z*-iaJ%@}jdp-mQp{^I8ET%puJv@)>A7Evj*T30HdsDxK+v4GkTiJAw;SL*d^mK^qW z*X&_3=5YCg$cuv?s4q+H36Kox*{$zBD8NAju4uwVS1e+4+jREDox6EN^({CQzg77| zxp{MU=fTd|p87M&MjHuH$HH{YMXcOVJ@7K#tEXB(Lr(;-Du7l!bB-*EhUs}i+T1gf zbM1fsi|On7V6vatm+u}Jy@mP0Z6keqF55hD*=ozB<;8m6{Kr1Fso^W5i*NPv zrNu+iTkG{(rH2>ht|r}xy|8x3%dfu5{5!@MLw*nkyrqo+dywgWL(HTN^{XaJhFslP zn67R-Pt=J${Ue`ees$YuKPBqY)t1Y`dY4VF@H-dly$k1QJF#)$FiV@{$ozTQIRA$F zi>Owhy|~sST29#&8%(2C*3p6+js_oKsE-p_vy(Y}y7`pci#A7O^bJuY?^D@}vT``o z5C5ap9SK?G_6qsNad=lkTRd5dS4?e^lrh|y(~H$=OV%gz;Ia=cp8hDt)&k|Dh$1Zf zdB$?FY=ur8FfP;)p{fNAUnUXv9$_9kU2p!U*y^;aLYH`n;$P9C+H5x(%?swGV~4Ke zJYxH8JywQ)^r9D=Ek?Ub$JY3AvEKTae}BYx9OWHfPGyeTl%tr36Klu@%DJ_c5v*u% zxj43+;YF_eOnj+1z?`_wmQ0z;r#8tf1#c=iOw`)$zRWWD5O{ZMyxXl9KG`etgsnC3 z4_RGW-M0Gm)$buA(ITMhK;;+S+2wY>(5$tX(`IX%&frtfbOqw(H%Jb&0M;(hNE4g* z-r6?O_~09)7Y3bu-(T?HZ-6fu@twLZg0*_$x4=l`VHQEU>#lQH5ygo%Uk8=I;X<15 zc%F_2Z9p2_yMUasxdIxk(6T=2icv_Y%%VFRH?G4yUA&L1V>m3RZ#qythqxrG5 zzr{(OxBj(`>SRo0poc#ojqe|lrTf=9;f5|v*l zSLjtnsg_7;rnJEd_8{z+S*Ofk-;l%N60NG--y{rinNd zl3XIhm>hhYr8Dc#@x1;a^k-~-qWSaHudaTFz0DjTyZ{NG<|ibcPRvVV=2>^|D>7P- zGi6H(q>oWuOL3#?!T%y;JK?XdBS&@u=!gcxl*D!Hh?OItM;fYG*k}hh(nfjnH*I0- z;hV*L@$S9J0Fiz3y1I4VUAfckbm=UHjMb3-mPz*h#3qZ8m`x#(s=m09g_AUzOlEGe z`H_FO0U7N_$@(g9(fj&$LYbIzDAQ&Ow7t!svoag|FKS-FQ=G1yx~5|x zs_Wd?QIKvp6)`w%dY#kyXxGwt)Tv{p-&i^h&!a;T$-s)~Xybd&c0E^ikUhhQNu%0Qi7q z4a)8C31D(rHe?qWoWi+}sPJX&ExDC+D3qJ{)AeFhZrY`2Q+90a9N%#&bwIwWRCMi> zSaV(nPE;tF`;IEMI_h%_&VUUud`n%Sy4fU^+3iDxSy@bLmRSNxx2#@YnGpBpsoz5P z;B|)LK2okuY5i7Hs+7_E>2I9ab1WPue9n&r@ku={LV=3)YtEc=WIJ=LBRh9#ZF)<8 z_Z|DmV{_4Y%Osi|Z*uAsUaFXl-@e>Wz1fZ+=gl7MFO&yH-aXey2V+nL47ei5>|qYW zFVIuVp&b=`>U1eUUN=T@5O(`g;KzngPtlPO@LKs#tW0j{v;>ph zt2@(xfA{Ailck*-Q%f9T8j!@MV`6`_@M~L`Tj6KH17uHwLMC99sQXN}gMMF&9Z%)7<%;@;U=sh1K|B_pnD=au_?%RBwPM4%j zr_cG~T`q;f)fM+-P@wO0*L=6RYmVmrj(EId8DwFv=$Ai2J`gWJ4RWDxhC`@X8Cee? z^bdu-vtuLMYqjC6g#%p(9F3Jk2l++tmSTS|x%uoBkM{UWX6@G;G;G9sm3Z&3conu+ ziklh(u9lzWN-!h)0m@3iqTGp4;NJ9nJXKC>*Q;<`%Rb014tep%l;Q(N~u4+UnG;y?+nR z>J&KHr0)laO10tJwgwS2U4MXVP!#9KT^m)(<6AVfAzPmU3+;-@;~x8R^Lw75)0GDxj$I8qRD4ltHX|-!xf&5uSkvX?lT2^>WJUS6L#UAPGic$@YEeb z-heaL!29pQ`+thQ(BMfP=Q|^tPoWYgQuqV&Na0(Gg9WRE$Gd7~_r6JmH|2C@9V&8#_-5v!iNbXLxZ@U_0r`$v`3(N z9V>)D{(PPh^=-712@39kc<^X!i%IJ73sd87x~MRju#0L^e`Rm)^hHJe)-BfIo}3PBt=GRlaaD6mVUZ!c-$R-4TcoSsl!H0gEd)M7D@PZ)iONO&@l8YdrJnyYq9H(!Yg`H6(& zrb{m#abJB_<_w7<8x_4HW7~G^-ZiWKx-y#eUVE}e9&bB(`oe6yqf4v!j_KG+h4;_d zk!hDTTJ4N(stO|#y^2K3?IE$kqW2ntDlZSoO|e_y(%AJTNzdMaC9+hyx3#r?=6y>& z!*BlSSjULqo*k8AsZD*08PZvJZVFdGO7@+6+rTnRV!d1btVisQTW%##)!Zflpv zyHt*p*KG16-Kv!pR^6|5kUy+G$DF3|o(ghrt@F(!}tMtqMdL;iOo+j+bP4;?zYs0byTdocV(*Pk2y8uHZI@I>J#M;T3X?th>{ z>IL3GedT8ne!WQNPOGO>>$g?tfNUYyWm{F_n6D7Y1lr;iItC{l$xFe(qJLXRX}DtZ ze=)sXW2XDaT%pzOni)1F$bcv6B+}00tWnndOV`XNswvlev2QAG56s0~&IGsLe_8!9 zdW+vrGir!G+1|11Ljts=d&v$e(9uD0)J}f{!2E!PJ{xrz(C65ru&#V zmzAl`3|l=i9ub*}fmkn-s^W&GW};{65tR*{ceH`2!oXBY+u2Ld6-p(On!JWG91Obu z&DGDKpWBnHR-=8Q(P|?@?-SuJdp_rFpc{Z4^{H4EcxhND90fy(cbwojW;ScD^_89IE1@Xe-Zx2;U+{N3tjnNKkvrFWVEesZ#XnJJ{P zMlv)lc$79iK8LOYucEq&3WW9xB>cjm59|pH^hd_a#X+Wjj?52`evsOwbC}vTUw?4l zE#!0iPu{S-DJHLH_9jh63&1&aqsyUZ8q(F^8G1ngb!>ICX9X=ZW$M#;kV~L{|!Drf@+iEUw!^2 zK0nG+w^Yu3{@m&pc>ln>#J=axEh&6nmeKb-kIz5F{FZ&sms(2nb2bIE&d6mZgY>uCvzNGR5Q{gjEs{@Xr&E=@Eq!9vscKiF>rLuEmlPKT0 zg9$o?#HsqhwXYdtVF!?x)=h0&V)>ytZSy~21h$YbC}Y#(lliy^1`7G1|dc&Ocno;%@6RlD}?-MMpjaWFc( zQ=n=mps<_(?q3#TDJ%<6yPy@TXGq010gP+i7HxBx|g1_A2| z6BC3-!1XoFGlRQ!HD8dJGalWrAXdHTfYh0o$XL<(Qmq#71!T4-P%6h5`=9iopiwHA zlkPjBj+f$2iNdP!$dyVSBh}YOINANv>i3xv`7e6*0e4{06~yftU_8#JI@fiYU2&b3 z)iVb&9j?+9YI5kX?XvbmH_jNU2j+LiNHluG@CkDH(48iyxMU)oXMeX(A74Z{n4lEs z=u^zd3$+P4CdKZ*%Jh=gV5^|a)_a3cl?51!ZXrdb(Zif>GL3a<7zGIoFnpWWXVb*O z&27>>>Gn}U@4{Ti58Lxhvc9#xabrC(JR0hFAV_YA8ubCY!y0V6L_r^`u_V`Ua z^`fyuV>fwvlDW}74HbAM=I3SW**VnkD4GJd!{mA-T_!%ma&6RS|uW-)OX9>C_r^#SPNIk&# ztwH`>*LB+4KFCbht=X*e^C!lSPm)6co7Ii8eu2yT6Wtki)-0XMdTeuX?M8ArbKBSs zqD^k=x#2$BIB9d16CQsKb`%kA4j)cbH>2TV2tnOvkwvV!VJ9PuR4df5&$*n{HQx(Fm9=qmEL^tsmF&S0XvXr26a+uH8=Bn@@L5`!U@6V9eEICW75OL2Nn2aM+UTielua}d9@oU{~X3Lb$C~A%S{K>r8>5PhufY5BIjHQ24 zAe5Ply(WUhC*4N|ybU6#S)DzslaT4@xt$vZ6Xi(fh=ZeKavM4;`E?GZ%P~1(5A<2sNmF0qd1e&$OhnNp z_B;nhv=f*Ult!}qYFKY-#eB-t(YwHq*oQawk*-6BKEM~Wig>M?MqJgZ@4XJ!#E{$D z-#v90G1!<;$X6@Pid-K`Mc3B$dGZ^KgGjajJ%eK+oP~r}1S3w1Vp%8RPx&#g!suJn zclg}$&6*1?Q1upk`H134&2%*JS(8&FG?CodmrqIcSjRuDZf3f`J4ixuejdUD><-H# zaP-z<(}2MPvwThg2m^5U{2S?Mlgt*4&{Zu}{UVZAeaEo#${l9G-Dma=bL8S=^bSq)PqI%>kXsy4gIFORR5*eXQ(#^-6Ca*nPMp-{>Na=YPZR>BNGXv^_{D9S zwK(S$_-Qxcju>ub-{$&J2Zb7QKpq@J{UBaGc;w*0BWP0Y-uEt7pxuiP z--8tm6~+RpBNvyZLK@ky@WS^|+4%!v$?F&aJ@=!gK?yn*B0S<=YscA?wV;|qQ*b)K z|Ed-J&SU;b$7p79I;tzyqI(Y>+`X|qH5VeER(Qwqku%zu;g-he1?^^flCk{>h^y#G zExy!YWpz4f;jcbNJ_Fwq`>0{n4fQ$KhRS(3&kKzB=wLMz)ZN zs8cZ~xnR$;XJ7uE#_HFV{mZP}p}z82CIX!TpAtHNleav8VHN{mvvmR-{KLj_NF;cL zi5#BYxc5G{Vc8MsnR`!RfLtaB%OwhD+%L;qs5zWCS~|YjtPk4CGt;#z8NMlKS0HUp z;776g`g!ut;6-c`<#_6V)ARrYk#?6wF%!@-yl zQiV}3kZJ7we`2hY@C~tM)FXxhrn|xV4r>g6v$yz!8Xv49d1hqS5!?pn7AP%~^$jQF z&d!L=Y!(x%9;v7~^6L%#%`;@5CtF$EyI481FETNf!u5)i())ThlLwGcrDL95eV)9I zbwgg6+b8NT!0n_gOg%j6M*vuP{m_Q_#$r^pXFeCR2lCmgBeRM_(KFR>UzdM;S)d$k z<0VRa!{~{IHG3WUe~A2f9hcE$_*8!3)2``VDk4ZVLnWbq8uIO|)t}`zk%P@$ zQ5^o%DD=VVxT{cd?6{QtQ^&s6D|u3L+^*_KyiaTox=o~p&Ov3L-rXi^NUAw{vCNLS zhxFo0eM(Qnja zU9fgY#`g^}*N+qqglV6KXd0*^f zPzq*KYDFRvPN(jfi8{i*X^i!k)dv|NbRzt5K2eN5pH|jQc=6)|G5wmczYTI#!==`8d`d;~NkufBf)a0CgB&xB7pWP3+l1 z&US#mgn>BfO$3l7U373HbmEcBW}N?)D-1@bCv51QIYhocw6ADnrWQg1fkdO!DwSg4 z^61&$QQ3&Dexc>7%nLM&i~I#)1v1V7-#9;!%U5fc_8$_c%}Kk%DV?*oGB0eqrK_nS zFRN1ZoZk|#h20&euwJ(||9~|y()ZAdN9b0aH(oH!f&4WCON&E&yE+P~!Ga~wAMh25 z#`%Gc!F;W=JnqOP&(%U;y74x(u z6)?-K-iS@%)+Hl#r{dDaWUDo^XD~Ln9F%#?RZ+Lmn*nG^_w<_Pzn})vf*ddIlI6U< zb!p{+o1Y35E=pJ8T`P0P&EBX}`r&-YzA-it-rVnNM~NH_>Phq4&5f96g!WlHe@`o9 zgA@D!=jT=1*3|&6X#I9y`?lHcR$0JS2?v5>t^7i#ODGjf1rojl*D~UxO>>s+`O;8- zL8vfk7<(m5M7aNs9_QyX0;Y{rA{(*^A7xC^yns9pZ~F7}j4cmqypE<3CAL_(U%~#(QSy=17nnyWFY!DigM8N?ZzmriY|YIWxqtP?%oo`^RB_=b zu2KEug}d%tYW~v%!+gNq{N>|)cm?#!=GCWK9%Wv{xbUYnZyA{f?tIkUtMgY^P zkXdb8{fCwhGjD(%F`nZnB6w7^G=AsC=0A;)VZ6Qlqx$C0ANQXX(07wnXY-Ag^y<&) z{BUboCcX1xH#Xn+Ev374^?R$2^KNB+g}1qo<2i!Q*10p6CX0_C8p)<3eV-< z#%w8*R9?SD%-`DawQjZ6EG3b?9)Hi}H8JxmRNEj^q74y7Zp`{@GL=&oR%l9r){V{f z%3Nx9nLoxeyt{)jX0|l0`cSJFH(RTjSyl3QYx^`#5^U(V1?8<1n%1lL8_|9xWJxq! zvaWtuO04TMxCQk(_&0!%XtrBu;9OL&`njN+$()C8sgTkOh*({H4!-^DRD8lVZ8zrf zVcGVODV}$^Vjf}i!3&x%js0ZC>7A)s<2|0}SkzQMdI})!R9<~!hu`if_9~(xLow*e z+Z3C}ny>!^Fs|#N6Sl3QNZLQJX;AF?`RChZ_5tL1VExD!$rst)QHbuS^?)13A>DU(YVRv5qn5|bmu@v^Q#`7dz*CUZ30~M*xE`2!9wJscsL$m;EOJ4VZ;d{=Wmn8 z5ZBS{E$j-avf0T{e&c)#0c-xK+41w{dJ9`6)=Ie2NhXqeZzW$QLcT<%F)O2m{`APE z)8Cz5v`$DI0gGnLxO?Vq2csA3Br<_T}0x@IWB{%)$jiw|m>=OZ)cb$NFM@H}tiUh$E6S3e+i&qh#hex1y8yWX0|d zh)w(YmwShcnINwpz4teWBo>QNq|->nym1OiU?=|zbABFkW^1*%y@XebP;MQa3s87~ zt^|^(KONb3`RFn!EM~p34~%@+P}_35&+YQN?aXj)sb}-1KJ_70#O+X$)59kmt~(PA8z zy1ikiIeVZ-q@8wX4;!c3&se6VG4}_}9v3~$#;s=@_j59|M+of~xmKwFuM?Lg1IDBF z3_r0>H8q&*wQzBswBe6;EngIwca0OHz|f{{6Sv;uYa<6W2D@VE;L?u6ida8|eBPDm z=d0_UdbfF01WXT6pID}mO!BtKcw&pr7O`~3Dx<>|hs9&CqTnCE1!ABVfGauJ3?_@3 zv7E%ZE)W{pf)I;aWq6#RQ(%Vdi469Jmb<2Q$lUqa(#ys%X)PP6Ie{R0mZKsj@QcVc#MTfZQC1eeL%vCV2|W+}cWZ*LsCl^NwV}7M(lj`oH2j8cdg%O2G zY_Y6PGS4zY$P*jsd3ztV5LClKk>m|DJmCn%;kmV3AFvLfew-Lmy>9@*Lz_5J@6UkR zh3(0XcubwF)Q`A*0hh;T3pXF#nXAY5UAWgWBa2^|8C`D3(J+9_*CyK!UsULdhXZOq`bIT?pR!8dW*quu^5hK|GZT0Siol+QJ&qR zTy65EnSTYQLOWz9a1OH!UR>jzBOHDmEZLCg7- zW8~@SY&sgkwHoP2C`Hf1{Aj*bUR=&cY7WJlPno>vvQgN)l51=r_ZF7ttL4QNlFEj{ z=~N`lG{VKghFqcf&|Ee@UD%RanXhzh@a5tvT&SvVn>{(bOhz}`$P8af# zFpw4Ot8{gl_hs?|Y`+R~X(4P-$u5xw$80d8zC zOlGI!Q)lndeqv?!gZJh-kB@J=TK=wF?n9|(F7@p_F+0laSMKaLSiH$9xwK*S_{|n? z^V^*h!%q+7d*^Q7l}?iBv!{QxuwNUUZ%@VAhc6bj)x*gu=xl4g)_P=(&Uw(ut}|O= zNH{vtn*@;#^)V=wSatk}^E-%QX%L3J;YigXbbn|1!OP^%klO6b8&MR@P2!>Ei>_pQ zREcSvD%f4QM)N-sGq{WAE8i7A{pW<+Vk&&_ucsETrLus7)IPtZnrOa($q^hMap{HJ z^qP~3p~6>0XkAk%6mE0JWOu%Ox}{*IryoenW6f81i_DL)F9R);Et^|*v0TQnEpFOf zgV*US*Wdxjp8>O8Gk};pbTk{obBn@#Ko2nCbQ-pdw$+3f!bb35u=LRF&=5EaPHv1@ zJdtoC-1O9!y8iN|Fa99;)cqg(Vezgrqa}+vFqX~q=6pqq?AXMCGwwY{M)&PHeY7;f zEGH{B9qU-EUub9ywrOPc)@>IJHw!WQv9+03pm zw4RyvhhpyG`ruWGE8pv6qax$oO5 z%?{?mCTX*2v{tKDXIcN=e4RXm+n0Xf2Nw{36{R(E>-cuT=Ik9H6K37a)h zYoy~nO>3mL*E@6kiqWI_d~4z_KcSOL&!3;%7K1fzw2@a_rc60anA%cAlMFi3h31b) zsBQaGPi1QLh@uipRhIVB`5&4X*vU=5H?}r?Ddz4lCT&^`^Be|N+ix^DX)#@zPx=g7@( z9~C^;e2r(q9H(2B;Tf$*vlGl#P)8ld(Zi*C5fwAG_oNMYpjgO1fN3PmT zCVS>*E*UK>H^Tigld*khs@)xo`JBG+4u3wO+I-oTE$?35eN8@{tj|}}q3lpS>9R`Y zs$8*mDIZ>%9UYn6JJ@r0ss7$ux_9_(qRDcx@41lM9}l^F;BZ#naAx*3@c0JCLX{4UL2cgHQ0q_Kd8acOu7-nO zz3Q$TZW%vZ&KT{E_S{I`lS+9Sjd(WZG1)Xj*v{caLA`ail;}`B(()AS6BVYEl z`+PPt#VKHW*XAj~3ArWAl-&zdy!*R3c|HriN@WjG)XE=DN z$7xp=zWz>Azo$PM>xj7XVZ}R7y6kb-JRXqVd^O@!YBrKn?=bz7!D2R2Gz!WM(K}3@ z>MzWh{|#1uC0nj+IRkn6Tm5z3q@CY-7Oth*h&|u3#^ry#Ak>ee%<}(-A9(uzNy}AO z?e*s8-f89jpO_|aUjH2-?{3@P{3&ss*MJ79;!eNA!u~(;6}5>MV~u%0qM*Vwz@%9$ zPfu%-5W`$IZ1wzKV_XLE{4g+ zo7RG~7c--Cr2e29r~}4e<0aT&ZdMpWE5PA!suVD3fWDdkn7SDx~R=tn>|*P%^siIM9j=f4^E`%otHGqxWN`aE`St@SLdIe9n8|O4nIq@TMZ^P5u_*T=?&4i@LO z#4n-zy!wmgYs^lpO_=L!U`QHh@x{8=%E~>*r0X)oGBA8afhLplpj2Vao|>2}uR8G3 z_KT_=ku5{(LKPWXIeGMt`S=I!z4u-S*JAP5zsK#`?)Hsyjd947&uSjITg}Ip13*S>K?gh>ql2eo~iYIdSbSe zib)EeDv%fQ_p6Uh?7V!AZ;MMi3mYfP(}AbRCz_LV4e0*!o&}Z_2HI46%kHoHjemcy z>BaJ#2#~dNXLRe^zIN;UkZ~$N%J+0E=fm%?r{qm`51S*K+kNcze(}Ud!wUWRy?oma z63N<*HDAXzvfD}5s6`FF4q%OFRsejB@YbcylZOgtU!tr{bs`>v%u=08VW0>ckB<#gSpV7p#*uMIJY%EbAbE;uZ&mg&3~J} zBamzUl9r`{2Knk=m}~HE`Cx@dnEjgFhkssaBDXgg`J^ae?d zqp@Ig4{`4jucmM$^abb^cF$G99DHb%M@+7}`Rg}dpT{mX=bmfaP3~g%4K?N9ks_Xl zEyGDy%9C&B4a%H&0f(i~AE^3e#aho4Z#sHUHi{D^_1;If9KOXTHvL+&|WRA~V=Ex6~Nfam(JFH{b%B;Mn63X!1>K|71r7NEsJ#CKCMlK2srYHY5lo%)@8=mc=QpDZyya8Rfbw*BAIIM ziCT~Bm#9az*+>DmTAl?%e_@Sp$vnrvgO^D_uYx@#CDuG`<@UWgs?*>OUqierzDgDEfhja zDTM?m&;orPptMjRtZ6A*DQhgf-7U`tgX<9!x!kXmUwyfyx=^{DR{yMvNYmaA3j9%N&KTzL2c8AVr zE-NwFe!cUMw{7~IS~^LM=`)Qz8wP9BCp`7O#Y-$DfDeX&F&VnwKuD((mwc%o>^G7vYT)NmauYE&48!nQ+o`XEGDq1m6FAu4a1E(q@T5 zzCdN|t|*Bjrl0n>?Y>y$YP;8Iet*h2<$vt7PTjbRcK2^?*Mvor>v04-@L;>HNH>{~ zoU2}2vruo!%J4PVte)Tf?v(zn8Q67@apD511jLxi3545S*l`S#ReF>j*V}N%gmqtQ zk?bh+L3HI#PV|#9EFR?$Kaan1b;Fj-_|EcHpFjlCS?jxGaLw%a`7v-vt8MemCud$i zn`G(==YMa!sa#cDG1{C|nxT?KUvhrSL&>&lX4c+#SlyIvZD=t1kCMvT#^793h!c)( zeNp*AT=FA~TPO8Z={EK#7jm4PZgP9 zo!NS2vCU@D=9T%koi<3KOupl_52#XI%IW3bJ}C|K(d&PuER9x6impy6Dmr(u|AA8m zYOy~kvN^8)mfZ4NI)dYj{t~KV$ff9SjHJ6+#3`2Sz1SuyZWt-h+QffFz|VCE0;E|y zO9s6tS{zhbQ)C%~eGSXip1i#iiyLfw)Uu5|4zt-&**CLq^U^=DTM6QhA-e*Pa|np) z3F67okWnrAeK5eN&yR6`qBTdo&|Kf;(3jUG)L$phwi*k_v4ozoh5@g$!qK45k;iup z-CwAvuFAqeUZ$J47s-d{N2J&jBy>^YaIPg9s^QB&lcXPF_4@eFcih2n5&z@0LX33Q znYJnpkf`73p*%JR*%Bm#O;=L6u-6dX?`~}EcMWVcIrlH$akg!COQ}s?Qf$}rFFkSf z=K0#T!4_xN+B@eL@7r+UuBET|go#CeQJucj=qfJ7QbX+)@SL9lFXG8&d| zhcqjrGHm)k7<{Y%zIC zODxspntG8|*eb$}*ngsV2OA+UbpFc3EU5q1niiFmH7N5KRE1=5X`}cX*Id2aR$A?8 z7}Ba%^flJ^Ew|OpTotD?)-%ib$t#vMxB6$xuzfyN`<%H>zsr3 z+N9o#d>huaUfP@4*Pb&{-`KgX_pC$ZC7;nXSYD-^c`M5&QPPlZ~gOu2LC63@G4_S`HplJEez4zQmZ$|H@YRUk%59X4jnf=-&<3 ze`59U8~%flB-~cq)qF`HO!H9Zn92T2x#^YopMMGG*VD4Vr~kj%b7IWpDW>}q=(%V0 zDFGINg*YVdk!Ij2f_fx_!B7i=Nn-qk3*cPG^ub`X#s9kG9RB93Q0yoPu?K2v)A@%; zgQ#6u(f}NDfVQRkdl(ANpG)kr$~8qGOQ) zsicNPJ$cKH73(}!Pl@eP3+CTTnW}xuFPj*A^-y7a^{QrTc4Ay?`OWRIx!3=!v2#pRZB9YeHaX}W=INUA(7>AJgG(^})Sp|;_BpUZ6NkA7mZEehRw-sj%EG9ZI0{9XxOFRa^^0_9Tg>o^)+3Hx+9+l{JUq#A8F38 zG;o*3(Wp;`|8R(;m|0!c?owYW`DAU^JHE*B0)1C5`J*Dh<3T|;wo$kV(Y(*s2aQe3*Kax+{x@G2kg-_vY(bp9v<{N5i z4EchO#KaiwNS97Bw%@dC+F&voT1V9l&1L4U3bj(_DVNI=vejvdvLb_Rlz>=Ux~Y2Q#w+v@T5wwYJv z*KL@oS)P;gaB5nYI`!-1wLQ(gw&u1T7ULA#^YZUtR|xxp!S-BHR360xRZ16I|8TM@ z;*>_c*DkKQIX$mZXD!l4WJV^b^Ni&_vf>9_5s})mvRvPId(Xy|ExyI~7IyEMQ`VNM zGSZ@Bh^8`MTdwGLO|O~l%yTEn@E}F2p?zwyyJd1%>VG=_5748>i&7%jk<#D>X^=rgmGmjB24VPCaM6&0&1(Wq2g$xXV!hyt^%!{IA0D65;WyJm+* zY|e$DH9l93v&rpnyZFSBO_lk>T`gtB%CTF=k{l_1AmX z6_%6~bS)GyEk@~i=5pTZozr1Tm zdP!AHsov`HKVIM5+fYBe9BjZ`@WGhTGum(_51dfad<2w&6p<@9y#=zw$Tb1;*(V@Q z&>MZmakI(cSX{St`{G(}`NpAc|4m(&cj15kCCj$Y5X-(6tN)pe?uLEqPpsWPI=Xh$ ze}t%7$HrUyui-mwpN@4pUxoHzy%W|tn-cUO7jn*@yvV{=4fYHrtC|f)uPWK7@u^I? zH7n{HR@igN9rwTf)Nl3uy+&hizkcksk->KcU27+7wu!aDagId&>hBz9Og{@7aIJ+N z(!&82KC-OrqPg>OeYri&S4PVXN?F1<3_+iv=;Pk5?)58MtE)XNLx+^6s%!_@uu*Wt zPI+g_v(OvX7hxURf{82jg^pz&j`f41(hqh-4eJr+8S)%yHAQr)K?dmJMY+s4Ev&2T zF;p7Ls~p2)j_v|oa%5JWq5P_C+ghW1k@ z)Kk@9*KgZ4JBzRUYCRGWcBLexCTk}6Mkbx_yhhun}|TC8m- zm&I#M8Ch9%mF)$oh`JJ*TL66h&i1j!q~O?2=nNjCOA49b#Vx*I)2fC2P@cW*7QMcD z+E&}9Ygoqn_`zap<%4BC@2=Xte|46jq^M(FshTF&79?fbOR6*K>v9reGdhb34e^eI zme4$Y8#G`=5w!@F8M>limzBn3wD^<$CF*S(a`&KloEaC`IRhs3{M+??jpk}Yv6}cu zL4HM*y-YRQv}S1pgz*O#_sItPc={AKmBfpxV5#mbK8!sr-noVTc; z-E7-jy13??JFS9Qk)a&cC6z1Nt18P>-OvP-PtbLI9%#hrJ~mD?FfGQ9kU0Y*!}EC; zPrv26x^W;YKZp3T3$kBWzWz9Q-=Fo9!A4beURhRlNj4m7>ivf2 zudtEFv)92*q0os{x|CGOwP7>r6j^^w;~rjaF-{J-wcWn%tJiP2ptZrg(%CR$$BDm* zriMYs!dd^QM5eAPjana3QlhP>)F>-SLiM<_G&QZXcEobQ$mCfID|c*e9FEa8)HF1? z^`7{cx>8S5bG@tR{9~F5qgHLSJYI&Vkh-#r@g*I7*@wQMPiL%!bUC0y7gS$3ln-qs ziIHew(+Qiw@6(p-m)7A{PociJ)Rz~l$SN=um}>=}P@0sNm8+I#>tf1AT^(PKcJ%~T z=gD?5VYE~fUvQlZ=_Td$=A@+LWIWedC|6~>x^Qun*-t_m=(Ev1Mp%i`{tI0l!njRe z&6Dm=f!^RAO=$Is3}d;FR$smDhV_kGhh+V6^L@jslJqKvz0&0}Xj}GGkg2f%`WnObufxKs6Y)EA<_xcQ#4oz`RUjN+WeXF{< zrbn!;Ewxs!m#qgJFN3^cenQ?te3R4db&(ooT_`LjUbf-oeR00H-nJ_SttN+WzI&O) z_u=B%XRj_+sg&*05B4aw);~}=rfcRW;0Ka!om^*RbcjxwX*f%Z>vGhVlQQXv zv+NT~YlY2TSybrb)heys+2Lu}xw|*U7u~UTm3dSBhI8h}r>(Usdgl4^nPpSmj$W0z ze4VT+X)Y&w#@Tg2sgP}+ZZLOhQ{sHGxvM76?dhR;{^)#&Ltoj+r;{>*zT)Un)F}W= zeylI(bliKZ&Pnnm^}}$hpX^$p^eJ1bw7Dg@yzk?Wx6hXvj0IiGCp!LFv#hhxUEgA? zNs+gj6Rh;0G0$|K6FexUw}*mS7m|pjiz*r=E^b{sRPST?A*I%#q3(=i|bn_mp4}ykHXHG?)U$fx7*j^ z?ZW+Swyvb2ePmxbsqg3zh=Ey5b9(cI`JB`-5|=eT)#-Ek8XWz;tt*$8mA{#)*@fGT z2Kl+3!O2~JnVXqgQQzXJd4*4!nbfE&&gBd9@{1MuvHO2+TP2P=$3F-jm(w=s;nd(v zq+A9|gYu7+2HFfcP%sPl2m5xm{peTc`OZ7%ypcVP){)IxQ>oKg>Z9MPOXuEdU#0); zoev$l_nr&y9T~JXJ4!X#CHaLmRbEMUezmToHV!?MY=sE4odBw(7>OJEME-o&AF?Wj2?- zqAuRD>rit=k)lae=c?~qcJEY*qRhKSqf4LpJSizL3u&(l&5~Xr;0+FDaH8f<6z|Q4 zX@2IdNlqJesd0Hglz)gnQ5DsdG_~nQ_DA?423+<&^Td?ZI<>-3+cunL_BjRy9PUDL zd1F;fL4TRMIB9ZFFHbLV)|)Mr3P)PGCdHAW$t{eEi^=LKQANti^tI_wK+NVM*OJE} zHzDm4Mv-XiQGYr=f?T`K*RmnSo6=yYYALO)EsgNvsk92Kx%emDlif`vMMWhQ=0;I+t#6-P zt*)?VRyQwNbeGh3j7ju;%U=un3~X;b7%igem3dW>NDU_~c;OzE=u9x~Pz81En$ga= zXqhp;P@fU4Y3N-xJeZpo-52AT9Mg}Ctlq2acXX82j110t?M{uZ)LQGRdv$d6OsB0p zUte5f&G(EMa?|BVi)hm$scx#b`_`Hj%}q_4hwDcQ3YI&2=n)bsAK>M!pcQ^ckds0A zkSr<)2Rm9rS0{4ois_y;<=*lZ+g`IvZ%^~4t?;(5Y@b<}^0}OrCR^)4Qi*pM_2wc? zg|~kId!b=%U>85~RJ|qUr#)#6g|~%S1oz|C$9vc1dGoyX+|q13Jy_!^)K*kiSlrRx z=v6)5IZK60XZT>I$6f7o+M81}8n;2?&{cU#^wwHSz9Ku*H_+8+Y>Q8wfGrFeo(`Y?C3|Is(NtPV z3hnNOx<*%>{ZGqxuIiaRtm}8RjAFm;>WW<-PC6S6rFQ>UjT39Ubv=`kUGNzAE}g-a zA+*NCmf3@B@<^+S&&cE=hDgTXcKmH&=#P+PH1?^?X})o_x5^xUmP4- z{mS~juB~-rJ$=Ay?`l=g^t&wIk_-9@Z$-JT&#Nud>Al68 zslB>M;>qZh``-v~{TuSTYC4M4gGyJby1%}k@SOwg!)1-r^K)iBZz)-`vcz%kFUu05 zG@IhbZcvCNnz`9aV*L0(0$TahQx{4cwzj7aTjziO;zOf@rlumi{tHhJkP%5#l#pW_>`b#kmEHXml6m+VDY9fx-oHf+F*xkK8 z*e1vL3(F^HK?ilzY38KpXHk<9&nVr#eyDq0YI9nH)!A5CSz4+#S2i|QMtBJQF}D2v zfyt3hL%Bg`@$|c@+N)|{%4TMoN>UP{Q}R{vY?on7E&81tbmZgcGul5>M}|DOQ=B|@ z0NG|Dj}OiDZG^sTvY+P}HV-;$d*n?SI#rRTJUwfw-QikTzpU3?YiY7KUrl~e5}RwT zbv4*?3JMge5?yhnyd}ad&RhOc$d~ctybXG~V1950yO8b!Hj;`9~d{us$GcI49|Ipx6qsK>{ zmgo3oJ^gL9DqB`@iY8A;PtL0<#KflY3am%`L4K4)pxxg+-YigsAe%9XHaoP4Q``Y@|tvlO0I@)XP-L?(qf2vpO3>7*}MX9=^N?)og zYxw>Xzq)esu05M}+4w`B5hs>9F1)IkMxno$@YnCRKCSi9Jf>z2$KGN1})?9LlUSDP|t2O9VVbM2hF-7q-*vZIvZOMRZSOlPcQhoXF5Aq zdN-?LhQF~kG+OF>ct=mPLGbo5Y}Cjz_BdEr=cE!<;8ymnD)si>^_W%7)qB0FQQjTh zTiaoD;JTh$G()Oe4ibaPvPG7xD5&Xjl8dQq(RNPow}21U@OeZ}XTg~ZDrT%7^uM5e zCT%WBGwK$z*KD>{s4`<6$y!CO!@AJFSG`3kix`wOFHBS^c8%HVXGe9OjG7g#V;?(v z8okxs#R}8Z2D?0AW&P~FBn2|3rz?z}g80bV@{3x=c42O%CSX^C z2~*4a)-g-0(dBAr8#j4P_DZ!U+0in+c6kpq#;RL}nvYeDw)t9`x(!}+;Zf?t(Z&wL z22x3F3xCUSVi@c81wXpdP{TwZ7_G}e`rdz|@NpUV!zp{~wd zU-!!BSz9N@w$^-ItheYLRaG@kZ%JKUzuRB8e`2!1gH?paMAFIipn>ID3|b+SkJ$BG{3vYKT*W%j9#(G8{od!xqITJq8Qg>|zv-QMyK z`F!7WU5(zA8@Ic86|v?ko9q_6T+8mhFznL&o@)D^p4HCUx`tYZu2hK1%q&Xcy@J+e(>|+r#H9Gl3mYH5 zefZ~XWB05)_lCZ1M~g$L&nrwOcw<3HT)ptob`5`q1EHjw`|X2H5o zUM{JtEGEW+iei!EAud*1c%avc(Y#p1} zx@(;5sPC(*EAcBDCMWh!jI(}0_t2Pun#r4%Wex|oPp;o768j;7G?qXk7b3;jyyG*s zjVv;MqtV{tFpWC<2i$FSj&0kv-S2Hs>MJ_h+=u*cuiq@rdV6zUJIQPJIqSN7WVe6M zW&P{ct{br`H8!@kuvi?kBN9WAb(l@z@e2$;?6Sqt-ZhTzbuF7%?L{Ue+ur9#x2)~u zll|A+zGB<0`3SnNM^51%no@C@E@zW$Tov z1%IHW(yf`fvaEV=UrVQ<)Ka1Pu`f0uH$AsRk!&=!**lf}2l?p8=!i((a@NHvXZa%& zvGMt7sre?8W2~a4`*#}>8%o_?rL&@}L|N8)-d!0PDXLt#HKo92vv;)KyO+oWS)@!B zk>WtswxR=1$uksrsoEM9&HqgO_eU^J*ftQQFMNzb_PiLm3vLl9#MmA60hq7$$ojz* zn`K^^r_q-STPbahskYqbuG z(~)118JA+z;nC&f#EisBT~1j{v{9w0;Q`OGo4P!_u_`LBY*3E}kiKX$xlM&W zb9R$W(PS-<=T;6c_E*+cxA^ZUG3I7OTyg7gS@D{&TjbV^HGMk@^7YpYrTCvx84B;0h zyWKQeL4$%=-##MelkGIONoXBKwp=QJB4^NVEneOzqDCS)zfiZaYgxXkP}^wf%1Rkg zWfkpvfs|g77=ONbW2JMXLu<`1D5*5p8;gg&pOycb`2#^}<3j!^n&mmPPDw3<>rJXN z(Fo*!ZlzOAf+waip)x(yK4ojEU(do`pc9fdvUz_Tiyc6q& zy)|Xo#Y$scUt_D==Cl@9smt0eU90M?E$V^{tG5N0?2DE4#<{ZiA?Dvlkq2N$1Q_KlA}V5sbD>Fe(9 z-oIj_D&O1H)l{HzT2_$k?ac$jo!#ZSmg_oon$D)R=9b;7r)FL9RR5p1$g|y+TD+qv z#i){#qW;1sbC*6w-_~?+Jb8+5Oiqfi^8)W>u#`Xse;NO3vXbA)9X#=eWS-_@1a7I{ z&nx&G2EYHrF9C=A0NxEDS|^MHzJoi=9RM6B1^~APj$>bg*0Y1VEbt}Zm?soJFpk)@ z2*3QqS7G=~A^dYrycLGON5tnga9vBXF#I_YAMm{=J_+F)0;T+a2{$JzxvfOtegXJJ ztlfe@DR~|F@d4*9=V(2L7<>fu-ykewbpAJY72w#30iD@_<46qsYH~3S#Vi5ZjM+lr zBcT5ViT+C%{XzUDhEMxD#OOx}hQCL|2c6e3`h)m$B0k_FjDFezkNS-iAMr2vdQfO= z`4{I&3NkJv<5mZAshB8f(}LE)p_rnS>;y$YMN)FS_Cb<$$<05!*qNS?q$z2zS9TTO zy=MLTHFuvMkt~bKPE$wA2KZMW_uu`5kyjR$RTXoA0~cR%fOe2azq2V_@OS7g8B5nF z9K1OS>Nv=N&e5*kBzTeJ2tsa;$?-z`&sVN6K{l#l|thEEH`@MX>qi``%!dg zrSKKTd;|9gcX@I#jS?ga*bV&!!Fyty4l+uFNx(gmJ5lN-%7Re2FU}~pmHQn@4V4>Z zvUEGQRV+!%1uFQJOg3h@M;Lu*kKrqL!sgB_w~^6@y?=&3F5&Oy9z8+lND#kC!r#qp zKJg~tL3|_na}ct+o%<>GTryAImg>(2{$C)g+c)xnz7y6Dk0jd%nQUWE3hkz1WM$Hv zEoXBUyB&a+gC9qQIo9uYxx3JADTC()G~_sc6Zo`YBc-NIs=p8X-6u@2xpRcO5}!b3 zQ4h`7^PZq!@JqOMz}p$T4|8XqGsmUd>w;J_^f`)=LPO*?uyguN4tRU z=f0Q9>c?HjPce5;KRuOm+RPCz(y_N1!)8xZxNK%kkZlta{)_TMqI=48!5x*_B`xW| zZ4PPDkiZ+bX9v334w&eaq$tCxKV_~UePD`s&=yDCuks+{dRC~RQ|3r|pSr!eW2BF) zwi%{;{x{B;9hkfRzZtZh4gSsGbsutPh&A<;9- zUBPsPi2s*B1-HcLnGHO{;37UokN;Y@p7M?8xCg;E>=>Y3%r*WSaa|*7wyyaYT*PPV z8i{6eKOFzZbZ(OP0M(%qKKS#s#Gh{&A0&LhzhSy-2lq9Di};WZe!rwc9%niPzMV)9 zd7u9^T{n0A1GV=^x}pR1?3e0)oYf=YV|?G2>R->`D1mx90((S!@bd`cTM&Pbh!6Ni z1`py_NcGQR9?*UT@hhbIXSq!bF5+vT>)sQ-0UvgAf8(x!Tw^x~ueB^7bEX{atFZq2 zh4b+F0{4CHhtM$(F}lQZA4uh>PGseviH?)JP`M$D(*j;{yY$R*p!-ekqEI;x_a=!5 zl^X%vGrt8oJW1kPs6CYXAgtV0?%h+$(fM~iCzV8f*!kmEiSokzn8^z)P{6GL4eTb- z4!V!Y3$%C$U$ld6Ve%4=|7$8Q+<5^yq9Q&GoZKm`El)6f*bAr!RvxJr$3K^14@mu( z!1&)OjsKt7IE(nT82@^4`~y!jI7*-%hA+*(U$FT%$>0>mtylh#h{yk#- z;M40&E?E76_X2yw`Z52WVQ{g21IB+*SY-XWjk^_;A_|9gi!tuciuCtT`sofYg&P7* z{38D@!#~9AyC8lO@TpzAgX>^$lwkO@em|YB+#B2>j4SXVUpu%5NL8>M*dDZ8C-*&! zcwSh!&j6ppxcxk=+>eMRRIZRV?0EC7{s3=9*Pfm2D5vE_!Uz9v)lnTPlNah(#qbtE67dHDUjBSa59Zl# zPaFfK2&$mn`hb@ld=L@1!6T`@e&`m(4Q?AM@!w$}h-a3xlHs>XBpf<5uA&(B&a+?qSr#)<2q~nLonxhljh7 z=?_@hA^h8E|A?LY^>^TJg`TB;S2#Yi?MOAV?ZWGS6!k1{k28G}j?d;RF|+=L_4iVI1SuIj7x>M>tr(YC?gs7=eBxwq zdfxxH{NFJ@XZxc8g&r31(XVD{eqPM_CE;Uye=GI3lfh8}?dD>BGJMR#OPO8_;_ngh z0q69gC5LIRzH&yAqw>G^! z{++!6K!g1)g+5mBRPRj^cq#Zqj4x1Mg%{3Y@|nXufEj>W0-!$y{T1UBI}oR!aRez& zfq5>*DRyx8Gkql1gK^|96Ml<&4)IFve=u)@_-I#1rEt7Lln3}p{Og6E13t?ggq>PU z@!5P{TJ#rzK)3u|KTb zJ*SuB4+#<6!%}-jA(_&N*B^60r`Vp@ufI#>t_;!%t#A)1l*%cD8GOE*+sIuTqLcAY zxPXbOP1K=s@H+sBWcFEDdl48H zM(1sza=W=FNKL5R27FHWamUH_s60{nQSNT;mect07s%`OweYP&{1^qk=<6fy#pLgF z-+c$Sj>(_oyJLJ;3NJ8v%eX&d{DSy21|iDdM@;_0@y};;KENFYoniQ*e&0&8PP~2V z%P-l33k=>X;ZuL(MaGXA?lrU<#HW5nG^6LQTpHlv_@W+plg&5av++Dg^$6NI&Tr-4 zX8H&3h=NZKhP88MIS-=HRR7#b{Th_RcwQ-$3M(g$XIOg}&nh;aw7p8E&kylG<5ECp zczbky&%&<>`9qjp?~r1VPV{d%KHtr)XMRGk9QY@V=P@>(&xP@i>7O-J|NKrGPxwJX zI*seXANwo!i&UOWOZdlm3;#OCf8ngJ0i8Jo{}$k{hTrtaY50Ex{_4Tc&%hVw=Ny%n z@cM-a)N=^0Q6-5b&@Yjm&8%O4{lLEs@YUQ?+@ojUgP)5Mb{PIoXuG_Y zJA4{G{36hEgo`6a3y&Xo6A@C2_Ywsl&N8hy#>kzW7;~&}; z;qL%`Y!j@e)8L;2{*Ws<^}FClyx$E!-2UD0qi5D5tVaD0Zy=|)%ivFLfPM+l!|Vs> zOVIx+0X?u|8U2Y^4=!f#V}D@qB?b?C2KXQOcak;H58XohRRD7n{S81{^KZldD2_gI zFT4q%U{HjA4EXJ=p2I((^c2WN_}>A)i@}fH$l!S*{8PXW2>q1)cm7K8v2M}&-v#_) zVF>Ui|M)iw7wO@&fiK8w{4q-ZpdauCpi};faOl(MW6NoOPlYr7ms5V82|r@~ZusHq z?}i@@uZQvB4)jYIeOKUYj`mDhN9q3v^k2o`#{%0$cm;)j0)MWH@!_GHNwOd)x#O(A z-~;YE&~Z5ezESuq3=V$celvwrep2|;A$&W7AH79{{}1CsW}uCH#>1|UzH4IwsDTw7 z2B&;DwmJDb;SV`!f6v4}(*51=!@Iv5est^%xG0~qlsl)?FUse3I$jbS)(*WRB=Ykt z#y52p<=dBlKf?NZ>|9!p8fuloA)mqwgFnRhphlF3!oLE1C4(P%fbvJpy~W_413tyz zhkqu*Uk|}oF!<5iMfjTxj!y-dD4#FTyeDa0kC*jz;`HCd+l+Sk^rhGsb}BxFA8Gh* z_~GX7h93>DC-5=sfwy`1YvAWDE&>$kmuP=K2mC`CzllDEoe8Qz^-+wUu&;i>=zr)I zKlr2P*u2KOxyOZv82re+-!k}%B0mA|WAMZGQhlgj6!}B(Cm5Xa6Yy;!AF2YMkq^Z6 zYdKxNdL{mdaHc=!sXUwtXZ$hJ{+ALph zbQnF*t5N*B=ojUis8_3ely4t%QNm>+e|}8mr;39HpnL}WsK^I4ud4{#Pht2Y;`(yz zZw&v4Bqv|;k5PL*`Y!HCYR?N;*f4)p0SZ4x+lBp3IUNrF9Poz_hoe0{9exB6g71PK z#>t28f*(Dz9`HvQ{V<(br?$)BPjb(lq=&6XFEBc>9x=G}OUeh#JN_k!Z@ZXYwVsgR z!VQp5*e5@X03WQ}${WRBN$vmWqc{JF z)pIGshu#+YMg93#y1rX?iTJdhem1Y4d@l?x*->;}yv$w8<^?RQkbOn%jkkPswgl}i zaord3&tv#l;Y0QS!*^2r;JPoak0SnU3?C~G@PlyFKTYw2>l8=zC$n>2eiPnvP)|zw zoYntcI9${-V*M9Vf17F)CO=d!G5kRZ%HZO>6Y=*kdN2ckAB2ORVM_-$ERemJs2FfL*j#h13P;0ogawd>7%cS0(tjr@%4aDIEJcC;kPTnq!nsv7VFo z{(k`vgv052B(@t(!J&G>;6#F_Ku#)|+#Z634*8Gf89wY)W)~@=4K_=br(7 zKI~Nr{{!Gr(Gd(zWbV~5+85|KBaUKa~$TO|~ zTn0xM0EfLQltZ6T_znh-p>W7mwP=qCsn1a= zc=nm_7b$*DI9%j2t0y-Ex0BB#IOHTcPlQvwA<%W4_6ut+KFMeOrStk~2@cB&aCj0T z|0C)}xNtdx7cw}safHNYLF980gTo$+pms0n7cOG>#UXf|1cxR;{YnO>_Si9z|3W1f z1-L2%e^(e_^;9u@HHAZO+eLjYq;ii@y%*gT28TWm!MnrY(B~nzxX&)u6AthB7x=ZE-r=z0{*<~7dPP`EfQB7BI}L&qy(jM*E9 zgoBI^!wmj$AP_Mk!GFZ+Vf#yTy@-es>lZ*F>K_&H0oTy@1IA?&;~REdQ2&>xM-Ne+qt{AJ5hqkGkxI{aPchGU3C9j zga;sp*!Q4z=F7jL_7$*Mf1y<*_*?gf!%>f5q;U+)qdk<*QvI9xdhR*st0>qTFlp%t zbnbo*kv(J!Mg}?Ln88t1+?A$p51thlD@2g2B4b-etXdEfBTCb{XVR*4h2V3r9s#dW z1lPI*ehq2n|0kK}cSp;BlYp}(&B8v=@ME+>&j>AGe>kY47|)r`nZ~Dd>@ov2&|PVi zSI<*hF}NmX2B0h0S~kOalKL!>@Tu?lCgu5J+9~){2LdkX!287dsZS>)i9CFT+H6X2 zp32zU;Nc$_{H-e~50#=#i+t~#Feu`GLh;ocG(6~p#uf}BzU1rO&ESw{VO-+*Ax5dF z6MFf2f_yRH!^_-NOy=+U3$3RC@Oi+o<~Grpa2H$<3Qyqe;M+p7mhlaHH_>;+eg!&z z$7};8+mBNI1bwJKGdPp&UsKr*!runGlwU&q|MMH{F^1qD18$|U{pgo|M}3(f{!^?T zCc}?Y84kifq4fxB5ROAw$^I==jN*vSWBduSQ`bT2xW$}qnQ@VkO=x@Hl* z$j_sc&)U_jzky?bt3-YtU~noB;6o$$vq|FHUdFd$zo+mXz|Rr+HbMDz?9btRTO;ue zdr{HH1n^C=Z5ZDs&-6hU-zF*Fph;P~qAkSu=AwK%75**do9ok4;MKgG(SO$-Nv3|zqDaz+l>St>rAefjmT&0`6FfsZ-dDRgNwT2 zr%YEcc;HX)LCQov|3dUluBG@mw-zN>0Ef*M*amv2*K&(UE3@N&#y&eH`QeqV5NEC! zb9$8!i{E7IT>-ouL9g%>;p@@*nyJ)2($pu!-h6XwAO3;Y5`J=&kdaGiEaZLMrx+`q z^Tg7>#dQsKV`x2EV0{tci6`M9zlN@-;rI|5RuA=$=>Gq1_(znBqWvk>19+(ZKe4|5 z8vbdq$dey3ztzFUDDc-1{H-5gH(Ah2a6}1&0_I=5eCIy_x6;V~9-=mWiNW8x@O27@ zIY8+#1OEr&`o+J?Q7N-BcrWiGO4k3aUr@ZQ(7(UO-va*tX`{S{4zA!nA-OmW0gDoM z04*fkiEunvZ;?ef zej-u)4E0E#p&n>O(A5r0_V4^1$x*TB2|i!#|0{VSus2zTmtT%hGC^lOa;DzQAEjqa z(r}B*iX3!##B}q7L2odS*H_jyMrdSRSdb{Ln|#XMgfp_RO4IO?8g7?3iPAkWVZb5O zmAj%fvd$N$%I&d~y`ELh$z{Fi?xXwOk58VG3uu1aM)q29%f9 zxt#Ke&f5pc&lwIRKaF9j!*EGlc#&6cScO8&;kyXC-f7-^pLjtR`65 zsdN?)StZ$TQ>zDT{BzqbPuafpJLn`7i)W~0gyHT9FQE&SJCjaUNFDYa&$Fmh1Jy*w ze)#WYKcuF`ilpk0Cp|ELGZH%}KO>b|nKF&6t=Yc4=4U^C<{6@*{D!^$TksqT&1RuD zVl#|CSXg*_WT&*&OP}K&SuXbtU-%fR;ih4=#gh-2-pj)o53DAsW-C%b;A&Ws%$W}`~2tM|PPqa3zO@X)8@tn16Ix|;6G7}Sjm8ekUDl*gctx~8P1j<)PtNY5+q5a{ftr_G=#zci$6 zlq9Il7WHUMOqp_E-I}S*_b0X+=I7_huPWM%dV67|ttg|9L?<@YZ`w954T!xsie(18Qv(9&JLK&leE$2P0)$frY~(7E4(-ShlML3JOi3DD z7hUh#wZlcykA3^}(;x#pisfLzfJa&`fxO{wr9T75{B7V?0^RXqv|6}Z$r#S%F}tP6 zLdN`mBK5c2LO%<11wO=i?W627s##NAeus-cx}*ioI|Ah-9ku~@Y=aVF&yHd>H{+Fh znm(ER4a)-8mC^ktv(-rzW_xdi%5JVmQfC*JmlqHINSj;VYpsT4qSNkJx zZA?=PHQoqU5Gdzy?^m z@}_FGi_I|JKu#h`sI3fZw;U40bHzb8e*$nV7jX(4@`ikz?@ICpo0`cR?7qO~d^EX{ z+CBt5rMZ{z(hwir)0Q(W_fGlGB{#OsT|LvkYcE|P31S=Fd@TBvgg?*=DUUoB=_)xN zyEyIcb=$u|rrqO{=SBKEgtik83T9vE;5LwQAc5T9csKo0OO#jiltp5cm~=;%KZPd z+esX&YHx3Eo0|-}J*(cTlQZH$)th|9p(?g+d~4gg~ZIXi&Z zB*ujhHTjfWL1QTd$s1rlRI<0gF`lNX0wTu+NpiGI(c;Rh)GL+Qmdvu`?rMu!Whl&2 zk}K@Sn54M43ZpqSK8flfssqf>0dFuJ@Gs`{rjyhY_*9?qAM?NBrcfBUaHv+LclzZD zcFj2KS8APAk|-IygMR9-C{>5tbJB~NplR!&O`AUHGU@>3Wef|;)sH{n8o}e zMPcc65fQ&kkIPi4GUL*J!AIUuTBs<_Ta1nannJFOD2R_oy2Y->8K*2)p!+hlRC|;Dm7?r?U5ej4C7Ln7l0Hq^-!AdJ4avv5VC|a-;N=$6b zTG~iz=5^GqVB;pM(>WAHiFd!dW9o%F1JTcZJ)!0IRlBqxo!=J*rdRlJ)ZL)e1kGW99M7^x-KyHwCz{z86 zMM@Zdkm@WDF}Wqo!)%g78lmH5R3oLC3z<-*(zn}TS7wvaj@D~Fd2qB+PmaI##;UdC zf}h+ofS@kVT}`sMXZbHN=dlWt7wiATvf{eCpkpw1Qb{85q6}sxe3_HCGAjhFiB3e8 zd;~ALk%~uCH5CoL!%b>?t~^4h&SIbRST9 zGEsLk>dxfg^y9sH_Ff8m6ZvF2wy-PFnew8F61k-@x;nAWXeJtuv%A0k`Ws8l7Ol<% zN40v$m>*kfcK3BvcGS9h-Z$z>tY%%Ak@iE5zSFkgSCNb;wlu&RX}(6~%2m1Ql=U-n@h{h*RgjNYwhJz+P-`kGG-}Edg~V^h z6EUkd5~eavQ=f^cjo>56%xLn8OlgX?Q>K*Exw^oU8?+{at`vUMKdT2rJV9Ero(hYu ztjeSE^@E{@z!`p8?%{>XrB(&s-6 zgbF6#amakp$H!vs_uz(06uy_RGV5?#d`T!`aW3|TiugR*tE!O^mCg@P0pkp3&0sl3j2=;FuX%}99jJB&KS)>{f zw<`-x$guEXfvV2@2&*$YP(~WLw~~dJ7Uc61=VMc#ntPAJxLqMw8ut0T47NE0OGd7P z1_s*_f~5nmht<~>f~5kFm5pf+!7>4BW_TSTm>gwA7%U!%7CG=*7+zNhrU=!CJuL|@ zC9s!ta*sljVn53dBLe)2=VC}dX9En`wt}$0i-4^IjJ|Fs>fCh!8Mj2%0M>`Hpb=#| z0Q(bQl-I4i4!q{Mw15R=Z)e^xC#BSY?h&6x(2C;ck|BMzls;Uhpvkopg>-pw#QAmg zc~Mb{#GGuw<}^E^WNGnv$=Xy!VU|v%(F#_*J*D2DRhris^iSuIlBmq=DqBTTR$6jw zY-E&xgTbkZnK}6d&l_@_(Q&eTQy%D%W1pg(yAydW^QcFK{9PbMGzeG{5`|o5GK-=> z+P)>JxfYMy7Ta0d+&9o{XiZ7@`qx%niKVb2Ti;Y&H+68Op;VPi__7+BJB`-efx2Vq z4K4UlQlv$SV2FzCzP6s;mR5Y}&1SvcY`Sx5q;G2K?y0I4r>nWyQAhLZWW)Y%8#cG+UOVI#FYvsExKomn-9KX$|SPA+_4+i66*4v9+*bb8+{o z_5p?46O}r)+j`$f<+9oC>PQ{ZPB_ME_vj0kzK&VB%>RA|Un`GTdM2xtk4V00&qZ`D z7vjtm&OB1>AZmLMBIQxSLPU8$9TX(85(l|LC`{71X6v6X>dm}jbX8q-r^=&?%joaF zTG5xVcY}M@p-Unws-_pZ&97a2+oiKt7Le{`wI*SJZ=0JV_n))h)U|3kZ5KWTpAS2q zMldt5;!#5%kvJNW!{gh4{NC@U`Cz)q?f(1xvD8|TiN~bT;+wQu&^-9GpI0SmqHeh`k({+ZeWbRo zXg*U{R%&l6+pn}#8&;<7K37Oz+f$r&(aJoFtGs{=N9=QV@^QK4t^}Jd+gdfMEy!=E zu244&xvWJ+HoLKCY*$RaamaqXm&%nla3}7UZ{*mkU$FZbH(i7dI-Cmh7>*lW9VB>Ad;Qngo-vPMb`?J~7Ta3u z-$quIS!6GLd(Nw*^aoWopWXiuY2TaBOk)-JhBLFTA_GzZa{g)PIKyVhP-><4C*!zD zL9GsEchL8`OVBg|GM0?NS(9NrdQ|W zrKA-)YTE~HE!UN)D)Q2DUDX|m2Yj$GQjgYmqOc0?{Q{FGXOs3||)T)nXFB>@@Zz1H0Vp)u<3wf!0|ofu+7q#K0N16-6Z$FC*PEI)dlkLwfYQljy~(< z+WhdLV58w>12Sos{PJKOgFdhcQkb@z=O}2-)U;iH~p6`(GzniYz?9O8t0& zv%;rL#eRGoq)rQ&J86$;U2X{)EeYh1Q=?f9~) zuC8{$Kg3t8?Co1I(>t)@>AIyqy2`Z|Z`*KT>!o!iB};8}byOeFdpxUQBT_w!cUQDZ z8_i2>!w**k^q7pvmaIrtgojRxWXgOfH@d$=?r_byD>EYcW0fF5}6Jo0{sI*#c#Fxf;*OjD&P1?AoJNh&Wzd~`)M^*b_e86cgzPAJR8nNLFxp<@8*6MntC!q4?#<5Eggpj+q}#bxu&aBB-43*Q1XSh?;5W z8y?UZwjzWmVF}QQBB=l>E%b}3f)WCil1GXt-G?9VQTv}J$IJq$a%9YU-<>eyAJO-$ zk^3izN!{@{>BL!&3ygOd(lZhh3{EfJA3tnpG@RvjmW?$gC8r}OPWdw$xShXBC`7~y z14&F7SX!W$w8(LTJuw;;LMFKkrG@G&mte#4NYn5t$TG*wS;_tJy{?8eTYg=YUbEe? z`AW8E_byLSw^a#+j>w&>>bs+s?uxmzExp&jYid5OxjFvDoAqNWd^OSi$v1B+9~o_k z1r36DMuv@dj^yVdjtQZq3mN@N!+#mj8_+2>Xp4BP0q+@x3B6V68)6 zDPQR_DZct8jso6)zyqC3UPw#daCd>h<5pG=nTr!rQY?j)9WRg(U5l&P*S&r9YjJW* zURB%g{Rhp7h3?uxx2?abFfOOe;V7!qnDUb{O*!^zPqSs&>X&r|ru<}usmLiWEzQOl z6b1J3qXNw%2|qMaX;Gz^@#+Ay#L2;+7Kx07tdq%ft^b?IM1{`UWvE>gQx~p{?B`uE7oP9`6k+kN_=>>Q;ObHp`Fgj$xe~1Kpa3>p=|7pAGlr_0OOF>305{mHx)?ZbU8ZUHQ+a?38cxO%==Fi!F&(W`F zTV!b~U&;~TTpH^qMNkwrXoEzazFci9g1E}?`Up;)VLNE)H{|nDRZ*t0z^PO^3zV5f zs#1SEgXFuEN>@IG@b8zGRb-SZ>k10$l%*N^a{SYu{JVlKE@a6QcmlWP{!Zm523rqH zSMV!3mTu(#e&S`Jl#cteqUlX4tGe5Wf@L`H`q5+v7 zUf_$*kYB@zcdK?NSA75bE0jB`h^^ZAedV?T2ev7{k7y8;iF*P!acz9JC=+Su75%Tx z?`kGTyV-ZXd#Q^~A>7iXa{Fx{4rexh3wb|#={Wh4%KOq+fyBT^f#(3*v-BSMhQS{6 zALF6|?<6cTQtLE?q{6NyPVu`!+| zV~I@hsSv5)%_M@)&5VhQh>MDil11=VgVLE+7%imdBqs3k{5zskqU6r3T$}n+q?S9< zWFS%Tk@0b|Vx89NF{D)5RwgEEvx?Ib3#yEnXCDOLMc(}-#JipUU+^xN7*%>a0o<27 z3$`U2%#7>;7pV{O|H8;eC?m;TbA2_fkshK^>Fte9vwqEpw>z?#*OwL<6*1MdF2nyL zBenIT=F+5eS)3xfyf8mCDWO!|JV0!QGV`1`zlU@foxK6vKwKWqs|oR ztsUrU)ej0vgUe#}7<2+1)O7W~D*n2*H)8rmsxC`*gnRols?ky1;x41rYgdThRJxo| zy>VoNuA}RKGSl082^rC?D0D5yT#sX&TulFf^JoIm5=SxDOyBdVWDdeETCb@1nGnWV ztwc!k7$^w$!y32jIjqJ1pMrX_35J| zA!q&1=Gq4MXkCN$0s8PmeYX)`S9Kn^mW2tJ`$As_%=Ff=;fX%U&ADBz+YT zm%A=37j){au|SlbmN~rP_0byIZqKVsnaE9oAgG8!5MRFTp7va!zfHCIGd-EXdO@u% zbmwZux2+^!TXkhc)ZZR7xQte#ul$wPmDX)?RH4GTw&hNYzro_nW#k&;wz8$4yUeny zy9#F?$mizi&(aax0dHligUJsn2rswp53a{3p{O+n9Z8md9dF^mj znWl6}RoET4E$^uC1`Mztg%C=Z=7KWY3Vgs4VN}Hqh(gF(L<9bObi5%oUfaE&5S)xU0!#7Oy1BJ^E;B-I(|$+JokvE<$^FZ$OOnr0rQ%Z8W1I*BO_V zpV01k%Z$s-<2w3uU)haw?R#}n`?Ss1=NrR88(zky|0q0$^VCv492@h>P%~6!<89Jvv_U_ zR2akPXHWyxerB5a+8MPzA{J#cR0(w>mQ zXYhNfUE|`tzBWdsMpNVY%Sye=JBD(-zG??i5;awlnyse{t}+?+_Nq<#%H{j?-pNbY zMnh#r=(tDdcW_n%<8$(r$mtG?lI&j1EH$6-qQ8X ziHqx85vsZNe5XI)Y)hUVstD-<14SOJpZ+5j@{gehUCjK&5gw+>E&)_zEybk-w8CnJ zsf6aZ5`=k)yR=fE-dW^4LXZs#Lx_@~!1)b{tUS;dkgMe*Ut2d~^yMeFOoXZvFFdfR zWz&w{+Py(4*Q3xRdf)#4u-ww}6o->KW023L%CcaN`Fas&KpcXlsbLhnf5v+U4Cm)thdMR!cy zKzF1Y@b$BukL}#Ka?LL6TOHV^uE##LSyro%WistDQ%W{Qv$BV(F2k9|M2DxD!bgsG zR`0>KV%W6!CBgx>A%`z7ywKA(`h)$0q4@q5 z()^qM`qJm$q%!f?V~<{R*|$m0x5*Q|&5gZnT_OMLZ{B{#n{VBE`dS z243o>PoqBa40OeLXkl0^mLS4TgAAEW3U-gfLs1jXm;wSK!7QAij_?4BpjPU$R}Q7O z)3h%TtM}+@JN<3dHKpcwbxo=&9*?I@yAKa66%RMq17#*LIWd;`e6l%)V5I#k!inKj zI6s-G>FP~xUEY0KX|(+x=ZQD8uBczxi=(VCErMU2gSDfPT>-z2*n^-H1Q$}O0H?r$ z=ka}f-jb2FWp<2FhOo__Y$L}K0tY}C1~3C0b9k(@d@IH6r6e6-lPgxl)&%~ShkU?7 zcc>LX);bRHIl9SZ>)uhiV;89m*0fgH^ua-o$yK&GCCGJ}yMz7_@1rA?z? zh=`x5QM6{7u5DSRQe1a!^ZBR!cYB_wI!g-?Ra;c8C)#p%nQwb-w6VVBUwbYaNbBTb zxg2X*EmsOue4ogP+#qOaDcP=dpW7buEdADzNKYzmQyJY=HCy8ztGc&aP?uho4moUR z^m$Y}R$Lqlmo*0srRoxmr|g`i7t3`|ZmvFOVx&%=tIcW$8?8#YLT)MTj#pInRixS$ zExR)1GYf(f-D;FNZHeCWCS%)-KCILKL%#tXU4VH*E6T_!1dL}4lpzYiA0$dq@S`9n zT7J09W_-Y(6!eiR-<@RDwbxWshp1d@Dm58&qsF>)ydh*$1)`CWRpJq%pzDW+mYXVv z8WJm)(o&-fR!k}yjh3ghg#K<(p<=kolk6GI*En^xxmeGh%hr{a*OkWnpSPIY6>Xzu zue{>%8+*H})g|7x!kHTelLG;dy|n~mSPC}zAJD7Cx!-+u4Fub7c(!nzIJ^IKIbOJf>EcloBE-aO0 zRvy-rNqCa>8G9+%IwHd0^uxqE1ZY&v69(?tE-VdCqTzXFm-n(3D=)TM|h` z+z-yuz7@K2D@*8t!k2&0e9#ADk=CE_!;g!J`(Pr-a%b-wxUdoJ&tEH{`cO z18o!c`N9pSsTG>iK!s21EM0M4vf36=ZdiFqj4UnRnT~r#?h_meg+)QipipGI$_$O< z3ef3h8FV)sy9{@X1oP64*{Yne)^dXGoY1Vr7zSA=JVXibDFiVgRy5RRjSEKWr<3K`=`=!r9x-WsXOQymu*|~wOYZWb2&?@?o75VRzX$+9dkdC@Uy7o z9x!3sJpDIvEBQ9w_e3Eh%*k((gfhDc$7Yzlifqm;_j*n1 zuRd?=luTK4Wu-=~2y`bxOZHW*XpSg+c26d3Yl~#YlBJ7UYFFm`>tl=5dbvuywzhdm zY4}iKdTv z5&9J19LTIF>L=8Psx~ZZENwr}!IT(xk7+Bd(Xwi6^@5t(+oB~-y;Tv8g}NMpv-Cuf zhn|lpJn^#BzqS{W_HvpJQfk;1Vh&E}sxf3y9{b@(i=^W=CO(UC%$Z0fUe!fot4V zwGej9#_@;o4o0>!gd6K@)Kso)-0klt%bKZRrrX4Wf{_?Y%7U&+d#ze&QQSl2ItAI2 zxG~jhPVDp(rB2;@daSG}QQp??*i#Vy>PrZwy8LCG?Op4Gj)~^6v3Mk7Q<=&`F{@gc z^wXA(Ya?TX)C+PAkzYLZkCcM6o63W(sI^M1uq$q+f}oI-8{4NlHs@^{tK@3!&_JZR zy{&4)p1`)H;`bX2(ey~q*C%Q+%VMtWU5lbVk11*o8{Goq6OF)Mfvzwq z8a_YCKQsH_2l?lx_-AkrTFyTM)mYYPq<^L_9ARxk^UGs}7-cEua~SQCnKX7!1@SMC4UorHi%oDNfS^ias8fPE%zvd( z)=UxK1a&Cx_z3v}Vx@7r#0ZqvOf)mI)1<^D@e&4qanXoap|w7x|Gt6V?xDf@@wQ-P zMX0-rmWzwYN1HZ{cDAm1_b#v|+_RxCAKtHQp+7-i8pLP%Hu{p|-Rt}CC-xj7GKz9sa?e{91b6VG&}gvbI<8) z{(xEMFey4yQJX_srb~PDSh1d#oW*9;Rz&Nf4zIRMQ|)y&STaP1M@q%Hora#Em#sna z58C_u^B8jv#?{I3uvDs8e=V!88RYe; z<~3f=ihA?YQ4g)o)ia%t4?D7X`K;ds^)&+v@)_Lgc)vpn`n4RF9%MGb^V((g*7JIc z7Sv<#%uf%>7Q(~YU66lVyN+UhP=oUWupzZRH(vBhpFqDshSz!UY{JxhkIS*Rp8-Dc znY@b6Az3whRfTz&O{X79>HIC$N%G-`jMZycP!D{8$4j8hauV(1GyK}|_9@md+Mi9A z@0QYq2iXW@)yL;6u9EWQ&r10xEeH68FY4wc?s=8@5f`S&BVXM?DKd)cuCLmJEuRE9p-Qh&3qcOH1Z!z_N2ao_B?exd+3(N35ME=U#pG_CQRSV$2c?j_y7#yoO9Oe_?m`(o#IHY`VJlQR1pRyAd##0Xe zkZ(Xz&ZOC;l2e10=9()0)$zF z(I$AnLcKu9tYl`ryfPV`S5olI*%+X&TJ-gl)K@+$8SC(h5WDBfy*{r#>Lj2KY!dcz z_%dd0dc&=JNa?(C!ruA70wb{ZoBp#L1{BN=#QLdrAlC@AqdpzUrPkzfYf`yLy1wI> zcw7pxbaxf}?YZ?eHS2Tj{z6yxai7s8_B;h-R4Z_TJ|noRh0zIR<|nXqWcF&fG@{J> zB#%&_A01c!`1V%QCyxW6W2*DG6y7KH*iykDSeXVSq9QdA&DeGq!@dS<%1}*6FvO?M zve#M!{;j0v=P230S8`u$8he5*M7Ne7&HL>b^WXo7yx__F?~i|1OR7i`Vs$UD7F-Q9D|Ee=(2`jKdk-A~z> z?kzJPBrb)%n9FRX7tFObb#ec)aq>>4Dztd6weIdFEFgmWl|Ru5dbUiB56nD1mbV9J zC@-$M`);y>o;~&A_^zGfDCfsZ9k#AiC|9&!!;(7lsvDTOjjevqH@Kw@TYvAPoRO7_ zNFxmh_f07P%?(!x*S-P(zOjelyncEEnS|ftE3|4voG~q!qtNtPyxsZ`c^X;0085#9 z^XHenDcnaX=1(KMKtAO2mze&m@Ezhrnp*f3`3q00pZ+YF#5+B-LHef8oSReh?VrAZ zbmQF-`lkL9@@_)=D@;+XUbYP0Tr@1+DaP-^Jl;#8FXQ7^Iq{HyF9fy@RKmSerHdES zcc=P>D>^4vt(xqt7$z5HM@O?80*lu#Teg02U<2BS$tcYW*Kt~623*X3D+Wn2#-1Yg z&6Z^K==Rx$ruyi+ix*FoQW!un{sH-r9Aj-LVtDNw$j9)5Ekc~#>31uJ=ZY6$u?05F zgM_tFJ^cY~7S7{iK`pkP^DJn$GmjtCvj7lcoCSnFHZw{YWMaTEO+?rqdl*M50)R`O zIkX52Hr1bL{ZM>##n{-2(fH8RbF+W%rJo%ipV~Q2E?65}w`Oo~&AQ;)*}uf6mo3B1 zDf)>`e-Stf6#JRO8o#oZ0M7$|&iowy=5YS8;ia`4n?*+IIndKYAyO;EKEnn5$iKk`^ zj}zz^x8dx46aitffBcm74{;;8P25EODJscrWN7U7V>oZ&bm+i6kQ?_v>4(`U@Fi9#Om?uk`At$|B99VYN{zs=?BabdWWB;RcM`7#aE4N&;d3fN=m9N}# z<*Bq%EDSul|7`JT@@W5~`_CXRoVMlQEw8Lvw0rYax4Z&*2)KdV1o@bqPn9wm?B+E@ z2xv)k6R8mI{yF(7I}XxQr`|iUtTg~D8f!pH9~NKPl=+#sk`+CJIxu$JvO(u?DzhC3 zNY-=A6@yX*Uf~n)C%Ld^_hjbbTdqI!M>9DjZdWAwN9zs-3g?d9a(h8_w9vG;!c+i6 z`RVVWo%=CwWo+*S4vMciRFba;_Qs3hA}{1a4j8Pc$XR*E1&2C+@qRwH^5DTWJ!SdG z*|%SLYjT(7f{y<*(EED}KP}wnER?M}Yxw?aZ_|pF8#a9Hc{dClx!gnkNq)}k9-xV1 zP%?U-1sR&9Xd;^JtTlh|fvGZ=)Bx_&wTXs^<%18-7zn?YUta6i<#c78sa(3tqsg7d zV)W&wrvd*KlTPcS{dCI_h~7y1KGGfpwri}M&& zPyY@6@OGMXvfZ?g zZUW2{KKNMLev~(|8lkMf-?e}+@Hbg;>XR=PUVO1Y_n&&I*v0;0o~bbY>0|ICB4Xj< zWC%aQ>0HJcZ#k;-c+G+)qE_IT5@bUTr|G-&&!y=}gog&4q`nL%uEf=EWst zjWNB$;w*7#yh^{1`n5ib*IkmRs;Tg{gh^G@AM!_S@)EUESxOZ{A zsj@a8$hEkea4NhJ>P49nMXM{=;A2N!tl53^L5!gm7P>f_TGKw2vsGEVN(0!Tq&#L& z6yaC#%Xn2j3H`NFA!(3;2Hd!5zFOjOJ8<)?DJ9fr47h^TP7&0 z%yDm}y>^lNsu80cG5Ptwk*divbx)KlP) zD8qc^T_U|*VC!md-rEJpSsxLKJnSFLjvVxY*MoWcH}Wf13j#dFE%ibX4k?e(S7 z`EbVXUR0ajhSzf1G$V2J!P?289hmITwqs_tsCdnUc5leHwB+mZ4GnpcK!|F2%c2&t zPJE^AZ%;OiG>EIn4#qnm+0Zs}1af7bt|mv0@OF{bNse$kcXoqJd=rm7Hi7q}N5rEf zC$_VCaqz#_$uZPxz@5w=c)j@aACdMx^NETlE;gkf4twyM?{@T1-}B-X~>p(9Nx1%p4z-T zt0ZPao4cpcq=*E}J*L6JBA}DEcOLnOT+Jo3tR&)atu5ze@ZKZII$XnBl+CtX-qlcD zXE12oc8|Zcp{*mIOq&gAx7{18AdBmTOWFpi(;2@n=I@~OZHkurhasrAR$J(0jYf6`enPY4&K2WwaLE3 z=1APZ=cph0;$zgn?uh^!R>2G=K7Fo^qo&7uCT-do%qX(`bI`7CZ67MpacJGXZ0ju2 zTB^USW~dU@rZ~*`oma~xm`m1$XV4b|h?qZ*EJID?CG1IA+#cb$1Hm=~F@jw+JE6#8 z4==*?!m!IiBlD=pFg`Q*s}lhfZ$HqV^?;5$issq8x3 z24Mc7!*`HZ*&Y_byv`6{rbvL)A&R-d+|7?v{`y~;!OZR7sr+W)zyVC$Ip-8MOY3VT z*3ozQ`Z~maM$kG#&bRQ*MZ}UI#OaI5j86S)v ze%SxBKl#5{*uK3mh<|I>vR@qM2`;Bz1dfao7Fx}kvk`j)8q`MtP@TwUMQMKV1v zj@)_I2x# zr8C51`RW(dh8e1|s3!#XY)%p9pcBAv>neYddyzaGX94TKkjK2C(3?Gj}4YY#WJXaU{!=m4odM ziElIyR&Tqp|Mh=FlDCpSeQv1d{Oe9ljI`W`hF0z9kmlwg!155zz>oy33t$1CmS~v6 zY=ENk=5mXX0jn@7(2>i0Uv zYkAw=>6d7dUW9WGleD1y0Y_u+8Q9$7+(9HNBcBPc9I_W8@rr$cm816F^0-@cNtBjM zrACdHrfN2r4w28z5G#fL_fy-oO4NRmb}7~iXn%gQzn*CpGz&V$eEpKWBg|*hVfIoS zrzAM83@7#x+4k`>wrtzmzghgBXP|Nz8EUsXx(7xka3W)Tp;#AdV3KyRHGniGv-;^O zQ;hM4=|=F0Nod0N^YT*OTfr|hV=75AbJ}}~H8qjc61yfNt z5?9|mJebSYPBsNHW0`e(Fe5v!(Yk}4XL<%7yEs%aGF~=nYpxqvn!o4i3YSZz!U=-U z`Mma-)*xetz{M6~7E2HeJPR2KJx0ms;HooDIrzD*!KzGhqCS*foL+NwSYH+{qlVWi zdxpPwN+33}*tf*ioEce?U+q<^m2Bdnr{w4(sL73)K;*#KR~iX#l>{PYjd=0g%r05hZoVWH-x35O=8 z-TGqQyJF|HiROa`dm5bivRfWJtoY)Uf20ph6vQ@N!8kD4{p`&*iF)#ll2;D_9lY%) z(e}O2hhlv(d@${pw5+UfSHKl00)%t2BOkfpftzsLS$pS(T|CO?-Y^|S`bODW zz~P>L5amC_{cd>v?!m;?CMGt{A9Kta0z#=p{Gxl%J+!U*yax|gIR~A-*5_(E4;~zC zE2rPliPJTOhK9n1froCssjjXdb{Yz{!k5XNsy8p?F33zCw%Rp3eXv87&(?(X-5j`c z{-F-zA@JRzrq$$QrWe7%0F2BWpw-X;{f{_I9#)f&dd1uLyo};KWgqzq*6KF8kNoQh zo2yP4MT}_p9>iL8Pq$#LZUY~1Oo>99K{d|0covEs(|4iSYU&dLSzjMcVRZ=$r*J0-Sx-J@|rkvklQu@i( z+?#La-gra&$Gsojd+$fTIZAv-kBV>6j@McG8kTl1M#dA5&Tm`bt;?9M`1m&Ig`$Cc zH1*bk7D?*F)};3S2w3l&fz_I47NAbpfX4FjB8;>M^LJyn-a7MNe4z;GO}rQKcI>uW zqqpM!ZLwRgD}qa2;@~qx&Ecd7w}!-s{5V|DKJktyv% zbPa~3bUaGP<*sPh;|fQ`KQCPTHU;&R3tPG}yqHU!>&2Hwnr)~t9PgNsY^4dmBi zut0-v7ybtsnE!H=>83%@*&cd54PgG+-QZDrke<%!5w0iA2IxWY?Sl9_dI612-9;yH zMquSYa|bD+vq=&k)05JJQwNBrfG;{ZbypDv&+#x^Dej$xftUFM4bw2!{ct#EV7)=y zLGWFm;X4Yu3b!IqGrlO^_A2qB?ier#Rt}jlBA6AlRYXpo__FfPwm*v(5X;pkDVsOL zKrR6dqfG3BMDX57N?Tr3AXUrgVnw;o|>Ez@t% zrx4@Xs67Dx$48H__FAUzqffyH1C#yvBUaet1Fw?8$ef{14IiFdbIb79%`4Y`X6)S| zyl1<1h$^Q3vErKRmrxD*LL19TQuZ@)FO$Trb2N3RNJ8Y^BF*r!?XvCUFnNgi%d}?l zP6&W8Rlfa_ii%54i*MZ;C%Jw5hAtQ$#()Km_bY*Sid$po=^!Ek@ey;xnN?l>`Oo*k zn{Pz?)f=C`VdpmS^W^U@ydY{{==|k21{340&q2<(5_kv!#N%WI%(t|a;Xs*%Cj;#A z4)WzecvhQi4A(8mtlztgWW}$$23;%nZrHK$np?6uPryyDJR4j465pt`rEX+d{zxI8 zFZ?pzGqhI{BIf!mXL}XfJGcxn*BN99X7xE=nAkqJ?$p%>u3t*FiF?ppsI#RxpY5;k zH7v_*zA&V=m)hu+uY`NLpJJU|8BLDVLcRc>4%%K8T2hG3=9+& zk&nb>WFy-ffXfB#FF3(j!A{vGY!0Z1fYsP2UKkz>SB)euxbtE0>*Unlw5l8t>66QW^~D#hE#MmARh?q1&&N?}2Vjr)0I8-RMb5lW0jbWHbS@V3&tPq`&&nPhk z&;#lP-`L zC3!Nw_WZGd_*kQ0xJ=yt`rrRTluvHB9D*^=aw3{K%)DNlpCepc67!|Iyvy611m&JM|)46Z!dt`>k^kVZ~WH|Y|WTtq9c`>;% z(!9PgZ~W{}U%Kh=OE2HD>DHmAuDs%@XXubvK~AX%-2Uok z%Fldzem~{#eb&fj1soSZVQ5iOd$Slr(#WBUQ(@2IIACWAXOLOqOWi|fN8RF^WOr{W zQxUHrE#vK-%UdQY+`8p603F^i&Hy^S>dbrU;4ODB*^*2&4@{d&6k6*X5wD zStw7R+{d82Zet8W@f<$V*y)CWzmW9e0?-s09w2HXHm=JA?EKWl^#lwz7>P=`5OWJa zC%GIko7$r-quq8fqv+E`VxiV&wY8BKVcmfxIwRLr(~W}cZpa2K@fINPw>W9}F{rpgGPhVQ}p z7hkNezxig>Nx&*g@7a?kb>j2C`yKhpNxPrJsSh^+4d|JjBxb1`hBOQCC%G~K`JZI! zNy*=TSl-^TWTL0OAS6glG+FAds|=-7i32BsM*Gv3Rj=$F+SF06k0kxE?qq#cj2t*A zjC1%Y!|RbOx4nn^iy~>xgHPldB@n#c>=TBhxuho zmrY+Ds+pNpty0G3p-e&_=O>?nJ#uvE(o2@4jNZOQ%}xCkhQ;ul9*Nc_t19Ypqjj~> z6Tu}r%2qTl8fxi6goVIBwx=iG?A3fL6^o{7BJt#_b(IzQTxE5d>^SLY=C2bEEcP-u zZObC;RudyBQY3C(882X;V$u2bQ?XB8K}20^Y^d|vguqDSz>@aycv*L>p*(BQ?T#mt zl^BfY#F4zL?XIsl6%^3DYPf#u;g+!5VI}7`XX;y8Qgz*jKLP%^`6vMm6nQOkg~I@5 zfhh9erks~%>mt~)AwOZ0{}jl7b8RBl(h#hxjJ1v@E62p670pYkb2py|FJ1D_{q>p3 zmg_I6uZumi>GU7`)Q|mOV+DzQ?h{}opcJ|AE*ad~_8167pbk`YzeG zAaCCtcd)&dJP$vkUhK68wD${s$RM(I*%4IWd3PbNo98{SFpsw+^(V(khskU98urL~ z<_A6FV|vB~Q#0kF@(_sGILCY==VA@zmRABQkB z3n7Pieq!Eiy(f>)W3<6(UZ?$z@NQ8K#e5gj9-m7?IY$3F z?GtlpC?};oDW%QK3Gl@9JIwYQIv(=;D0yD28x{Qcfr-Ocaqd2`+$5VoUXITp%0Y)f zAcN1e7{7zuh1L*!;;%D}7U#QIcBZIV>V5K#*`n+T%UoHBHh8>{0pceE!i=(@E*LMI%#bPt`#c}?l zIh+@HlurBnf;4F!UN}kGk7v@P^}ySEQE_l)u8Vw4r~THTC09 z$$Q~b@?JbKZ??bZPt2R`?syta6EdIlt0r-sQ2N*ym>G{A0w?lrVrv4<aNkzJ0K-sZ`ubwayp0SUkl-x;q_>P@llW% z`^R<#wwLpbfuNaD@lwu5(GK6Ui)A^}4MFpEx_BuHK{Ao*pe$v5a@Z7HyCk*B*mM9p z_VXxDo}YSq6tS}9Xq-P0KYf;_P~tAojkpj$(tM!?<1tg8kjLsxAD@R60zC2Yiwnok za5KBEr%ue9tv7vq9>aZcAD)_}g#5!No9PJ=* zhEs<4A}&#$M--pgm7wMgK~f_7P!RK6+`!q)12#dzKk6|2GYfLQniaes0n;GWWK%3n zUGWd`Qq};|k`-xN8lz4#H=ZIb>2%tYr0M3TvH3S0&}omK4~bW?dDLk>A&=G5otQT> zAL!e^@C<+v7G*QQdP3f8J>9~*d25bK&YVEASamZD)XpUeiL8rklv6C(#|WOG9wo9AMiOpY(|dp2KY_M(K{keV~rXJDWHCd*@MpXCi+Fq008M5N=q#M9Fs z&!*omrAuwyFJ4vbhp+kS`TdaU`TdZ47UbPCb=@2cl*f0Sfe+V>&}7c^hdb$cu+uLe zyJ;@(_;GRim*!;Kyu5A4ZYnCOr998PJkPP;&CjD}%;nKDrmmZxNB%mO2k}7p&Zo_AT5kF<#GB zw3Xj7u{b;|I!p?Bi#+ZNSd8ml*e;L2&&+bX%w7wRJ6mMiWIGWf{2X`&xCp+gu8>^= zd&3)XkNE}J7hy;JRoT6=`(+Qy9+iCuQN^E@Jqxr$Ym7_(1>cI}KC}G)-P43i(;pZA z(W__w6vk%%{J%AoKAxWa+BExD`v0jv8C`6W_{RTBbnzqEi?W}|UXlGu_NMH&vj3L- zLH0-4Uu6G~{Yy4Y1fn83IAgXFC-ERYcL;_ORV0N66M52v%hoQ^O9sgZVhk=v4CJ+B zBiTZ>k)32W+}oW`E+PlW733Pkggq(k9Z!p&M0@{#xs$KS|0{UG8ajN!zmq5WPbhad z{l8(!`Rnwg%k=+yiC_gxKBiyha;~6rK?K~!(u8fZdr6F?;EV4&KVW(Bz^d_QZGjo=+v-gfepOZJ-8)SW%cX z7*NCjF$m^fqL%$E!e4~-fUfpL*{_(V)78$&m`ra3c^j|-3hb2g&U6QK2$FQXj5yc+ z!aU&QFfcYoA7^p~3^W3V>Elz~>>Eg(mxptf6+>Vae9zGp2-d<%T|M!(W*Bh=wQvgieXy6OYhe9s41_l-Scj~wyeamStXUGboJkeo%%ni?ndq+WcE*9#%e_uuIE`8~Hx zR=jVoi_E+Fpz065^Ub~c9u!~u>`Ont>G02fK|k~D_rLSakN))Xp__jG^36B>l((av zenL2n$DdU*luK4PE zZ{NJ}!ENbj*@F*@vgvO<{4tuu=sTy|gtb^38rjvdLui%zt90T*+3Ik@MZ3LK13#)H z#$ET}!I=u4l8bKqaG?{8&GRIhh0&DV#_vv%p(^?U!I+otdr}R|jobkI~@Pmw274?FL<$)o!q_Hib&`ZnM6o&Zi%*tUa^l{AyQSZ;QEc zAn~g&DG*C$G+;OSN-r52*k7tLYHUG^TTx=QXpKsXyu?y^(a`XIm3>!d`wr`cE1BPu zAP8;*en-QgPM;iC{#bBu2UxrcWVnNAGcMLhzan1U6?V(1SiZD+Tvs=i9jq=4^jY!r zppY2Mj(u1+TItisiOps#tKTy^kWCDbXhcvPzwAG)#+16Zc6b^f%~a|c@3GgE#BT-wX}699tIk{=|ao$T+i*_uWgBC zEp4SyvsGc}9w;R1>)KLkBV1Kl^+JPT@TzM^R;JpP4Z5mx!TRy0`d!PPrl~?*WUx>= z=FgYMZK+dNtlF5$G}LQT0bivYpaNF-yQMY2i-vI}X6p}w4MtWVJ}0gd5$`5m`dEG8 z&cMLq-|cC-`Q|3i{`$m?^t(0xY#n{Q`O>$4pF8cF-#V@Kfwr0-qCLWR1N|M^!%ZFm zIReY@#aMJ`$?uQR1-nRQi&e!!F0u<|p#26S=*_`oAt8Dbg;cgA*yy*o?H?m#I4QPzK6LV331 zn3-usu{>PBN)M5-{Oz3+sG0M-t{Qh;6(#==Cuds7d$)HTs;~EMhxxJe=H+wrDcAt< zwq`q5pyAmMBv`0P6$+`w5V^jPs_E&eX$-=R>F#JEF_iF;uiq%bGYJ241LFr64`po% z{LKVjOU-XA8=2oSy;%GbIcKI#@k_J)e4}N53!Q29m;1$k&Gd!#JE#9ZcF|wLLd_4T zxsheooHx&lF`=}ZnU7ntt7-Y#s534IdZW$mDJd*k9*JdYEKM6ob=SVJ8ZUiTFCL|W zN~2LJmW?!zG=;^ZhW}t=Xht0N0r)Q9lA1!5Rk04>u-8lm;_u+!lSlO*Oi-~zd}F1! zn}i3%*FoZ_m!57S+v&%!@+}92tL&)BzTvunneOH7{2Oiu@+#KW_GHC%6)f-`ekGI1 z<=3sY{HO6h^Z#l3PtyuBiI`WIUo*X$f7SSkWx^u9ZV8ZZUi=mMDUk)m*W{-_Mlb>g zDZIiTmi>q9dD$N!E7ap0eGYjPm|^xENm|7tBsm=d{L@C^FGJ;nGYz(*V4Ii2hmo}$ zNAMI87)OP7H6}2q(ygj=B<)ipfC6|ecsS#*ATQ7*RxA4iM;v%;#abgy&&7|$WEjYjM84l8#XA7d4wwY=GG8_~SgPVDRI~E_<&Bz_?#%32eq;IOL4KAnFGi^Fa@R zve6heEAF=d<~s~IU<+l;?+~8#xA0yu9CQki37x?T61zOZ05|#x!rV`?p5bAVoGPUa z-}Wfr<6c>-Se!j{!ej&o`GQhmYN#uh6U)dJs#crJ9i6GVQLCvl=TwlRl`&JOOK|Dz zc3nxze@nr%JJUbVPn7c8wQ}MV>}o3{6Wi3?TD!#o=N@*Yl~ipgU#<0AVl}I&#b(-S zHW{hXqW70nD5_I~&i?Ioc;Ozp-c@3gFUK)K?N(N;Z|#v+tBkP&TJy@x8EMb5r8)%L zTB;%ONJw+}MOuSd>x=_7YEZdeb*)<6tuVVL9NPOkVqu}CZdJ9$q^U@b#w#?+L>kY< zTWR@a8`o9pH(ypCbGuD6c3MSF?=5vE%7;l!tuGuD6hXJgqZd?Or=`Axs2UtqO0CBh zEDH%3kSNI@hCsmMJ8fA_x2?ftF~w>st;2pe96)>A!6c5mPf(C=u;MA8Ws8+922b>y>wM1hqn^(988#R=UpjIZ|4Cg?^DyW1KF*n=ezu#0i4QR~0c z4mY_yitS2QrE$H!%&QQm8cwi`kS@t0D?Yssi4MQmgYEDnDnJRvj4Yt6QV;%gdGK zfhG3#nzl)0F0LLtEvZxX#+r7@{R-RKcCEJCYqD254CQjiMS@0YQaFGWgVmHxlsYxo zfK1fqaVQ0aUhOCenLUUsA}1GscBw1EakVKA*CLd z{<&Ry=A{?k!0>k7oxT=Re}MDbxwkQl-=5@kj8L>|WiFZ*zLeR2cm3UW*PrlSMhvp# zyYFWFTzVJpCBKDUT?P+*P8EAZ7Rx)yA8Ma{HvQ~#=^q}gJxcy7{Tx30u=ePWYL8+M zNXjlEUh*yJ9E*UOVEd{p@qYN>hs4u2-uFj*v$n-IplN6qR&qTFmuAH`+%+!2?=CNQ zv;1Sz*6H!-Z?QK!3ij9#?_hG-ka%oGs={SU4D?r}D(!B>XnmKC$-1x~vb#L!0k|D6 zv*pD%@>T`tldYE4DbR{g^RfN6+skZl*fCcTjn zLXo@^m}YDjkC5!#a2m0x@x0sF*Czg~_T`POL(0Kuzp207lW$D@WcxOH%I9;J{xtkR zslBOFEpO6Unp3SEol(3GVRI>nL$K=KF5JaEso@M~m8?$ZhCRPSJS5IyzB4WT?y#%2 ze7JWwBmQcx&zkMqe&VqRr)U!u$)>zCyu5mGmz<>cWk5c?e4QtSr0(w*}uHEJaS0jUIyP~!1)4XwRp!=lNu*BnFL1ejF| zdO>Gtyyn!?o;GI!r$Eet1K5Y~!vp`Q6&MRMHfNr8@IIY+uSc{Nt~J2MCw0Z6_BJg`OPuJt zesQ66<^8N*J7QZc7KTCJG9eam{>V?fewvMbgj+iC^6B?wYiSag_Oo-c03m}qxh<@! zcu0ye5=-I&fbWY~m4}w~di*_Q!n%tl%MhHXqA!__t?Cd0!`_P9?;&mW9zj(R`t4Zv zs3}fDu5hLJRPUmEO_#;>l}v`=LAC^bfo~?~<3uKd?W&VSPDcm)_`tSmAexQ7mA+ov zYszGF8|~qIr&4Y)IduN0J6IbR`@+8$FYAhIOlF5jja=`}hO67lU}b_e7=vv*A)C3r zN{WHQT7!)`Ld!8}g7*TyMwrR-OG1hAr5l^K7phemWwd!RU0rr8``Qz2 z>-x8@52?M2*R*%k#PbnjiMu=$u4+O*`={5#i^@9oIxNN{TIO&#MY2qCVX{Qg|3H^H z++Vx*?%-K(=CXlJBkOzowdGeka@n^{RhdxhXG7ceD>KTLSpRDMrPgLnBXs&lvdih2 zcw;OR;F-zcWa}G9=W88UN|9Eqa3(M@vdK$~x;sJX@6+7^vwT3a)1tGa@vr74fk z(CQ6otqOTEP@agC1X2zSF(sPh_EGY9rn@^c^^@wpPF=MiX!X`IOQYSYDy8wL-B*p{ zb!7nX2;$rDH}qA|2VMc-b`o)q5nNsgFI)fxR@sETZh@#KiES$Q#lq;B>kWF(JxyvYHd!}t`+|@`q@&C z%~VoJYvUotKEbOxraPx2i14H0-ti0wQ|1Ic7b#EtNLyiY=?2Ok?B7zCu`RBuQQ9?D zoyXrilonsk_$xU)VoDa7{tFpmw)p}Ru$kbSVT8q^C&jo;dA2UY7PJF`cxQI!iji9! z8MUu&G*J?-32JM~1F=At)~(aI{A8%7sc-GQ8$9hp8NI76Xf4l`5~=NOF6aOPx7N1QTt`4yw8mBZGgp<#(8r%%^sGB;S_`sKMq zT%SO|I(_AD#ji+X*gE~E>F<;EYz#~amlhve7C0@alJEk?pf6{VG-u@L=PiDlGn28J zT*^v?snQkjx`U<%c~ELtzJvEHmB?*^9~`_KE~27~;$ZmE=^7wmFyy*A2&0V?$Hq*z*IO zSx3we7R=&5YuoKw(>bKmu8LK@98KA>@tDVz$+%$N9&0k`N)i^c;S8K;!Dke*JIHRl zfoA+xT1yMo5kln|fK`lh7Nr2<*RAfRu1s@trsSNIudZ85vmsB+RHZhkYyrDFL4F*r zQ#iWF($a;qMR9kZihsSKvm#B5ogf54^wX&n+5XN4OzOgtZJOj-@FV1jW zk7I=EUPd`ARYLcj@!q6YmC5v<5$Pc`kg(b7D>|ZSqrqU+s0Wm#(WNxuOUBHXiT?~g zR9`LVh|3AzhV_Gi2D7Qmpf%P8V(C>J_a9>Ht?1vz-U?a4RclmG%49?6-$!C~@XWwEc_cx~D28ZYSE4*mO*y!_| zZ-U{Sn|qct)>dn6Rb|0OOUPa3U3-0YZEGY`w;{LGQ<1K$`@AI4W7E1wdeMowx?Fxc<{9TYEMi3A-lmRM4%{PaD6EI66pb4DyBK%o#Fh5VBhfJ z%*hax$CmV|-cuUz!rWm|_LAjqc+zD92VUM#Wz}fxAL~mVpZ&^Kp zkIb~m#s=-Yl|A;JX_LjLQC?uLJ@d>$NvLciN#7bc(5AlTy6}a~met~2wwQ-(&t&`! zBPPcvTcC9Mud;RUV4H-T2gU_WfC{=|@H%V)OuL^{ggD8zAOV&<>{QJjUpZpIq!RZC zeDjHsu1>$9QeSFz*-FFLEzdL#P?cOKHxhYQ*qm!64~tJ}4FRvgW5H^BSgwY)R3Rv- zR_83&lkGK4TEt{3G1@Jes1U_6*1*Eg z(s5N4T-_`5Dz*BzDobx%AM$obw>3256>(;nZP-~&>#51X&M(uylRZL)=x>;Xl9jng z#9q%=?5sdj-1Ip0ft$1SGb_R7e&lZpz6EK}t~c3B-DQ>A^RC)nq7piGG$cwBmYjPf z{X$E%Jo79speR$L0=ZLRD^QUhT%#JuNOvHd{i z;K6dhM9?7%XU5zOOMP1z9Wi5`A z-$*Xbq$?XLP3e}(B?)t>!Rf7!*>st8VTasrU9& zXEeR;&dly?@7?x#yG$UpjoB{`$BN@_SCb6O&PNpG zc4spxE~e_2k+!e4wOgD|2SPH!VESD@z?~I*R|wh(msB-KA2MR#Pg3&V5U9SrG6{(;#3zXKa&1)2k(kf_Fk4FaSS#GV=;glBkr z)PWk~-WVSXoAp(srb~hPfJ&(?q5p%j#>+7)L;>n^nV)m7j^Ej0#$9K#)g^ zg%R@gTwCjiM#xq?w)bI8yCuv!wJl*z5P6G@YslV21@;8*PQv%^;uOSZj4QYe@{@2v z)gT29>7edrNYSzu&Ucg5F9)3bEcCaPwj)l&$5LU$6A;VRTtUc65>JAQp%7=o*8H zh0DQG3ovtOl`V!A^+b@|#1}0Z7f1H5eEHFuIrMlq;6>st9Lxwtl8@Niv2pTsdE=q& z%6o_H;YTEgWY1U{F6{G61#M-V`QL_KM?Q-)Q?HJC!3;Q-GM@McqeZhj~*iuH!Qx|6r=j)7tnie!{?Ql=A#nJfN!ZAUmMf0+%axh(xjn< z&YG??EbvVck1cH$Il=C;xExli&P(}as=j15Tfd)t2-lZ9RTu9Q z^t=@bVJ?^%8()bl+or4Lt8N}HisHoZ12jP95FH1|w{adbqcC(GZbZKspx$uWparN8 zK;JSmto^v7*{YNM@lQI zW~YAi4JChkW^WzQUGI&}@`xeZmh|0FE;#0%{CCLArE?Hu_1iyo>VrEEJGr}!l+y^K)#&Zt0+%s#{3>3Jf3I; zGnQCnmQQ3uWds8F3jF_H$XD@w6-W=_O3Lqn2H~K|sY>amAym9_x+;Qd`BXd|NtdNi zTy8ynmEwu;0`C?Cx514?0S=#8p9~84yU4rSMJpGNmNzW!Q+hvoNU2-Re8pys>Vo;W zKJ0TBd{u*8=2Hp|00OUmoy5ooaUSd*XI=}HyH;9HJ4g^^12V7guJ>Ii?$(g#E+2J0 z?9qE&uIiEc2gvtsaGh+KBZ&Zctvl)26U+pHCecUS%ZrGP{l$^pW|6u_;O*a|O2*^6 z!i?I3Ph>7Q;^BdOv)4yn_4b$v~v-i1VyBf))#YxSOMCq@J0zk{(t z)1Qet?p9oS*_EEiS&fR4SZLe&^7L;*`>-#D@)rz1{f`FUG+RQSS3mxt(Wh!GA{_0F zB2huenq7Bhg15cJQ7*)4SaTcnM%>BRg3PB&(cWL9_w;^W#^cfG_chb^D=oVa^ccMn zyh0)3&BUr^PhmI9H&K02Be&!GGwgk@v*ff=#vBXOuGc?rp6(*AQR2k@!WVlNdE~Qh zn_@xwM220gEM-F`qG&E}6-NDuy*`H^iol(31@BOlmxp!QY0)(uPjq6UslDmwwBLNw z>nGxJaPeOf@InQoGC0_JCvaa%@KKRbS#Rx`a_J|J=(igN$ABfhMk-E_Jx_ZplOCQI zvA{Zi1c@0)M%bFIR#q;#em075dR`S&s5WhG zk+Q{8q0Fo(_%hGF;9J+M>23o$W#IbIav)ehb1|w_WhUgT7Js9CCNJh^oR6>9=4E-S zIkEKiK*vB0%i$vY5yZ(yuImLnYyc z(LKu5S1ZcOfxMNkAFz*)OPw+VFPL!}EtUC)r@7Hx%9)>}in4Q@t4S{3#^^>z$mn9y zhk=p3l?C;k39G+`MJ^$4Mzdy+Xag#XRFTr8S-Rz=Nit_&$odwvIYq8J8OD}IW$g8t z)BaRebJhFX80)+HH^&l$N5=)l3EDMRyi89I-|Kpx>cL{^t7@s zGVV9=nN%oHZjm#Ja^^<*S$lB8C-7O|eHzlu*6`p+AdJeOzWeCK=l^~q74}HbDPx9P zem<=n$lHXpQ_6ldl2HVyG^WAc7lj`6T5+#S?=xngZQw^EiaCSNr=CGyZBieRJ|=X_ zL5FXuy@P~CCd1Qv`8+zT!{pXQq|4?fLLUmx&PFTNa8{05KFsL&ZQ$yC4xcqfaU>Aq zq0kObiYCdB0Hp_AOW;$HqO^dg&XOFhzEP%rSeP`aM&p)q9c-uL3=w~}tc-4-+ll}) zoOQKEQ(Jf5jfwS)hsZz&LVZW&Z zf%~-j_BMh|@dICu**cV#R0o<|FW6%NPq*ZgYhH7pb%}4=3?>1j6#rY%T*gW%9ykC9dG-l54$=Ra9O9DxkX_Ss;RUXkf_mOt-5 zeR7LqI;z{EU)t*`^RsitE|jbN6KzlP`arOrO;p8<#bXZ?0-5fv#L}_)_U-i=QmD%l za@|^TbhEbnWbQ$IRXb4#`Wsm;D*>_5DHw(3sB>eoF=q%LCg0tuoOwGvw|4cz~y$N#KIUUh2o656shr7hj%wuU! zt-bT0JZCX&HpU96SUSh0gfLGe?Iv45+BMx-2G-295^|-j!D7*usM>Pwk*qaGx^Hd8 z9f532XvC5dmk=VN!52-2ss|ejUs+bpe1g&)IjGe)k?%u(@>qm;dfxa;HnT%YWrZJ&6-8fpe$f5^4@jP1s#HI@$t=}E=AEZ&g& z;9@}dea_MQT4ZSyos`PEGw)hDF21wlvjj#mrL;A?QiUvk>2lsn{uUJoG+9_;$^3Zl z9%6n^+vSreOdO+Si|gWSiJgX99E1U{!KI>Pp)}kd$=EmiD5%F~8?XeSg&*;0+qh#DS9d14Z%p ze0t7e4YX6W10Gj8FyczMy-$$8*${GYsr!v~=-y{mKf@itUALdTX{w>nDk{^CRDuw; zs2(=$*y(3cphfW?sr5N(m1zXeL`tTAk}ivbcZdfy8I*2}%`DU`xtM%fN+%-m-Mdr1 zP{JR{xstiS;d-z$UX_$+t|i-J6QN8sU9&I#kh`t-1@B@<==xkrvG3|J z^1LQZvwrk#Q_ZTrjKR}}W@WDe7ENZx?CgKQ$bd_u51F;Q_48`XuwYR8R5%1))q1brJHDZielK~O-0)rPRp#ZK_i*eAAymy)df$o;Ul!s0;lxZ)RIW@5THdhI zp@Nx7D}Gz(j}|9VWV2F;TgS`MY&haCSzKdPrT2%;hh`IwSfrW;jO3k6MxS4eke_R| z14kH%FC7*dF%evEF8X&uz6d!>Xj?$hv0KyJF8aO@l+x_^;7!qjsKHHc;Otr(f?cQC zeq5?e4-ALmRz_!cI{Y<%)Mf2G_w1Ht%5Jq)DqsG{tSe|$ZfMPQ?XmgthctqYM;p0@ z^R9II`XKxJ!+U4EK2y{m-83pm%KnA+#*o_;a}+i=m1|2=lX9$gKk?l zQ{nNF_!o-uC2?D*cC~LV)cXND>$9sV@*A90?IK^V$}T2gRFG)T_WBGhJ?3=~CGK>v zuhLX|?G294NXiqOsrR>Lcj@|w!y74tqottozO>-81&32ic2bJZ8vgh)Ts9>8d)G@& zo$jvvDMw81MjK;lu4(m$*b@=J88tN9Pf=05EKY&mznH*#om3+OxRu7#u~d+2ocYTq z-`s?TR7yGftL$S-j)G}t(dq=7+b4}BkxBT6&O>sscVMb69N18vG~|>! zg#=ROr&0lDLP7=-`t|#(JGmV=3!Ri*#^mcGc60sO@>FXr2@G8_#!St*VRE^Wji zuXjvIa1qKgaR+LtGxJcUZ6#TX4Hwb@Kab7AirFH%q(m(`wKUi8wrqKi+22kr9s{YC zxtnjI_O?*+VTEMc+l9To+Aa7i>AC#YbgnhByF46n@82+YM24#Nr(>2#I&k}E#(K|l zgT4su>LcU~cR%$u2Y$o(a*9qL8m6sX0z~yNb)$CIpX2b{3WrC(WTvvp&(0gVMxd@m zrVbabOHZ`2(zxHCGnk~z&O5doNSxSM-?F9Nb!BYJ6S+Jb9(W7+sa@VC-*yO*kytJf zh;j-kO0}7dqpdCa%wF<~-O8CasPF3+t3A#L9^|o&ao}e{TGy05TyLrkJ+g=HOlF}z z8kk;dOIKt=Ra0EJG9AyEf_Gn5dOOyvfBN#@Efn3QOe1#%ADzerMV;U-56d29`1nr8 zCu$_7C_lNMm$$v*;EE}tr}?`f9sI-|dR!XoU(NZHqn;w`35B0dH`C!9G#RRf9bm2K zC8zDP5yK|6kUl#HFRR|1JGmUb{!rJS4`(a^p0_7l;_3UgDyMhcva9CIqQVYdtM1|K z+>)5x=bbHQ+WttuY;!yGhMA4<2suZ0Lko(P05kL;&RJq!3T(&4>iM*bo+?$A4Pn_X z)jfxRz8u17*sNz|ekPjDhSnWxgrh~bDJIwX$XNEM(t8DGSW!+v5ZTdkZYqX9b(V+I zfppYTkkY9cp*E7a;;-OM9iwOZ!RpgYHzI6p^_@F(8M7b<6ry<=JQAoysK&nLS5uH` z4~Tx9t5t*Nbf3XwH}g6NXYY)J9iqV&$!1f0cA;jsIupH<+}KsVh)2;n^;VO^={pIZ zD;I`c_$n-xR%6jRxu^BTn8#@{=w+c6PMQk^eZ(>5QIulJ*Wi1P)%7S%YW2j2B1M`S z1*!vvOskIpi}huwnWBg05--Pz$*8qFINA>&1#A8_E{7ox8YHY3`ftY4G~-vAPT9Fr>HT#`ikr8El)5y&79|v&G)f>@(=Owm#Zu_WG9{`jcYkx1 zia^v<$Zw5gW%a%Mdi7rHgndDKM5XoIG&<4+)KS1=Uzcttx6;sH{Tr`#LXUUCM>B~l zuH)X&QzlZ)&W+3WTv>>@f_}3(wAiW7F^jYo6Kt3~U`;N^o2YGPJE>|Rb(Cz{a6C}6 zR84VZ^vw65V}FVF^#h!@0AvDMJHJTyi1&SNoC(?KcbngfU{Un@tnX-}8hqQE;UGUd zQKzwid${bk#&dAG-C1G@KI*C6<%s!gp@qV$x#r;_(hz6f-atTr_>rlYEVk>-PrZS=glMa#Z{hS*nZ*$oc9dGs9Wuw?TfQ~Q+Asipu z*ofBbRbPF|6#LPRv5K5eIYMYg|lJ}J;D;WD@T z7!!dtMSqKRoc}A_gM^^|F6j1d?UZ&C>+i{7)r*Rum@+RxX*c7ifhwT^nG!w z{{?yd8P1q~K~2kE7%gZ(43NLlK<%;SM<=;WwF7-6U~Zf0&FrI{VrP%%a`QFh-^c2I zqzMT@(Ridhyft2=c3@qaU}So$x!sxe%v15@j&d%vcJrIcj-pg1SE=v+=g?O!?mmi7 zdIQkZXHjp!O%HJ)$I=o?|^75TEmL^!I6nvIQ`M^9koZK3pROudl`CERR z8PB)W7=T;-+3J4myenbyX8h7rr$(7ZbVy0lx;{-#4+NKvNm80O$Qz(?`yl}GNN^Er z9rLi)oe3k-o-AkuBhMS%Mb0vH2#pn}D}R5YAw*;8+BN-0hX|YHVx-Wf`gr{+pCM*- z8D?FJEjJbABiuUz?Rt3j!;s^@U&WR_oOx~tX;`LrX$uz$6)*yHUULwxP~VD{1>wdv zN`@G7EY4~^7d7h$YHkx}exXS0QgtDEKe!{ve=z-bn`7pzuST8QX8pn66AuliI$_(+P;e>~tz1@ao&4SR z?MX%J*gX5x%b8DvK#aO;*4&QMt&SYZ#I4y@98O&>(kX1*+qo7it7Z9Z+y|iSG^;;f z{Tz7?=glIsgp}mqt)3+<3+T_!q#|#s#|k!xHAIHo;h2uVp+HDscNY;-7`ldP$NrXK zy-~j74ZUkQ-J}xk?0i+ll6;lOyHbcBie9u3midv4HJ23-bop62Ug)7iZJ^f;-HEhTf--|Qj(=sX1n3i8pP*(I z2I9`Zr)e=dhPj8h*os5e$wT%z)h7bMXXl~5m9~FN&Vi}mka=q`pAte`vy;Axd#0Db zq`A8u^NBvQT`JUV0p&m2N65IOF^7Xuuj4M^H`^3Rb?}mvzMp?(V@_xDqBpy0kJm&~ zRBzg13X6)eN6Y(5ay7-5(I!#gdO5DXe@17FwttT^Sj12vAP5y!f7Zeu_!5g*^*}KW zQmpbMGdwgG4+4m&Ha8nyJXsJycQ!wdEEskE)TCJpzs>TQG-HT%3sRWfU8?(ICxa`w z*9gV02WLz=pIfendVjL}k9&X0UHz;1>(d^S-k!|MTKDFNl8r5w@K@%)#ey^JiG9rJ zKV=>Fcuj_g%Sa?$Nb>F5-6$eOZ`v{zh;f#Nm?$WLxT5QQWlu7cF=s0=E48&h2Byf9 zTo3aDJK=*dN17q%BPZmc9AnC~A3FfWT1{fCr7PH#s2r&NE>*V7^2K8;`^37>j-^AU zG?_cysO|rvy-<-CqfxKkXR@32v==ZCzT&akJsf0rz}zwZ-mva_EM$5`2Lspo;n2+tBxipPs!A&G)Y-j+(x~u;lr) z5k1r?p^=H6Ov2`v7LB1sLqag$U4g$>Z+1r4-`J3hoxO5sJ+UmI^JrBH*1x9`mF9hI zk&z7YzC|a^``+JNPXb;L)@ZPvcsAn&#A^=sKFHNoLQ}c;hoKSfJ$UmhFGE;&B-KwP zW7;dINj5!D?bq@cEY5^|W!)J4yl}cjJ0Mb^AL|JCYP6p2RE0n_la5HP0Cu8xFMpuZ zsPQd6)*Mb1M#F*Tf$`x5QzjoT*~c(3E_k9L49}f;p8FbENO{DOL^Eg=f~DM8VLH|| z2)z$C#jM3zO%<~7Qi6A;gl>I)IP0%gghs`YGZ-oX+58UG@BR7e&&V^l&l1gU6PA%@ z_u-&TFBmOp(c)Sf$x_vOfbOCReAR89pk>R*b(M4;^ zxzdOn^91<37?kQ;GM327_A}%+f0Z5y+nQpEPZ+EwD`_O`-=OXA!cAmIuB3TKt`?g* zv^i+^&9Af@S#QUOx^y5E&HDrBlh=iFw20!5meM?JmG@~~dXCG+Kd!lU&@vBQ{ST{~ z8Q%;Hbq;t5v{}PLuLF1Jf5SX96RWNXGuyYsvld>nG2+@KMbp$X+xvz~1007~zN?XoWqDg%a69GOTDQ@M@4D$0lQHUw_{YUS z&2bUt`b=OhX{LJrmW#XRYKf+$9FTIZ*e5gHr|6?c43B$0zp5uchi*GUQ9cGU)w>0dvI~6KqN6~;{i0@ZLnv$&Bi|KnfI=YG!Bj?^{VzOc9UVM{k*|w zb%RlxnRqz_j8DCs*7>nKMr&Si*SPATxEF3rslHI^aQV8}<*uy}=NjA#W3su9a<@3pTuKd{-E zXtx50Uo=ajgV=?}a<{VkEDY@!+6!%gSJAIlFz@Z0^Q$igK^)pFFMeZ0IBF1w`ynzt z8^X;WZ)Tl~vvFl}@$8j0rUft8)CL0=xw=@$gq8oC+Bq)eV`J)N#~*L``EqDJ-5l=h zJA1jtxWleD`NFdHLNa*6Hf_(u?Km}odmHsTvi*x|aqp)%I+tZ**?`Ny$@Of}^*vdG zhc?7fbqAk^hk8JhE4Zf6ZSyQkqjFen{TVcg(KHkNZ=rFU44Y~Y6+LWDmt$pLR|zhg z$e5GQ`t6p@+ukjBFT&+TPn!H+hdh}T(hq2Ji+1A6YBH6I0n4P( z{yrq-H3(64(EXsznsZNoPJ0QQO*(W=yz;&G_ddtHZJXlgcms`O!4+>rb8^{W2Ve-< z^k%XxJZ5?K)Vvf&R~7CJ z^5ou#u(cGL443_Sf$ye!KQj|^peyV}TPAGZ5Wo5ydYv8sU-3E#jW!J69?LZ)S#@|V z!K&sQ`mEK_ek~ftLg7=s(Tc443$pjt(H;DhcN;fV==~ud9m|~_Q?_nZwv8R;XQEQc z>~aOs$(ckZD`4~Un~mqj(kJN?K}$2Uh?aXfTELf|QrK z7Q9xsfBwkE>K}f5A{uh@H9_YHM%~KvEw#mWImKwKB8SE`*}PfG=W5n-#2<-lr!|O)PY6#fsv!7puf!%g8pb z-x0RN^|2jkizCZfzBC;CkRUkpZYozA)TEQ_Zp-NVI-q)0I6fu_Ug!>L!AH&LUz7%b zt3x;jpd&*~B-@-ja&l+6wfjXbw?>h$YmFjCV;B``)5h?vwZavD5H41RON|%1;pl)g zn|ED5w?>-Kcdc5x0r}#f^qCJ9^Bu@ye)Vgt{}GnlMY%F)zOMIeHFN{@qyR^Si~!Sm zeS5DO4CW_8f71DAOtq}NvHzpCHP+$*L(x(Sgp$65pf~HeVs|lJ&6;y=&)J^H*<7xj z*Yx`#xvJXU_^fvmC)q7Ru^tVGZcT-7q**MCRYLw>_xmE{*^Jc8y49XY@R8o-jqEPy zggoai>QRx9?q2}9?IoR_VHNNZK2{zp0K4EtPW;yH>-+(y%bKeJ$e>mwl}ntH!#S_z zUW>OhOuarGeKRbdq!!>_sIZ>wzfuy*d$C636NO#gXWxmwezU5#FE zr_pRfvv;|^8Li-;D{8l^SCh{}UpeSTNf&Dz)!~cLIJ#~)eT~R{mm9}q zZ5;Zz9)k1nlqBE9rR?cY){WlLD}>GDJEM%g_Aqm_LEqrL8y%Z8dW}A{Kpv&Nqc(%v z9T!>aXqEMpUcW*~?6&5(TAI>0F}W8Vr-abZ2sZB9IBXc_97CRVD+Ge2aag+>Bor!@ z<#MQ1Hv#Gf6MA)sF%hj2kr_Dx^gp-R;7wGVTBuPIYl8T@VFbNF$heMg$s> z^ht1l9|;jh&B1M15OUV>Nv&1zS+b3D2oXxyPo|WhF&HyBJvmeHA?}JD#!O^*_X)TD z1C(@;YD>`suUs6tEKG>)n7M|GJ^GP$HIcI~2;D5FHRR>>RI!_NJ0ebpE*12fd|uuw zxzOI~j3iGuy_A-LrmIg{w@es1-Q=Kq3DS78goJ#>3; zALD=;TsSvCnO*PEBL;+Lx8~NPwpAa~jnm*T4gdqUmp1w`=)ISQjR3S9{3%MsblRgMx-h>(SAWz-89yd9U6G-Dfl!7g`}M;p9BFWa}dM3fTt5 zS13y154I1JsW80hSGxXds}f~!3mT2GhvQ6+s84VYN*#o-*gr6(2S${4*!^mq+P<)2Yqi#FJXRsWc0<>@6-}ZP|kwmxplhr2}ofnaBeFVEL z-g}NrvNquXf&`3&7k(sF2@ou}*{IUK5HlDONt_Df#mEm=bbw>n4`$Bi+C{m*y&nx3 zoTDj_@m)55fFV{ijy6O=^KM z?}e+zN>~@Lv3@R#Vy-mgzFpNZ7>w>~uGB@ajJOyW?c`UsD3{>fFy~isGPZ+PI*LOi8^?lLb$+9#+giL2J&Dt~Kmb!7vT&i~=E7@|tJ<;O0OO{L?JUQU zw-`fi2~V4uUf48MB-hLU8$+V15x)-?9kq^rJ7mdFhv<$OTRhtT=t5<^ixLb%eZM~2 zXvg@ZUFS2}J>gKMCh44aa@+%wUvYrRqictNAf3nzW``m|HYB-Dyej$$70KP^)n!5>9Rs2+!-~sMkA@ zterf)u*YG~yCb~E%$qHGv)k$Aff#NGbAhd+rSynf<1#voK*lcSZ5FeM=F&lw|Au}X z27bxPngp;1$wMsI+c|bObCX{WEFRJRVBQ_QH@>BPS3B@5vRyoWRp@@rP#PCCryG>$A z-s~()B?shTHjMd*KU%$pTfrTxka}7L@6R1V-uucxjS>*FqS@)fJFqe+wMSI#ts?{d zCD8bybW#+kNZgf!8OUhf=*$EonrQyqtMq}9UZpAI90Tm62)bzjb7EwIubg?=NPk!| zCmGxUXIX1G=Q@w}X<@NQIqTqEv?BhD+vIZF$ginStX=)-5XZeA_cb8%lcQ7g^akig za0C1im!_Eqh&CGu(dXe7qN~A6MZQcChiL}L`^MV!*KXt|k8+>yeN7%ocYK-8%yT|Z z?C>9@-jgWo57)mSooJoBeH0)`|D8}$6^fEHT1Xpse}3baZN3MTY0Z1uqQ&e@+$Sju zW}NAn)lX{jI8zfDkPS@E;GHAHG?X;x@MFq!FkD5GZD$Wk={tfK39HVscx-Py<}JhN(JcQhhnvK86a!}uXf2zW}YLJ4p4CEk>VE|fUuj+32#>v?O` z&XNS~m4Y<6=jtn8%GFg$$>sVNFCc+V?=)I@Bnrl)TxGh_ePJrh^y!sI{F407MJPgf z-eUCFGPEDtv(Q{Qs9jyqm+}9aGPLd5v}9Q8$1o0~NA$H1zjXRI`TFx0(C30~jFqci z8i`!i$I0JZgha5%zgYcu%_rGg-AUs*rfZOIHc-3+_EsU^9F6a27XuVcUt_Uh9p+He zR(a7w|4y42`s+z3$`!&rsIw&f0|vYi_QdGFH>m4!B6vk*n%5caX1yNU!d#Czg)N)h zLZFdP@0tjE^o?uXK65NCN3x?wbFJi*5~E`bh05{VL60(e?DlJ|3*1u)SK~-|S1{zR zB_n2QBvAwuo5R98f1@?%jCdzNV-p=w$HaIj=`nK_FWF}E+!_iv5>i$U9Nsc}U@}6d z9_p!9@%U8qtDB2j{pl^=^GUbPHe3EsEU#5GfE?jgf7ts3`50)#FzW~%!B}6?z!Wr9 zVgtp-B0Sc5Mm<-M5|i@&{AjG1aV(DJ>x%?0D8>$l0Xsb&q9kk%G`O#Fys1rmdBDXVtP43=v!teHCgp^x-diB?u1kM&8 zx{0D-Qip=q(Tpu*ytM|dhNLa~7i_uModd=OS91A?sza{-x^4v3M0HM+4OQj=s zZ^0kk7=G_>NzGEos<^fkw9du?|!p;ZtD4NtfkqUWxHQw!P%Xqa_!$%V%p}5B%k_vph z_B8kU-bXasM#i0=nnrfG^Tt>0&|H^KOO=Afxh?AzUvCbR8}hMIM{nqTW~udrRcF0i zY4dsG^z!jer1#xqF6$Sq`a;2;YvmM0MyumzF#zrlP%7+}0n{0T1DX=c-}jIKCs+X~*P zEn>h`St=&8nU-a=e0jsy`%msCz1uZ4-*Q)fu+p611x}+gCaY=p)LY8#nI>N)Us#Mb zpo{5hIsVf7c9Gj25pb|JZLf_vShf}H~x z@QJy^vANP{tgxJUI<_(&(FSZbjb87UV@lTEoe37o<8_Oa2_{p$o>ok>BT^*n3QI1d zUozySMr(o8!cs*v=L>K6)l#Yw%VbJd*R%mXlp0_53XR$FmR!UlhOsX}uMcFu z<9EEGDCJ(aS)RBd&86*Wx8!siXASj$Ip^}aCgoAdTbPPuYmu-%?{17NOod0~R<;-u z$Gx35+TBayB54ZVQ}<`Wyup+q&7b_T08Ch=J4mO0AYH3D- zih!3|_%T4{;_{7g4v7v(27F~^VpJNzj~Js)gi0jPNBzAt&2ctcRC3bvL)J*8;5$HQ zd!~j>B^^dOXIaGNha3i*1pUfYode;Q zz1EVO5(9_E_?9N4~1Zc3W!N(~d5W@E!}9GB|E2aYUyxrvuI5*Nj~e^(Jh1k7V_! zAs_joCXHxjC<&>duWz6^)Hs=;V9=ULT&-gT7w4K{IT!uH2 zhjHQkxNr;?KK$1D6aiWUE*!On0vS1$^<#=&c^xZ~>}+Q97*7-pu za;}jelvhbGUpl;$}6mk6Cfg$>8uphU(v_-h(fwHaL}k!yxC-`<+sG6TYuv_7_2^}x#Kq$`!>GVJTkj*sOs2N zt}Soq`pb<^Nfn=k3?=MeeZU9xYLLuli}S6O>smn&I2X8tLr$F&^AOr!`!>*TGk5uHpqz>c$&8tpQ;D7XhIb6m48 zVgN2nwQId^2=02oXI^w=wl*)o_4pQ0&HCbnKE?{9>q}zM?-goSds^f9^N>9l-WmFe zM!7rjE@&?Vs7Qk`>O3I_MiITwYBmE~wguUzqEAshn7)7&K#7^{SHK-$NAUytLLPT` ztWq*y3k|2@<6-lEQU&*>_N<%}xw`*%-cauStzeuuilKW^ilrA{HC@hJ8QM2xCIy|< z--uH*-%>$5##G!$73eUM#Z24*(=BGD_n6)Djtv&KD;c|H^T$Rrf9HSMp=H9}_>c{A z%=9kEBb?QD>vJt2IPKw~(sK5!vApWE9LlL*G%T4$MH)v0_fE&%bqSaNFW~5w-1g+BycdGR=o5RfS8!TRd&Wwv$=q>Zwkri($03_sI`99KnF= zmR-$bMDu|oxp;Q(|IzF_=BOoRx5r4%8f+)K%h&mipROzhBlc9ydm^TUeYwJT<-jZV z&pQleL;14oAtkkI_m+DC0D3;TBa7FAxAd!_S@IFC2K*m}I1fz*mO(3M2EmMha#Zy- zn69Q%)AYc!fN^d}(DI7pBeqa-)A;94)Q$1xVoD79%NCEp0O#Ie_xZEAa4D?uCEPCF zDxe1;Rt{!j*61jo&NRrCzEH$p?<|rJnd66V-fz{X!fxKEi3g(rtKc#0UYs0DgndyH zfTm}YQWdQN(YYCPp`uTxFeGyyR`o%@lZ>XJVRHsbfcmi-XaNlNQtidG8KhLDJUY$Z z-pZ94WU2Rz(^C(4EsLgTX-9MGJxhvhJ+IeIq8qrD-4pEyd&8fxdsqE zst#}z$7+fB%kDgsI`Zgp*_!LtoKz1h&XIj8U^Aoj>XnSvSM=Wy-NUC+x9{Z*x-9Akct;KCY&1h*KLyyz)8LPhDOe+5i4uP{Adp#Q9|1V8uiVP|SZz+Fg z;J0I1jU8CCFTAia*C{T(!TH>!4Nd10E?bC;?e z8eBt>s%nY6+nuSG8ROd7N)4?3k(26r%c3u&tedYhRwqSHF%8dc9}kqla=&}qa((X9 z7E^acXLW}#c=vBb@93U@+w2dAav7yB0f3FTDzGf~o@}no)Nz&9oyhNhWOL1d;W;OT zeELXaG{V;_RNX*kbwe8NX56_oxG@SOs(xRuGvR&U>I~-z_?3NwK;I}iA))WZUkmJ= zqR{PFjued5GJI{$P7YIyC#TX(Mr;9w@^p`;-1<8q9%&xK#w49B*oYM-BDRIZJAm;N z6?B}`++9;qp7wl(y{GZj8_2J?*P*i)IPak0Iq#hImkyfxO7IG(Nuo!Fj_79wm`1yy z5HcH`XurwMQFNM!l5$v-Lx&W@6(WogkdvcJay83i%hR4jae+J-#%^G8FfUYxGaify ze(jiY=9c%%Cyr4N`q8QUL=*@9N&Xg$Vw0h9*#DQ~e9&OYvmm4cP1?sNZ4J`dm%IRZ z(}-ffZ(7+BSg~&OF1NBFDYsCaF1j$Pj5>x$sWM<#*+8*_jVpO`6)lkX#92YE+(x zHv`tWgKV~m&WYsM*$k*-Pk@FzM-ge+njEG$XzvScSbd2{eNdN+>72`fQ#dj*O-g6!#SuvvkUf||$3@Q$R4e4fQ_#JxU(HQjHPJie_Z#f@~?7+ye zQ13k&Hxm)~1wUT>K1X-vu!sR9WM^s)5`HM&I|uFleFp}G1cZFBt`yjpUJacrsvk>i z-k>qhS5mfYH8$bor=(t#+rLn|J!y~1&YtsvhBHraPfjbnFR#JDUB3N7#+(;8;Pf|==gtDb z9oYYh^EtzG$oG+Jr}%bDw3~)@w!I{YG0^(lg_BXLil*0XGI`qP@WGp~cTJ8<>bPdj-oYPFvokkX*xIx$xbQy^=~7qa@z zAx>jJ%sqi$To`CaX+Z(!h2mTbw&5cWWRcD^^oy8i6mOF64KEj!sVQaqVR?>NjFwQ` z8Y|9abM3T2(#Tm$&{Ot@Fw<}i+5e~eZ{5pPTXQs?Hj=}Lrzy6H$(D_=m^v-`Y<6zb z$zAiNrDK=vaeM-1ODyz{pex-*V>IWJ+GcpW5MVT1Nu z>W8v_F|dDQRF&x^NH(nzU3NKMi)90f&ySRBw&rw<8H}hJZs+#)3gMF(@}^C)F=vhX zoF2D7a_!#sVPWN1VZj-X%}N=iD=P+@Zc~PEit=P-8Oc8m=V`I?bm*Qd8ckATL(gF_ zuwx9U#?C-vr!fO_ki9fPnr0K) zJv<=hl6Dbm{@xhPSLVy*YGFaoTRi57HE(3cte#jqqg_(sahQ+RT z8=Y7S2zveu^xO-20!;|nUA!oEc#V2^EZbJ)QawGRH%Q46;^`FiSy3y3zJIOdol-lj z_lpiW?#J29A*)9S2(>G@YZzIjv?g2JO^+U*i~XK+mt53Zb6X^TrB+z5TI6Pto!aO% zdwl8e*`qUFbdm*?5v{oOEmqHjI`0IX{vVtl=dPhs1{Dw}J9ye@q?!lPiE16pCGA1_yJ;V(^+5z!Uae)MI^ z#H+jW!ruDt+OS^CjfIc3YB+z(Oyu?)!Jm90y`h=2Sq*`7#TM%BSny!$6yDX3SKrLe zXGFg}>`rohe+zt(7daiXQM9GH-lCory_K_p6E{iAf?gIU23}}+)g#v~acW$Q5Iw!w z%Z$Ean>vrR?U%TV6*ww2*2pZA~5B=QxXp zx#f#;` zvAZCJ2_L_)c6fmIv2rAA1ABFsI)9W3H3)7eF=!U`$~9{F(urCsU5|$x27?Fbg+SM+ zz2rS|O0exT`TxLPVY%b9pzW8OOq6RnxHKCv_d~bxuXs zqsR2a*jQ!dO<2+APM4;W1J1hZ(`LUJ=|7_>>X3@^kfvB4$lw7AqEc&+N#y za_=`F5zAK(k^cmZ+|;_dT4M%waRi=D8N1kU_Y$G+oQ5r`uA+Zustdrgxc_BItJmo@ zd$m4NE1DfSvG@GxWNarPp@d?$mCDN;zeU+mv4x!h-sC0iirw#Y8myc-ep|&Kz#c;K zvfe^N9CdPL4r_G$6_0zKV9FG>^*WCoMk5U~hPr8Sbq{cX8i?@_#WM^_oUw)Ic-?u_ z_D^agR0jaZr@z3=B7njW2tH!xF&OKnz_O!rEcWj%I-otyI|H7=$lgIW^z z(b<-sf~5~?M?2m>kviO8ytY+YdcA_?wsln`(3$#JSF-aSQ9T;$XufoA?5o>=3nLQOkrT?y*BQJ2V$Id51Q8|W6AkF77=;yLs&4$0F{(|?loJXG7h2BR& z1B%I7C(mlG#=IP@cu*!#tav20`WhH8(hRGR_7&h~%-*o94Xh%bE&Cz!_i67u96dmu zia*MQde8okOnl)vsos)pU;pU#M18E}C}WCC=-4yvqR**y@X_!QsayR0h)rJ_Zl_9Q zc{(X4QQ1sZn={>PvYuP1Ih2>(+}Ku%nCI)EqSY+rlJ0QHtJ5X)W!J${qWWv$lirh# z?#@im=g82c4erzBE{7hXS_to#2D~f{+3%vG^)QANN!<;aiA<+p-_Zmz818R=T^#QH z1$Rg9XWsCZrB{s2y==K=uh>wU+^&pl_D;5?kS-h%LN2q$Xs}v6={)&!|4%hR9}K-k43vye=!XkYn^7}#qT1ozkEo!4|Nx;l4X^bWW|>9Q6S7G z@-KMFHDVMCz2Ad~F}I|rw_KPPe zrcKq<3Ejm+b5Sa+HW)*bfMbNbGts+=8@mxp%L{pXVpFTSZ=xR3EB?#MsYGK#eB)*@Aa3f*g6VY8tA-Mk~$P{mpy7c_7d+wV+1tzutBbM#NgBd#J#d5 z;IVEDiz_)fmTMjv&*YIXeXL4!Vn@k9GW&H#Lt=IjqrV`u z(?Z}JU1LfB?Z`eTU|kJBMs{1TpuBb@GiO3Cp%E45+USRhlyX6MLvs<_WDS2u83 z@bLuh!y2{Kw$&H3K}>nE1vBTS9YKcma(YoRkhjNjmNDhxHmK2vWV@&43I@d#-&}o3 ztnNVi$%<{XD(=kvssTN*W|1haI(*CAanpvYj>Ij=ZC3<;3%0AgKEh}-2MMPQZS?t- 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

    EI? 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 G#J>Q8`6Gw` diff --git a/manual/src/bin/fonts/FreeSansOblique.ttf b/manual/src/bin/fonts/FreeSansOblique.ttf deleted file mode 100644 index 9b611d93e14534d998a33b9ef6831c575579fb2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 301100 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%0A<390q!I6#BmW#kr_}Vy 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Ń|eTo+#$E~D3gKrsDu{H|_ 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 diff --git a/manual/src/bin/fonts/FreeSerif.ttf b/manual/src/bin/fonts/FreeSerif.ttf deleted file mode 100644 index 5b15cfbe02470841a10825206dd5dc099bb6a140..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1288080 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 ?2fmt#FQogyu4NWs*9HW!N@S!8J2M=j%7 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 z z*^5^cF?S+Nh%`R4zx)#ME{3j9+r$fwP(Gj;&lScrQDwndbkL(?vFYiB;z+_)uKGT2 zDWq3pquOxPF?mol!qhhw@L7Q!#<9a$`Ejop%%>Cx6_u`l!-b9rCjYWPJ~$$njE)=_ zR>2eLeXn06ICH&DFd;fLEVHKr9zHjmD^xYbNVOdv9c#mZ*qmNB@#4iJ2bYPbdL6xe zF=1TX;u?K3S+cX3b>t#PrY6o5Ek8l05p~fCu%}^N#88WeU)t%dUa!q6@hxP81UeqM6j;)N1&qqc_n0GZz z&gIdu!^O_r;>M*#Yhk>pGpRDwsG)fX>1H_K5uk|&-Rr{rjWs$@UzjYrgcHLIOB+El zi`$~5BLwk-3maeH^gcm+aqjw)|Ju!aUB!^CxKXTaxi9{o#sXaNFaO8diQdoD_aIul zT@dQTGlfc?vLt3#Cg!G6zHiNrW_8O4u#NBvIO{J0W}|!szz6crFl)hX2k?P04;z}m zRP0%?h=^lY`0REI6#3V*AMOYly-t}WvbP@aGP!U$6dsp}=lS};!2u~5Rn_ybJu1tR3j9NHpBmi8|mog6Is|e5WcL5eT|e`!Xv*hu2SgzW z;hSp=M-Y+dhS!%#m`qxS5z2AMp$^F2OTZg=>X{mhe8H{xf!IW1ZB2ab3YpJ9EyS|; zK^R-GM*Hc7*~Igu6FUcAw{~Req{TJAFA=`}nXkHoo@PuE6p#;aj;sIKThE zea~+09GD${a7}l9D!hb(Y}|m+P0K^V=zOFSrYQ`vR=33$gn>puLb4 zG!P)Rjuwdy!vY0@yet^DxFZ92DgE5^Ez1wivyUhq_UZ=O34^`?rG_WZEX)_E&gfB1 zaH;gOWZY@Z5fx=3k(@6|30_S6$<0`9ZQozk8~J8tww_Hhq#_Xwh5||AJ9eGcZ1p&L zlLk#7pe91?$#iulpI}tMu5%r&tDZ9GTzwIp*>dn@jcnhYCdWSc*pxv z8Y+~^xq7wx=40N)-!O0)E7uFy!r=$t_*DQZ}esXO{1ktXXL(=g z6fF(MdM^(|b}^HhIWhgn!=c{W%8k?Q@iY0_bAEpy5N#%r+}`*l@hvz{NJ&9Zgaj zpjFP!1Xt!$)06wxTNBk&jmNS^{qRWAu;(F_cOu=HABnk$TJN7Ttple5_W69FlL~p< z$%w}bDiQ5t9OPjP_L0Z^a#;=mJq$5hkoLZxzxyAzX{Nr^8#04h9N4s;bI-&*5^E(0 zb2sM`p4433A1Dm?y&7qc#_FSwpEwzgt{jO3uD`_^30ciy*vDPR%-LpHqqCo=Z7hXd z$h}B3+;s1=13sU;0(Yn$d>j;0w|Cs{^M`!Fkhi~wUvi|d2iye^`>TDV=Ce))SY)g# zgqVF7Y;gy&JAUtKAs4S*dVM3CSoEz|ot9{A?}?RCh<3FP04x!zc5&&zpC5hD;rP9+ z#xY9OIF;FI%e<#*8|y23E5}``OEXuhstI{z7y(TM@dpqW{8fk}LVyW(=|H6k$o5D= z*CqHDau|sAg&C$@^;|za|L(slE)k3^5+%6nTc*Tv{vU|vdq;?4b7Oz{NAa#l&C0|7 zh4x;^*F{#uz(DN_a$i9rW4w>aeSd{`(&yWnak}}&ja;=D3Y62OlqHj;?LLb=TFP5i z*MB6>QJF<~Ru`ZtxWr>~CUucL)v^8JlT)RQf>$vUg&aiRmiudXK2RO9@%Z_m^svDX z7mWw@9J;rD6Z^@HQuADQUtBxx9X&ru(Q~mH9pLmX{zTIyQ7{`6vLQpd_Z}Q; z(EB=7PinU8sf?Y1i?9aa@wL#TEJVC`ZM}2Z>8M=m9$@(_n>*NgGHC|=5;JT(5}?Ld z+ytJ&_KpTwCal$X(>LwAroSHB^booE>(@K!Sh$_Cx0rm6@NeG{LgtP%JP|0AswKvh znu~Q9sICOQK>o&yuooIz#JFCCy5;h+Ukl)j{7h8P2k?M-#Y4Wrv@4$LBb_p6ad=RE zEYLpae*eWIm1)AYmw3?>U&{Vi5S~h=`cEuPI~Jz0!M|PG&Mdb7^tnS@h?eO2uW)+s z{M1klxCq)VAa@nK1Q2-SjNhW@ZwWe^KIUP(Vzmdywm|+%r*|Tnlv*-wUtzWrSq9rP zR7z*lm16gyBkK*rm_G%E{PlO50|5)PfB)&d9WJ7c(RQh3NhKW6R218uhd0U2%AuL# z)90U=b_D~CM!^>f_+u2EV)>5v1*{pb7_NBi^35<%!K7St@`Gs3s|5gIGVF{HP85T= znVE@EQ7aS7s4Q?LH;}ZX0^2Hct!;${fsTOL8Leh58#`f-tgO{D-|%wc9;U30!faiM z+DO7UUj=QnN5w{^Ev<|0t(DG-F12g>^Ne&Q=?E(zh=$@cAp1~9^&&*HwWy~7&dP(l zXIL7e)eAHTUZK{QaGW^Po7{l5(9tN>Y9HEhdJg;{@!}iq{=_qnJ>A=QuDR-0#5$=9 z^MssA{_yHu`1?T~IC_vn8vL3;<_$u%tU$tU`-0F1L4h8_IqR$fJfj0dVOLyG5g|!x z&(4^8`Rdu6Ih?NVlzobYk#49qU!Q+eRf(q+F(#YIe?1V<#Ww05Z4$0`x#%lPCx%Uv zcO80KCiCP+hwZbc78j2VKReDh8V?kyYIbibe}st6X6a@-#J66_=t5!WZI1Lg*acsJ z+bYh1BxCUCoB6CEi4zCNuqQm5k1nP1Gbd@^*vgXO^tq>N!Qu|_g$FMm+gcdCe~;zv z<&!mi=c(;C^iBc8{;D>EZjUsSTU zRNf~`hg8EO#0zInkKJeXX*y}+!raoFtvIT-Q0F^m`dI#D_)Znu4;14n>Ya@-;U=1M zCM>~x+A?=<@1w-abJwr_xU@?6v<{#98|lTAOMd5tDE1VIC#E{k*Ms`^1fZCk4RgZro>>rFNeS2NtFmyG90N z7hvB`bJMcW66ebc-5D{MS8kI4vZFTs_L(t;9JJam_NIv0*Vu=I@9556<`#%9%LjM}9C*ZC;!nT`)fq)_w4T9Qp z|JVBCiM5lQldpM}tAL26r|OXA=@%y>(YZ)&|sZ@zx& zc180-eeXoDP$!?a?WCXYea>PkN4~3lU8~o54VCl6a<0&9Zb=er%(V0=;$X}aDseAX z&^p0$xbbVwH;FHzC>6S)0j>zL)`5h`zucvMUfZwayi;UIxh>(6S+ugy*lEm{=8Nvo z{8`Hb=O$-z@rA~LhA&tBAq=d@stmg3c-}gHd40CKI3C3YWi_!f_DtG5@_`+=zqn^& zvD4Z_YeKa97Q}fW)6n;kc3Hq|^Z~OiLQWPykeShsR*=6~c}V80hOFV#R;|9(Dfenl ze{sH^wo}Z3Mti^KA0{6qK6~!8t=PyZeTJpX!qQTwyI-kNiA&*NGM^ZsOr~+)#MI2a zq0Z5hcVZfC5tqqTlm*4>ff9*q3ThryGYV6Ayvc#Hh)qlAq4SsHJ4#n4R#_$;{G>lwFUO@;ugS4Sy!gP5YqT5P zJM1eRofz9EGUWYhOP~r-R_O-0f^zBzlWzvOAbxdjaXw4A;#`^_S6cO6nD}f8A{&q{ zK=?w!q5|-DM$mMyB2+De60rko9?M-u02Mw+!oB<_%<;H=E&;7JC~uT@LfL0bOS`>h zaz$p%deC=ATO3}Dp@ZRQpnJM(HR|1j7M>EiAtq!XI~s%>P`?Ax4Bv<~D(g2u)|q{X zi+(0v-IG4ee^VhIuio!M4N(V^j%~={ibMfC2^GhNM^0X*9H7)3*$QEcGwwD<{#Vf zz1lOa*Hd-sxy5VB!{NqL!LXBWkA|F1*h?4oayRjD=w1sB9uKiCwvMt%1i^Ud6W9l! z5OF+8!TN33q$7BqL_`p!ygK0w&zLXmubLxaOL?d2t2uqXn%DQTq!o-Mg#qZ4G(p>` z{K3_|2NJCXi81QTwMXMICpSdV;SlA72Xlss{dLd~^MvYG+*@j3wu2M_8==V8ZYjt8 z#r~7UVuP43xTWLtf2}cC`D&?LN2*A(Q7^LURXV98{pvkfQ*nDcpY2j`$volqMw4@P zol7B+o215qQpht2LySc#Qcya(LUG@JwZU%86qSaZR0MAj`^}^kWW_TChm1zsB5`5e zO_VsinGj*MLxp5}vLQ8?AhL!1BSKx;8(*SQS&J!|4+wCmJzKAJ!<|WzcDvj@3L@>X z(=)ozaNTIA-;tgT>D2zkBACgU)YO^jk>f>M@3~SoLAhdx-eC6-e+fLyu=tO0gMBu( zuF!J_SyRh^%&{;IS{eEMUbHH0XmR%;ZOW*+tDTg~tL zKYVcR;DWliRa;wYbMmd2zqC+ayU*fx*{lIbW(hD|6n(nnV2MM-azwfg$c2`8P z{r=5VutWL1TK-#~;j6rU=X>~+Ji7juO8u-7I)Z}!f>;*$ZjebVkqA~<{$Q_p^qqj4 zwHUxekVrtuClmlCelmLUfy4H4)$2?btqDj3&&8%3LrUh6tI7NfZ=4?{e(Lus#nyJMUeu|iInV!Z_Q8X=%NU7jD`HUH(gvvn?-S?maB&4} zjKvqAACfls57`UIz#ah2z##|K^V;PVxLC-`o&ftTs3-uq4xbW=Mxg8hv5>76yqeU( z$vYmnReq6QS@cg|YWQV$+<_}FoHm!8t-vUo9fJyt(UQqgT+2cU#_tr8aTrh<%S~z0 zK5ITww)rcH5uz2Ht$0&mU27Q^W*i^6<~QyOKw*Z~9$<7Ey5Kda&A67e+0#ke(wsHB zw5v8lE99xdkj>VK4(UD6GG7YJ^0xGIrMA9KvjXuCfERmTML{)Z0rvVCX4Pv9}4BP7D~;X zyga^s;Uo1WA}|Tvy$w!(E@))bQu040md>pIl6Z8i^uv!fPawRQgjm6Q051ly0s)#y z1FL2OVSQ8ot6x4f_p9DpkI9{t;ON3}Wp0Le@&4_t6MQvy@zS+D$H!>8c6WCt%%I?SCV#MH2$wT(^&G`5a|g%A$FTkPALQG}CvZnaWS4-5 zv23M6rvjx7{nEU25<`;*8Vu`+E7|=Js$Z!Tw@1!OZHAb{S=sZ(!-ct2{={sG_+wjc zZ!xvmZd3^F;Sp=tXADYA<}2;PSHE`sgKO#8&E9Y96ub8-`6+U0Xc+MVl)pPwS^?@~ zi7!4OS%=Lc>O!ZnG^)z)3;3=oTZAHT&RtLU$_&g+Zt7$%NSQScR~-2ZlTYa>lQ`yo zwBj1uWc+%=qx+e$LV5AW*Pj09_*Fn?rKgvvgbLgPc0zG_#wCR z^!UWAi0U?X?lpH{9AAFBJubCUekmvm}^8Mf@A&48!%cGFdKn8F9>|3ko#MoRg z`9k_^cRb0D)(f)%^_tO9D;TUz@BFB1`N5=5_mJ7`Z*?9VdE%%gZz~=+TK;37srM57IkjX$q zH_t7+bN<{l|EkE}N*kOJi>~*|;h9!@<*4d`%fw6f?Y(;hLMx4<<8(~$V=OlF6@ky85TQE!uYDLFIar<)Bw4cFU#n(Vz7uCGR(zq@Li zc`AEgqTPOPZ~D)Azn+5qe}0G{l28FFL)lC8qyaX6USQQb%qD|KXN{{3Mz2a|6+(Ik ztvxa{1+%SZpnh3D)Q>!}mK81{WV;1lJT~4#CvT46GOnY-V zpBsWAs3wUAUd4078{l4r0sKX9r*NYLL}yqEZtJFJ-BBD}WA!h8_xsPKbkI`RK}Dza zHrl9l&?-9SbHINQwFNG6Iee%6bj)TC2aRB;J76q^D-9cMRzb-; z2Rfdn;VuPy9PQvM#aW>^6X5f;u7I5{6mdl`R@D;c+Wm5&w7vg$ z+7I#}U3^Qi!N$|3|ceZ8_P4h5dc)?(IQ*z-Of1xtVcsdy1 zDJF!fsMQ~}Y4ZEx?d_2(fpS4t{ir(=QJI4(e=!-1<#&=we=$Nc>5-!S;O}m1F%BY; z&;;^ohKyNkKEKNpREcB~u2{w8DTH=9ZF1_>LYZEu-qQ*+8O@&1utTmPa*N4aEHfrB zcv|83SimB@ynp7ZUYs+zq6(i+u1){g5%SxizzFdpf5-rRS{KOQg?zpiypSoN3;1V4 zgN@SA-HfFS)OjFLftx09lLo?igIl^4XyXj`J)svRNHfwx(5Nzl&Az^MaO)c~gwSa+ zL$!Xzq?GCOPTe0kwWEn6sr*{XB_+jbcVZ^t9Uadyu6FAv9oKrZ3Uzp`cJhka9ESUu zrhQjDR-2ijO-5$R2;ZP{>PTOLcA1S#Np93BReJqlt-?ED^hzw=h)bezRAPCLS!@oB zM6%OqS4`*7xU1^kJ;qSjveU3dY&vLTx&2GM+hsAj7=zrXh3`P&GQbJ>4FNetd=*Dp z*rZDqN`EjlFz4ez2f!LEpFpS+DPs;XNsX9zFM0~?`_lf{33~*Su@~`hUgZq!!5z;|kKJokRgo5G8xqJ?>{q_eQ zzw<5Q38~~yZ8lL!rBkIGr=&)S(U_kydm4qvkw>h`%D%b@7$qFj5|^S8RWQmGaRdUs z?hEU``}@b&=Oa=W&+Ap_^ri<$PBrcf8D*TUwTYPA{9qzxgNi;dy+|~hf}ADK0p1;h zeGIq>0v1qW$%WNI{))w5hNqs`O$>w&KJhezTmraPnJfYlGi%?9;C=Tj0Ub&XB#UOErXajaN z*aTmJ*dZXWo8=@VZZNC5KoK_jncU?75{-z*nfpFIhb4fNnUEmr_1v z{QhaFHEN0b?1j3*HJ+N@G3v~6)7K|O2D1wkrRN9j6D5x{taYlNe{SShff2{zQhT6g zgL?ENql>}h=*XclU9l5im<-fR7BuTVHpC;pKzt3=qvCr-gZ!*+fQP`HuzsXqU}`$n z85k;n(eVwOfi=qRjri8ij3P2x2p-=^M){OUHoFz9q}2Lw)DHIwr8YiX2`vU?u4>(D zjLapqDZ*=41%lQO=DLJR>8(Fjm=svUi~0Rm6h=bC-5m4RoC<;5uC+4~r`lKdm_^#; z(Q#d+8B;42YR^dYi;avz$jbmfa?or7d@g9N)-u=xh@Egui7x>5s=%OnB$N28P=lh~ z(u=kOY=~qRfQc1hWHzuu484DllvX&eluOWJ)Wnx++X{{3{c?@QsW%eeN{y_Rjpt?* z>Gk@XKQE`+v6-BIw!C0>sx+ob^nrcp;Z{4C5QYgS$?;0t8a%No?*QQG;Efj22Fn^!LO1KM^@#% z7xqM9_h1FV7ZdMu8zpkJP!U#{k8?dvMoA}631m8rsP{D$6CSRI2({Xx&N}0Qw92Vc zMD`gqN-K|?-IPeVOore(Z9GM=cB1w0M?NQY>1{@dZd9jGH9T@N^w1^CNis7@bTk&O zMkC}(r7{a7w+ORdE;3m!m^~Jih)b-8LaKDYVGo&vyntUqtIc+;JQ|abQIAAzin=_8 zNYZP*f8X7N(J3H88im0@O0`fIMSwfV>ZSY0EwFpwMj-CS?E*Vj&jAu5DnaQs5U#JA z1aSHg^#@Y*H4!iZqV3IBh*GGV_f0yH5adF`iE# z4zZ8pPe?^-xt6vYoi=W2@ABk(F9SJbZVk88r-sEH(4WanVu}){eM%E8R2q6cbs|LN zWMs50X)fthW+`-lGb>emkKX8X>p}nIm$IuD(9Uy0yl=iP?olOzEa719nj2f3XNf<9 z&aB{?vUBdTuy%aYkqcN1ECI)k&KYe8{e)&5uvu0+BWDrdjISV&(!qQN1j7BZ`&>eT zD*@k;!PPtva7N#Nz#Hnwz;XmO&Fc6lI|WC@%}i@`6esMno5@BR zH5cVoX0K>TwOlGQ!0pJX=uChSZ!sQF4GApJALz>x6G=4OTV;QPKMy2_9xXt8#NcoWI{vR+ zj_3rbHhDrGa>mEl>`n{N+z?IAH50x7N1jhAnnJFSFXRXarz6;GhXu*;2bQ-Unr=v( zersYe`1XbQW^jAX6ji6VhPEr6vpXxps{!TyMU6tsvr7a#hsY#U@_7!c(HJ96Gq(9X zP$pJ1YsEcbM5D~JTW1X*lW>XV0`nDeOp)g3L2`{y)pk$ zY2B-_?Rl8TkrNh?trp|k;t_LwL_`oU;)E+FWn7s+F4KsOG)YQT4utIxv?9j=+aXrh z$9CkjfX+e+8hLJpK3lT32VF#V;>6wUh*IXOo*2;=yX62!Wh?r|pg+t==?8Z{{^6fv zv`)6C}>{2o;+h!Y7{O1>5F@hz7^Yb$i7)14?%5n9p+Q^4K-{SWOYaq z^w=aAxDH61P+%QI&dvo7i-RQufSPz0gmkDD2JLH&%kLDBJirKGM zaLpE(kg9CA)2H5=^(D;NEj5#JmRC@X#PqmfEG^CK!DAiV{XG<})*=Z1ZLNd8g z?r4pju3Wi7{M?gvw4&G-ByQ?|s8)jB3Ab72$S%kBCKB;1q~S2f4)6|Etz(S?kZrU( z4jG_xwUL4S{l=FR?#XOulpsb!wM8?P{dccZlh+FM3FZOf9d2qov7aRN2TLvupU4+C z%6%LAlWz|%?_srJ??STn3ttp^P-t zZGk-k3k695?CBF6+;k)&NCVzRaCk{V=84_Rz^#f9xVrAh(aj^n5MKl9id!Fi8VQwO?RVSr9mqd z8%QpX5Vu;~&GA&gOFSk+QlHl7T z%B0tn@HoR^MntD8bUG7)pp2O0@kxWvub0(lCEEX`)mB2H6xS0B`j|jiY)CQBG4Xno zYmM#Hd?}yrQ$dv(z|!nq_INi^wlF1;Tw!7yp`W)NyaWgr+?7^v7_H6R0=@XethZ~~C~ zt`Zq=pFt-1F8CIp4ImG?QpuCZsF*=Y zUOUqAj~s|;RqpX*eA1URXw>QHDCgV3N>a&Ha$H+l%^{$8$!jA{DQrr)LdXbZZnMr) z{Qp>c4=~BD@=SQnt(?QHd+SyXw{p%^U0t1X_jH)7cGvG2Tnj_`4>cGCdPlw#k9VmGCn_rz)g-S)QFgR6=q!OyI;llBz;oTIt zlE{6Dj>_h(VjudvMv7HrG0f4#ESzm#1DcF;L53K5S_i-LQWitf_b80Rb70u)mXWFT zn~Sf=Sy&C09$|6l1d6Qo%|*)M$-^u8oh${77sBRA@>%j_>akyri24zj5}Z^_bbVID zUFOIUSRqCwu##mUm{>y0Tt0$mx@V$Nl2z7rm7y2SNoR35r&6sstpkhA)BBtuo21r{ zWmtq{@WZXmtQOM4NyJ2x==T78$a;fNjfG8?z({6dMXfOqo2%&G3UgRD%>yXE0yhYs z{j!{lwuhzWiiqcqvIY13bAEh%Hl)xaaL@8&aV5=}bXKP)D&)t4W?y``7$d(kRz6Z0 zC?uPHyP6D)-!h!BQS#&Wem#5WXnRE^8hN8hlb@)&h7aH>toY9A?ChLZ9t5q8Wnpa` z_c8MPu1R)xUr}t%27r?UAW_vB!US&VyIy7ifRwC(lTJyGdx?zB9R=~ka!9-kE?2~@ z@hYxUO}0Ia;eE-1-I|lVoFQV5s65V)xUUYxsNq6Kr+yhIM(sm_-X#};58P6kwU^(N z<=|B!1N-wrv>GLQbYgTkRh)|238{@qWa4x#%Uk>jF9|wgL2quKHQ?g2al>YNJ!#`& z8u!e^sr!OX;po z9Gom3oGerfoJODXM(l~8JzgarsX2IJJe@YGr*bxxny=pYSY33ExFgZ!-M78j?5oR? zMyIj{JITQfuSKU-nKAfF@F#6N3i6cv=nnL}8KT)SFbwNm{?c@i6EMG#r8yWA(9fIt z>y=w~pRWq9z@MT=BlAU<4-6i`*`);KaWVE(V@Idv zPA=Z*gkS8Lw)s=Tt~H!kDOd(Zv6Cocvoa72fFYqaJ&Qr^iKq-`+D}p`=EcX*JmywE zf%^~w?*z zI{UNyp_yZx-}^B0xlpwC!{_4uF}uO7EEQZjJwsq|kJ@}cMD~#xjSb9-sJ{piT@O*? z7f59Tqe<2e25VZ4Q)@L?4YjGg%eCE}kpIG-{g)PoOs4-Sd%Tq}pYnMVIWMPrU3BL3 zYGeNoj=%1n3uo{2Iys|Ci)z)OJ*OH4t*xFNn|#gGp@PZmtu|bC!LM;70!fst$b*>_ z7$j;ZI1vPgbQwGX;yOcP)OZ{5Ek22Q0d)NDv6Tw?$6B|vkeLfrNhP}mXl0O2NtE$} z)Tfgx0nb3l+vxrQW18+cKJcN}s=c-PU?G63f+kl!Hd7f}YG_RHls~Oar`$s=Yk02O zI+^A~o6hEQ+1_&S!qwu`zDfT*T;4#c!iQZ zmgtlVf;wb$*AszURqSM~axPFz`CC?#Pvr~_rw7(=TA98ul)@ou-&fEWWTgEY*&gVq z1EUz_R~8n@%5kwIt-ET0ESy z+iih#ED+9il7;rF&lFHem-Z)GUJM!1d8{^G$7O7GgN_f6pnV11zsN4a-3cyWh@SPZ zJC3wH3iGVkMlf|j*e>-(l$Gi$lCJN@k__)F+YanB%ta1O2ckX$=)#5h-I6EB>-5oL zSWF?H?9SgFspK7nAxun69GlCo>NF;AF+6sOi)X5Lp7U0x!+)S&9@FrJ zWTH%uL;{BFWE5B~lkiC<^Gfc(vALkjn-ESB-W{J8bUL&0F6b@-dw3__36**ZBaTT6 z!>VS_|A4-L-Kvs!yMA*GBph5CMgDgT1-RJE)VWA&#TRhegwfM`VjgFCvXT5p@#GuT z%{`;;+g~-h_D{DwgoIXZE;r0Y$xNNEEf={RSWp=;%&~j$TXF6SJEwD2d;G@kq zapS1F7=mUh{ts@F`br>e!G$LDRDYPS*#dN|j0KUQ$N7Si$vkrOu~!LgoAnuJoD=7nc?LT^2ftRj!#Q2i@|6z_!3joC8>OL=+*BG z7vmO_&lcqD?bgik=Pr)k)QYh^BfG-bvuW5*dyA`}IT`f_G*5;6``I>@j_iPzRxA2I zQvgOj&)&JwNTY9`j62RzooAwQq!kpSo`^y`Kl82Ga}CKqdfz^UaE>j$@rb&3a&N;N zD(|V`NF)TpIpy!s&8wG#)p}s`mZPkXgM{EbPnUNkFG=4QQCzV;whczl&Y`HlxZ=`&a zJvLijecH*F3|?IukzJ0n%V#ggv)X_)=;y3@-C#DHOBoVD-lkU(-6M&B z=*SNwGGz>T2)ZkE`TmWY@3l*oql-hkEl$yOXv8#o;!bMT8a_Z|cC&v+T_fMg^S|MXkN%O}vyyDeh4$36q5COuT4UvJYAuk3kGBWKzjda^GFfN3 zVpZ{avnK5Ra68wCJ^2Q|`1+MjsiSuAy!@_@z3yG-_RM`-a*1Nr`zz{*Cs6aLRr7h? z-e}jwS0$THt*e@7N3>RlhG^7A-r^2OC>+dMIt#Uu(`B$shmPHL>fGcSL75jvEA+T~ zu@7^UQ;Ac*OY0$eGK91h9EFs$XDJ|t5;Z6*YHg%(NB{2jVS*;f3Ae4Bdprvg&P-G2A-`+m?0{^_P;3SfM?< zaIx9sF;lX$Fpvp5Go#+ci|$0w7M{Pb*6c_`BIESUJ7u$ZykrU{ygFAda^Xj+DBTt~ zE3!+3ZvO`P66>xkz_3^%!s0Q-fyz5TWQ<|O7kUnYhM#PoQK6~2E(%c91IW}{E0heW zcoPoYh3UOFt1nJ^!{%X6mN&R3V$q7*WC-~kg<5QHGk?V6*OJ#St)7kK2Eta3WYR=M zs%~>I8PTqchR25pv2p%n(A3<0dS&*cVSU2x@MePP5XRh@jA8-vJ5zy>WD#esyx~ZD zU)HN7NrE2z26r{K_@D*q3^}?sPjUy)UwMLJNS56;nIib)3h*j2B^Qg(4SzDn-s zKE{0-H=D5kw00vY=wRwB%HWAxy3#++PKv0=hd=D@vpS8OK#aUrRI4~mNQF_}4qM2P z3QlSHsev0SAVCnqwJ2z<$H|(5lI<&CzK@!$#_3D#PFCF64=CJO-%;`U&f5)`B zn;aoEI=x&&ZIluk;Glb9Tvx>q9F{RdPsx#kfx$yX_xm54uEm81X5T3im)Q;eYGK@3 zS6Nb{q4( zbtuK4?wp!Wh=~8K5YrK>+wZV=oVH{8=d}|?ojM(o`0>4y{9J*1jjw7CdF@`cp5vsX zKc!cD-C=jZ7}ALpCf)cvo;Sz+7`T}x6AUsl9Z6DiqpFG5q@jmeWB=LoOcE{3x_|9+ z*}am3PiB@=0e9LfO(!BXuVuo36@>HNOnO|jaStav0jI+^H&OG+QGZM@J3KC3Zykd{ zhn`S<#d~iKZ2s=9@6-G2nhFHuXgZMbQ@sHWEwa#uuT~n}KjxSDliu!(TpCCV&^-qq z%(g{m;N<-ovexV#7+NV4&fqtwWPd`Y??i5VaC2hww|4zC#W-j$z}^X)w*%fbD38oH z9e@Pge-8Z@u{1NA;KO>S+uJP5*@q5|6|^MiF}(h5sYcG1xA6uaA4;McoFk)^?j@Z* zLf?VgW!&r%H|n)wN?%Kgk|{7r^otaz6St}XwGdduo9a3&5!V+^EabF85u&0MOj zcVKMVkl&=$+w@MZBW1%*`LW|pA!o1|%~}iU4N|vZZl)DHN@Ff(@ynU1@mORiU38_@ zk$_?Ft(r?=FEUFlgg(5V79BF~mwW@WFpIcrL3>yNwNWi%UUh3r=mlm>zUXN(Et>Du zTPR9MPJ3d0W2QY~zohx^!CW)f8#nhKPUQ9X32TWSh`!@%`@u0Sg6OIXZ~@u@c=K^#&UGzKH)D(Un( zN5GRSJN)57tT<7M+YM$1`DiK}s|P)zq|xrVXa5~+2c>xaVm z@lvX7)|sfB3B}0d>zu8B4_v7nW+j;L>hv=@!V<|hQ60K#ZKZjvl^D0!j85HhswCyh z((RmWW4ZeQvbHpi@;Y3b)tDWY?(;-Q=FJWh*O;dAg65KUaXjvVqYo*~VIpLIR;v|Q#M@dlvxuH}3v>Rs-5$vfiav1)i;|`8|EdP#L66NT38Kp>D62lvUn==P zyOm6g6@z(D(`;?sp{>=s!r?$LY45$k_L}?hl4)lf@P}~SO!52IC0sc3hOH`^loY@h zGVQB09`gphSN0vfV{Lk5a#_~%`EW9lbUPjMDEq{}6K86>^LuW-<5c%gNZ{~mR_-1W zP+nUK%4zG5QSA|r^H>A+j6VNwpf9Ws-HuLg^!ZeU+4f*VUc{Cq@#O*qa=o>*cQ+dm z-*97St>uomWOSD@n=I8vf-Pv-8}|N_vM92?c5|h|6ztWv#66z)TE6h||zB1XU-?`&VBsQ7j2P4&;I=$qKNc*)$nsO86g0RfXITXMkK^x&v;%J9F5- zwq_LK12N$IT8_y$^GYH%g(AL?RuS}Qi3!@KYcXf?Wcm^O-7v*hJo~HLRiaG4+%#2DT)%ruir+kN*LoqM zj-c2#9UW_U(rMS(A&2MOvhqyMc4Ddffji$5Gg||td?=b9&!sy-%K`ns#LxTstjMf@ zXQvczj;9Cu{gQ?VZerHyyD=3HV0N92-QKK{m`yK=R1ZT@m;*)DkG zSSHu-AI>a{T^x0|Zztu*SoeD0^r+W*z%-Oj&8(i2KJ;CCez;i4zq{VlT^?ILXsFM0 z)1?{9TKNagM8Zk+o~;u;tb!eCus$;Xffu7)m4-+akV6NLzH@~<)=cM=ZuzrnC>Gk` z&n}MY<@G}G=(aoi9a%j-`R{qPW|BW-w+|11WWDSD-j;Ts{l*b{XeIwGfIFIdQ{VfS zSa%aQjh1%W#MT<=Oq&GFGnuv3MrR&s zlv@}*KA4=es+~HsMr{)@%_f^`^rGGak?`1BU(Gj`Ut`UZn{K=?dck&XbtaV_GF=&4 z9tO(dv?@JV^H0OxsQo?L4~pG`Fl)=X{u|Nz-i7W@FdxKbPrAQMZv65CcCGvKiu^W% z50qu=*B?-;f#Kq9IT*}N!Lf8)!6YPc_^$P6 z)ifGIbBb22su8v6;7ap&`#@Z@bc*pXhH%&dc|IoP+_xX-OYo^uDUxY;B2{WgH$F3* zmeYk$uqtFwH6;YdSC+mWWz1iuL$BSvKsVVqB#>MPg@_^F{MgY9$2m5dn=(@a_np$h7K0C)Zz$R@6z@(SNIJhQWF^_6QZ+fGm&>%VB~8Vj5crcYt=eq9 z+@CPq$b5(RBB$}4nT0{Qw#Va$`$;ksBFnwi)R+1Kyh6D5Z#f9{>u$MAAaCfY7tO79 zEG@K}Nxqm=f$4|`_B zR%Pj|EN#kRkvsI>R&(Aia9|xo9GIoV;E-iv@wWgV$ckD!d#XG2nP#T@aiAXsTjn8; zu%gW@TLEMSrMzvU5Cu>s+lgKD!Zkb+JNoPAbTsJmLlqBZ1(a)Y?$**0-3;>nQIsll zpX=`jQSkL=;&oB8WrCR$uqEA>?mJ2*UqZh|4s7oYy|w!ztj$ANxckKfNiMwv<15em(SQ2$xcA*SNjLwc&l|=2{UhFw zY9F-)%D*KYh~CJ+5Zb{j?6k}eW?~d)Jou*d^*7zKzj2yo@^o)GTX8t==sxq4ACkYg z@xtH!E%{`=vee&17BiLS{KJ3Fb3XZ#A97FM5MJpyG`IBQeFU7uZpq6>=qCd?Y zfvP}d^{Q8`A3J~Rfmf2$uTeRX&)s-|Jkh<#Y-j7O6ub3v|L~vsEbjd`gjakPdLdDK znWPhy73B3YB-sO!u$z}5Nd_PL2&$1&#HhB0JTC!^6gu@h7Xyah&sV5q-(eTMF8xb@ z66DHo1o3 z&A+M^>v8hyFUre5ylq3>-`h&Wxm~01^Pl7#@TzoWpgI6?Xz?lB8NJN~ouCC5Js+=h z&FS$mSZ6QBUn^JiqADD0ueaCEz2n?qw2^P-v#xznA~eeq{d_8~p!hf%C6mem6eD)%$5m-~6V&de z^vt5>#xO%@XPhLvy_pox=%2>EyQsn>M4WJL#mBvwPJmHAhgQ2kgRX?YD-LgOf@1G4 za5+SaBJIh!#cbk00mocQBg7>AfCUnPr>7Cr<{96KP|`Cih2>lyFsSyr5`i^cIH9K` zr(bpyF@l8>pF+OJPxTnjikw?0m%t5?Ksh0qoIGPZ@AZWJ2S9>~nSy^uz)>(o3;I)4 zs*83+ZU6~(3P;t5EmFjZsG};d7of`q>&;?1Xzku=cV=oVVj#L3h4w@?CCRd+)%ufK z^Ll_(xTUR-PsW9?h`avZ-`d)((En!qe)@CSoQ$_!?Gxv6sWaQ9F8#`Eb+$YQg)x;u4+ z#$t{Wft=V05FL*VijZcSl$Y-_;XPE>!?)X>cPAnDy;vz0aA!N2faqHdis`Z9de5$# z-&0oD{qz1tA9&5ZS+i%lT$VFlbKHeP4!4;2z;BZ`z6AJg0bmx#=vwdNzJYVJJk@J> zKscIu74c#lIP{k20Gv=VUaB5AAxS_}w!#|ugLF&oaJ6(FQYZ+cP$*a&u4!lYoBefi zUr(i+slnW$c;nMs5uee&3h4M@Ih2dJ!=Bc#Bl^p2b)dN);@Wf2?SAa&5lJtKUiIo-ir5VqP!a}2F)u*EiG$>VC?X10dIf79PS<&5if$hD&E zhFp)b-f{!%gj;c9kSK(&h3WU4zS>&qDZm;NZRYsRJ+Nq9m&m*`--Ji)2qi<@GJNmzmH!$uF`|I z`pR$pJ~~o9&NybSdovf^e46`5+?~cvJsfZM`|je(FpaFVx~}^LPhKVMAARQhs&1|w zFM00c&THNB;-Ah1t4p#29WHlq-LqU|^J!INmz{PQ+x|Q5dKEnSi~g85r}7*aEoTNj z=U4T!^zYrnouhxxHUCh0Z7x__RQ{$4YYXFVhEZ1>RH{e%tE0>)jcBwRU!p;!0r0lH z;2`NQIV6Q7cQ~3mKWP(fHZh>AKV6yQZlO=qsXgJaJ7&wCpL-SkzU?9QLK<2U#okGI zK94SATkq7QZ}hU)!Xv-v%d0&5hTBk0&!zp!o5hPu^hwc0(iqa{=O4;1_ufzK$L#A^ z_v@RV-TV^dh%+Hw@1R6EHG#|9@*dxgrjwaL9#{3Za>mz%aOUx=7ajR9SQd85LD%~f z`+HwgV!yig_b9AYPBdu!9SwBbjcky!cAuhu-Qjf%2Hmr6+|ieY`w858=)uZ4i^E}g z?&CoW15G&=`%fdACpQmneqoc&zS)KA&dl{y#AY-W31&jClDueD8^We(cG)-Y=aSs_ zVOvRf{3bn9NB=R52@_-t4#ep>G8UBJFg2m|V}h8(*-%4Qr>Yo0**?-1M?;6MN^lEY zQtQth7&Hz2cpw}e`0>z}c`4;~zUQ?UFMeF_R=Ixe&L+ICd)Ah8f5;Z8B>WFP=p>;k zc`rJrI`6sH`gow|5p-%U^5hxuA1&4wi0>~y5v%wtn(n{a9K=li&W+p1*hiWp?D{FQ zFUX}y9RXUiRvlF3;FPxH@>A-?8NUMWpya$$)K`;FbuS~X^r9X(W14e(i=GeYes$MB zuzs+=%AT_eU%!SK%voBe!PDA0_6)Y2^hB1a1Zry_rXAc1pj*%TytRsn?TC3%92&lE zNIutz%TkaRyq2KW0Q$vqz`y1%qklg;Bvxr$X>Y z`7zZpW|W|g&5C`*()OWs7%m{FmS>km=Q2(q@orCZ&uo5HbrU=>D&BgN|7Za#&>qOI zdWAM2NYun_^Y8vs${)}jP)#Tvx3=D4Tvtkb~m19Ts;XT9o2TnE^GWUodN$GPwXy;F%ES;7!gcdqRYnaw_w zyz2RAoGxSIsFSa`VAS@g)$a77_fudQy~FKTlau>t5uMsozNC{bYVLwcG7s21es|Nt zp&lm|18ExolE;EJ8{BVhenB+_Ot4EOGe1rJbG2E`G#Z&I_d~$GMg#Fn%RROEQxtlN z@b0@*EZ#sJMsRY13PB~?dl9?yujRHrpbZ6ysEVZ!X|1#2K+wb2z({1W6owfU54#jbOIWfS*2@ek?#Id=kIdx+I2vRxEsEqct1LrGRRE4o$NShvDmnC#79M}s;UWH9Jk!9MTB3$`2Nlb!WWXZ_pn{_A(Y z`>*eRnt; zcz*90eX~bN)nDEFiF@z;L}}^L68Ac#MB2VHuBnoE^d+@)0YH6a<7`wmRSO^!JIh_ec zQe1JwV!b-E*5=PSFXX^{o|~21Zrdx}$9@5zPDZC3=B8OW^$riXz2d)f)`l}1BdtJu zF1yz=lDEVoIj@wm3!>R3WeUDz#N^^#ep(;5yRIx+!>9Jt*KS{4I=L>du3BBr3uBYJ zqotB9krV@X&ln$L$yIx90$jTt;Svtpq_u8JH+Ncq6&Oi*F*~+RlP~2uiGvX zW-$?Q5}+JaIp&x&5y{@EGmVCiTE0h#$hv&sn!|*;z zdgu&}iD|bKJrQ|LeD_iEsPYEylCsf|+ii6j3~G)K70_|tFN%qvpBK$ey}@7>oxxCA zDv#S^yHDhY3u@HbMNHAi+Qq&UD5u=Q`>b;dh?aCxDSaa~YroC1fc}fAWYAX3Inp6K z3;?|N#h6Ax<=s0pz2%LLWESo5!gxWO8}^$VnnYu?WVdb14jrBsMvX6jx5Z;*MX*_g zymv@>#dkzna@-lvd9#s1A!2n|3biz9jm6w_+GjLmVq@{b#7o|8A30(Z1Y1Ps`p))i z!l(W{?Eb^telQNGw^Z)GDYO~FYA+%%+hvA=1PIE=#J96VuT=x0j8sNPE1@}e z+A)?>&Fs-MT1yu%F4cC&Y8S5D%f&+{ciX$T z=*u`ZW;;~ZI@~^mB_tIGGaA4Eye71Zf?r&O0m|$-O^Vr+8*2C&3Ut)SYw$%lQ|1q- z&RnrKHw9XT@>eAj9}r$FhP z!6sLSE*^;9ow8shZqDvgyU~z0 zAHq0-Gt|=_+l?1E+lT7I^-NkJXrxHeWRfhBb#jcHC6};PTH1wri{8>G!%4e=_1zXL z)ZYG-{&4R{DX+mk#;r_z1hO2LA0Qg~F>4Ut16TNJl75IAoIultUC+z;Y@pYf!RDo{K|FQ-oiB$s#5Qo#0QF(#V?3x zyx04b-m$@7NV0F%Yi{-#ZOr$Q?<=>Wsh6fdUV+;Nc|rdm&%OYQ()B;!igwwgiRe8} ztHtTkNKTzPtQYK}oj7zcJr~jmR+rTzTD(?^LA3ga+mf*o(W*8%okoq(=KI0lqfd^- z;4+y6L&B!At2n1xkCGdwT2k|B6Mk8U7$Odb+ zZsN-$H90*z>JQhO;XpQt_QiP*LYrNUp&=RCgcFkmLZwbkY8)BKSki)BCS8r1Xf!oU zvob6hwVd^;-k>+^)2Iy}HClBSHAaK>FU(e}`5~ju@*^wnw0*?r^mqTxtm9lE<0niG zz1Dh{$!pd*$w!iN<37`jGgq+iyhX0-<$zsRw?*?NyWNzL%>|39j$>V;)oS#kgbYnn z3>Gi%M?!{{3zAFXB9h)?cB)jo-K9sWppz^HbJ%HdL|isEO3id`joPc1{CcxlFNTdV zLqzYF>0gsl9ljb)(uBvCw-gQbh9OaHcdx6boyOsz9pYG8kc^m|(~V(PC=cm7_s~o=(#!^0iBQ zxW(I#&A1Z=z3jAyh+8(OZ&}!Xx|vN3l&Xo=pDkV@mzQVHn;x*5z-5RQ$>Mjb92&O` zt$W?G4_Gg~=~`-_nSR1MgK9DM{wA)%Jxy1`!;SV}>sB2%T~Py<9D5632%Q=yRwVuc z)c}%jYVqpA%sY=btFwcddru4wA8O>z>=`TbehIhR4Vh?j>7I|eP7STytM{hni|aRY zj>Ynck-?ej>CQ6wW*LnLKp4|G!ba{P?kUs-qsK~|wfC#z(p5o?M^bm+D?Vi53sI}i zBA1ok4F_)$Bv>Z)37_H2oO{UW9iO{v=JplAiw*#ukkcBSsk8>mW0MZejvXbJ#e!IB0P0ga1k7c^qscV1|xiGkDN((OPh zIT#SiWoxXCGFd4g`BF!Be{SQX(RsvpV$M}5ap;Dq(HS&v4JYH#pNSr9%pKuOTrOMS zd6SXxm3N#I+z;YH$4$N>*h3~?6ZtCiEYGSGftOVDiaZ2HV>gwtimtY=>H^r}7r7|;JNr(KoY~Z6OX6H6agNe}CK=K5a#x-d2@?!2weyTqTV@=EM1%$9=`E!*JVr}yB?$WVitFqxM#74QF?|?Pf}3_f=m>X z>iTEqbTAiF!JtYYJyuQ`{>(i)JyWj4+CK5ty=xcF9-7`g-a?bYM49!Fq5TjrE~Z zga)N|FjJsBu?zg5s?QHTWwKZU9%p($bf#BZwZ#+<&uO)pTKRbMU1;$u@xiI}G^qw! z&8R%k33b2u$10V@6?c=r31iI47mwRs55tehry)$2!(wvP-HJJn99H26_zy24?afEKs) za_*aAMx^&y${D)+i4o6MVpE7jUf-!;$TLHb0xYS}c}ISB0StL8CjX zXuVsg%JGd2PcbfUY`DwC(4lJF6EfLx3B(g&oDTF1vF541?`P18DVB0WXNxnVx{v*T zk@7dlSM2fifyLV|uQW0SKI4zKh!hfh$-8D&E^U-5i55aY>x+DIx^(${w@cTJ{;0c= z21E&^yaUI`Z7bb(T=mX0GS`v=ARRH+kHx)ba1Kvv$CP`RxY)~R7ATmK&rl766;>+> zuisOFI{AvxmGfs$nC*P2m}w7%E%CJ>KHkZOKg&-9D^vAcy3vWJ8r(A)!N(U#fd84# z6kYD5h9}}`cVe+dRQEqHi$F#Een)s-08_waP--4W(R$9M1J$^ z(nz@(iIwIC8=^7OI;ASe$r~rI>i4g2hhZxiIqs*g1_fW^iA~&wjyYUl9Lqy0Z zz0z^D$MXKT6bf+MU_8^3q;k1r@P&o~F{jg$+@I-a?b*=A7c--+pgl60@}z@8$nFoO z(&6g?jBx5W1*<`@+EXS!TJ;$Hu3*#Xj)n9%PGf6S@Cw~DdMxB%(c|7w#@8 zwYk*s6KiG(U1#++e`+XseQ-!>#p;UBLfuCcQ_c*hqRo&run{fl29!LS%KWo%kiHd;eZQ(-E)Aje%F zU#Zk1vGQDdcUz5X;Hji1RyG>v?*8BTg2|SduU$JZVBXW-m(K35%|@+XICQ#HxE{#M z@oU#2$z1eNiwA(vE4ZX#Illgey9y`yWGFIHc9a687+*{z5+gL$5cB{y!IwQld11f< zC^JiG9J+dwIuFHfQ zUpa6c-d4n%*MAERk5?j(9lP~S>iDhK%i|ic6?@*3@d-vfpDDV%F1w^LSS5eBky&w= zlZ9gWw4Aew=f6;POT}_1K%3t(OpJGWx?i!6V57X#RuE7E&z5bnZ&SC7{E&iVxC~4h ze9y${^|gxwqbj3X14Br*1&ls(I<+T)qAwl{>C|@D*#J2B1o!mHc=ws>`_@uRL}xRY z?WTJ}>9|aO5Rc7mY^1|;es4DDB?j|uy&VU#91x<38^xXvvUwmtG1$+oJeBRVf_VCt z+JhCyh_$r5p|6o5T9Ng>#WsBO1yG z{n}Np+v~n6(Ggr{uERq`cAa!+gZg2ht_ zx#LN`P_4$pEw31i`p=G53#D?vS$cxc6aoXoI!^%bY@PS$0wP%z174paz&qnoqT%?M z!(%r%d-8r5@&-$^19?+G22sLx+my|s%V3sI4PJ4|fZv=es708CcjO*+1jgs@oMxz7 zl?w+?jm;Iy<3vrC*Qa-vv+dm8Y``J7O+;<5dt#+hE zSiRm(5Ke8eO1}C>&9$@>NChnbv>Xz*;>_|9w1|m=YY3NJC%*hFMi3<^O3@mDQW*Ab zN(ai`LM14AANQ6bA^mm5_G!G>WSDjdAqF6srlcbU9?)Y^N+6z7#N#YcM;acp^Gpr69JEWESAe&KV)JzfB1pF61vLE5W zt&y+ZG~sl3P388!6Kng1*S;BDbLYlV*HU4jDisR;U+e6(+T~LC?gTRGuaSQnKRelY z(AJ6RJ)tN3`S!xV ze5LFl=-leDbT75`?;E(QQjiLMd(f5iHdGoFPBs|^qVfJ2ocSiH2EjS7bXSpIvc^sj zUMi}uT;5~Nw2G0-%avj?!_D4(qM1uHo0(+mOG{Ub{`72a>2}X^$ri>;n6E5%-+48Q zGgGA8156%9E|2{vE4?q|VJ-GS@j!|}ZJ{sRtl3UEIA{x?nTf#DMQehsge7Nm zF6=8cTj6#y@+)sUF*iFHi#6?;M*K5-%?&}g&h6gd%vzJdY|)hkpT~XAJ$zv9uROE~ z;N>&icxXHp(>XKU6B|=1vsT-EzOU0p^2b;sy>r~F+@tIq_6A){=*%UACaO4Y_#ueN zhC)i_po+AhhwdP8*OgatRV#~Y7*$0?bZI<-Zkxph^gH(8ABzkl9oZ~8xA z6kX^2%DRIr=Km(nW@+}_<5hYgpH+i2tEhMF0d2&KAkvBk`Ljza-16np5w*_Y$uxoI zuWc}F-PZHjK%(`hOJGx0$Y)G$FY$}rpLwci-O7SxO#1=ZH(v z_18AdO+hU1>yK`r0jHLeW$TqEGqPRFm5A-jw;N4X_r5{15FE{r{UjNaVwUXlFF16f z_xbLlw22<&A(UJjNe2(!h(4L3AV3V9j?v6+J6ci~K;a@SJfO;`&;@W`TOY83z^3;9 zK}#d2;7pc6$%0D^TJ{zzG}&Cf5JQJutMP>B3)>`VcGemXh_kaoAX#5^J9OL=c00$R zddnB|8Pqy^NNl(r!<|5*9-f#D7TkWD54T*^mXLIJAQwyF&?)A3`<+d@M0iE63wW0= zK_4f9&U;>jLZuhI2Q!te7r|@L)@+pa*!doC%%Ij(^ymq@FOak0csQO;CYRE2dt!ZX z|4lQkOli7$_7KKan4A$CZ+Au_ywJ8=$RGNvDbc}wfDgHno}fo(#9%s)qrK=YRfCJm zWNOc)!E)zO=?@-yXb1@36iayRshHhtS`MNtnCQDd;7`vil;-e4+^*GK2CjhC(_%4)Of&n)&6(wyO81?a6Ap*#LGr6& zr6hIF1(PnnR&6wa%VxT~%Zi>dPt)E5yO@0|>XIeHG-ee^ZG`qE!ls{=h&uI5tr5OT1jq?ap#f8r1RcdD;`zql2;~HNF~` zryWj>`YD4>Yfbv<#20mjL-YWfVNmi7?9&vLIwpNFjE9~;G`=#3$GQs+aWy7s1!g03 zK-HlLfCA_u4J8S3v6^m^o zqTS~|;w@~G= z<}#Smg>G*(+HMs@sFH)RuTZ7gX1wXoG`0z^I{APlfSy(=-s=knw06ls7N**JCl?;P zD99;5|hD1vN zoA?n>-{cvo+KBF3vB&aJDH|~RA{IWITnKu?(MB+ih%|ifSDtcvI$S0aG6v@x!BQ;$ zST-;_D;CM4mS86>R%f)XU?bY`L~-NV^C4WYc3~DGK!i_97spZ?r`tvm^mri9kZoX=5k{=S^-}7Tz7BQPJHHvio6bziI=aXE`+!h5fVlOz!#-{$K?rewHX%7n(2 zKg*u`6Y?bFjJq%z_O~HLJXzU1bZlcDLWye1hdnjeu@EeZMi%nq+5P*@tBmf7Oiac} z^xTyAEpPOvNhh)^sEQjF z-OQXy&|1{FxLPdQji^W}J@h=m)P+J)m1qu4kNo%Fx7Y*}u%eG@O}+1CmCGP_ozI2i zoX^EO3-KBM#);=(kwi{B=PNKfqW;bV-FuAryZ-19(B#-#MeD!{BPL*BjMw|VEj>_- zgpy@ZqtV!G#t}I-=y7Ftr8?opqQj+!t^gh!S&voJ+hf?871-Pg2R_l(?PvyQe*=7B_N z03^;}yp}n2n4CxrtR1?kkceh+Rl&uF?v2Fd*pC&mJgyRFXSh8T>re>Kc6Wb@BZSN9 zsMT|#R%;74*BVzv5u+yHW*)B}b{Kt*yM4%WDO;{GN2HAnu}n&(lY$%+C7VTKt;}pF zI*0qPAA?-c!INToC6-nckEg)Eo*SXljVM4-!YI8tOFnqpo;{Z+Ti#5E>Sm)gAo#Ku z_8h%wqn@R8tm)>TE?p+KFRfgbt|ta2{3@?a2uG8nySdAY;L7t=(n?)J9*5MvZ?hi) zE=tk5EWYBd08HxO!W7ON`%AGk(l*-Qp5jr~5kcWbVXKWVl-AmTktiqMVzcw{wn{2B zQr^?YIio8TP5Jocxko5zUdyV|b?y@m-qOa9ZP4a!&ge@|>=7wZ0+0?)Y;1{B%GyCSi^&F1jEJU|wSmQTvOP5Qf&jvFj9=m$g zTLj7egxRgtkbnzAZ>dch$p^q4V;lJ(4v`==4b-3Ur0{RlfxsB(iT6tkh1%$o#?I74 zPIEwvxGXro#tHIFapFEQ&G9~|p3}sdj9VX`8|FR{jM?3df@z#bCv|Vm@6}0#TEerO z*RFG6A!Lz)@XZm0U-!nG=^(Wo8mrz9+X4CC?At1(jp*`}1OkK+vIt7Ds}$vXmoylU zbrNmP$S1vP9fNhFaI&Zp;*0eY$J!R5bWb>$_mOW)Gthd;+~uWI`A<`NiDc@N@yw zY!x{r+B%&OA{|v`;ONOGrd|^{Fn4Wo30+77;j-swI&w34bn!&`$Zl>VbUl!Rq^?~9 zT_itB$4pj9JO2l(XH%WP#9^ElxEooO(ZkylF|My;MwS;ari3K`I2?K@qYi8bbk1P+ z*CXvwAmsr{tD7wm(CX`nM7t7`f}V%uir1tCtzOwdtCteC;gwiwpe`ncA~gA+_7C}N z0vFBEZbX_LS*wn=1q0sc!G6>_QBRBg!akv=F4Z!IE^y--UxAJ(4j1}{Ose;z4YC<% zZVcXW-(njXszI+)KkgZ6#hP)u&*c@g8C>Wfi(I+26!Zz_RVUQrm-m0h4^#E4Jgx{Q zFVB~+9XoeF#*e!^-k|l_Gj^dF|9q_BGpP(>peRZlhG=sUU7f3EP_=GO#Z`y6{e}gX z`L@rM1h3Ck3I+({F39F)_XY9;@)mlA56=SArO6+)5EiGJ3_Mk~2;rW7Y{4fQ(4bv3 z4f}L3nXZh^YQ)4s)i*qx8g5IS)M1z3C(Jl_seyt)99k8k-^Cip&1o@#C4`RLF%+UnrY1+G6lFOeWZvtH{fs%V4gxm{_VD z;sbA~a9e_IZ_kw3Q4nAs(`~l#Jr~|o-g29Nr&Sv^oe^VejZSjnwzb`_QrV#wnaU)wf?q-hyNfa-dv0 z_LLs6(I5lm>DO~mR|Rn}*B_*ssBk1-DNL2h#NxD-)-Rmht1?Q>WO&kNN|e?^4Niwq z-A=xDt{(7MSAwv zeSuqrElgt9l^vxUs_24J2BTpK0?yyIGXzu%0;bXE&xAytwIs5w+A7 zfZ~5^_uSc ziu&|(pys`?S*N74^Lq3*PltSDv89ct`O4dlol@1V*bGF@CaeaxJ7lTlRl(8cKQH~v z$CKjRoL3+kiASjust2rmTvDZL#BDY|-2JuP7f7R>c+`(7E=$<^EV7#nJ?8CUpC^Gg zdUujRX3%n1<{J<$p_Tv~)bNzZfr3{SGAfO~x2N(aRt}D=ep4(roS|CGw|{l6LQ-L8 zqkNp)p$kZqvfq7_QTC#P(7B%Jjn2GDzIb;tbG=*~jy}Ab$?XO5dH5vCW6;L}+)%%c z|1kEA8ZyipBtB)P+^iU+&$(eFStP*=DLE}yeYw)XSDn0~vIUyS;$3$NK3T>HLx^G7 z8@Ji*sGD#UqMi|rYi{heSCN|@e4@~rE0vwqR`*qpk~iPoNJ)90-7i3UcI=6Zp6n`l z6BS=iw!qa21Y|p*015&|0Vq!)>zA*bXk@uWv!3CStuHQJxxB*lxO(aG9x(N(7NJyq zi?s190$=byu>Wa_>RHx+O7|gz;%&3ThJ;8&C99GE`&b0@sG^d2@;@eL)Iov7QqftE z6KO6_r2i^?Q9GO!R}!&??$I~=*-4CJO%EFEg@QqnJnp;i<^vJG+WfT}_o;HI`7LD!*g@#_w#YgfMc@URICZA5 zP^6qaZR4&)!a>p??>35tQoOh^Vfj2!UvZCT)S;3-;ECdd);6%nO|@iDWGuzb4$pE|<(s+4;OVGL@}Wlp5h%bpL&>|;tYB< z64@KBb@qt-olyTTZeLovtz^(kK1n0E)r`r%dc2v=HZa?$@x?v2k=rqs!Q@tPdYuNe zboc)Slb`s`6Q~OTk>w3CfKsO>SBflZhm)&!%Iy%;rKEDIul-Cwo3ob})(Z); z*Xs{j4BpgiLBDh{9aL8|E)yoR1=5i>I!-<)%*y0LEM z(B0M5IZcO|>7E=knvpaLqmeWc3L{WP0Ujh-7U97{Aix+5E9+S!3_`4pS!|H7WYSu~ z;9U%U054v%V0G_%{{L2Wbx%)swUGBwtEcPMty}+hzH{D_&!O0UB+EUUu4h~kH!U~n zV_(gqm_M#Mh54pg!sJDE;4qi#3r*3mLPg z2QxEKEl=Kg7(6HiJ`@BxI0LK$9I7nS0j8M=#1hHaTt{FG;)mu_K8oZS`_WSf=%+LB zU-{)j%Z&;6t>o$MeZx z53~wy2JvxN3zOhdrfN8NWj;WYU4NDR(elC7-f+|HY^7YzN-#S=&};5H&L8Cu-~T=7 zKA#+Xp;~TW^Ly;vkwk*86r3b;4O_!H?W5<9)X%c5(UAw&ZO%6%z22MST?C@u+{P{~ z@bq7^cjEaFdWyiB84e)+L}$Rn8j9+G81ob)gRO~YCd(5~{BxB{nQL|C6VHw6 z?NgnypG+~~ENd=ga)-9(P&8g4!MPrqr|>g=TNv5jHFgQkP`gLgEbe?KkrVtgpecbslzm#()KXSW zpw24-gA`SxWqm2hV(D8``&XOh4@i1 zwiDw|m09Gw*AKB{hvn@94}Xk1bnNJI5aiFc;J00m^0(0&JL6uPVSm9s<=FBcV(Qw5 zewkh~@Lb==tva^xYwXk9+Aq^RY+bvCxqcDS=|Np-u=9j`jL8~XhbM}yDAR5aVvN9^ z4|0cKW9}!*wecWnS+2#nb}SZYbHg(acGvH(saTOB2`XkUN@66!8V^QCPrv<89eeeB ziQ@!I5I?xS{f>M37i#nWJni|4B66tx;w{Ck`s&qxH+?Sd&+uHxkcCQNMi{6qUsDqX5iNA4~FR7Y(O3_QKS*gLn zHE{?YZ5C`^5tUSmuM93$Q(EqCO?TWu!@=Qa*IU;4dQALpy6K3p#Ix<<)nD^Rm)`bR zERcdFLW-o}Gm1?+ev8*<)ZzN28 zoFFFJ|gg&q;Gq zL})p+k9^OE%C5l#97>EQ1)v>tU?R@WQ6@Ma2I7oIV~S7& z2m)g@5N)Z=?L0jv98v64G5r=}3B4QM#NZ6$6|cYs5nj`J!E??Q;}?u1i{)dFn3-zw z!4(|A2fB}9Cf089B-Zf(Rch9D`zTN25fs=v66+v@u9JxiNa}S=-pTOt&c>< z^RJ#&cuW8HhtaT(-5jZ8Aw4|)J5sq|#xLlC#tWPfZO4zr(^Z#$Th)vS;FVa*X+Qmo z?Nf=gCFwHPY7a=H%|;dL2BAspcd_c^W(JiiRK z4>_3P{bh6(6ItscZ-VNXAl0|a6reJ=0x=t`KP34Ls%K%p4(4TQLPV`Sk{oM{dpd*Z z|ED4@37NpjMl3&UJSN~O##nX9(Q^cs4 zKiL|-@yZJWNz}UMA9?q}!cUw{*HXYwmGEYO=lB&o2ey9Ea|HCBJ^^gLDcC?x=}KUA zOrMHF4mM!=Jfo)^yz87_&*+AA zU;g3O|6fICL$?yD$5#*cFE1rfk>qjqKu{z7uJECI3{k!G+V_;@teSb(v(;866ZBd2 zuYHaCA9&V{o1ayrEc6;|)*xn0o2Br)2(94J<`~SApkI+JZhF{S|J`Ttw33$gi}i#h zTZ-dH9Mew}%ULnSEzkCkcxbI#bwm{lo-%?X3|^rdv17jX*fam7fX6mcxs^<1P#IS5 zub*!4njX;%K}@%biGgfH2XB9_FQ??}FFZ_-jY0$l>|I{n8{>(PLTgYtoP*EMtU8CMeds2CZg?e+HZ-%K=4d*81#1q;fZa7qX5ggiKNgM)g{@6#1cLMyzgBL+rRjb*SEVX9OL~G+yb?;= zw{oRMP7?;NMNNWzG|MgK8*^L+Mp!NJ=xhEn@q>Vl6H!Q?>0SH{E0M6WRf%ce`x|qX zlK%2zi6R;)AB_3lS&_w2!AsBHMKAeD?gH`x@NtR*8?R(C@$!-9|F(F^)U0?vuFW>j^qQ|c*k!;TRdTu?e$UW8{9IoxEL79= zh_3RytFDclR^E3y1v&??fPW*-af1AFOeL6(R}WMntz^bg5H`fiLAIVsq;VN!8^GI% z0~=z~iSaQkM`V}s!a@DRm7C5qutRgXMD_<@}g_tn+y5P2Q+$R&oR4!4>KX&vpFF5gaLl&9JyP00X!_c}sZ==!< zp0PNoU3Tuv!-%kdX@eQ2puX#0wAG@V`1MCn1;Fd6% zAPtz~h#MqXKxB&K04IlJ2bLKwHZ&JPFdAD(V~{Ss(LSOcX8e(4Iy=4dylsq*uSG+l zfwmQN#XM{l6Y-3osG^fKw8vs8E#Gsx3-uqbPV9a)GMkfU?^$oAQ)%AiBl*WHBleMG zbM(kYeMguC!_GR16OsONAK6r)3|QO|Ov&lH^7WXc2$0+ZLTjz$jsi`F$FexgQ0@({r65s{tX*2>@@YCr#cn#!& z>xHkUoIcK;d(-2kn5rp^J8d}82$#I{x--7w%%@N+nCi?9Gn!(HJgiysWHZCN?d?g^ za<^RTwFe&W`=8X^s0gje3w9~(d z`2$@{HSd`WDopJLzD;m0tQzcwpY{9F8b* z<9YEjI5AE?r9kbaM^2o)eA>ZwMHs{A9aeMAL}U3eDJE)1ld;jsh1hih_^<}K50bUzGbC(KMW>`=KSOkhGMtG->O|Rp&Q86NiJl*5fT5LPkJDAn?lEwQ+a>iGk z>OG5vwxtV18qnq1*8~Q-JVknd?hp(d+~Jxy1Z{4j63~jutwI@w^iQpNKhSLf--q`P z@y5#PJ@f#8uvct9)W!Tq=Sa3Z-rhV=QYBRJhD>4ks=>jH5EZs=D2HZU50*|YJM3&n zr6U@z@EfVvvkxh@#KSE!w~`6lW<$BNxmrtBqnvzU_GG^nG5AjV3ayn8;WmI<(gpYU z{dW3O`UMj`!}$`=MGR+P#D|>BYLWB$q0{olQ`H@=iC4_GzWTZh@Z3?_3k)y@J-8r> z0M>v;hm8m5Cf|}9260E?9o#z+E);MX{sEu^*oekwlm&%E4PKqDmbAoo+rHAV9CM}L zeCtSdGy|HFV`h{qSu!dX`NJQ4g7Gm(sj9b=4vR2JSvoq7G7JM?yu6{uG)Z=N1p}+f z$zO1D!1PS2GmkZmbLW~W3}v#<;Z*Pvmx-I7QTWCg0D(PS@X2_8sdVg$2EC;=Mhr4W z&3B{(UIGo-%g>xR_xOXylbo}am`X-?>nEG}sZ>Zhuz~v%77=1%Gh4VNN<``>2d#3U ztu{v0G>&s8tyewU;m-zFPd?0P4ytt3mQO8zeXec#LzkOwm60r5Cqprh%c_k(`8 z`04str~*1Mgb2(+KuKD%J`W*MB%O8ZrIxPum3oA~9U$s%h=_m#rYJZ$p(*b<(&L01|B~3V5vR^$2KVA5!ue7T92+9v~Sw8{9k} zJUtZQjw?K+L~uUH0>r(=$V=KQ^3(@$T?Z_jerP)`rL(n?u0_4Hn1ATmQ|ObJq@$Og z6-1Ha8Hex*$0=~r4kUed>7I5%G^A6G{o3)RLCIKtR&i}O7!p^E%AZKug^i}@C0xsH zt}8%HSvHYmbx=jmi=vuwt5{oBUu@>;b4+QVi=Awm?6v3kFX2pYnEBYgB^wt`=_t6; zq!-9|3xyokPHl{A5$-d{l9Ii4Yf%@;Ij5fsW0A!5pcwoZxQN5Soq!;B<#nfHym0D( zXY-;42d1&8`@G{+{FMJ)58M(DI9S>)x7djk>>S*!3*!lgh3or339o*3EJY8-G#%cj zAc=x0J3T>*BD=(itm>V0w=TR4Ui_+zN*Y71AGd6QpT`nnfk%i;rX(+q`kgEM1MJ5T zKYDWJ&4`5oP2m{#$iNLOC8BH&{}14F=#$6|=kdQl@<^+U1Ka@f1?Y>P3wkj52>lCA z2L%-H?l}46;t21>3S=6pLZ1V@^9)PoRS}Y&z7T8lYKPu%0HZx(wq{j4w1x3HC;6h{ z>hblpPX3imV^vPXL@aud6iLx+bSxl5Eb_`mrI74q@MIt zms&^8^$!T#e5w-AQAGBur*F+JN=G|Vk~f`fHaihzh>#q^BX|ConFU{TYaGkIMfNxcJU{7jWE zzf*`scq85VZHa#=S-%P6kmH^oWTVpm8t~;TY@Y`AFl^md0uzAu0Y^%K8%6;r0=s~T zNVmhfBML)s1AmRmfw0()005yjf_Vsa315b+3O=MuLKR5>7{uH3KQRoFVxxIS)uepE zTI17K?)lzVf9S|>9zC+#yy}#3MK+XJxIaVIqhnYtifUI#&DiA+V9gr>gPC90Nuq z6F=A7C7%Ra8$}MIt3NwP)}gEfb~RbVj07inU(B+>Sz31O$S##=wkGQD_}>Sej)O{X zoB3W)icEvMpcL2+x`SZQ;y@~pIFQ_Zkqn~S8w`nRfzu7b&!ejZxzRHB8DTxLKQgMZ zSbt4D^}5=8$4aRp;shGkm-6qw14Xq6R(P)|U2<6@xY$$f`DL6IbAJw*d5Fak?brWW(r;12~#o{Jx| zU0EM?4yj)p)?RgJ%aRixdy}>P+_UE@TPr3?q71dF;vKqG&z?)wTos`RS=9QR%Kc$= zD2*dF#*mClS9!x$kDW`k^0uMP>yhQo0k!bpLciL8H^4;U;`;oy*(?~v2NAf@(Ka)8 z?38EKvZvF%dQO6M&)DzH^|_U!aogsrRr&qd3nyFV#koYqleqxnPC`~c$~}SH{}E7y zWOYnKM*K>mOp`9x7A=zfKs&$)%gkwv0=Q`ElAuZK?`lJF_tfi)r-}$;7RqT|Q#7yi4MC72 zSUA1$dW~UJ52u`7ncr62O45ig&T`z^#e-jXGh&`P0PZXOx$DP$#AtL&ZY1lO1a70J z37f7xCqywH^zzK>W?rE42A~|6833lh;viH4HiIj`6u8qcoJf!~q-qS3xqjfy1yC-R zQEfny7a$w`4Ir;U1Sxj63-1J1*WsOUp9Mr$YnwpmjAWw+Ts)Wjhw-E9XI{9k!u{GG zW#j3r`F_KgoJ_^_gedTtIh$)OUq1izV#k}!%5&$|o7x9rt~6Xz)k=-suUdu@`_>bw zn0@Nx<+mR>^CeDg=luI(MNU+|$y{K|nj#4P-? zUog;KEHGQK73qW<6-HnN*FIr62vP6`t10U)%kn0Z(V#X_Bd%#ha;5$P)Fw0Kc~0RX zE_<>tnG~b5JbG-~ywAhJvh9S~`cT2j@CvKh^$(Vuw28za;;pMP@?#EpicbK zC@blZ!ec0j5IKYikcR_3R%b5q{}uH3Ztzpc3Sp~jKoGE$3`U^-*nmE}d;-$oj6@z7 z3Lp-wiNFXTnh#JB za$=N?KDx~zF(3)!lNjI^Mf}?IP9#+*y4d)Tz{@dYtC{5bj@<@{qFzL05yMYfPeqUk z5)Vq2=Z(ErJIEKP42eAPpQ+JFTQKG$6fHKgp5XK4LE%SYb_(&PV$%QNUXh6ga+r3D z=qReZb;3(Fc$H0JsS7b?NUHGO!YU%o{E@AsauM{1Q$hUW}zS#nsWR`6V1 zR$y+Vm>*#f9E0<{m|Z;3&2y@XZ11L8cuq&MS!Jb&jNVi`l}pbJauwA!)LAtKs{-yV z+D0lTd#`;|iDCX9jU?+c0l z$fP9d(JbQSu}DBE&as%Pn#XPLIYl-OL}TZBUr6)hXY!zix=V{RD6uIxr7VxSrd-5H zproPZL>2|2fZQ7)jj!-pE}p;o*-516aas|+Jvz?#E$$FJr0<%Zn3$@JBa@WwId&*s zAy)B|RA z0SA{1t9|sSoRQ1z4B~C7-ZA`i8AC7Uv?_GArNlU1*M@T3i~SIMcv;o>4W+<6U|RP+ zcIb3fR=^T4v`SxP5(ZV4MY&r@Tx|c)dQ9Ye1oc?IoVe(T28SqqF7}9)s><@32A*V* zr0ZlU`U!$9i6eQq7>TH+IhwnAZKc@Bb#?YCRfl2Kwi9l^CmGlWALI_sTnOSk0Hykf z#4Zpz3jXiGBamc@;AG}cv5l;Lk|NTmVf7_x3P>_n$~^xjDD5@b%cq(jh{CYeI!??} ztVF4}8s#D@svCR7iE1wnmzf_tx>8A|6iyVxd)E-dPjocfDgE|0M_SY@*Dq^vQ+-Wt zOjh@yRHVQumcQ0d))5{ZBv(!wMm`VsM%F+1Ov4pJ{$IwqB=7@5y3_1cpv_5j(V+rt z2@gpKf=~?L`G(WN@P@+|RI}jSP<2bxr%C~S@DyA=o}dXP(!)#7M7<+k6{RddL~&Je zGbI}$ZRZ?Iw1;|72_j?JOj3CEIVCM<$`IiK0e1v|L?w|bM7xh{-oK!19a>1D7l8@ z^p+cu$ir72OA5S2SYRWkwaqPrcne<*f&q0U?FVnCQW0GDG{QXvg^)2w!AXJX1dVo6 z-h^D?sqM7u7f#J5_Vuy7@_MEsPAz)3gIlu_%hhcsDgr?^y9@~8f}k5f0`B#OTj*U( zp-i)9&n}$N@(WM($5vhCa1Y3pHS~K%KbMb7Hc0sLKpVX`Vkbd8HQ_7PvP1|Yb?4FH z1fCR1(aP1Io^M5YK90(G!R}$W?tD{GoYGm-;(4(ZQB};hrCb^cx7iGKEpsXCu0toC zSgQBPEFfhzS(Au3RJdTF+s6l2k)28Eh{lV7|G#+D@nhri$;Y3!k4O7vLct>&+eT&a z(AHw5*I4ZHmN#z1^^9*oqFQPPYd#K49z3s&>>Bzid{b8K?#W4iwzpYrj|+(T$9O4| z_K{iT6QMkugFZOJ)pj!K^jyJY465ED>z=H7JQ-c$^qxrt(DUQ3Ag(*b{Vyl@#q-%8MV!g3hTP&0`MbaXz)k>jP zNG2T{tvUiYb;Ri~PG#eb5ma_bN-=!a{tVCgcvj41qncl?2UCh3F$neHAwxmkDNg`Z z0}CuT5^5L5>|=_q_b_HSU0$GjA!5PFFS-kDJeM zz9vapyu8uvqzdxUd#Z&&F_J^#7^A$Zw3i+>5xjjq(;3ze&sUr3_Q~)$d)NMw`!ec< zf(dB>t>8M5kwMS^{0LqO>M7t_1sD>V%USX=>3zfr0@b+hNDlYqMyk2wEn$L<$n?DW z{b5mJ`qb0!r5QQm)s`!INT zn=-(`ehv7;0VkujrcCX(aHv-hIV59$YJA}h;b~yY1^kXuD4^%`rl5VfVRgQ$=i*h> z+VIi|uCQ6lO%{slR~|Sla)>|a9Oepv;DzPIQ?V0`xpb!}W-2|v3_xYk-)I8WG3sKV++lJyLz&;YGO%Nc`mJ}h~sdv zS9+~f&gp=|7-}@GK~C%Nh!KmflawN%hX)UGc41iFhgbwkkc1(;NErAyCTh|HF~JEZ z!y84ocdVaiby9e~H$2Xkq&XhW{=G@d_nF#nZ$_Hq(h+G`$o1j4Z!}`LsW6+Jd|HhU zD#%|BjCX%rhm(Scn`Fgpcpy%DD02D3pZWo7p-p znq8X?0v%XGvuGa#KEo@E2Vu<{Ps5XlkzOYy=o38co{f9WQ><^cN@842Zn@RTa0St{ z$RdVv8;F>jYbT`(&26^#fW>@<^3KtuSlKyiC1Q+>7k|Ly)65w+YKzQl)-xFvyll-BUkFxJ0DK&ErSq2;mu5FB5Al1XRv*FK6m)&u zp~@aEp0}DjpjN1ceExS_lsiI_j9rzJu$+}7H-ye`NU{{$VRUNEB*kjMT-Vbb^NC&wwZrXD=2k#z$t zF7h&eFsJ@tzz5xHf5%5~HpK03ceY`0>)-*f#7)UNIv;L32BsjZE;t-dKWNmf#jlt{UIb5 zn8$ounoJb{$pvXZ1V>lc4toUEK2!|0%N)>+v#j&v12-LiS28@eAzQNOZO*xK%S~)+ z-DL*dL1Kz&tU7tryXA@Z3J3yQ%t>%M|C-OHyYp7@=)i4GP+7He^;*)Z@e;~9NjLl* z_iu5|`zexlr<2NLo^mkRE%ZSX4D68w3oV&93j*UF1-Fs4e)#8#zS%RQR!{>#x}WZTn=0&yBC{B97mW4|Yk80} zrsUJE<_8`2kO4hBH&FrP3h?l$RS`pn=VciIRcwILFY+QX@7&J<74P!`@oyb?bmzQ- zsKx;f)7$qW+-Y*FXweto<%y3d>|N<^l!1i2YC^ol=ifeF=skSuC9J%e)Bn+4d`FBY zLUFX019-si?ujfB!4NWN=v+Y%8yrm5HGq-|;HE%Gw+r95d+?slP5hibdJd-|_Xr3j z^NX64N^ZAK4a)dfvTc%05k{Zlpdmi#QNPg0L%;5m{P4A2Kya@o1}S?zhJ zxHW4nduh2KSK5XO-HLhq+~Sh9oUw;=X2kb-6Zbd8Gvd-vn?Vl4dmED7xnoe{+<`i0 zGU_jbr7~phP2JHNH3$uN=|Fl8#2{(M56yDu{+NB|0a>#SqJF}Z|CwJ9RR4qVl$vX# z8%y@G?W7ly=Q(FkZN&JjEXY6IOl-A@5;2oQm%EHe?Ig_%8(g8W%E3qFg*yC2iKUaH zw~oI!*JaqzYN13^P@@ZI>VgPMf@DZ;zn>5UW!6$mMN!N{f1Y0GIiL(yU(3B?<{9t-?VSs;JLtCwD)Y#alVhOCE+5c66CsFs_aYjq1mKY3 zn}NlTKGBfANPbbY0E8puh_+w^OJ3Z7LONBH4z?WRxg3TeONXm1gSYyMU0EIYip_-N zppalJwpep#$LLxw1;AGzB&HJTd zfn()(CXPi$k`U4eeDe;9;opWvU>w+ukOuiBECjKk`IdoM7|@YKC^R{1fhhs@`3?{d zKAwAWSz3QK8&k2>vOUq8GS)E}IJ;$?_c3+!??p`}t~QNsCu2$x=AgA9y3hbey)hs6 zk?uEoyd#wVO{U+vTiX5s-ve#md0W~N|8Xdx3#<%^Hlyhkh6YUaX@Ls-5%@2Aw9hU) z!BW48CntBwl1{4EO-DJ+6r@#j)u6Sea8`=Lwko7YIqi(46%N*m0y+>djKS@KS@YH| zr`~&fUyQ0J<~DwQS%zK*V)DEuwFC|&Dt#OEn| zz?whE76!$W?jA zUqH)vyPQyXmOzyW1;$UBt09QH zfE+mQ>1g$s(>UL-Y(;)xJU~7-{dPI9f52md@t4z1rK2V)tF_FPK0GPZg9k>S*;1Mx z^G-fwJR#*vgo3KAD+)SP5?3ebm@-6jk?yB~i51ZK1EBNkK;;otx+1g-c0zzBlu8N- zhJ>cv9CcdJw}XM3=r_LwyY2C$KwJC)$3cmJmN8I=YcyI9jH{dVI4|C>Fkuq}+^b`syDp1hj9UpKkP4g@+EP+WC;%3}3_xQzN=grLtwWz?_u3pKOUsi4`>jv;=aoD<{7Na>mR zZZURUVqad}4wsWx5>^Co1p|+2PUKnSF8wF`GHM=6OO^WfAgUElh_K2y5vjMHCVj-O zF4yDG{5NY|qFdwId-x3Z{+Z7Zj}ZU`;ivl4{Dc4o!b=@BWO(BZh`;%<8v{0=68Hz6 zMr;apq(ew7@v{N3>2EUg0tEt7uS{PC;!O!W%BTZBdTZXR&N0o7qV@tfNHQ(PDb|e2!F6|v~tM2nP#flERBJaKOEuH<%)kXs~B3o zoop<+vnkhHv||?*JMAb3!58KA6~sLxVU6=wYulGSU@1%%gaRgM7D@l5T zg_{~J3aUEJFa%GK@`1mnWH%L!ufT_axs15*IriH8=a=NP?Q61RpiNs0GWIZ{rGwL~MDHV(7ucO=B=C&$e4(ah>(Bst1Ba}B3!BHVKhy-9wGJffw6!|8; z1OEjm2>z6*w2c1mhlQcUe}K$VNFk|Cu*xQ&Omq)n+UR0%IBa)abU_;Ak6lj{0>Wg* z%awfVzO%YsO{3Zc9b6~{&E?bW;W1a;MmEU1xbYG?9p6KybS3r5lx$`4L?y;uG>Am} zltM}rYb+{u<_bb6(PUH*GG50?j1X|_dp3et>R;YOs^OJAlp;F)NA8`V(^+_7h`)hv z?viUr)`JQ(46xhjj0L-tQFr#TT+}HDx_AdJav=icsCuxg`$=xOH9iPF<;2|S@4Ew2 zjm`A&(SCT!Ikzs`0?QXUPEK};iI##i{vBA0hduKb+%JG$M-hp6G{ix0L&!^jrd?(V zTA7iV4Ww(2El2nT#zH+2Fb}yy>N^0aQ6d6xIX_0^H7dm^_RZDbwD!Pp%n1zS>7hL8 z+UM?#W!@J%RvDgq8e@ouIh7X;-r#bZve~`hA#KhtHNW@G)vW3yB*!iG3Y_>yuXaj) zjCI;;86(*hT@>#?h?Jo@M4u~cn~fN+v=#t=YpyBuT+xBvWa#x)q8h4UP=hZ!aZdWK z1d}7JoM05xwQS83slia##hfK%&90EgdUxCtSa?(>^m2S6li^0exxj2=cjOxRw>Q@O z{OA{M&moCorvR%pmTKkrk(oI*-Vd`ZpU6~o>-OC7)l5`s7KCIp3;bCR@c3hh*FQ>i z)u=JtX+OgK?*I;Yr?)`gz?Yw5HxLREIjz%!`5QX!;b?t#>Bq*c4Q zTVt|B0N&}JnrA2OKMMrcqY9sHCo@eisZQy3FkZOYWsbY_m7(g5Z zLuMTK&&HUtb!uT`AV+uj{88AIYvj(wTCEhn-WCwALaw4$I{F}nXc%^?mRdWmAPvY{ z$aagf<@Cfz)fD9!j2HB@YTA_k-!7W}3|@nVK?1y75kFPdoF+Wdv7ngvq&A6 z(?}olO)2&L`;prkOL+5*>cou~Q(7W@)Un-&j5M39++LRd7q?YPxJ@cz2y6-duR!0o z&b)8t`vR2PwXFj2oRB?=`2aU-0g#l`08KgG`4+uIPCWRRT+^uy3=?>2^#+w_)XsyZ zCBS{ zfx2_%B0zL5l~8jdx4t0Exs`;;)YEL`;x@Q-kNK7>vsPp?Rz=&>iBXNrw!?!Rqiq#p z{>qGTv%!|hxLHn`s1^n-AW{-dNyP;rj?yUKM7O^+A>JqBgpy)za*aiGu0gpm=VK=F83{U8Bg0WF|AUM|7Dp>$fHoB#cZQ`~bW z)rQKnP(K&cH$A9SDwobPZKTh}qIyI(&^n+kNVbN}oQvphL44dzRN$HN z*D{*yccPjSgz+&l=DZY@ga~%@YEeWU#E~tSsz`;5*aPn=N5rpaPxA)fXD^(v2JiII zy_svp)KH(x*IpIS`JRB%@53xd5ScU%`Lk39aw}Ss{sM%M@k~ZCno>|a4cH*R7%+k# zC2YWj!RW4&D-E8fl%z1Wa4Qn1iXX#A*XltlOmJ%yr9rHnvx@$u1B0VSCU7V~WkG$g zpuFjU%;4VBLf7ptHD=%TMvdk~$PY4pxs$5pkzlC4W&5(3MtiA45fqXZNh~>eRMqf* zt#C1RVpci1T0*y#8prmDmE6-&8rai2lt*DYzpmTlWgz3zx90hc1tnMZum;e|N7Kb5 zLXFtG01rfDYbR5h&_^>b{6I~Pd4FNitRBL1hH`->&(ITW`*}3;f4`}J+Ax~4_h?st zEfevUq?C_|$|0tF9z6X9aP$w{h$*-A*MKLWY~WxAh(nYm>?QyS92fleI-CH(Z-pa- zJK*sBI(LXLt)Er-ITYn+XmVkaamck$AYE_UQ6<+(V1LvnUy2^Lhw>d9xsCHDSKx(% z+^VsK8Z`LNl9N;}qGDdLB#$EAdgMR~6;Ce(l70Ax5!h!x$$c2U;hTe4cNjAZ5IG25 zh+y|XF(NDkdIo88GCD8@9n=OUli>zVr;>xI`GNO=mnoG%^{1pmL*tDj%nrl|ONhe~ z9V{NL0)608vlIFHT%o9o#aET7rW`v?Wu(!}jS{|!sFstZrY{5bnDp#!)EZ|~5S@cKoveS>&psO_e%;!B7MS_43cPBEGM zBBDJpazJ>HGBEIfF+|lJ;;!wRvZdpqzFCgouzSf_%AR^sj(D~7LaA)1;!*;ghLb(s zd3_dXP)oljl~;+vgVURZ{Snx}GB)8R(hl2R)^`jfh6P5Sq(CQDU=)1kq-#65r{c&+0Odb0De*(OCX6Ct>x9^kYL7tX; z5<&{9o`$O2qZ6m0fWQnK6JL)4Lz2SAyKsR%McCoBGUYJGfzZ4+-|XHQFCI=s_?USfyzd^I(@{9!dAug}$Q0~YF| zTor8+F%AAlaTM>|5IX>LolqCvoEDUarV#O$l9i2i`#&vw+!^(q7-594ixIDwdHpmu zvSqaldSvEOx7crlniC+mLyR$+M$WDQ=;hN<_3u%7I(#_0k z5Qoq+O$$S>4;BT3*SoqQb)!)X$*4Casib=`3?{@tfklL5#asiJwXKLM;=)$0xUyV^ zEiJinLb&e&#$lR97>90)B~0F_Z=h>g8OJjJd#%#2x#jU!a(TTv4^_6T=oVZK9%J)M z0y=rhNbtgYVVF#rK#VzJ`AKvsOW2r}5bZ^YDY{@}I5pZxo4#$xDyn?b-iwBTA&%6) zfdF-%|Ezd)mVLsCrq7GAS4wwL@G4H@9A7|0=q)qvfhUQ=pHMdvM37}1m>lGg$f(@9 zWpo3#6qNJa92p5h*^^oww}SXIoWtFgP86tzcRVkLPWl}KBR`v`X*O6vXbGI(%8ZYo zd8USTUG{R(kb7?qq~r@Vzb16YUL;Xw7mcX1f|@8pWeat$oPF+&u@ml9$o~}**(B!c zqRVWtWu)pw^iiOt=w(ACw+y#9$y_2m(Hc^OFUNH#0Sw)giUUL8%YU|y$jTI__ylnO zV>6#d-s@*~ZY=cO?~GF<0e~o~ISn-~*)==C7OKRhLJ1Njp!@{NA$T_>V#q1IJ414B z9OiDItl<_GS1T;lf4)HzdEqx1jbbcy&XA+&xZPifrA`|`jOHN$7H7Vb7VpC3?CwNt z?uc`o9BE{so~mvErP!#g6d3FyGg|U1%T5@*u@{lOL!1bmok+&-&m#TYZXk!BiC+5_ z;y541J^tevObyvxsg??^*S8nVnYs!DinwFC;G0~9!0Efmo?V8E#zU6DB5*UL z*cv;zFXbOP3&nhD1zy{J!#~`AHW3=4E1o(PdfU0UxNy&UJhXWO8{wJ5snDf3F=|Dy zo#n*h9q$$M{&RsFx4*E^arfnX50UU1t_Rz7JvyQ1QEZt}{gp018~Ps41-9`|&3s|z zOLu+8LD3|jH@GfbHUJ0$3`Gdd2APy;_7kE=0AZ3%EZV5S0)YmF8oVCxAXOQJJc6IY zJLh5DVSF6^L9Myhjk`FKKnSo93P2kMsqB3VF7B$KM~CaP63tS~9yzb$6`mjKa!Tq2 z_58AgNi*mqT#0#FMlq0lw&3xb7|L}xm#M?eV)DarGs+9-kD2wz_iryS9&L90sPR^tcyIcv_qWuJg>-^24OiWHbp8jw(GAb{zrB zO-ak(`>2-2EDVM%P?}hZLGfBrLNYz$<5WN?TFJ<89L)<)Pff``?!Rq8loQ=NZ_Xl` zUP_9K?a-c-ubmF={bMsfH1iX<`@5BHF1Wwx)lbbzSTg|W}X=VZ*or|9Rl|CuV+h<|ps!h6BqAmw6X)vngW#{}#M?z-Uv-AOJ{U@J4{Wzj57Ainh)?rc6jUmF$ zx?OkqVa&Kku`q&$F_tTfRrZMgue?{h?dS?Z?xSyxtr#jLg6eCLFQrU<)~NjaP>hJR zk@NU-T3yTiGKN5f^)-0kszi;q)O-CuxUb_3=cm1fcod$3-lWl?CJ-3ijdzDt#IWfD z1CSimAbCk)Eh=xEhFs`qh%a()I&LX>?0*AB!^+k$7d6o{WQm}y;IZo6u+yt}B zn||FGY+YRSPd$dhAYa{XMgR$Mb>+Vd0i`r#NY^6jE_hKOXkza4V3a2I}x3eRVO&7bM5!I|AceiPjPAVJ_kYk zb&CGOC?$m$k5T(P^j0kFBZIc1{Zi!qg$7RGR3mAEDw;5i8iX!rY#sNWqwc4ZE;@eF z^@5)4^>R>Fm<2$?-7#tj!}krTrgDQL=gu}yY_gbv7Be{!Rpsqj)c8{TE;Cmfd8KCg zcOzSo!W^0ryZ5d(v65jSUyq>@2%m+IfnJfg<*oN_uRUCDM%M>)?SHx;c@B+{E)*#^ zXLo7f9Np^kO1qgeVWCqlgV+*upt}Pl@cb|drYs3MID_qrE3upSvc^Ri z9e4ARZXyK5pD`-P5Z^yKH=9*&#ga$j9rGJm@MB>vrapT%@uXf4#td+h#$ykeXroIR zwY7L|?x%21TQu>3c5;W0P1%@0Z^@x?LIQ>KH`yfc*Qx&pONMcI0l(r!O785fkwsG> z>tvUftIT2U@dpcFUAH7&auaCO=h;SIR-9@-uVYqLUGE(_zY5=QSj5fS;M>@s;5E)o>TiAC@+8c9z+}bE^KFXB;YO8|~Z!H3`~@DgQ~s1K5Ejt)*kK7(69VhV2z z@FW;x2iA4MDr#I9Tl5``JQ7!=sMArxD~e_E9#eYk01)b-G%azF_|2vLw@qZ1`7y3uc4{l6QQ50KHxraq+g z{(LkWUyio#UB3Fq9zhHA;|;urUhR7%N4Yu51(&D!m8C8dw5aaU(&Cl}`OYII}J_-GAPi6TY1NBrKZTR*puyZUFk zBq~O+)XM%`Chu-viH0xPOJsNz{=#2r`yb z&I){^F7cgQP!QFsl?e~933;CX&ZxDmLyGhPdER$eGLtRDwe(VZbi}KCw30OM8Hm0# zuPCxSE8dmz<32Y)U4RWv;nh^Llo-NzER=X-4%I)1#C_`ve_!Po((LO2%}{@`Z<hn^;=7KWj-no`0ed((UFg?2sS_ZPxG0CqY5@n62rO{nyQb^$k2XdGga7+ z)FS|&h309K!?Kfuo4Q-@SH_gsCnqK>Gy?Ht_{%V2LNelSvX}95!JtOCcI3-2GcUiA zvxn7GEvMMc+520VXQgmdfp{+FIu>_f)mZZ4TE6eL7RyV19px+5Rw_She5O0p1nJnq3z6tOFA|k0DzmWtpF=hs z%VoQT+ARsQ!w1o){7DfF(jg~Q*I-y;=DCI5R!n-xt3g{$I-hBevo+I}Es5{PSn>7* z+T{>K!fH|^=yrJobJ(&fd-$~;(gjQ?6yR~CA}uH3cnBCo$fsg6x1*nvEKKchjc2T)&x9*hL3p zgt^y)-iWv<#d7RoEQjR{yeGRINIFD9vW!Q%^Qm^e6IDG^#B2vRk!GSdUq{Itg5E}D zn9yRnJVZMm`IEacb1!xiKx(|ZK!lfL5|ob^>Q?VW{@{IfY6XM zPII|E#O6+fmouJgcl4dm~`r64EFnQcx;E>tY}j0N7yu(~UYMKv<&Fv{NR) z7N7MnP|@Tb+sM}NqeqB@o+{j*gO@ObcMz4nGijz-e9dHmH{1&S8mV!gA?_o0l z;0Az0N_8hTMa&l%DWy8*AtO6$^k6O-BZs$ci1 z*is3+qvi&f9p(>mCR133ieAY!Sj>cpjC|q^dcTqV<*E2k1m{%oPO#b^^Z9 zs-q1QCF>Zo%w=bj_(W6^cRYlGpb0Fr+}Z)1m#T1ULbOXaz(4UI| z5YpK9O-@(jWK8l7)<0Fh?X6%_kuC+dLU;1J+`j~mqu&DF-~^*+L-Q&aMFOD*oxzf` z_=}Qyx8Zau698_It3wyG6Ly3k)Bzh|8go4I#<#f>iwwD)8BA;JiyPXHTh6>L1)Pr& zOog08~0T1cCj z=dqBuki#V1dxlXlQ^hEOh;9!+;1U+K3+&c1VdUrDbwQCV_zrX{S^`U(R3}5D3=p_X zWOP=?M&G?1D5$E9UW8m;c76)EuG8EmavzoGAm)*Ep+=Eoz;Q?#K-5)#TpY%^x4RQLG5Il z7hhOxcms@xjUi_j-_(YeqbP)Ul-Yx70{Y`MNv_@zk#m9tYFgrHSIWK-sE*EUJ(p@a zhqwY#*jXSIRy%b~&SykuUiOhDeFN6)0{zkG18SFtZN5tq?>SdTQ8 z{cUuyyR%!b#k@jny2#9B^2rQ|LQaq5VcZ;Qq`ecKQ7U4#yW&NcJ917*7W2uLcYxIk zvq}-QQ5w`lK3-37*byPm26<&EQ%CMZMb#PlrWMSfj`4aAri^0GH?iI1Uzd@Frp1X_ z57U5jR9}@waow~A41=UhwTGgIbL*uXIEpX7|YL#PPlZMVJ{rxzQs#H zpJR}+MSuX~l1O8Qth={VJD?J%Or_fKH4gQHK}LicXTlY6n5u;3s=-B|$qrL5NSoZG zx`W%ItUd`8Zfh5~=oh{btuN-|(bx&oTCz2r%RHNDx<*z>MjA`V@Z~V8I$a6Qur9A+`!VINk^p_Hk_hjMUzC?>==>BF&X4*v?Y%NqCYSS62jIF1!F%1zXwE1(WcLKLiY>#&CoEGD#EBhguOHeD`>7!alho$e)=)+yt?TCAH*Rr9h^8?9a7 z64?X~4@ZYJh*ovRr+PVuEr>=gw%W55FX3s#lm9XZ;8-dKiDK(^{neA~8F zxcr3lKg59|mvor{OhMZ~EtjBAc9nPFH-=sS?i)<;KijTNMO@i=F@a%-YL1CDuQL(k zmZ6DiFC|@M$!bnFn;5bwa@{vKwC}j#8@u{-PP6#D$|+bnHKJ`?POk?)20nzOml4~r z(AX^ZEmh`W3Sdu_qaaH8a(e$3ws9Wv*WqYV5n@54QRp7%D&P!&ygNHf;v{jXBiO0K z3CnKhC%6jC{SFtDK%iE!nSz81_qOA&;ZrUsMMZvvjh#k_Tne@}5#t88DJP>#mSt^a zBNHrg5wuhcdw4k$JC0bp?YLO7%4GJ>eH@iLsB%$3t?Kufl9j2-$v;TT3G~gYnO5ej zo`+UmH2yLNKp<+Z1=q9%VPpydR_?Ny9M1ROalT+a%+C3C4mX`ezk?=Fld$u56e!s{ zG*v4Mfldz`o)@Zc_ox7f9Thsdh=Yo6vT;h$-HvM7QZgwTLMO4_O9BIut;MmERbkiR z%uAXs*E6Pu(?S($@bk05X(g@$X=7^LJz=}Caxq`=QL+h~p;hGAAN9_tmw+unNB_fO z2IGg^Bz~V->c=%`H&kFKUSQAVu6>QWhI7A#?v)OB{bDI!PrIIW?lweNx?Y0Iz>p3- z_OMWlN~|G?=q&;rdm;rLAk2~SL!yq#Bp&He&i(KX!r5Ias zIk|@W&R=nK6UAh`l6DeJ+zLcau$8EwcO{fG=@N#`$=nT;LiugT7@dS?UGK)(`0c`v+a%IxUztVv*YSuk5|C`P}rPJJSqr55oj+gAJ!|wr0!TKATL2r_!)Zt{{rW} zcjnbMV*z-ohvSK`*!)(E0CX!7u5&^ld2NeuKuJY{2={vjw~}SSJCF?)`Rm$+f6AF+ zw~@na+O;eMM$%8-CQ+$VPj^z^GGE3-Z2yVg$mAkfBTL0`4m)Nz-obt&Lh-Q+WNYYf z-(aboo_B;=z=Q&ajoTp_W=7*?j3jqF!Ow#LkypWi$IVBKk6r=*2vi^lxDb;LwTN*I z(-~=r3a&*-Oioy zT(y%p62Soy{3Ns^Z|f6xs~`KM*@{NUi4eT(X25CBWu?O$uThhI=(sW0l|#bPRz~f`mUShpQ7B?&pWU; z{3m*aLb8zJz8Z(S-D^~GO|)S2QN1w|)p0Ffl+EmeCjbNn!5Phvq&tZ}j`*qQt^+pw z`FS{CY0gE;``?T4RI%<7Co1fW@JYy%5K^Hur=mpK$#e{X-&B}!%C^X>;ui=T%f!o+ zZ6aOxWkl*BqasOn(y63$Y9ieoM@?Eg2}|%(>}O$t%^h9iPD2q@N%#A{0a8zl*$n~# zT+o&J5;6q;aW5*Rdv1O8vzDL;*e?)~0v!!ZOBO9&oO# z2v&-@rBsK~P78G2qBc+qPe)B5K=3SBpx@CXzXE`pH@`GHpYb9{t+4!K>f0y2$|#+) z9JS}D*gZJoUHLqJ5pw)MD93qvqM=^C#H};oQ9KJyp>nq^9@5=H82geATd|ZQD}oB4mpG{uW7aF)aOe&yZBLl1&i z3amyqc<<0eVvM3BlGREk;v^|TfC!bQf*}3E)6R#An9=(d&`7M+>~CM24DV(1fPRV1CLR=_wYzt!3>zz!;Cb7>V2<0o@gd4 zPpmX+*Ld)C;}JWZ^Vv2C?9PyZ^k>OBHcBcz6L}&CqeMm1)WD2JgI~A33<;G5-}~PF z_P0}sQN)Y|pxBwb|8>as9XFJ2mP3VwB_E-44Xp#x`>Q|;gE8A4199!X`kTl{YS$9% zmYnvNh~)^~L5&}y>L&z;U0(xsqd(7mgtIaxD3Z~RTjZ~2LtiS&Vq3E>iJ<#JlFd0W z=`KexO*tC2>NnFEo7H;Hc7leg%1Wk{|5w)a4Jkwj87^Ge=I-LRXb)ZxqHmeSWDk4N zJPV&Fm5pFO+u-rWEC_WX%QbZOM;}paM~*o;e``~YJ|gm1@;B7n*!QbZC%C`JXMmjN z&>>yqw>SxAxAGd%jVk8czrhX$kfj(>+BLbn4z33zo7#H>kbt6Gp(ym(os zv3M@!cnJBip_kSriD3H$UwFy@kwDRUQgvN`*RxUUNvuv46yKHk(-8y|*dBp-f}*G+ zNaSXoy7Hg7Z{w_os0++$6J;_1c&7pnf=E($S0!jRL;uBJ0+UBiOog&*vzKMF;7o$f{#au`KW7r{*=4@9ZSiVF#5?x zY;-F2b2A%=aie^b=D!%wjFt7n+z+1*|6{I}!n$z4HarRAmtYln0(-;nkn6#>vaQ~H zwC|zd?v+~0{f3BPo~OKeRtHfb6l8TVYxsO$PRa>A*ibXAv%SL5((Xxs4I8_lzJ^6i zO##a#UbTFH3l5nd0Z;_9AK-UvS|9KN>_g^mbL+!SNkXN_kuA-eLwt7c49EQ#?qD96ICG=2Bs=Kb>Pi-vEx@F#5 zk{8tHRc_u1B$_>Ou}l_#@c_=HoQeh+QQ?mUai@(5Hq%x=P{RMZS4QETd;4@!6z`XN0@y;ToDc5bQl8m!jkz!Q4ZiVMcGe4s!HF;6CPXXJtwGr7OAJPfh9nm-(+G_h}? zhHkkU=O_cIa2H_mWo_f9H7z2_u7KS$N;cwuSxB0JMFVaLE`12(jXcx4N0EPAoOuAJ z+mlQn&OrNznSveF!%y(pnfW4eE|yYE6t5o(yG3+?D8GVom3eCnh+UxH`cYFo-$Wdv%9{NVZ5oHNa5wP z)B%@{nYMNBqgV}xx)fYuL&FY1G~CX&k2KO)DgcL>pViXExTfTG6AHrWJj5f(As!ZpGJB0<5efG0)5F2Ypin@u|5=8B3H0W!(K}Ge6n)_LO~SX8-fe@Tf~P0l z**@$wFR#XaCWQ<2frp4RhPzKyf68q}WZrh-*{z0&-n#7TjbvkW?e-9Gx4;M_yMpoy*eqzs}8WcQEiw-)9s!I!p zZC9O#7lfW4ho1jq)Q!O~3+@NjJjv03A`w3J(C}kf0c&r?SoaYW%y`i_om|E#nH)%7 zEJWBF*)jtKQ_LI<36W|45G0dC^cgl3*SUA*Q>`Fb&~+*HUNIGR-F2{rT`_j>*8^^$m1Rw7>6-CTH6F1`+ zy(>{a3H@=kvO#6^%C@&Yw$A+uwU+5Z8V0e=$^^~H{?#`{o-q5ENSV$naDX~^svPL;$n$xkWl zWa<;j41YKt)DXUmD6#QVCi@!sxezD93S|Fq)9BT<1S^zZ`iz}P=hMlgYh!GNUaPTjSHRXd1B57j^kDICsc9dRLoFQ(rd)8nOl zN{l&ZjH65tO0o@ChbHWtkz|rYF6Mgoo2n+Iz#O#SSChy8*@Oy5kD0)vueE>R5@Zho zJyEF|uT}$zSupBS1d=7NKGjGs)dflS$y^kVQuKSO&0)a%K$k9gxV{NH77oqD6x83lrt zB0h%f!qcV{9)g3WG6yg*WcWf2ibqB1Jzv?$Tx;cdN}xjXsf@#dY@PKGM?ZX6U3%z@ zB^R+&B14Z_Ncbfm4M|gyODR>Zq=Y+izLM!A^i(+k44^+aT#LToG_qOeP&$?|{LLfs zfp{(NI%%4M1Y~lMvCb}J^jIO6=3m=WHHC|2&_UysG#)l*C^9Le#4l&Gs3-WE+rs(? z#cSv6OB?HvHTP4JX-j(2l|JtKCLBh7Q~?3DhU`^xvVmME@?0gBiL<@Z{7f4%`w8s# zc=cqGhqQ5`k*qimVNC)^dXfrjoH2tqdF?E2U@d>D#o-;p#3BrU;sG~CRuONS`4@ru z{9)g9#IjE&Yy1LpsI^ZYQczvuW9>Aa`C>sXoQEa!HOtLrNA08jaXFiS4%YFDLCkK& zf3mUMWxV^z#WXYe>h?o(fiGm6Q@M<>t9fbr!fpA)d*j1H$vK>SGcY zHBjuJ?;+!ln!vLp28e2&G?UQ4xN9cQE|~{nMa1iZ?@O67_XpTK4Mtu+YdxXqnES== zic-*pe!kDgw>$SDvgg6FZzWS4#a1KW<)7m}PPG$SSORe}t5y#!99znUcN}NEk`<1s zD&Z(2Y2&nTLhqQKGxRlVh!L;xp0BfNALB%Tw8w*K_=Vu49>#KrIhiRS@zT5j_}c_5 za?W*HDa$ilT^KfxDzQsZ5QlaJU>_vOTCY2x76#S15$`t9^g$@edHur3+^)wu6RNzstFK$$X+3WhJG!9SWl3i)k@}n0{sEJxFYjqP#}DMBs)>fT}+5Z6a^MhbtA)JQj>bV zU}NnM&4}|eef;YW@Ydh3%gjijHYpWFIN_@&A=a4$`vCsnX+y$HETNY{5Dzuo|L!T@ zg)r%NPSO#AkJ8NnGPLvZr9ENb6S+cf%lIPJ>KGkUJ5x$4a8CVpVW1q=M0qx|+~Nmz zt!U4ct&wH6>|8Yi%=q9?t$0_VnNbbZHjCJUnTlo%+c}=e9(aD)9AwP%^I0vP=f0ND zB!WmqO!JjOkmvy&RLP1;#+%pUiL|;7f?^d#mRb{Ns7xit8J7>N_?y;872q~7h|Z;4 z?IT`bQ+@j4k-J6lFk2~A`GvOcCNimXgyjMw#EkFbKR5F`#Iwz;9B{>?vu%DN1O}^O zZ3jZ+Q2BJKv#dOY5)~wiP8Gz){Crqol9BYVTzjgwBzp?5YV6M@Ap<){R+ntf?iJA^ zxIyf>^SSngxCpyGv$1?=6BR(NSLoD}0B~oA%_C|*$padj#hmy&(AV(O=0@F5X|{u| zHUOmnMj1k}mCge;$SVoOx|oQnIj0z5HXAFgc%ApFXrFmtuyB=*C`A)s>2i3$qWsKt zBHDN*r-q@i=87Acxc+~g8=gpE!KPgVk+RIC>{wCohYb`JWxX^D3oY6S$4UY3g^GjX zU`m0CYgBDA~dZrSFu+y+aZgUxc_nW`cZIF7bpsrr%`oaip)OE;qB!4 zMdCC83Jw=tL;VI4#oeOkh^iowo`IJaFt#`~(-v?a>1X+)?Tl z`tFJoXwImw&o%%OzV1mi#ct+@Cp^i-JcivvzB_D}pG7%BwacfDm$LEWuW33(EEk^~ z6z9D1CqfJ7eCXxR3BnJ|*2n2_v5jzX>X5M{ha7TPnWu{fO&Q)J%K&2wY~+ld@3k(L zo%Wp_)6(J&j{zBegoSTvGM39I$pq*YF@oi|%b@TSPMex+2Qd3;Vh%jZa=M3g*a}^C zpkH;)s%(&azJ9bY0u$;)Xoy;!VAWA)5w zbqa=+&WV3^v##A!hR%&~42ChtHJ&iL>G!qGlxVBjgO@V3@tm8-Qol{SRb5pb&(u@L z(ZkamXL+A;^M}ioK|u_pYU*0|JZqmq>mXI|qIm~!OTTvfV8<%Bx%)3Uc@QKp6+fH_ zp5PLb__V=n)u|aL+^AEhiUiyVJjXhRsaH2Or7GfK2f1q`LsxHRO=6Og-GPR!EuH zoUHP7q%4wQ#>~0#Y$Rc19RSy@foUN^j~be{M6{ab-Hs2nAM+~KwSaX7i{pCbg3YD3 zhZ~=L*hTNung#m<$YC@|%c25?CaMTDN)$NbXfW(P+`(UL*!h#EyLtdhooCL*s>t&v zcAVo2(2=v((~uoIE-{jgHcwGwS7dPaX{5>4W6VAJ{Pk^k{lIJvJ199luE$Np%$%-b z0>(4EL?6N`wDJ)az1t|#GE*87hk-=T%qgXd~zl*{PpzxU-6mxMnGhPFJ0Z~e+ zPQMP&F#@&4G6fTlyd&ZIabLj^$Bt}?#V<}ymljgH2`X?<`$ZgShQM=V#$T_{3{@rtk(8WEYmx9leq zb7pE-v9|v|*^9zkfZ>PRQoFy>b}|iLeeV6Avp`3T06^j+iHN}a*sz5&Z{o~w&N#ZRP?YFw(PT1!hh$YlWZuN7niP`hz`d=6DxL~wiz6fd;`(R$Uq(z8~J~im|cAS2R^&QT_^KLItoxl zOdtM~|F4h@INivDkUoUxq9@S*FcGYtn zJN?SR*k6=mp5iAG*jQn?9VgM}HRaICujiK*#5cX`^Cl8IV^p#S296yO8MR70)zV=?jQ z<lwTQ-a%zlmjP`NsTLJN82N*&q0vi}oox zkC+1F4?(rR6i+#6kNDyU?{fyV7P5Ij6~^(BaWJOmB$4S)NCWm> zO)SsOU@HIQrlX|U)K%XmhANkHVzr7#!9}^tl6X6;t1R|9j?%f1E%|( zQ?I&#A4m?$=?4pL1f2YalCLJ;;MV5NXWsoKY;2)Y1_IAgY5qKMKd%Gt_4B}cBxaru zF<+7ZJ@o-SzUl0zo9v_@8#m0qXNtiypk*!vePY(PrD!llf@;~ z;Vr=|EnFI&csEDN!mW;^hMGI@r}V4lW4jpq|=( zeppY&Q8;?joxsY7rj@r3FZEW0px1lHR^`V{6)VG0FcUwLNJK_Qmg*Od;Xg1XJ8IO% ziu8$Mf`*^c1+pn5!|yy8COkhPlPsqK#i zg%o019n)F({e+KGgjUzH8Ae_f9V@}}6)nR<-Kt8>K7Ob8*)b|582-e+_|)mUH=eyu z&A<;ABB|t4vB|r9oXPP$JGyqY6p0=J#T#l?Lnc$(rc7)b1PkooJYIF&sQ_0&sb_$Q4;)f4`nB1c498zafVbQhFDUGgUoyF_pkBxvM4lUzVCWm%)sF|JP@8SSVe+OlatzZ&q@b;4J5igFZ}56p zX6ENpHJkS53JYeDaHv)1hHSFW39WhQAGWE{D~V|o~H zO&&p)Ep+*8u4?g9{sYKZcn4(sBR4DK>nCHR%Orc)i!d+`pE+F+zQTOdo{a2!Ec~kz zITb#HGC5t1TsM~sb3#JMy@LC=R;Cxd&DWdyPO^u{?)uqYJWM1}k9?UM;%4+Ke=2-| z|I7@tCS3viwPXj@g^)&hr)5@$zQR;eiWFKE8d|+>TDW79r$=NFq5a%py;DI(B!W z8WKJS6T&y-W%dwWV`@$f2A2kuc&KO!>wkGcjb;suZDhT!nHV69jQEWOYmVibb%pb; z$~D!3n*K_1C*4$aO^;i)|McWV*g|kAP!V>smq76W$vCt#v@ebXcr$heDt&WFDB^%g zR!g3cjMXbKFRFhtIqNjvy*1-fKXD5Q?O~P`%gP&QSotOPgeO@Fcfp?g9ooQrbJDz} zMEBOr1~Py>Y4MFM_{-$R`2x$0Z^CA9e;uaJ*SF<2oj2cvk$CZ+?aQro3)Ur9<$2_=mCj`Q642`gLHU!e;XBG<^o?a_5Iabs^3GalkW4B^oZX&6_wdZid2XNy$z_f_)ihQPdb2Wm@ zq}K4Vt`V^|Y>haAu77Ff%eN$1#@I_2F@cvLkYrJ0SZ|Jvw^*g@g3UBWCL{& zoimlDy<8ohPuP`d@&0B4&fkq^6(ti*l=IiOS7v%tgJer_gJV zk&ICgb08A`SGnchbMOB=&~C^orxpL3h(xy!CF6b~1-h!z)E|qF;9h?pw@PS9c;t|p z3oX+y;z6Ro+8gZJu(NeH{s)qkB};OP=! z4x?&-eQ4!6V8GZp&)2||BS-Ezn(ASZ%)Mp`IXl_1bIu|Lvbm(_OX{m4nBvz($x>%y z&805yoJwao={|#o4*KAW@lCc*0ze1!=6}f#10=0mMyyI=;M_I_JrU zT16QNAn#exlvAsMe{q-+#bkT2esHt46tPf37o8(iz`+bs`Z0O2ooHp0c>SOxz8i;k zV)ayG0HlmLc8sN(*sO?JQi%X+%5Fx;C{8_B?&pgD*sWWVoGWAP4~T66qs3fOEX7NH z}O(EC_x3GeuQp-~!yl1Bh2Nn~Baitc#Wd$pHG<*E< z1XA0`gEnjm$vm4YgVF^u=Sk+^HK%<0!w8GntJ?$23#Crw!->=ZGotW;F&L4AVK(vH z=!NYUH+zs2h5=(km%*Og9%-}ROAVXdWE--^avS;`QCf0CZ|5!(Vo#epV$aufOQXzN zOm_Qsyp@%CII0x6T;1~TjB?}I=xkn&#94z+$1LWUj8%tp>ZkT&8AQa(m$@+vq)EKjB`zt_n z1L(D};yFcllRiNB2ylfv2|3A~8c4V1#%>%)EZ!?O@c>LdI1LCYxG_a6?md@Is>Hat z=t%k(sNEpxs>wA>xoWSLhvz3o>!?>p6Y3@c?dv^m?{~B!H@95N^UI>1h?VB^G42l( zT4OJ+o^8IV&_qp%=R4!V=9%UC_E)&H_*251S&nmG+w5uEe~sm3vD!%-hn;6Zc#Qkz z%odPL=va~^plSP^a7me>(_)Olj8q805c$CxI8EqB`YHQ2sntjzwCD&x6I3=qfE=Ea z2BgUn1LfR}jyeB?pkrI?R=;P24PL%b98ej6FwHRm!dDDe#Pn=B(|W zjC`V2IZ(MxSmhS2WTKHx+92GLxUY~1Fn!GFiM3pz#Qh7+7r2$%H=oOb1q;xiIbKW6 zWi&UD#LEP>1&w+6@y6e&9N7NL6@YYjOR}-AvK7?1+*=?S{{Bbqk$6Ay5aP}8mH*7Y zn{oUC#Yc?2llYMa74RCFX9;5kP=ib1WCE*LG6*Ic_n*uSu(OHv}}E?_daauJMi zRQlx_UbgNHW)ED{lGTlRCySv|HM!Bqlr7b;Y(NybW43y*>-#kC+3y^Q-YzEQqk)LY zqd{}^RIK;N@n$I=c!(81W-M0585_giLjKI6UF+6UC@Jcz8=b`@w{YgZ2Tl(_kyj|v z6sS83N*s{bYEC3pdVk4XUr6-_g)d}EqMXm2u5tNJjr4=$u+8MKK64>tQwN|cJP93x zxIyUDp(EHQ7MOqBIz0+hlh~mpRH-J%PGpNK#f=k#Q)@9d0W>P65%Y$r=>5dnrN>Wg z>Oxjet=00egv8ke3vJip`1_hA6|}QNnHz^w43ApU{&=p;1wb#)VV=+W1n6+ z_&_RQtR84BMSS=1Z$A)V2o1P-?y*b>-$nc?pElSLg_)B$-*ecpbqJG|jLn&q#3qLX z$sY?wm{()*pe-sThSGqu#Lh(MJ;B$R)#ViY*Yu<%IiRK^N^QVAD_lG+c`Co`uN`~- zNk=qAF9WWBwRCPRXGfC5!ciR2QoQCWmnr6a+p$Y)tCh8-cu_v|!8Wi9CIU1~UcT_n za*1n|iR!bcRNu0!m@B=lJArz@!R1(Sp=qa^$p~n3T~8HfE9DErr(U>IaSO3@Rp%`3 zv2+RfL$Q3Ic<1&;MvzXkf%9dmKmL_$I!cm z<>a`|(){ZZ)dglczql;Ha(;DVh_AtY0D#UVzmwsE=&ML}1I*`q6!V;8SkN=*<(G!@ z%nnj_k-ZavbO;n%^h8+0n{)=I5wQ_ZF%lpj$W;))GEHHD*dcf8p_o~Z2v6Uy<>oGo zFvnqO`T8AC+`r^kMV;5;#pvN&H;93@L?3ec(ovyb$xDCM>N`3H+>}1Bd}eQB-Bywo zzg)3PbM?FwKew@tWs^qCY6tm9ChdAU_ZR%iD54jYwc%pzI z$wvm!VS8h#jNuT`o^@)ox#qhHF)iN%puxIra5`_m)A-VDEhiFx=^-xq&%dzw;7ZLE zaR_8hmBcv5V2j)Zo06+CVKmcIj2?2qCF0^o;| zTlln~7wk2KkO?wKq)W*C1hyVIP6l`{9&7>~r;-IM5cIIh9v@4HLG41>E4@?hcQD$* z6$(&lIWB*4aNsj<{_#e71J5fSwGMN*D*j&OSV%O`s{(JmY@*Eq*gSfu#%gZ+&q@(% z0mw8=PF@`VeD5t)3m`fvFCKTsQK-ziC>esFJAre zVHZ}Quz!y~Gjk9OVh_`el0h8OAS*(4 zWub4Q@rxi+KvQzWyVj>u8}ZcORM}~j+Bm)*FQAwpD!JTAo?8ea=#pc)>R7(88Z;Kx z%0~iVp#{OtoYOe#K)PZWoEtNI-IL!YR*K8Z8v`>9ajCyawSn|7gV8q_VQa?K7F4(FlSd{nk1|1w;f88+X~70aspV z)v{{dd zUO?c!1+ zmjWBi%h%`GBcr(PE59Ferni!>IbIWYp$t zTBW-cX>q?890N1Z$w&Y~3jk6Op25)Mo8|4VRJ<4>LRBf1QpTVA#jo2?sWQq*fL!zV zR&Fc7o$xBqLj1R^OwNZH*fd$jo%69Y7REn(MPLQmXZi^;jQ12Cc~aMfs@=+|bzmd- zVmSgLnfznjn4WFL8Y^ou%otVRDrIP!pTDsHq7~EuadWDaFP46SPh#c(0DyVX@`r8J z%bo7VoIqAkC&T%RF;U{-pr45vai=}dL`|tN+1Or1w3WMZ&5C&sd)B<5>4RE>J z#o5cCQ~SD;NQshU$k{5XMkI;>3~#UABQptDjCy0W2iBvEn3alG;Y-E&q4s24aB8Mc zu&rN-{PxSKJ%9LwSYf7=m_)dfN&`1HGGg+^ zzsIaIts94Yqzc(gylc!{q>-7tRP$NZMNF-v<^WS7*P6!NH>u@ezZ560!6~t2R(dD)msy={iwUl0!erPK=$@WfL z`9k);+)&TA8(_Fa*CU>As#cab?-J;({q)2Rgz+>bVK~8lV?dS;X=iBZFoHD19V6|Y z+B#(LRP&ucAIQlvbs!u)^U=&x;}QMU>g^y|{k{SMp3o8`+&RZ4!{@kP=ZZ8G2FnM2 zZVyw@Qe98$K~|8;0waS?)N|^c1#O-C>#drBJ;s)(o%PFzgP18OL-~I?6^mm?Nr7y* z*T0}gly8}P3?ZRt1%4|y_?1nwR0TztRUIXbgaK|#Vga_@z4{NY6xsl&FsU)#KSe^J zy~ja!ANkb8PoMagQ4oMVI~;A2QNOzp`!ajF2XeJN57$>#7gX^6AO}^~qyJA}2e9AH zQtdHs`ZP6_8SUxI3_shm=uM}HVRY}?WX1{Wz{7-a4~&h3PY%CM|7Y}hd+!5A42Qz- z18!&oQNrW}r->#wA!j{sWGlR<8(}A7`%l(ppEyCuqZez!f7Msll&75Ku z()qyfYnrcU@%WF?n^rMCH+|B@o#%Wi8UrOeiY!|tc(80d12YaPW=V~XLHi9l4D{@Z zO$-s!CO=064GFp_BA>{_H~xW7@7x0aAqa?epSekIoSUg#c~SULemH|<5`pV@9?qKr z`tSlNpoL&CQH6gFumgQDdP>#C`ri*ElZh;SqsaY7@L)PJAmxpVKjAYu|ovcy9PuIpFI zSUIn9tEW=XVkA}ImA5Pfy#J8FHj}}pc4dGiE>kVuCj`Y-;p_KFXUOn-p>U?Ien&vU zRS!QD6oW3*C=q9Z>T+T4j{&1dSjZ(X1vwE{%y?#DM_!;d!8K|s0m;AzH-5Ag1_pdQ zgUtvAiwtBV<}q1n4jQIYGogEY5tu?|Cz47^SZ#wSG|wqaw2IwA(ms{0(B3Ousz-o! zMAL(4xw@29;}k)-^PmkKw$XO`RK3Rg|U&>UAZKo_STl68HlZ6+qsNoSO?Gx zbNA;OVqieQzq?Cu`gqu2KdXa>-*#O&;;H}kNK%PnVgNg0GQ0*a5XLdsV#NvimgMO9 z?>qP1+{mttcs*<>`8@@se;7sS${uJbETZ=5DZS5?}KU3ydPm8<3U8>hjUUd{*Mj4*h~UKGB~e|Y8_(9=mQHNj1c z`m{j-o*iB)^hxkXabVoJUBm_za46T`>;1xlDSjiuG&0q!oj|=9d>1a1@FMtSFhkH6 z@NFo1*~m%5wRhBcV8#b}PS&S{2pOecGENj8h7OaQ!1M|HXtIHgX@d(1OYfxX?W7qs zvV;0MvKpG&QiYB&Yk=OkjMbAE0kbyieFj!V*~(5=8^sakNXyc_CnFfJJJd-UzIULP zR-{BD<&-;;*DnVzUy9@vajW7@^iO-j#dIlK-n2#5I!|252qNHi1dLJVwrmH~3QRax& zKtZL=)-+d*#*EbVf5hk(VmQKP2>by|Jw5#9G{EhqohvToMt(FZiS8Qmqr@s6JCZxT zwv7a=RlDorPEyP{NQ4tarv zI~XEVQ4Dl?KZPv?RNJ7;J(csGbe&i1b;-s*%VMCPzmbh+Mr#^Avsx1~;4BViA#|NR zG#2+Tt4>dlawPnKJHjg)^{;XZ6jr{(E$qCCunHNzS`bbmlw9Vn?Huef7~l1TW%;qU zMX|*NoT3UQLYB2U_^i67VjqV~0R3i76Ts*#!UiSnk);&5y z5NeMP8E_{2b=`>qYS_Sg`twKAsU*m<1Td5ui*VY8HEMyE97BF6H}$b41>9@OysaTP zkkK2Kf^1U#wuu3}U9W?59FK(C?|1MbL<}pD=Sdi$=Mh95Ye_=igDGI{8+>DCmMXwB zCB|ZQm?SbgkTWx7h~Nd5sjUlS_3Esu3!wjazG*Q<5j10-Fb`se!+^Y26+qtMR3Fa<*Shq$MkVcrIm& z^7kLPK zKK@TMmsGD{8#GR;+2Sk;{0m$nlZXyqe?Bo9)(1ysW5tZ(#ldK%$sAuUn~x-7dcL*i zXip3~sC07n15S`o6nOcihozXDC`Cuj;>v0zS!o=oq)>;lqA`tkuredzNg$$K5Va`x zrTquyXRzyne=p9<=CSF#s~nDu`=HC9p+33^L_*Vp(kZj(fKnzMPW90Z5&8-F$mF@P zA8?Vwy(hojkn;y|XiU_~*_acHJF)RI=k)`9TxiYPDoB7yVxUju$5A`vqZXu?wBWXu ze|7g(->hK66Y_rBO91tuW@^qwKbDWB7Rsoums0i9k0#2QY!u^xKuG}q#kr}K2mxCH zHJ(?{a~ij~Pwf{0;-Tu5@9<}_%cMQChWd5rWq0cYWp*5;RD&A8T$1T7lf6Jsp=5*o zD;6aZ;o66DMNT}d>x0t!Ui--(eaF2*VT{t9wIy6Uh;xi`E$(D-kO6J1+gzM2O&p3{$gRTZ%Xg6A-=nHlnSx8(A1?zan_am~h-KTb^)m#f(t^iyE>bqe=& z8r^tsM&QQap+gfiuGM2%Y(J)(i&7_LdUr+E5d+a_JSX-^Lvd9*0G99&adw7)MZ5Sq zZWrscUUHNvVME1(k1Wp@RL;jxnF;TE%*G z`)~AYvzXw!N9#$o^lm?y_Av|_y$rveN@65ak3>$TbC@ERz$T$2>ej_b1}=B5_Kj5i z%p*<>d+?z9p!Cy~dNu?0eI-^}Z@`>n%k8`sk8b~RGVqf*3ro`}o*i8IfB7eHf9Jt= z9o`=vA=T({P8Jo((9xX=CeX0NM94Z4^)k)OAt|7X#TD;(0y5%|4B#knvh1(Pjt~v- z$!_QUPk-Xa->k)B#Y8h17Y>j$M#mY8cD1pcTW@BLl#{bDm`Ky$hK*b+$B7!)!8oU} zk~TQ;Yq_@?PW5wx%Wu5*^rN+#nnl#QFq)6eff}eLBZkleh|xwg z%Kbw7K+pFo>G$TU6la9*_S4XVqu~agDcA_pr2>1QQ+qm9gFUti1%mxgwYqDd_{*)O z)f_hMps*-ZX73!@Rqzsn49IEcld!bO#n+xrtj@Mid=RY0k{XwL+h5&%o?L9PNl;rX z$ncY;RPJ6xIN?i8*4+z!x*lI_<(HQ$84PlYY49!y9+0{!-sS(;|0wY$XB@uAk8nOz zui2ZV8-;NSjSgLFEYIac@FMLsJ(CAI#6E0#sNsDgnZwVJ!DP90O6o4&`{PN@Ep4^qdAh$g zYC1=uvu~UEAd6_AvG|NM1`O2%MKvOSjG9eI|Myc8PtO=~W6|I-j1Wy4Qt^J0K(G>S zSY1GbiMBSYNHB5WuNjZ3toz1vAHVsI(iR5mv#mpiD_^n`g-X3rifgpEGTF&RqpBU_ z`@s{QMHenLlg;H3CScK&aa0%n2j~GQ5VNS+9MjGGQ<9f9G1Dd`K)<D3;IF!xsyudRnN3qipS`jTMk`6h7eQrZ!)&a{ZqToxT$9ZXYPmYFJ|ON08W}EI!9Gm~?OOEPa;IYUD-k+ppdFz} zSOdiYik^uWzl2>+Ks#VfGOwoqLzt3qBY=>r+ahRMG7 z5+%n1Q^=a!5$o@Vk$MR0fY3?IL=HBh;psh@+AbysC*!1ry|O-=!niECln996xrXvyk2D0^8I|w#S=b0H`!C4zA@J z=Azg04fh_*01)DpH#X~~*};O36(tcK-2YmDRo6i*c&WQUy;KWs=q@0i^N7>`l0OV| z2v7_R9|CVd3@;SPC^>2B2jLi}#U5n4b9|RWGn+~b6va|705=##qQc_6^RIbuQ_FQP z4mTfIzT;3vbIe?1Io1Iq`c^5T3z>PRv+OOu-F6D%+DWYH;)9@-N^uX(ZE%vqH&^q% z*qA&19%u8EUFo;7&H2G8kjm;7kk&91JT`~BQmiGK{;&%k1YVHeb_j4WR7^CV&s;v_ zMblW$T5KfELOrzA&kD3t@I$m+J)k&zk53dFE+^wxpbgAkAYMb^kdaUCL^G2IF@#RA zxVTJV0xB&#)`G#5L$gBIlMq8gmK|R7mfYk|RfY!#@dSu7!1UtkUQ7T*oL`E>kAV~p zIxznZ1FLW}^wpZn{?;gt&W6+17lw92<+AF+MdbCovLf4p@LC~>LNTHUg*@g`&0Dy> z$Gp2T&Viy6>{Jr18IiFKQA`E;KLYm*$ogP&1c$ObLiJ;{msdWI{oUX;aRrBVO^9I9 zH9qfZ5q#=4vZv5{Hip;ro|JD?uY5oM6yF7ZcC;>^f+0#W_Z!4hl&>P)A&ueiOdm--7v%=I^4%Tuo%)FhV3CIHPj}gPbAyX}5vicHHDwE5;9E9RI_P^_yGO7R~_@hY`1aS}_ z_>%x)MB#}_O-!X3Vv#I8rJi`z@!q;ha*JSxgvKvmO@~apcfJQ5XGOpn=C=YWgCJEuNqM zAd*Kc!;<9c&r+wHmURH;YGj%L7I_NLP%KJB9I_Uy&Ze=GR#C7zF`99*P13>ml}Gt+ zGP%ER<}){t`%YK@qX6B6YVIV0u#-p{=nhaC$1NasqoHrMCII0!s;-DX;*?CotI)g~ zY{vuz0V@g=w=&HXp}dqFvI~&u0;22!=FwqO*adjXb`Jd3+FBU}4Y4ZKW?y*lCl*c* zlO?ZQE>x{*A{GeU2-i;7m^iqIjR%OaG)>Ot77F?qkE^z@qi@Obg*64hGT4*nZNKPo z6q9g=j6yBtaLGs^kqOMku;PC^I$tQ@63c1MkFA*BTNPh-Ai{|9%cWPY(la9L z>IKAm-5D4D{JxpTL(2+|DY7H1oO2z^%6dYuxXkmDb3^%u+0rpk5L5p*c?9I@L(94w z{BaAiZFXHvG1ndCrAD?+YboCjD$GLcFy;x&uBq4bLcR0rx!8_IQ2F=AoAAaQ8eu@9Bm-?g(ab+FF zzrdLtN-Ma0vYg-8Xxtlfu>&erP<6`~cGhpZo{Qq^d;F6LfcifFG`R9X{$H{;d3olk zmw%H4kl8Ve)HmE4KT;o@Db-|Q{WN@ps7N*U`<^o|@jcuB{_)3)#Wz3rg^xWM^d9bE z-PzGxM9-sTICdA`-nSR-G#rkLAS9|~(%geL^e->|^Am4Q79S`dK704!3#|lZQG8dj zWVa7)tfdzA13Y^hLkaQ*7x3w8co5R5*pNdmoTJgff*t=i3uenrU-7d_rV?9=NZaJ`s@6dgaNA z5<$KV?mk^50=fb!VLUt%T#qfhpluCujo~nGml)R`#g{+Ne?RsUzCWzc#PO_I8*bXc zhNvMo^30Gdeg-TiO_9=66>bQGLXauUAPJB-)o&>vy_Olkb?g{|FK(&Uf+pDhB9EPB zIUB=J$^0rv+W1VqvUtif#)^T!+TMbT#utZ4yM7m#`QpW#)*s(w1S|f=uB89~E(~Aq z$Ce)sXfU9~HH&BgxWIJgZBPhHoPJhPOlcvm`c0IL%dwKDxi5b8D&u=S3nJ9^S`dIy zrEA5wpFp4CV>4f*EG)hO!%w5Bi2K<^uzP?OGcQHBft{@~xPa0B)WG-sTk3Jou0M}y zc-K|HdcM*g9QQ6LT67Wf@De{r+vj=-GmcGE&fi`@{B$2{elZ^pD)de<(N|9;QB{kS zJh=!Khe|vjB)8qa)d+bvM*hUi;hCSE`NyztEJVOtqFaMkB<}g0A|@rf(_Dp!i>S{* z_6yI4u8_U3^X-?x*pq_ z;pM3qDvOZ|Mc>5*7y6~LCiZIEe|}Se_iSt@@V2~H5_O+MYQ#7ZB69%xvlV;5Bp*s( z(L!R33>~NtF&z`IW2+D((KCDTpWI4N4!-bPipay<^y56e+qV#^>$`uq--{sqmA=pK zDtN!O=lI=6^I|_%O(OyD_DtTHxbxzZA}M#YBMo$ZaH1@)zH6n_0Yi~Z8i`kEWwo< zSe|hsFBhf|Sd*L5g6rlGRHK=u5EEZVkB0d=^bhwqI~}96=%C%m-%XMYfqS`Z;{&mm zWE;Er2HoG!&HT#W&h5SOLATuq)z4E)g z<rNa&#WvK8F_geeBCKE-j-V9WMVX#W80^$d*HDt1L?U7R z|9^QRb~xXh&6f<=rXcHB>DgGv@fFF~s$pMJAuaf3H0`CUsB2gogae@*YLqoD&0C2? zNoXumL+pE%v^jsYH)%Va!6F_k+am~{qGElSnsyg-4l5f4EL2vOBOpHjh@&TS`4SrJ z+wZdeC*^e9Od0dG{{Zt5L*SDzFw6LGCI}mrRU^}-%&m`BPL2xaD5O&3fbuxHe2zcL z4=QR}ZWu7aO$dL~r}Yaxr%U72@y`G+}H$)fHrPN33c)YdeyN&XoXMlnl}$ zTFSt+O;AkGBLMZ++%#1?NWQ5;EA*fjBM}m z(OtfVe%9!=zNju%^8i6&@0tB4l0krRqDTeqW>m(av1B@%EKlt6i^3{o0`y09fRu^Y zJD7Q(a_tclbon|YMejmI^J(zGYC8oIZZ9#DxS&{FhXjB-m`JVT>gb-nU zQkeK)+>uOq=y2^n2$-CB9>iEcdvY^Gj`&|88{mRCwqFIOpI8+fi+NK<#6=})pk!EQ zldhjZK3E%*4Kz@x8Hp$C6uyt14946hCYLDmIqvvzu*@k1?P%67xOw%yz1PPG3Ar1qh_Co9_7ush95T*E_*d8u%Rh_x!m{C(M|5p=b$zU7g<}z^ALvETn_Ye zywW*)W@x{26j3dkRzqoADG=d zeK`AFGf&LSRG<>OT0ypy&O}#>e+Vi@zJq?GVX4{dw~f9Gc2pio z7R1V^Vt&DX$LFG0RUM`Rdv!0@-COd0BLu)L6Uw3Jazxs)Qul2uy3*sXGJK#eiE(k*BBh$$7lzp(ggAUneEDor_ zkVPT$0<1JLYg9V-2dSZAF}=E8j0zsC&Rhg#3FT8APsf6dLv>kjg>){XuVgB9OdtF^ z%%;WG+nCH4bIxu+o2g$Xp5^Z=dYB&p6M~8MtB?Stw48NjE!_b-qs#H}sLvbQn19qXLq>ju(S ziw(;$u9n)1e|Upv+xhejVr`P)H~D|c^y_ukl;N%D*KU#l7k|Ux{2JnWiK>ZyY_-Ew z&Azor{zh7th%l|Y*?1qMfjjX&&*J?LL1s%c?}W@?auLKV^CPN;Qb@LU48C3_JIoL| z^de!_ha(Bm^wd%9vGrjPgn2CTV!|~N1aRKL)RT4lT(PPD5}KPDO7rNa>4*06^5p91 zD_HTn&I>VLNTn-n7^zXV$yr80OH@E?SJ(KQ%pGsp_Z54$amn7R-txdSozR|m>$~$= zZjt{|Hfn)d0L{}lwrTB<^jI#4Ru#o?B8tW9J$l(css_bg5_EZJm$n>3$Hr~T**Iof za#B8cc_mM~U-qUPp22tL=kHPrN_=%d@w&il+&d;V?%D573->$45dMzH9+?axBsLmD zR+5n}k_UixkA^p+h`Tm#M-dTOXM((wSKln$lbb!y^@NiT6sn6Iw=6`O<=S`33xEQ+ zxpwYGx;U|b3GSgu?x|YUR@MRU*Ft~+Hzdx-Mgm5Ul7%2v#9nvlfpjFcq#_c6?EV^l zlKevt{((4GC{6^(Kcr_RO{BJFmk-sDxrH&!iqMo7OBo=r+K^%kN{^tJP(J(y1R3;i zL?DzNvBVnWEhH?8Kgg&)d_ac^8U(-O^kX^jLM^vOg$kgyqx42)pDtnq$V`b|JGUZ;?M^1SCqIL* z!VoPi_faz>>^$CnK#w-`!mJTnls6Yl4+F-!qq|&dpk&LMYu2t#$HLrgs{;MXDYxad z8j*yJtn>2@G5Y6<{OkG<0a%D+5yc24Jz+GBqe3R!{r~g!9&nDG<+=EL=N#!sN99O5 z(oyfdjWp6o8cm04%dFD~o8?iE}ynBEKoV-vu1Uz?VMc1iwp2>*o8LV$#lgm4K2 z$jv2i(^&0&-tR~=v-W}wA^CZ|JFA(M&i8(AdES0O|IEz&J2*86YDi5LMYARqg{FWu zR!kWbcq~ni`+|hMX3)Kvf~|_=y|Pz0W-m?uWqJK<(kMfH5DaMg}r9 z8#N%@Poa8jbnKD9aWyxCAgDLWr?YVgj{psnS-VB>mYr5S?g$=BG&Ne?EBtQY$EeF? zMdQB9jlkdVQqfNE8Zs+xbBE(7A9#82C@rd_fj*J@2!Lhnfc_uCY}UlccEVxZHs{14F|NkYit=oj9Y zrm-MUI#^xDh+u;*{|vgk@&a^;iGF}}(1!w0DCmaxAfA@ua%47?IVjfeVKhc`fM(Q> z*rywLcKp|GM6}USwJ=u8h;z1+I>odkGp4R1y;W>e5EtkkQ?W5(8sqk?sBd9uG+<_! zLv>fiLw@Sxd!}@igW1K3xr2WawzzB#8EIj^)8)osH_w8{lCtV9FeM6J1q^r-OvB13 z=HBf-9CGF@lE<1;g75ydNX}{gHSu5A9o`nDvwIIu`B{)_Hrx?%gZa_ z$z~dK#>@DY!Gj{XkvuB@>u@KU#4Zj8uuT#N$G%{HAfB*k*d7^=`s?9H4#|6=)d0_A z?W()lu|sRpNCDZ5cr6o_oWGKDu|S-K+rz_O1lzi(ufS^a+H9gJ;u^7uiVgY?{J7>!E-7;Yb#ZzJLY z$xh{IDkSDPfH{a%@KKG%CBif0hf`NOek?aVcJU=$EYFrLPN#0ejUT#UhaQIVMwlT| z@Ro$`sl6;8aoFaIR*yx{#uu9c_J^37u7Hb;cK4P%0%9x(9bn!OWVzcgz35TVW{+4< zuq&DDri#Q)IIC^J@ioPz(VB0mWv^bA_PSF`!zI;)(ctC^`P8Jhz7Afwdgv~2OJh@G zVdp4XL%98iy`zpouCg#b4l3(6VTdMIi$G#!Mg|k~p;%{&ebiBHcPW6}CgjG7 z&Z2hH>(A%)M{Zmls>M%|q(Vo`(TLoW%>U%EaHyA399VjHM0RF2dw zuA;k$xg}jV#9l=y*kpD zU(;?;+?w?AkAxok7UGVW4oxPdgE^MGp96n@xhb6iwZIt`cW;DOfMPb7og8N33bYGQn?T$TljJe}Lz>^SlJGI7GZXVw^!K^YC~D=gL@OHPvL>Z~ zE&w&#s-z``a!|qUn>2s$FKil3^MV)A$OkUgJ(^jxo4WcL=cQJYeZ>DJhfOu%eJ~3Y zQ4`j69lkDL%TM3DJy4Sa7vv zt|BNMH0kNm+>UlVU=@9p>oPVI2JvBIj+nIVKH<23o9beUSxj8_0`P}KdO<3(kE81P z4)n|Ny*C79pb~Uw29SFBHx$0cK7teo9IGqf}NydUE%#7FU+|GGgf@&XAt1J;m+ zKoK{79vd;R5&&<6uT309r>XOg{i|bQXL(` zB&9Q9_7-O)T*|o1*VdxsN1*l$H0oB@jy4_cQ4eNF(H!o8`99}x%%7m|W1KkvQsIXw z>CAy@eDmK-tsKjs)e9D<_vx7T46QB;gsL<6Q;db!8Q*~B7lY0i zP%0SufT5mN^mH*P8mpYTETJ`ZJ$xjZrWS|5*^0&ZRmkr&5nw%E{aba@`6ax>9 zQL#P9#&bG|*h2}ST29AAbch3d${FSXi7}&xIzh2yh)ftc=g=YCo8n0y{_pt9BtbCO z=qX3|7k~tBj=v{~zW5>f8*~o7rmsdM-{_tP4m-6R1}IuQ&J1S1`^{g@umd~BI%rK~ zYq|q2clF0;;{^JY9M0r$?BJ3RkV+*j!_1CT*ZZdS;Dw`_Q~twghm3(XxhP|&!g-fV z@|n=aKcC83-6>4{*cGkS5?(uPdSUEt%Quu-G?GQ|o7Nr)0WC0r8BeB5@;jKUCVZ)q zB-qUfP5lTQ{n11zokAhF+wHNHWu+FVn!>W*FDilH85RzI1BxdYrudPG>-T>L55H*W zcZMDvde_j027El2GdFEQ!<@m%6#f5iQ8$S488#UZn)CV7nSrV8cdcRtGZs=zNV*?e z@=$*7&bOMAUjMo+)m>Bn^Eya47EC6BfmHI9Ph%&pMWH|#hM6&Ur3^)Gx}f=h%|>WY{ElEp57|{i&oZXYnGLYLQQ=MEgTw-{H|352@h}-kAmdGt z6q6SWv4U;q%S-sR)1VbZyZYjSAWlQ)f&qO8$;cY%Ws)8UUoPJdcp+c8V{wl3cL4YIeq*AeMvv5?$c!`OVgnd4fE=g4if z={>@9sNhl4sk6f>Mu=k)u|LIb&xI02QD*xhbu&iGMy3v3J(fe@RbAA#c zCnqoOHd*h3R9O5Wj{}cl!`qi$-D;sD{p74AU9QB!!Ein4iBF_F7R_(=Vn${_=)ESu&q29B4I!el8BaA} z6TS_|2pG)?Z>Tbkr&=8LkQ0F@Ieh^BPAJPvnut@LyeC66WT4O?|qp%f{LkWR{w)BwNF9V_OUxG&5f8{q~=r*zs zL|pFSV5J7H-Vy0la&GYNv4)Juk6)lUAyixk`M`+c;cNCrhpU1$2d3_>ozHbzY;Mm> z3z(oCC``&FJ0_}B>}KaA6VYl_i&<{;DOt1Z^Y0xF&6`{Y)^@H70dd@tbG&4|v7E%R zr)Vq5ETNTXFuC)ksR-O)F^(eEc81N%(FiWY6fK6?87xx4oW07)BQsZ)T`tUBz(BV; zCgilrXcEH0F04c?EocszX9N9c{%5*3_knDos`+gDrQt|)L_(T5VcY=9fyz-Y$_JJP%MPkB#0@E>@Mib{imfP?e17<1dWuaxEO;% z7(2T2qFuYuATHQxPM(g_AvxpnS>gNng!r^ik1ioBEO=bQ^6*!*-uELz)8v=D|Q@ zQw{3itMe$Ze5k`IU^Xes#_<;p_?@QQwXq21bGWMAZ45{Q!}Dh1m`d#xog+i_W>48^vHAuF$LdqmEMfcul@fLevc8t|g)rdM8X5C0>ew20>o}^d z(64^}`IpXpUCiSA*HfHmFB#dW(y!9y5{CJ0EPKj6T~yihc(y0Hwk*xIgUBR&yf5K(nu4=H215T8Ly@D4l7 zNV+1|o-wn;vbwyi$xbxoqg;t$vZ)ufXp~#F3;GDutD?JOChK0!W50GzHHMmOr5?!- zX18K2(9OE-#+ zLgxW&!FA4gWY@Ff&HAY29SK>}7zXRc+!7=uw~Cp0EbI!q>=Dm|%j^CJ|IUe|vruZi zHa;423HHh2i5P|;I4!=GViF>U619+O6BCxxry2H<##-Jb9Yb?H%x=-#Vaz!(E0XJp zb}3zTloM%`_ljIcd=or!1bH>&B%cA75Q~tn&y@y=1gQ!NoDDNtc|^Lxkduv(HRp*6 zj3Fsvq*owxtqU^A-aP?qqGQgTC&MQT4i&Q?T_U2bc8^BUL9dY6smDlvFsEfQ5ZYh~ zc5^gu_L~sC@@K-W`CqL})Nn*b#xdqeln{YVMWd!&s?T_%i z%9yy>9mm!dnY!x&FWykYnAYz9&+1{x5hzD=45KkL5$5y5kEx9g6muA}m=QjFTFq?G zkqJT2aVILnel;B_$Vb$IVj|sa^csN6V1Irkqg{}-jvny}RODoJBGOj%IL)lKu16QC zq5XVjdOH5`1Vg^4g0zsN*Wf*>${k=GDpR*^WgYU{phwQ#2E%u9=(R&{JztL)C9a!x zn2L=zG)i9^vnDULFt`XBhs2HQ*J~JmPi%!iKVC3E6a9fn)u_-gfD_HZ=V}P<0BIr+ zk%J_>_AAtpqb^}FYhNQh`yjfxXv%OfwJV}qqQzJaORPdin*+dJw z)h)}acU#jE5VE^`7=Oz(mxAc9Bq_gKeW5RH7*iV z)fm=F35sVdM|n(?WeBN8z!-Dfu%n6>?m5se2I~SkOS-Crcl$J(f^?wJSAVG4KuQJH z;Cvl8z)1>flDVEA;3SHi5`DLb>Td#!@-s83#Pm$AQd_m`T95q(pvXC2$h1OsTVNy^ zZ3N?zPvT(AML=G=o}Uvv>g*6myw=6%2aviIK@P ziN6E`B}TQSr^7(X&_#%fU+~=j1)ygu34W`9=P6|Q&w`u*#!;~C8x{E*7>69TKCU6H zOZq|p2s%68a;OP;WP2Z2!R<_SkPikOoDQuzACq(^fkg3EMtwN0s}BJ zT^QLlHe-x7{6(zHGo7;XN0AulFgM?rtc8 z20&vgJN#N8jK2|Pn!F~Akd&^lgA;PA_I#eXeI*iba$(9v^0 z!EOO$LE;h8ZMXL-D>#f4krLAc{*|JpdE!x=KEPJdEy zKmKObA{A6mIU;BOP|+}_$i(hFAYg@L#9j^`xNO_ivqiKatxlyb3JXXhS`@W*tbg=U zNAsC6mav#;E=LuUy*hijh&Ab^)XVs}Q|JCxm=khCZES}iuY-pQ>6!*RZ~JLLK1|eW zES@IcjY>-axhV#cOKS+cjAj zJlj21bru?Vv+r2lu1~*ZyoxcAi6n@JNw1jt$IK{e`yOWRbu@1AWk&4qL|W7mJIBg+-~Vq z)qE3YNg@1U4K>5p=9bcS2Scl%%s%E!W^}A;^MqX?W||q6g=T)REXYr1*|ht(h;SOVs?MsD6Px z^ee8a_YX?B+DVpepT?bcbhEra%W6$?Ea7>SK; zE~^+g=->UgI4;!BUof4UlOuAv5y8|@<`N3w+0hqtv$FM0hur%!n=OIOPH_LQQpo00 zV;(FT^8L*N`}3@3o5g&05&OdjyQiDf2R-1(r`tZwN74HH(`XUpMS4%Oe;Tf(EMe2{ zExXbkZDB0R-iXy9r?&b;#h^HZ8T!`VEu7W9f3rEWA7tLwR}LYtc*| zlhfDvgHCI8?)dRJyT+tUS25?46BBE?CE4DeQVMb=NQ=8rGaWvWbhvsQVWAP5C`adlu?Rg@O(iKaB+6n(6n%Txy~T8+ z-b|Wd-GG%=aW}6Jma$3aM!K1N-57L-3>Xw483#Hh=9`caBs<8RWt@;IUQm5+#E$z* znaSX(h+ZHe!`*5c0Vh&l0(LY*{K!6bY&6_;+9sWKi$8&l#hYsmD=5roHwTzgawEBq3RLs~ zSj$w9?vS#I>P2+H>hOYGpqKaD_k}lsH5h?nxK=V{h{T@aXo8(Tav zFUcFw6BSt?C;AjbBVm;SSD+%51BVuSC~vhTw03ldx1BMWD#eU5#=PAE#>QHNS=Dy$ zVj-9sL92rMRAqb@@r}ibfm166!6z>UpIkX~ zHzWelC;%fes$?$>Ho*uS11mvQV^Sq3!(cqYDO6<7%cGil6aDGu&1pbg9|e{XFU58R zGD{S^BDUdK7zv9WV7h6@vYCx&D9vUG=2>*lcS}=KCDn;J&?fY-U=(h)b;?#wdU7ru z+Skn-E^ElMH{r9y8wi!!iddM1fDt%B6oOX8fsNND^BV(RliQK-`mN}>kg>B68}KMw zdyizQ#xj$|LIWlaD2%ub6_0|gQJS7YvA8cGDAIy}*rKQj4znik;SX&T_9B4cG+$)5 zVn#UP%aVmHR@_#nm8#E}M@uPb6Y&t~m-mWY@X!HF>qe)Vi6{uANSQXC+@w-(qU!~e zj7-eNl?+wV7`blz4({Us51<9w$}n~WV9X{m5uD3l7KFKKS+*oB>3rS|N?^B-fR!H; zJI_--Ce@zsHlo|S<0Fg14s`CA63I-}9FV&)YsyZXe+c}i(oOC$qnUop^jS<)TUKP8zem>O$i%>D=EOuF4H z$lmw|6G3Yr6p021#~L-fFBbBYx5xs|P!F`hbjZ(4qf8#upmJsCA=FJ!^m8LY+~EWu zXxD%ZAu6;+c}W1-NP~8q+3*u!Ibvg~AO$YsqU-|`GDpIp;hxoLb?;cbws+U~k{2V{ z!yV)+ZITFHW7g5)9P_O_FYGIgW4yVgTn;Xl+IDFrDxUV)X-iEZSe&@XCdwLe>KIo$ z!?NDWx;bPPid9QzPd)CyEPCvAFnJWGAE9c&T`gFou~un&9FcZY5`!QRBS}YRFu1@6 zMm4*M-xP1B?1(R?Z5FIZq}CbESEY0RDm)>qVb}U`nk}0pMT~mleCbYE|8nBckiw zjbx&c?0p?!^m;rO%QPZM^CPxEDe0#U7R4tdM#f+0UAks0kG+X;5tL7ji&mO0qWRrR z)iZ1EHSm*%kMw~@-2A1Um z-e5EP%8iIP2k@o1RoxS|W@;vLK-$o9{(yfUil*HT1u8C6H&5DJ8nS|8PT_FSCr3xz z&~F8^F2zIf%ac|Nxoo<#bvuMTK82h`S5{2YY{uP)zx8}|CkAs_3mP1eVK$l-%uY|} zq-R6*d0iNjjs?OpBR9mHcUi(=yW(Wty27>maPcN>T4#ov9;P%#yJzIl(nc-uVW~cn`e{Rn~G0Ud;Ht5e11xQ8?mAF3Rky z5(cuHZ0<(ON1Fu9=w7Fd=P1>{&Y7s)>=$jcD5_OaV!acQKoAZbR%Q!Uu9tG>e!-ug zHV{H9{rb;umN$E>`hAU1`*cL!SOpmbEm#@7B~O1WyF6h(p#x2#aj~8(+8uxgC5tMc zD}t>hT&^9dZ+`Qcp7kqNncFDH==TUS$$zy2wUt0<&@zgllXK_3#?Ou{LzcP>e*MGK z<&m%e3_z9O-$SQB&ftRcV{=`^k8gHbp27Je8M)b2mS$GnV2BT*g$ zeD=6jqw9b9+Gk1vPjB8eE>FRT3!2?EVi#<-rhwE_9QMe1?#tMKc!Z-r%w;9Phf<`Z zo{^*@)Nima*R9~(C+P}UAB2(UdI##D&+WXHoJay=#coj52~|cz1}z&6WrZNx3a&kI zdk!Lf)AgE90j?>J-KQ#%_nsclc(PG+qS%3v4q2odrXn78__@=FFrYU9Eg0!hzv8!= z3U16u!m1ZjP>_RIzixImMC@8DSlP3R$H&5J#~Kw(x=6b$R9}W+jx(|CGtid z*>5JPMs|$|#QRbZQllzHh%y=B7Ar@d!3|?@ptN=>9-GXiic6`_W01CJv)KxfRX_Wf z>6zYZ_07*84<$Ul7<$i~^RYlcF507-j(PTMXd8OT{! z5f8k?gK|K`A>vhUX}okWSa3;}5@y>#_~<*Bkt}qbSr2>onuH=dwEBqOCN)$6OJ=Ya z9gRA`7f4M| zPM32j7=zc>Kl$Moxd#f`yYBULj-I+af}&}Q8SQWx(eFugM%o8kjc%}ElO3Ls5x-)> zJP%Bv!6FSHC*TEs@GS}(^>)q5#V5qn*Yq9ifTB~7`rl4eVmYBsaKO;-!_OPsUk?ym_-3eD=Qk?H<4pY;K zc{3=%!>K(93;Rph*=KIS5+RdGcfriLnv&$Owb5rt_*xR)E!;>sHH~mGIGi9KMFV*N z!x)GQE;mL+Q$aqlw~m8yMQ2Rz;zRf-O3alYFcnEli$(<+cFdUk-fBNOXESEC7o8}u zS5g0-L=4wsak^qrzE!0iZr*abmW(}!+`cI8P)u%@WSzX;txk>vJG*O*!)iJ{=0UK^ zy;ekjPdpea3#-N)b`c>}3a3Kl=?-Vj;cuFS-FvS*x+9j!X*QP|@h`#Y%Ia8y5!Hcu zR7+{3bg;Qg&CHFOv7k{82twYSMjt-;Xv63JPJEs4fuTo+exL7x2Qg^k>44dvvZ>Cb zuQp~wB*=^jl>YHNDmPc;#exRwA)p$>=`9sgqgHp$6M9qz5iv(tj|5(VCFBYs*~3WK z+BHu~9K9L!-Dqu>n69FM!Yo^2wBHz;HPumzXWNHPqSD^s}R@$Amc``LNv`fDdGAMX1r*&K$W8X7!|f=n$hgjBOg?&1dCx zgO%Qws{SO{pP8(oNNB#ah_JYT-IVT-7C7mID@2Z`Y%jhJ%7I18sf$`z{HlfzdlO7D zHz!_a{(@+aw9<(YK)8M^=LzusHPnT;h5M<9{5*!QD7gIYO~ z0>h6dN2^8N6kQ#;pqNwv?7t-(XnxzI-BG9I1x4$4bgMj!`|F`4Pb0=^?aPAs#pSAF zGYT|=KL2}{3gFd}BiDk8{EqobtYhEbFa=ClZBUtUClLUeilrJtaUdaxf;e=W zAt3n_rUgJk0Ff&DM-K(9g;pWKLqmcrPaU=(t^r!6=i8MNy)$3RyiE6#Tur zCJTjZZlYWeIUVam4-b8qogE4fAy%Y~8garpRZfChVj2J`othGSfQk@-4$^1>XZk5t zcY60&!I4;VBu)!HvqMx>=L8}qwyO~C`WBXls|X=kF=q-2+$w3(%-3KRsBYL{U!?lc zZTNf%9eEE6KK}WX?Sch2o&hTn0L-F{k9RcI$W00U6cuD4IE(NbCJu_Q0Tg|s>!v58 zFbbiRDRh(bm+%w(@9Z58?>!xEee2sXPH2m24#aLR8pVN2i+r~L=o zNW!b~1ANCN+G)-EGz0;V14a1q%pnLcn>J~X84-uGIZ$7AufvQWlTD}Dqjr}xXLrIl zikcI%=|t5xhck+(-8jsS3k%qdQb#-;kw>DfDGlc0u_B%!X}0McoW7(F`bTCyx)FX< zoCIAZY{iN((5Py&vSQ#=pk$H)h#?D~etY6D>bY$Cgy=Wh9p2q~crJ)8998t39(y%ExdDIbH2COx!;HcaCG5e-_urk_j)kBriYlHZ)UB&ciXKr(hlWrZU@s$Rt!MJWmsOte->ja2k-|P7C()1Ko;4T zxhxE0&hv&eLJn{ku`i0FIg=Ns0E5smcucKfGFS%!F%Xr}9OQF{3IM5PG%&q`u{X!U zGdq0P7v&G?{)da9-l-&b#^xKBz%q<&Fg$AVkek z!HZtz!oP8YEt%e%$TFD2#T6TS5Q7^7$_}^#IPsmhUQf;oaW*@=JJ{cz_t$Tcf;)yb zZ64WP>AgF7STR}s{oDR?Z!7BAxcwjEpW7w$9Fa0VWVQ*{S?mDaEt4110Bqhl=s;B9 zvrAMsrqecPJ@AJ>TL$GBtB))C!Hcl=W`VzWqj3pb7VxlGKZp!Evp)zHvgr-HqZ=zS zp?d_25XY-V8og6Q-uEz-$Ts+MfV58JjoBlEe#xg z;$^Tmhl<$UP#6=ff5L*c;RAeK80*H&typEqC1n31W#=Ap=u)( zX$D^IS96l^o_5(~wmH&;2*wzjvL2*k+~i^Aon~FMkBHDnWS`TZc|&+D^7@CdI~cvg zMzW#>J&NN~8O;`|!@K5FVnG!d9ZGo`(qu#mc%3sD4zM(-1(11|Di$FYh)_f7;dNso zK~AIh%mH}8LIQgA-<=|g+_%{vy3iPLRmP(8>-tC&1HmJra2rZvM_ z(q;f8Z!w-6i3FJFtSw!3>7F=rnJi8&l@}K??|3}9lf5tT#SvF=V(A`uxR_3i(Y^9c zukY4BaUx11lpOAE9{!r3CHG)psHud#j@Spw%q~TCV<4KV{`!lBOOCtI1(QhnkVdzZ zl86}~05kl+_VP@^sZY%*<~42P>_0l(?Xp>MYa?|BCXY6;;|t5|&6Yf-Uz=TZ(xE#* z=bges(4eP=9@t7{qSjX4=9U(895gc8Yido^IGE zJ{Sx^ACN*`u->6Xj)h1igak9jY>!7D5xP~1?V21%{8#<4%VUX`h`g;bk=HKgw|gDZ zh-yXXQ#Jt;sWywls-U9g+;^R&F&O+bQ) zIbP}H-}Aaevg#^tJ3QJAB+q{TX=o=7k=|{BH-}**pLiX^eBVH}0ela2(OE`mBr8v{1BpMk@wi7uF!|Qq84oVQjaEFl|)r z%>lMx9vZ7;r>lvH;o4LRDH}al(jj+hYNMT!QWz1Ybn(k6F4BQc-TRs9OTE^}c! z)b^&#Y|+}%kaq4O=v!#lMGAIG;p5DXWm=DtX2eUDSX8pscuHW@_JG77xx4YW~s~Mj3 z#29oC21~m{bo_ywz%}(Z+cW?nzdwjpSV~0^3g`8dqQ=|~c z6yixZ-Cyvb@PHLvHc!^1{{Z!ocz1iM8K9BV0u;Xsz532P8i6tWn)LoU?&=l%u5LvC z5xlGosu+6zDfkBDZzK1~3l5Bnfm{&q;r9Y@*-BYz6D32ixmgf5Op!fu>q*mX*xUYF zZ5rGy_ru&*ea`KXqh)WkBjB2XnW!yTj9cd4?XsK0SsM*^_f_H+SzgmT$6T=yQ{h3U zrY35lyqb-eX>VY0EJADMr21-HRHfPrtY50Ts$)k_uyWZ&bKxx~@BS;)MaG5GoRe)$ z(dr@6LFH2yksmN0?X{9q`GOs2h1q2dXF?3!VZvB^)cQC~ZT$y!mqW6JBEUMfQp&G- zR9Gg)rljwwy#g|xcsrA=H0CCm98s~#B#?KQz08G(k~p;I+)?3^!h`T+o-_16a1UJZ zP(1?p)4(Etf}56@h|RH#*rz@Z0E!*$Db@sZ+@hek2?p(P4Kmg{3?yJs_#mf^0DeEb z-G8&qOEL88;NQg{f84K}#GFTilGhj1;ZxF305F*P_Ope$?CO?UIa{k)HaVMB&J{Oh^o@ef;l0Zk->MGcS)8=*jJr8-kd$0i4+qSK%bUw*EQ@paLC9uy%|n8 za~8*>hq;TO#gPd_%3jImhJ|fkvEV%`LeUObrP}4f8m^&L#`o=I^t&1n!9zeC$m z3b5}(ko!AWA++VK1&B;vaq;(MzRTVV-E9g=MQ?H9;pM27bjB@*<=AbpN+l*-B*3}i z1B9>k1zDm{N}ExL?zN7%%H506DT-jKgSEDmeOQ}}kUuI=I=VwRZFcNO!8(>V%mu>i z_Hy^?IwLp-b+pqOKYr)D?xXh*Zc3?UKPK3q`orQuxrcka1D?iYVd!_A^~MXp_%mQ(SJV+w2t-tyC*%SrP51@wqdn^DbRR zaj7VU(!YQohl!_!RVQMR4L9a>`Q0w^z>W7Iog@xjj=Ow2zsob&SV>U|x;sj*ZBmh7 z?RlyKF(6zT-4nMsMk6)PCXs0&^}>fF((U1m=q0)X05J3o(_6LRhX5=LE_#3nwi+M$ zo^Z0*ec0+NMT|?bL@X!&(5wNs_Wt6;igI{wz-Gm$OreA}aYXLrKqVrZ1F=-Q720;` z6=N=_bGr)d5>JM*e^VM0FK@C=#od5zv#&(&cmi>WSY5ET%ZkUI%9D1Xn@}Y`+ExZ( zh3_xzZ?8sgjf5i@U1YYoqnTSm&9)$~ptgA}<2t&$|61&$6$Fbjlo?AEF5W%cdwFx1 zsGeWboLJid9AGlrlBk1_dHE)%`O3M=g;yaqR77>yyEkc0>6?Kb#}`j_av@n_s)cVr z$D=SG%AHFI5szLqcHS8DZPMG&{o%#_E%`}d(T@ofrZeu1L}vr_a_F#m?S^x?RpkkD z!<~mwQ{b({Fc84DD}DJNC|)IID(;SpHq5geo)Ll*r`JlE2ty5-qD4ay$GACxn4HwI z*;Us{jA3lVf*e{ys!!fFjUhP`xDqNnA;kyB#I~Nk^g|YaH+HUFR6L&HVeV=pM=01~ zO>IdPE6|+SVuvBty+a7CyVK2xQ*by?W?Tt)mTffq+#b;8-HtS-n;-NlA(S+#%D7>A@lY3VpX9z@J-ckwm!d^Pay~;V!n>m z9ZtG@O%>DOWr>BH_|qb7vtXVkTSYyHdBNxYCV}6(*h-YtqGh`zVilLqyyvYv>=edQ znodD6DaDSPYZ=^+$%i`A2iXCM0d8(!ZMHUyyrQ1YvLYHt6?}g#YDfV>F1gLY$8n28b#}0e{GG@xCCj)K8Eln$ya(5m#5uxk{fdl- zxevoJnQcXm$@_1}Wjwy#=XIZSf(5cMyRQV{$;YOGyMiO0D_)}_9ysi)v|STeBVj_O z4Ot=*As7hcxh3I;9&9N>q`h@q*`+(&4r>Qx4h)mpoF0??dca9cJuwAnIBjDs>$s-N z-b-P}%bO5=y&Si$IpgXzk8v9+JeOub_K`KBX%Hid_L>@mJRr_pUrqRISR#;pCCqv*#bF% zV1=Cc_I6iesSzKq7dqQJT?~^?1WWNSrm9y!(!ZlVh$V`yywmD^OcLms<9Cd@PV~K+dV& zlRYOD3dS?o`4%|)#{^Qi=j`Vim^)*LtlGH-wxi9&!)<2v+~wjWJfHFard4i8I~S|- zMHxnpi#mxCi8@a^@*g=*S95J3kP4-RwC6R8z~ROF!n5c%FcReCDuZHsbm!?UKCfX5 z`VeO0gN-W`KCi^e-b(i|MkvM)>8Z8Q;c)YNtlr*%x*EiMl9NE38NMd;Qq)YQTDmfp zyC<=I`&?C*qgCAoaz!-k3#zs-!9+3I4*H!3{GQUl<0v5SiS>eypc=@%@-Ed0%H z_DU}GPGM_Qq78`^&Fn5>w3WJeHOBQhJy_Xijd();p=#}q`B60h*Xm6ey9-Ti_YBu`n^^Zq zs_4Wg@cJ)qKPC8Br{R>5uD%#iS;*dbUKUrvoAP#k*uYDpCLvcFAr87o4t#JahKN!Z z3oZt#7vJLiK$Y*1U|hU}Tjn8L9_Jg3tl7XkTP*-Sg+6Gj0f3{Gu6hfTrHgpB43Za> zCHpq)VLACWr&o^lR?YY66VcHo!_EzpWI^h%nJ%FxDhv(8rYin?^ece?vs{YFCCDja zMP_x)iT=7EJCWO<0VKNhIqq+ zg;q_eh)CE*-wojlVOK}oFG=1e>gzEH-KWf(ZC~Aveur#y}xA+p=Ay;G< zG@?3JjvHDG>1eXFTv-l$Hki@AR2gn`+mBvxs7?c>ZbbSv^&|-xkLPYxk?gzWv5}*Q zFF?4+2%2n*XgfObc3_iO^(}83-oLY9(Ge}T!8fxbjXM&Jpd(m4beBDz4~aYX#vY*X zJE=g5wqn^WlMlt!GmqJz{RAtOwVG@jqJxHH`a4Uxu?CjM55|rbS^*16{ha0qh83Yl z2IAvQ$ziiEs&%UitGLQ?%$syuYa`+O+5cnXq#h_c)zYLM0jK1{=to_!ldzbE>gP_Q zXX`bnaH8qQ4-b6?lpcTrqDJ4pHus%0(o04jxi2@eQxR3ed^mgH~+{{YIaEO0;DkGIPu$&Aq(p~w(_6_F|-VT8nOv0_|KH#2@5 z0SUw6r9Q)m6}xlKBUKpSw`Jc;&HlSDabb704GZ-C$%--==rt9Uf3;Xt#8sWV{m4SE zm-K$REwhVm`Q6?*DTOrx9!I73)xv`GXq??&TtKe=(b%ygjz?AuuN#b@)e9z%bmOas z({4&_SB1OL^R!{c=wdm;Lrgd94O$z|e#{@o1}=9jCb2FWG%@&0&@B!CXJnXjX1}aO zeUrm;%dPC)Gp4#N9aNR+`J;C^+J1Ay?DJ81;(hIDE#o{I&9yo}E(EEZ$8hyuy?DbD z=P4Eml`5#2x7#d(j5uZfs8$fxPIxbJ*!obG^dy3NNwf^L+{oUwk_d#zqr)O>lg|xD zIw8E*+ur|@!@ciyJt^QeK2tmQFT%_5nRQfBf!l~voG3Ct)P*FugOnETSVVCtKGTrAh;@>7YRS<26BThPqI?)AppiIa1G+(~O%c9#8KD{j_$pP1gav`s~FpADgSM_9o# zqG(nl+l;6`r+Bu}LO*hj-j_4KVeTOnkfBzRAU(ZIfmR;L0v%Y2h`|ZK{<*mC z(E34XZ05+zk4!Ypw;y1I309dXu;cex!=<(Q%8Ey~_kORN4e9Az<^7>so_}i5v43Lq zmRnZG_NhCraLiOKUazGx?R?Hv`IX%h`F)4F6|=&IZrQPOVtxYs5a5f*xqpHEcoQnz zP+vmBGLTe}pfF=5piQyWF)W`e38#ZU7QT%iF`y6^(meaPuiVHKrZUio*vc75jwX@# z_eiJjz4Pt|ne?Gfdm)f1xV$D*{TD*r@wNF{ne9Jz`=su#*LKzm)=Xi0bv)ru)pt&o zYj61YrygP3pSXXfd)nr-*__RtGfPL~oVMrA;t74i8;5K|8g8q(c|#ry7tW2g8;4HE zCVM}aj9r&*q|*)d&E6Yk6Oz{}C1$Zl8n2}3eb`Xq+)vq$g|`jOqhq{JZ9ubhi}rAE z5Y7)~s6e_r(oHlA(nn>=99C?c|G`2O9?`I#e)Ao>6O${$>nGc}K(UaEl)LEkuu7kN zXis8dzPx^ABkRwVu8FkPCOw&^FICt(-dxVPE@>94S)VK9^_RC5^s!_XV@1}d#@CCk zYn#R4jL#LNJIbE>Dd5xFFkb>?5?V^m_fd-hN(O%cFYz0KFJJ_b5i7%^|K!YQEOFw% z{rBH-`mPs-=WE;NE?RcY)Tejl_dilf3uccq1t;mQ8$C;NkH6-%-+BIvM^EpXU0%3D zADw&G>sRmD-an_j^g6-HwV|o-a%i{X9h42 z=Kc6gRAC~CF~h`Rt06)@Z`{Z{U_84Ib&N(PcH@H5`g@{{dg?<0+R7z#&$%=JonqQ` z*F9>X`cJCgt;%-MCG@`Sos6!pH?rYWDd#XG&1pS+@wz@j03r(_?F;XR97Cdhs1H03QO!cdCjhJwjDI0@;G>^rITmnt_5qcy`g(Kn##I)w??5JdytC>We#bzw~ zCua5@SQy`Jo=(oP;!OJ6y~WF4$L^fkbEvygIM7~NpPXHv9sLA9x|ryEqW3yB{f%!B zUl9*~0J2raXVXAlfAE^ zu6*)ym>aS_y>?9$17stmYNok7ytJBlpZn#b1yaX_(Z}fv&MT1XDdF`)Q&j1Si6|U3 zp%;QD+1edXKM&WBHub-2NI4pEsgEL+!_aViU$hhFmIKa+qM@uABvgh<4x^_HpnG)N|G_m4>(*m$b;-5H#!MV&R2ed#2O- zK{u9c3z{HjE1Jpa?Zw+ELDR(i1Pniz54zM0ntu}aZ5hI77hEQ3cYj;vP_x;9^vDJS z4wMUMOinu)gF&Ji?*Da>N~At|QLVdo{B$xpKD)a#&LlLwtu3y0rxvfD3|btmTAID` zs^>oUs>8S3^Y!_+PoH_L_v7wsX0GnV6SCJUC*t?NZP%{rt{l74Ww|ta=nx*}+|SPa zTzoaoON~tg4)7~&Ls*c|0(2XofDBW#|~ptD6ymX>O$1HZ+u35^bz$F!F>Mb zxv=e(*CYd}GPCUrKksf=JSV(Xvjp;g{f?fmEQC9eU=wpjDFF9fJf0GRN0ce1VJIFqH^P4ntn)MT%3kM$g(x_3hg| zdL+@X>F&aznU%vA&(ufl^@1zpSxVNt?6FpI`P9)?yAjsj99V9b9!uT&(w84UegBQc zMEc15Czp>^mWdC}{R@8U;W?lm`X2s3R_L;b24ti+;eeZeoAs7vM=u=>g|k6VG!<^I zbm#YSs}sNd&I6aR@9nv5xtXcL!%Lf^2e!AaIDAX*QwC>(Bj@hA{wB_YUhvBu_-wip zf`_dp3EZR3$?4Dj{kQ*kES`W|OeBPh+}U$Kg)M#~`eUfO!Qgwc1{^MLf;NiiaDE_|hTS9mho`EBj&Vb{y1`-i z*myEG-%%3_tg?_OMzeFpZmfRdaJf;?!@+=Sq_(p-8S_=g_Dt+n{3f?Aby2L~3fy?e zx^39yEU;%E+P*CXKp-b)1I4M;sioQR8)J%jwOX23+`AZyPeqQ`ciwteVCIIPc~?pE z`U;82`m;_wyOnId63k8etA8rK9kkA1gS9b91$qWHXVc!DM{zHrzI14;S^+wT&&F2n z{@^=bwd>jQ$?FnhOdpTM#(V!T9=q=G2WE~JqUFwTp)yvEMar$3^OLWC_>Wf3TvPpW z3o8jUDK*nuZ^!YKDc=6%-5(cTe(?*|R&Sm!tIpEgEo)2H&sSWAju-wv@E_U7B-b{a z>KhC<#gb1(dvq&bf}=f7kCPaq$LW39_|tfeUGd4m2ZQhW5A&%n48CH&H~21O|LnPc z7AEldZP*x0^4PdrXds9oVUdl8>hDSz+%CzetRpo$6LVa>KRXexh2rH=dnBH!>d9@a zvMqV*1FyZlb*-TxVxj!>Sa{E+ff)YlghJA-11oit?Yf;Oe`iBi^zo7gz3>@47v_O! zhHmB$b0K6p0H!b_WM*=C?ccYj10JnXwn&K&J{g$ad9Qk43oiXmW4t!*_T^c?D`nTK z6O*e>xx<#8icP=y&443j-U>~f2gVkPiy5?f0A-OLdkgqXhVMk~l*^pRx!MUWNh%Ax zlud$}ux?R!%lmtO_5Sy>+t>izB{$LV=|YW*uI8$X6ODLKJev+&dT;7Te`*lCg_Y-6SfTakqa)!1zkB# zvUl2+zq(Q%z2lD4?|*+Jfq8^_;-9$d_R`%L7=P-fZx#OJPYT~UI8)Vi4iCVabO#^C znTAO>^LA12gMrWtplAdb3}1l5Rzk7t&hFuM%JH&ix7Xv{p>vf`>mI$Kt}+-_eJ&7q6?+} z=mQWgJ#jUcRVju&6hjE82p8j70$f&2+<_oSAW&2V+1ocphB0B&g>Aiov!7=l_;zzX zX*Y+wg0r_frzjC;(e8hrDqQTXWRg#)XWzunhiN536!dMKCuelY1IN7YV?k|hA^j8| zKt;l4{eI0~87@zZmxn9nSnBV`6Gv8#pNVk0G?!gDoET>>@d|F=MDzOD-7^cx4oyxSsd~Tpf{%Ro75BW)d+0nDxy=42TUohbq2emd99%CpFS%rL z@{&t>-}=}i4}J3C`|jT2FHgzpLmvhG!GppX&_4|Nb9R@LdB7D|Wp1Shku7#_`#{$n zFrWRrIpFE;Z=WCDDpmJA{`lTuVcv*u5s&{Hc>HC!1L!)OmTr_stPDfN10sY2xPTkw zgE;4gT_*L?7LL`{k_oH+<}a3I zuhv{-vz>=-Do#uk8=V)dTytZ6@wTg{w(Z`AUk4X*SMMmOr>j$|$FDn%U%wAt5r*7& z&Ij?F7XGAO%xXgj+e`~+NjG!TF#rUBh#k5&JZb;F{QcuVOXnB^zOS`D<3x(gAKl+d zjMln)CQc_~c26?zn+zlZ2e!}dn(8K(m#aG(kr5^l&_8(l{d;WT+Q{=~V!2aFZY^`MmBiMZQNZ2mz^XA@ixAZ@wFp8!juV+mvW}I2B2Ru(Eh0*vf699A6?3 z?c`I5F>h#xX++mm7FWD1u%T$8>0tAs7xaGo;o7?+;pIfV+)d@Dqrf*?&`x!3uBttE z*EKh0-?O-|@E_SgHje-Z*@AyW4EQmcWX(hV#!Xz9iExr9GZC345^NsTfT?(q8aq+0 zZod#WRhRQY%#d+9Ynj=LI6Eym!l}y6dUZB{wKP69nG2kH(MN9Ryzb`G#6)SpRJWg* z&b3>)?qc`gN}sDJsWvCvVGWfiU%P?jAgww{; z!t89hJ@$cEu+|!%J}`H`#csE}^!;a6wlz|PR3b8QeSFAFj-84SC<%ss&@ggD2ng#OVVsw1f+hF#D(J@kl*79P*z$#i(Y{_hFayqB@{ip^hrY4iKy{`}A zONUd_KZu2+R<;>fVpsM)iNKOT5o#fc_m3d11%!yC2M_dbiKr1w28`~9yW~GxoWHD_ zwr5&vbE)3Hjzz*<7MMsoy`MR9Ku@z5hYQ_iWO%s{vS{X5oBiHQ64xLkJH43K`RLj{ zk@ysi;KC3-a}1wIGD8|;D?Dx+yh$uf&d}DQ;-;wfyIpZ7EbefyX#nI>uC_aziCNqs z-*|Fc@2lIArL?zD4EfpX!m8p@Z2$iNo&3HfoY1f$3oqLLeDLBQp&~Nq_F+DeFk}O- zJOo~uGc*D6K%5`Qg#m94{CPZuG=&9C9J2X0MZfRXp*aWEhgUHviP7QFBVCKE`E`$M zMUTJiaLB`J%OkN`OjE?_*jS|=Yg|0LFTbJadb^lOHd&clxGz?%73Js;KGbMO%DNM+ zw)V>=YX{?#ix=%_UFjSR49`9;b*36y6x_|GxlF?D&VtH>b54QIM)t7(y*$<%0@4D%#>Uv& zma~#~X?o>Z;?KOg-6?o8pWU;^0eNR6?~JfDV!zpeUfd$tZVJAjrrR4GEAKfRr{HfQ zXLnixXJXz&;fj;&rj79L$UNe~{5>h|^Z~qQk|Y6asWKz1Ad8#fC#}N+PffotdQ~(TfvkpF+3>|`cbpm&Ya-IKS zv-w+YJdFJy*=GCopa7{rhBF*=bUGDXLe_2HfJ^m zcFD^UBnZNiqkv0Lcq9=O0g)s*DWYT*Oei3N@8=T~6`Ah;_td@J)3XbP|MT;f-EW^; z_tdF#PMveAZk2dF*E~`?ruDOI)zw$n!d0^3&HhBzHJd2;?Q3%1Vn@|^95&n|fF^|y zZ09#}zKF6pw2d61T)mV13euxOwTnm06g^{**(n3-)(>nSNpI46)efh}y}2vfF|>H| z%6-clw(GI8)ERUoHVw88om)HJ)VjQVVna0g+RCL(Rh47a&D(n>cSdc-SJy1>B|qp# z?%;qQ)bO)r$o<=J#5Rc+UDe7`?!ikD`^nxq7A@Aa)cc%%9Btmi)=LJX&YKRg?oDGu z;}vNgi z&CUC}7aJq~w&0*{@xX%i-bwpZ>u@I6-8nkk;Xl@V#W*(ix!72p-`T)^n2lH0)@8Ey z^{)E*NT;i&Hd^Ottmx>PT+mzBvQS?cXl!0w+dVYazIw<$pgm)}IojIXw!qymlx*CL z*^cxW!tD|NhkUZFsHV7pj0TpbSp;i6<;}{H*21$^_O9{UqXu=k+jmr`b}Qee7Gbmc{jz=iY1KC&E16Ew(N% zOcbVfw&T#o!>!EQ84cls+xd;k3uM%MF6A{rU#Vtu4D=O&wA`mdD$Nb8E^e3h!>h~t zc3QI+FT3)7He6a)-fHb0c#wFP1QXi61iY7{st((?Q9++Z5ETqNynw@wg~LMb5nxUi zrP8ujkdi5fy`lNZ%1|K5PTLy{?#(^6c}Z`3wx#cQIc(UnXY^jSeA88pojqO2%Bk01 z-)fy++_!vk{4%Zdi=rd?RMNJ-{yK(@*HG?4Kjk%lH zF;`eNcKDi1?$g89WYqK4WN`lk4xZ+l=a)#rd)JG%~>o(Rd^KP9i&jg~Oj>go~c=mf&ufAoc!5VQ@+Z=Aa zO~OnmS)5~&_a7KJca^O3h(d5*?UkhSSdXwAI%6o6d5R*$lX9<4&CL)8v+j2d{@BZ{ z32|ulVR2<~R*3ZGj%N3JwR%1=JJ5HmD~kUI-9+D&9kP(CrX*y$H@7bNyO9m)NOb~+LSsYxJqi9A@eghjCVt&0mOybz9+a{6bBb`S^kXW@E@JAY z#`;J8Fw~IB{X}n0kGJpghC6at@<1`l-yQnSBAd%7o`o8{r~ctj#-p@2C)%wW+jcr0 zlEXKg#>N*kX&wKC8?nFBfWTiU$Ncsx_;S$b@Je%G9xtkoi!>Dai*g9l%hK4eY{9Pe z16a96`K7L}j_tmuXrfn59lLL0)3yQclEtGl$8Mp%BNvv8&`YeICNwEc3TJpBbKu)% za3XXo{zoX*Qz@6{wdEE9TP0)HmWI_fL&BS`4V_>{F5i}h zy}s?Oo`(8RsJ_wNy4|<8VTW zKG^JNV}jNQqZ)&zy~*D)P#@VpGSTP5!Fs8mk^!F_RqKB>EdS zH#H@_R=q3W?a@~aoHTX9cY2o;LiR`9&+cJkz985{;cCfaiMb zaKZUe*e!=u9`f#-AEaiq`V1eV)D(zWdBYE{G4wF0IBh$r1cYG*xp;ijfOBkb-RfgD zj;04|Jp5g8tNuqk4I8>3UDcpR#ecBM@i%ttnicDc(MIMEA;HTzA@O z4HF9^`?ri;JkU9Kd*AexS5BY*h5n6~Yz}Q7%B&yHP3+#he8;Z7>MvLpbd2r0s$((l z2l=h9pdVIbzO-J;w%OsJ-O)*%=$IH){rnELboD8{p6@cVHyn$FJr-8|TJD*rpF7Bw=E9;U zSyPkri1F&&GbBqMV~KZxhg!;nagjD(P~*bnIWAwvmxb4C=ApdoSBW>ibt)FM*x4D2 z1~UCI%ft=4R-7>!-L+uj_nt&4J7c5WU#8<6R!VhM^)t(_Cf!tP0QBS?Rn^= z?%k&^JpJj}>1$hB+J1T&W3^eEy4oKNW^?~ryKnVNx%ZCb{8hkC-v@s&TDfq^m*OZa z6vk8uPHDRtcd4?~{=7Sr?r9ABV@a2BB-S(N8#}fqbky*UZ@lu`j6#&AO~abf{y?nsiR>Er- z_it%4*=9D3-oJOrSC*%n(!KS4&tA0p+C7Jrn^{DV5U*T|Bi3onrvvp2fdwnzIrt}! zkd|EYBl~o^u%k$JE4cYc{=6RJh$H^xoknb_s!E?Ugba>y&1D;O_>jfP)}9m%M>|{1 z;)dRlsUyeAM?(EQDr3Nvsg=s6#zxp;9BYcBP7OA@*ED%Xm(gM|jyTU*>P#k`3-(yp zUwS8(E*afet}FBQWn#5iSNqb6`*QD#GyPqC7;>KP{f*D9sAbN(X(Ohj_b53R9izOU zDi;sQinxDlR zq>pnGy}af#SF}Raqo}ZQoUeA=JvP2|le_|+Xdj!9|91VF{u6nyuW1Z+PqEeA+g8h~ zR;Xg`9$VP`cwxDj_3pW3u!^F7uW#EVmlvN)D#crfpMSr`STg^K?BuqUO|j2dW_;|* z<{@8U%G**F?-sw1?prqXIZKVtR@N8iI{N@pNX!)$$Y=@Xd9quiA_-c8DJd+5snQ6S zTgKPRQ%PECr85~YuBc!*#3jzgEyKCHd!mSU+)VBEG#Q;PS9dg+d%9+zBeb;cEU$ON z$mHtf)y{i^9qlpHaoVuW8@omBh&1}#__|;14|m?H4|HVK#_WH0TiAGS=imtHsF-`{ zkB`NNkxvSiR+k0e|HUktGh(bZp1Zqdx7gfapZ%M-(>l9C?8jzSv4kFx<=hixQp#3* zioJ44{F3>P?#sPlWl6jbGbj5q&Nr)<66 z?X3*edTP`?ncj=oskXS+7S@cM!2Z$_U0Gk}XimA)VXxh&$1zH|-R#Q7;b_?FH5+f> zH8w#ls8DQg@!JTChsD`xaeDS!T$b1s$YrSo zhm8=W1P>|2M$&9k{F%GV_uO71uHnMWUB4-QMDEx8nF`#86%xNs@}T$FToV4&SS0O= z)W9=U;*(Wx*S+i%zc%}^XkfE<<5eR}?3;ZJ&x-g;M1Eg6mnOXtgBNSXdcFF3c>qs1 zzLI^KTh0fN{bLKZ&ux{~ z`S^>cn$Nht25*U+wM-oDy^|eb&0YBQ_-(mA<3+Q7eft``t1ynFZ>@!KjM+5$Z`WSI z*2qKIc+X4`!!AO>f__uy4|4s$vW}u3 zh@@k!nmH}`#yR2o`s|tWbmhWM&og%p$O^-44_lcZp>G**NFu~fwuiaZ!sI$uD~=sX z)Ml(}8gmcV>^75qO{$y2(GIov{cwZFFg3dyRvDK~G@eLOt-HV%#uf+rq~tEov3AqB zPPyZEe5r)HBUeY2?w2r#+yQ*i7^vkj#`?-l6YSJ@ZtKu`@v_;+Ww&q{mq+e@#pm=`@@@WrYZ$CyCuI^SR+0P+ZJrN)~pq$ zjjmC(tUTdMS6nvAHh%x^3s!5yM~?Z)t(WeeuGe*$W-fW)(~C&<{a8JFOuV1k!(LI_ zW6LX-LvPlWqa=a<6X|!hk^iodDO?KGvvZW?MSAQ@L8Fi3EM8Jhz9$2rizby!wX`A# z#-{|dii`CiON<@c6rNe^)o5`nu7r>BB(*_{LpdS_W-ZgkRz?$TUbDEE9d~kj8_pHb zYOF@T&Zcsjab~c{T6L&1_+nYNF1JbMGnJo(PisKlJP1CWjTCazt3v&6W{gh>@F*)cB{I_VM~;liwg&>$XpL0+Q8|I_Rs= zYt=Y_St>JBuo0FFO<>1jj~FoOD*R4WT{G@%@aJOHW}VIKs*Z*dtxbMryro>HKL*#o z+KpkIrOcHZi*AnC>ids|K{Bd_vezIp=&lkqSx{X7QyThjss#bng&k}Ax?2`?dnQ** zSdA?n_LGKq=TvSRdny>-m|M@@Lw2b%W4yAsM{0?f!Fuf&TE&y-KJEym0J7PFCaHkJ z%SNddlm%T*S5FzzEtC&b_)fkRH4R!C3rg&7(YA$Zb-CGS!+8|h23!78?(Nwrh24Jtgyz#bRv^WrciFt;RF$FXsD5S$FgnNxVFxO zi~cOCdR?O_R8bM|>Vhgm*yEV}N7T)};NSK)t0(TXKps`NUud;h&G$CZ=wY}J@W{O5 zz(qQuPAL&vlq{R1gnVlCgtNBlD!VBjsIMbD7M~ks zu6`-f!69`!{+w+#hMn*Pv%l}CaF|@E zUgJHz`F|qU%+hzc)>u#^o?c4IzuCKsf?LB)<1s^p&FXj7w5Iz)xHnqoZV+9w ze`pH@eYMpdR$Co3*qyoi`#VCZdM{2)@^h7io^|Fw5l;|nu?q+_3D`e!2({t?=zJS0 zL6p3h(pn2X(B_#M_NpO4>%q|=d?O)G*We07uV6U!4pK;+asMHbvD`HvGFCf7!UfY7WT7=pv_!w z$=wyNtE;gwQ@=Z{HCareR&Pwi%5i9Jd3kPpLE?eh>ZSIZ@sSBU0?k7mkl~vcD-TY{ zf)sH+1ZiKPFZeD7+nvx2N#0wD*^j+x%9++CsfdR)13t+#&Br*$3Pl-pH-%lTZh z@3BnX4z{-1Z8o{jJU-#J6otZB_Ylm zKBx`&fFxxx(te~KH6)5d79oB7N?E12;USz;QRk{ibu0@8s}t5tHl(%LJ)Y5MH7@-b zw#Kj*UvyWvOiq`+re#-j^|-THtz&28?s&yv(rB7SI=t0VSJbC<;;f)OK?|;?&RsT^ zajn(s=rTr9scz-IeG|7P5Ouj0i!#lV6?_zbWIV zN^*N8p4rmO^pq+zlkHh8YIW*bY!C-|O;cLi!ev(~X; zGtO7Sbm$7>J5i6XEj*w~IZ`P{e{`|QQ?(T#g58hf2u!+2hrx^srr1tr78ehQ9)qhv ztjQ#fkdkJfu6sl7Sa!)!bW!et^Z>q?S2@eYHBq)@BkpJ9GH%Gn*!N)jW5NnPWAOk8 zAs3z4fOS9&c`GfbE8zfY3MhD>H}oH;1ImlgNQn@VHYhFsJ2W`R#+=OH(feZBGRf;r zHTcuD$^PM#s%nK+Tkf*?Bi5!~A6*;>BiG|t`DHt-L6^hTQrYATy6@{tdjlQg;R<~l zd!*SQn#{?FPm1_L)?_3X9@tQ4ca=@_ZNxQL`m%D#6blEkYKKiP;4dK6|O z(r(2EiVOEF5ZQuMcEQ3D$vgWeT*;7&uy-S93T@To^TKn|nY90= zRqh|f)EG0~q1GUK&hAXsz_mH5y#^b$1mW0qX#?}-i4fC?oD&AP}){nEwm^8TyBS+ z&wDwq^!){5cd!~%ksece2X~8sL}8I!nEZ8ItV88UC$IMh{kVri?MjT-X|S7B=a1I9 zD)eU487}LT_=~3ctVuLl(sk+CT1$38M@Fr|{FEN`-%ZVJZ}R-ITkd*jnT5LeIM+%eM>!r^3|##Mvj5%RogV|QV^ zv$)miSL?GK} zkED!hjIDS3PjuP#K4^SnX}e12js>swNBxF!agliOzC|;~&iaq^8z(o3KOCIs_TrX$ zU-v-A>@nOnXwB$xX&aFyrv^xy$(88IT?OtqIG~1lG{b;w-5DV0Ks@cnyGM&olY;TN({_2_F*5l#8N4?h*p@X%lUqZ)iy=N)ur0I&VYj=@hQ68vg1~D)*Yjrn|~tnU16v$D^y= z;i#o&i1`M)t0rzaCDUxIedna=XsnTjNPeGaL7!^KDDttkQKXk@^Lom z*03$O3&JVU^h2u1gOS(lUZXV@F@@Wro_3czZuQ`zC6(4y+tXr)280 z8C!b7AMjKeJwaEQ9%uIG?7?*B!n%I)(sdVB3`5S~KSv5`{BX?<>YswQdHiP^R6*4(N-zvQS)orSaI^#-RWb|Nl3^rlQ| zC?n(R{!c(oDEHu-FS>CHCkv3_(~Ks2YfToH&?}bI$QIe{K?}ZL!BI#Cx9P1+XSD9U zP;JnN+u)t9Z+Z-^wUPz98JJt|)N8vk3_FnGwRkgbYfJU#KHZ9bw+jjJCH70?xilxx zwXQA{(dBQfX>43{Hw_(dpou1b_Cu}CV{-PSr}Zk$IT5W<8}bb<|H-wEtl`@GLcUs7 zbx%da>}rh->O}Ppo6hJA+UtIJ*_9{`UvL2(4~%)NTactlakV+66{Y)UKQ*f>{>1ID zS+I(yi5~ifrnRNDE>$O2jc{vTmcFrInq>0{4<8jWgd}^!&a!I1W5uY(xcK5l?!}wV zy1EX>9)@Z>xl0{p%dVyA9V20qXBKxPzQevowS)vBg!$`ecnc3Mu|Ju9!n}gRNd#&s&n!8R)w?8B z^|IAl6Epj#H%*%(v9_uKn?B|aUwNQ&*)qB>v>yt-89ZR&f%dNTs9UpT@=B)*eJA_UJFN z;;zUFtJ@ZFR2#g_4wu28?>l+LeyvtF-80(ks)~2E?rHIg;WHc+>-jj>2{n?yUg4_` z@Xuhf!*tbChpvKgsLpvGSM;Y(z!d)=ZxTyvSOUpuW;)R&UeM48Qw-_g=v)h zyeNBgGN=@Nss;tG_GGvEQwQ7?iQ{(e-5hf_)RyVjZJgAY)VojHR@FBW^)!w)wYc@( z>Mbqi3VU}$$ErZzIR`0L#x1;an>tRQK=JplO=jk0Be|Gloz(2yfMeLg{mj=WnYyq{w z1WX}n)HsmJ(sqv^ilvCAvJ%-Gyc-TV=cZ8xM~&MoSq!|AZixFGtClT`R;E&kaL8sY zw`pT5mMx5!7EIvq@MK*~Y#$lN>HJF{=vy~CyR6fzb9-$;Q$(c;X{~9O*j%k}CfxWgRT@JE{f6qqvhjg> z+-7ZbF5PiV)!^yiJubM#kJvX*E62KFf;%Oc9E9845=WUFN3xN$;e{K-k5(=9_hp-{ z*;|$yy|*!6dt}?>lFdo`Ou2d@wBhWXt%Lm<-|;Q#l=+f}b!A7NuTSkM@6fAvAao!Z znN%I@%aBnM-h=WF%nQa1!B8;+!;BI+{V5-4&+UPX14#uA;&z`m6WnuTz&7jsR>d(61>S)=}P?>JOL0dQD za@$Pp!)@w{lPb#lyVR~*x^(JOS2hMB$w*a|qi&Myp-M2Qj$_ADtu;X#1+d)_a}Pwp zy&>(J!BE02#j==($veA@WhmZbWQ`(wd89lr(_&5c$M>$?uYQV~Zo+ zo|b`3r(PQlj%J%1JmHpzB|B~x)v5}d-izBQ!(%byP>(V0pJ;M)OXDk7>eZf#@w2vj z!f{P^D&8>FwbUGntm$a;RmM>6u;KhniIUR5SV-RkdBXlstH$-tN1KxsIeb)1v)MJX zpO|q6QrXVgPayv;!7rXH8Zn#*DoE6>+9?Ly+&Wi8MjtyEH%tq-?=ERwb;#GtjE^l(wILOEp@{~bv+Au ze6HBBtHw94|9xXuW4XhUuw^UKWvQ;VN=dKv*i*rFrxp

    4;CTsJ62|V{RG+k9Ed! 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

    oQbBEVc6)GVMP{-Pt6H*mg>PqSf=45 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�Qq{7y{p7cn3J@UJIPCG?5zI3(p5^N*J3O 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

    L1MFdXV^U0P2_97d2 zAuK{0vfzBa)te3a3w_-2FYQg<35=C|4U#K*BT3%QD>$4(MW0S7-jCpQ>{kAO)~Ow| zmYEBM>P$y57V|J8?#8;WkFVkH1d9QNF6ZK4kH2|Wp%R63p7$FnGJoZOD*ev=VAJb- z*lRG!yL+V4k}Iy@1}mP94ex%ZDC# z?djVVM{eW9h8KUU3x>@@?=X23J!9dBqxP-(k479;drYf}rS69cX?yl;pj@3Emo}6}OXJ%(-^R6}rt%P=!rIk=X zAOS`K1Q=sXFu}4#I1q>^j1Ob7WsD6rXPj*?_>3|3oi(lde_vIni9NFKJsvxn1-<%y z|D5e?HsknsdVFHemAcgUZQhm2&4oVx8l;bULH|~i&%<|{ASQ@(<+>)p$~V5eZb{-$ z0mETk%g4690h|`(QbX1TZC(Z^8$EKShhC4_2cLuSeTR6 z?cccmG7P%Ie~7nj_1Hdmt3vr)iW(db;+%Y*2n2Y?1)JY`Uw` zH4Pkq%OoK3%^4fXCLzTR!4z_5I3nczfgSZt}8blJo@Sz#|~z6p?vnh zS>epWOMkBD*E+<};0J@wm&T6#-}g*R`<)j*S^G`tXRqthC&5TP{HfQTfjMjgqcUoB z+A~Mq7|G0fMN0knw#vsIc?qd(%C;x*h`P|1IlKhD=#XEq;PVmmapJz2VuMHgoguhZxE@bb#;-5jI~&$jxw5r%_kqvV-a=d% zW{Sayqr5?Xs&eU>uZNdr{8Q6+f9j^77@E6$rTFN1{cWelUUfEmFZ*O3Z5d)f1$5~=nsH~A8?c?0LRsXyvC=> zVuxCX6vr997>krt8s~O@80! zm+yP}$Z1m5_MBRrPYS(`BqYT^_tg$7eiPp1?@B=|Gz~Fs+sk%)7m~Xc0^kS;vf4Me34v?3lF^0S^TQETU%qgsm@E~J|*&tcsDZ|nNMdSU@{(`lD`G(I^Q z_vBT8CEhT(1%{h*4C{Yn*4u`<(W2-3>nJw%{`r~VUM-vp2YtEl@&Tn8?2-r>zDcy5 z)m@h-(37AqQCBt6nJCeMcnkb(V+^Z|6#U%Nj2aC_D2!qc1>u6ALz`(+C=h`IAzyKe zl~}YoFs#X#gNe$yf=9hFITNfbS5}_TYLB0tb+6Sv7fuf7efD@JODHW))?|k1^hvKc z?2IfYctgC>uVs^iId6D$EMz4WBO~t2bd_1Ub#?XT%CFD$KCpVVYTkG69h20Vk}(){ z97*IaevSiQ#cW}TpDd-U$$XIRwcW_+y+J$j%X;AL{cyAP1<2E)=>8zy!Gd3p>ATC* zd)wZQc>@Y*NPo6FEbyC6XnZt~gE-k1+zyIV?Oz*Me2-*kqs`3pEaA2|d$gaZJ=>0o zd#I8s9$hQO+}nUMdUd!3l}|9x4A-wQQS@5Mk8-|z-0A8W6coLiP*MU$dL;`OWx@Lf z?!eks1-TAfibIwYmEz<9?Pd@DCT3B#G78?UAae$)<0-z762m9%UD4!b5`n2{_v)BA z7JKLG?tGwk`~k!+_q=CeZZ;tE%G%}G-xt#oqhxA-cH@G~8o(~Pe&U75$L4Q-+W~jK z+G(Vm+CH0|^s%pg`qaqCuiQOem zu)s&;por4ot#7yU5pg#`JK?I_fSp2TK3e{~~oeInxFB5+mCZE#r9VKEv_ z36w+APsm5*zR|*QL}&wNt^dTHgEMn_!8IYq%>uqNhcN%5(vC4dfH#HT53{>(>=bj^ z1h(LgPtEawf9rGzzBOkgcLpD;vAPxQ4Eq=LZghi=)b;3~E~_3UN!Y33(?s}~mGleY z{B$%Bk9~bx1f&_+<)1m_ZUh$z`p4uUBB8@OhlszIH{JHKH%L2cy}z$r7hW5 zIc9a^BXtP(vdrs8utj~i>xr(nbbz~brVdpjTPn)+7Kv?u$0h`#_Ikz?@(~+Z{}rJB z*Koq_U0*^M>^}0QzjSKk3wG)VpEB!%EjR3HpWT)M_e*E(Tu%9{-S!ly{XLwud&iyV zs$F>wuG*;_W`jztca~CZckKwvjuPgV~YS2elnrgpq2TWY|UfNOl~I8r)n2i`IvKK+%F?2lewCVvY557JW9Wn&{goRFsjH9a`Xz;vDgX2(# ze*h%mDVS@2U#C>4*AXE|#|;OP)=#mmItbYSoSX$C5GxWpt0H7?K$MVQAxMc{Yzk6r zXEeE5KC;Z^a}if!z+$$u8XqSF6*drzgatB^5w*c(Hjt{IbX}AktX|)iGV=xtW#tv* zJp|))*a#a_R^BL)da^`rPow0a^75oQITN0XvE3REBZ%{Y!r>^TqS2%WjKzS$k_geF zOB0{jx1+G!M3aUwL}d%Hdi`-(oZM|y&XD%VS- zfCZ!oJOWHvi0qn_1q#%iIY`7w`Vo;89h2;cvIa>wLI0vk7z&O$a~U40jJn)kd)?$~ zu8t}rCJXuXr|PWwM4euqgdEcbWfOVCa2P@^toTBW!ZyKS9T&8 zHwl>3DE_SdSZTyQUkS2xCp(~VU!&;b1bWs>chI+itly3V+eyweV%+)GbZzNz8)upl2_O`Q){;sZV=x1j|1#boxLcgj zM4?_l01dTQK%{%K$p6|M8a-R^`wDFBXPqEKd=M|h?Eok`6wGFWVSDF*z4T*L!Ejm8 z4*Fieu1m?ZV0Q=FLceR2wk3M(9@(koTJIKnn|E-OBwl0V^NG}K{GU6*^G!ZGqczwD zR-_xU>Ocq3ddlgUxn$YXIkf9Nu)UeI>J7K&eQxWp8m*x>8`%glvzSl6ptNGF=O7nw zGtBYsjZqv+xe3S7S2iBnJRI|i3#vtxOkW+E?eP_ovUf}>^A z)JmRryKdi3o(V4{q$}?2A&sA{pxd+JRC*2Hp3N80?b(IcLJ)4xjvq1@=5~_s_48ie zWGFG=;W37*a;$X%5PY!1oPyN))3QJjRGqX-52}DJj4F2i|9^mbIaq;~^jPgbJSGis zN9}RJ?H2w?fWGr6YaX7=@5>0*VLFG7Gnqod6uwo~+wdnvi1)9vhAywTxK`vW<~h4EgKeTj2$jrFmvCp+L-RDs2A9|C-v z%eFG=Qp~jp_E^-tV~C5jJ8~O#;%1`1e)3j87jGQ_k^XU*H^IeQEjj0Nj-y-3ZdzxG zrb?!%#ros@d9jI^+)_JwW^q69P#{!#ZyQd3Nvxu%F-1VorMKA@7$Ie`$<#BX-!@?ii z<~8FtRgZ>-0(1H0zWh?DkSi`F2mI`(KH`b?!iLpiuDG1&+ZSK*4Mk2)9?%)`S=}z` z|ExDK9gfd<1)m@PDbr^O=ha;vb7!VS)j?^E9#YM{0?~)Fx6Ux|K|7jz{)+CuW2}mig5;3$AWBCLfC>n6kdN;&o?72DFoW zVO*z;L^UUNH0Vz_g$nPj(mcVs%e-e4wOL}BTao?v#~^C`P}j%1KDRqfanI5QYlBpo z6G08TBpXg?Q|oO*-fiU(k{BJDBPiiPd1F_@G^DeJgQ4}W+B}Natlwkv1uP0^OgC#` zGKu89ZYmdN=x9c5u#1t9OQp%h;2%?3(w$1{%To~-!#E2*E^W6tv*LX1Q`^#cR?mnD zruHW~CYZ8qFR-uInMX`XXO^@^Si6gMQ$~k^HW@7bf$&5!9!-n~dTI8ZZ{a+>fth4H zlA87o!T>Qn=sr}O&}m~)jYhb0M{>Wx#aG;cBIoFKa~0kPbg$Dppmbt?_#TKl-r4n= zo#&i-Hz#XbWElS?BIoup+-y*lCAd?=hxuw(5{zR+(L44pP!vI_s#lO!$X-< z#TC6im(%N)cckX2xMM03pJBo==S(Ou&4huNC=c-&IS(-l9cyT_E*6E|Dt$0l(7e1M z8Ay;G)PXDK;&&#?PHObQ^u#txuCgxv_1odQJ)-IQjw{d6P^Epxm3RT|xLVu^HYxu5 ztQ@;cL$&;-j`9=~923LEQj|eO=BLim08@(@YI7N+c6rRBn@Z<9gw>aUs6|f5j2Wzq zKZCYi&6Cod`_L^7xQIatExz*93hlMe9dOI<^Op0KOv}QnHJ9FUfX|)^hgvbKJ;i#M zDPwZfBPiarq2LKThJ4|*wmREm9dKDsqw|82f!uBWLo)EZe)j+bwLR?^fz-aS5Qnu_ z1%ASq&m7&y^TV{UG@BnrYp-&m71my5U8F06)?WRxf$+wn@>9 zC4#qJozE>9Xl}Bc4vACJ)+>**oN`VYU~FV%Cl*~l?F|O(Xnur6`WeaeFXh;y09Tk` z2hFZB-OLL$hXUkDXj~IO(KfZUCCY>vn$lkRR90&u%b7k2^O~SpU3$R0BFDNwIbvGTT-w_XxV7YsD zcVw*Y(W4diy}QFh{7+~#OS3!VX&NwDBdF~xWZwf^FZ~~AID`Am9KsF7Pj)$enu3`H zv?b-gkXMvUJJxu}EbIoIRC_{xI<`R#^@%udcRYiMX@~>kzuEzy&*;pkLCl1%&w3cz zuTV!j;6b*6HdR+$djNOcZq^%2CWFR?Zk(Id=*Bsr(|epS-i74!E;&ad)xGz^q4gcr zD40R5NJytiJv0A(61*C#nEohi4@a%}19Qc2P{;VK+{mDZiKl9R7NR-E#~DLolY1BI zg>nEQBSr1cJz4vR%}7}_lzL#OS2-}49P6XwW{;Qkn{;e8nK{3+q$7U)itN9jZniP7 z&v3QJ%GSVx$Oc89f2{Vl zc9ToIk)$d&Z_jYQ5HorENADu8x4gaf#QFKWf)QP_X~p|D*w`AZ8vd0P7@U&&w}xfi zpMp8C1@Klbb(F8}lM!jDs<3+mN9qL>V1?o?@+u)^1b>^cDh4=^;)x0GpK?&P_%CcPOK?3J7`6jNudL4Vj@v=?G@`6EIPf(s?k|MFIp|i zAv)k^6dH{edUKIX2V~qQ;41f7+=IBgOzV+vf_i@nC}Wob#R#2jy*Q*qLpaFk-o(&| z+f{v=#T~ip$aw7}@2@f^7hHZ__s>J_%#&j)-UFe8b<(Wv4K=%b2w1le=pO9T4Ve4v z%Gz5u=z%jFb345~JJ)Vfs~D}DvFcuXjAuUf;Nql}CT;zsrGJEYu2na@@usCR>l-#w z8fwVYZ&4`Tvr$7#PW!L#KStI4L)e#!_}br<=_*Uxe^B}Z$9#P;5^oXRvJ1E^TIosj z!q$|&ZCt`gC{c^04kzgWFSV)hx!6>ZUA`3S4gb6ynK~xOGquFBLa=8%^9aZ|5>oC-~|0l;YkOE;FpUvvf=6A5gD?QDQ?kb37R z8o0)*K^m!VgdbNa9y?eZg?*}>a95#7Z^myP?N+rJs5{YW)nPp!7wjql4xFO>pTAI| zTT}&@EP%NJX?=TpgYH&IuZEv2Wwt;ywWK9KZsSzlvn9c*qMV%9$vd4USF)NYTsfXj z9=b^L%ZHCUFI~M*$dpbTzP0v%E5CX){@1;BjvS1ws^XS3ONRmxhRcvg?mBgJ?ZjP6 zx;vNdEo#snE|C&GtkEN1_FS3r6!^a($ zZ#iGg6i)BIr*vzr^KmF>vZ#JH|w)(_MFmi6p8B5Pb#*NKKE#8kF zb<-O-ZecwAyV9ddIpiB5x>yxQi7&u>9L%AnaDoBl7W&Y7C{ZB|#MRsS(ZMfZNYwd; zr?hhfcz~EfqOu2fQ-$Q;7-yb1@JG0!-iD-{XN?3tm~V%J@6QN{@@)aRCbQ)Q#*W&y3c8~!cLA8 zmkLu>{mto&T@cLa{IPu+O12Yzhj54(`Pjxh(JwkZwq0qm} z>w#XdCQg+?51=Iy+GKQeEK=(KPW5!m6y7(T;=|*tX8r%P?gc{oi!3)w1gBOuR+-e92;doBnNBARlKRKYN{e#Rw-+>tmrx)QtRswM3pzNxgIkfI-EjwK-luoN zc?ye`gbjFbObfbLbv9ozoUl+n*zZM-hQd*^t@giUaDKq0odk?QcmNoy+N0kJn6~+c z5v_@&$_Jv+xId%m3-0$pdvgmsTs+FB&ADiWvN;?u?SQZ;E53@cnFgO4ZHj_if2)>| z_yy$5SzrH%xEOCOw=Du!wHI88$9%*4TA^>BT?}O7^4ZW5NmLy{qj~AHCv;lxIz+mnE69Sy^Vt!QwJLX zBEj*2Fa-c^wzF@7=$x3lqPRxKS}<_d){wEp**th_;ud;jeNq|cr-o4kHeZB+LfSuzl{`BBICQ1#m~ zejnCbD2t#V?{(1*n*tOSJ$R#tTm3h2TP<+7w0~NinuY+IRSf7^i#t3o44SBLgpNkD zoYA4_Bf7;!yU1#iQ^fllTz9~sH}Zodbo4tDX*%M_3nBY8!I+F2r1`r-?emI%!1x}9 z$QRAuJ%BQ>nQKg4)ngg!YmdGsc9&v6I5kxK}^usr)kfr>;O^H}u3hG54S zRA95uUSjx`LroI=lo7Ssx8W~o4^Rq%2p(y#)K%ZoRKH0>obgRE&fLuG$;S^}R|Jhd zacuQ^>E@uyY}BgM-6JZ2a+b9`&3Y(HfFNPFUcjJpIRtlFCAeXFD#Syflt=K23vND2j1`CvG{j+<7MWgcuh;$95XI=@aLzAxOPKQH z!1)577WVml9n%JF@Y;qZkb;o4jFj#{4RNj4^x`c%z6ro%>HKiWqgxEH*^*z(=?~~x zr(ZC#{-p-7brCJHT&ll*enaffzt=^&~; zu-zMaAs`hE8;NqW) zrUfoZj0(Yh!Kl_JBx%a6DE`y-Ph5^y&R7PtQICxh7LtM731=i!8WZN!n&A=~j~~ zNa(Oh#ZuLZI5ngm%6kGy2VW6A#0Tq~Eb(hV#$XQW5ZhpYg3V^6(3n<4!{kV_z^l=9 zJek|d7@}Am1?)?2G z%I&7mO2bAhy6&N4fn44nqj!DKOW$VARwvqQ2sOj`^?y}-AM}azuG8DTtl2*YUo6cC zZSyk8&5~Z$mX8BHy5Y4#dOn$&N&S4s$G$|`p-8-mWu=73e}gkn_4+UzdgK z)fAtu!VdRlssuA=O*~VTrYTZ~V49*-l%^@>6N`c2*om>j1_SZlx;9xq?D0>A;*)|P zy>nHL_0f&1t>gT9f9ysx(%!oK3g4ZDQ3!Q83ZoE|7L7viyj%FGAZ9Ai7hZzSBe!jc ziKNOVn1m3V&Tq;%JW6rNt#Al1k%&2e$ULNmc?ZfnadNRcJf4asBCfoyw;Y&chCB;s z*rBO!;AWUR>kVdETBiG&9OoZ`JA_xaqI>Hk!zQ~b#j_g{mz$x9MO(r)oQ2vT4iZ!R zus*F|QloJNMhx439P*fTunB>3`TWlD631sfR=7cxDx0TQQUQjmytZ~i2I=*bJ6UyY zVwUwE;Hd;x+A=&6bK4v&N9h=tOE9`&FafZNI?K@dHO1_)ZfSxea_!-+|Uh-yPfe@MRB8qSB@u^l>_6-Zl4AJ!{4 zjkyt=dXH*TyGWaefsr7Bm0ONm%!$NN2htNIvzU#j`qE*$RZObYCa({w3&W{!T1=?* z?pRoxDnvMw$&q$g;#SJ~?=oH=;9!yAk96=~Fju(|H1X8vvCv>}K6ju$w_Gmdi_6JD z!Snn_g;;NHf4Pt=Ev5PwFkF#y zCMbTov3;!C*1V4#Ag63m+tI7HNj7!$w(Z?bP@5{dS!mddYBik;)Iut)R;5U;e~q>} z%*1E-Ai&#~5R-xEu)!h({8rU)G-$O1B5I@CAJb;4Ud9Sb5(GMGGg^Kr!~DF)3RCE{ z|Ing8HUsTFm@c1Co7536W#jh8LNh(V=|nt|nD+F$n0G(}ey?vP0S(&ILVqDR=ji7T zma4e>UfuL3*B@~5CBX-Gm=sQ-%6Y3!)NC)|{WWa!ZpYCo+{@l<^j()>QtSd+$#Lk}Y??AsAdlssiIk4;G7hgo-DJphA6Jb| zO+_p24&MArvtH^-Tnun_bI%~{_tSmDIuCH1#B+;S&!Qcet?xHba9WaeXrg& zyr~0l8}hcilz3=g?Oi1@@zignF4g`f#9Qq_&M1zD#8KlPtbcY(mVEe^wKrr&iGk%g zV`1j<^#G^nr=t$m$3l}XmriEWao$3hwvNrZvHym=SyZ8E>6C}3p!5xB5u8|qUY_k9 zgLlQ^jbgILkC14pCFsV$DLGX)c*Kf#P&iK0lD^t!HI||L=({bsvak72ST0|GsH;&2 zC2BXz+J=BTww$S((2i&ZT(z$ahIkaZIZfR)yEx>upG#!=RCa^1kB%}NZe8Ru3H<&S z@$>6h_=jJteZ;5uP+hmY^b8v4C%XHFjcRDZK(XCFDo_m0(x?)n>ItOZ{fzvObMNezh2lyD-BiL!aXTTV*{oY8L z6URnFfklc7)=2b@kh*hmx6?E-WD^A2$cVz^&l@UVIsg{Q_f;B zwk$N=weWeo4-ekHYN)w5f6< zx9D-Dh(b4Wp>GRfiUO9VUyZ@qob8KB4YfUMTMg`*r_$s80FgsS!ft$xYluh^;YebvfNlojC= z?@G?Z<}W4^#IMy=0NmlF3~t6`w_-U_$vFUIMb32Hy35NO(y~_!Btrs_!6V#q$bx>} z$SN`(v_H3&_n+Mz70ITUSy%0@4)CFqzI@)7q&vasrBC8j_t4n)z6M~xD^TBF|1q{N zI^Yy^L;h~qGr2RrG_Av4VQY1=Hd>kvq4Y(kVu{IUX?HBw4OXjGW2a2s6xHL0Ln|s@ zy7p@w!0Il>C#PaXcSo@PnMr3dkd&S}nD#j6VKw9P(>5&~^`^etiZhDQz9QEFP}fr$ zJn=11miz6UO=$zsgsZ`L0->)LEiF$WQH4h2jjZ-;za>6GUPP%p%=Y=?Nb-B1Oe zWOavEG>sA4!F%x5AQ(VO4!NHacCgFo_a6Cd*RJ=S>pr_=nL#(qpF8n{U%;)1>yIkDyf{1?^vPGSq2hnG z9Gi8U?5RQCQTqn;&3R6lT;uL~lkr7csnm-EMd$@z3%T&z*Si*kka@SgImMN`ZuQn0l+1zBbM~so{Yho$br$ z&Cd+t=fcw;t9=r^c?l*)!{tgS<#bH#{Pvfgg$<%^rJ~1Wv^~;*0o#b5C=gv$P&b>! zJx~ybY>7mjzJSi|>-g(fNSQj+iUKCI0fm&clT3601~1TGZi1&YVm41l6O$fWWP5}j z(OOL1{W_=lMFbFGmfbNz72O2Z5lUGVz8MQ0uA9&l={_sej#Y?UAA zRl=geAd1uHUan#r>#cX;;`|S|Uah9I;jq>>l7N$e-7kH6xvhd|BK> zCV8y&p6&W!Fxg|3$LtB;iC69a&N3M}S^eJqhbA+YaQw!N1I60^6m$E>CJ(0ky43jn z#0$3_zx^QKIT@H6_sn`+dfvnfht3+D=L_QtH_haZ8?BCO)8~=H1m82ET!Zg{X8-0* zIaDA)o#M?Fc|{5xDuWvW8@}fY7cMP*V;}jOZ$0()hb9hLr?R&^b|f~jlo+ag%@xx3 z&dnB1rh?k+*lURw?ml>Z4L+)TZXdV$o@)=>OrE;s^y_ArUNY<+GMEclx2AMpbtQYk zWM%H2xOOM--&F0ll;_~vs;KHM-GGtv2c3OgJyjIbN~gsH`Qw!)SD$p+K-_P}|`>)PdodojpT>OvKdB2)aCj<>@%PXX`^jl)8;ko z{9zDOp|x2!rm8cvQ64_r_DkOqlV%HBznJl&(L#@7=P&Pq+y6 zuqv7-MLDQe55vXB0n?qoUkZ(+JWIQ`0e!Fy)a@Ra`0;&j+Xp>HG7O9`$X8={xU;Hg zeVe;bI=Xg0O#SUdlqb-g7?=jKucdu1+lUr9A_F}FqLrd+;^iKE7Z-KEcfp!QbP5J# z&9Hmt#95+78)to&8T?&a`$VI^5qJ7QUpy+?BqS#o(a%U6;qpc2wV6KM(PC+JYW;PP zCNe6imwp

      Ca!*!)b|Vi}JX=5NY{CUWJ|<*6$})L`>&x6aQ#~`1$p#NjoUG2DBr7MTrVkyxe#x4eEE&w2L?LY2 zcf36Nntj2^+~8C;T*2?2lHYw4Rcz#2Nn1acO~4=xzBtye=xiLpoxRJishxB1d0Wp;$cqYqiaXfuH{N$db#MUurbTfp_%1V z3uXND$%4^o80jI-uU(jNs2!E6xAqAeJLpI)Mjjk4ve~HFpfk;8J>E35H+sCYiFCGb z_@UFKNqD<6nXpdJU3~EP@_lv$LWC;atadq5yyNhNnQoP%>^UJ=GR{?9vuunUAll$?c(gqi)^3>? zyoK}IGUF_9;q{k({dfDca3jd2>9=uagT|=)z{3mI210TB*lajA$xWYESNVJx;#AcJ zG#sP3$dR*$6}7L=7RTd*%XxkjVSAYPqKI(Fn#0cHelDlG*_r=2hvaigndLVbWY&=XnN4w9#+xEjeG2bDIoPiG2Sn89%qzw;zqW9F}g2qxKtZ7}x^Q>R32r-WwLR zikwFN>n14OfC5i?L%#Fu@4+QSQ>Tj5v?V3n%l0&r@5Wnl(c66GXm}|m^ z;C~1Ne)Bu{VMq<#^8~D;Sj6_K{gW4qtRcjl%1LaEqbO<%KkfS#x zMMAs0F!@lXdgOKUYgLEo1WcS}&VsNqV71=<$uxH$5;{m1ksd{I_RF3}0h816 zZgsd8CRtRuAztnPGg2h$>UqVg1@P*N@pzLfJ_y|+b-z2rg!V;Gj*kZd+1SD@R(9!B zH2D6jwXf`zxnkkJ%@YIph@CmR{zc4Ge__uQL-gXpiBpN>^6bM$$=jAP$8B0-Z``#8 z+HAQ}oC+Q{t(;CX4UR(CS$Z!3b`N*Gq3dlB7q?82fct@!upk*GN$G-0M%+S?j=ujA zl1{{}*!4l)jRI}vB+FjnN2CiwZn*tAU)46g9}xoEI< z=39G*nNa5M|MaLqcm6?P@#Ofrk8&wKu;g;5rq(}zVZY62n92COajj=QIemJtJagdg zD-+%c(Kg_?Yc6&2l@Z|5;m1am51$`BEb6E?FGZKLngf}Tp+O9pmwS3AfF6&-Cfs); zPZ;2lBo`2BCk}E8nyttP#`>&JgGjI3zDV4@*_UXNrsv9$`^uw>iI<)+(k^ghUNZ48 zUaCB4@_8H-Stp-?~M9_jzo5J&Uaw?TzUM0nZI)$)JYL`nDwvs`$v1#Qyze zCr6@9k0dV06>btm`NfA$-&0;bxqR?Z+sTWunF@7qCX@BCN0xH8-JkZ8`zBK}2PgTd z`SWSNa{akY6p5P61VJ1tG<~D-Qqwnzh5x2VxIKQefs5D!>rY{F{PCrSZ__<;=&@s` zhIlIpt0x$vK@Y3;f9tiyW7>k{z>O27=~Kg*+ZNK7%mc0#cWN~Y?o>EdT0VND)tj0= zU-zbv)>^F|h~z`cAxn%CW)HTI0`xx2_bGKiivZlTJ%*wwWW5^7N^Y^1t=xuC2`im? zTXwUXp>^>{3gL@2J;YP5+IMPhc780i|1PgLKDjwy3Z*8|(pgJc^jI7j!Q_d~kq0J9 z8P4s14F}BS6w!6+)WqaHOV?JXUUR~=b;$JM;j)GecvVL4k@}|DYUnVplh(}6%tX9b z=+$%4vecLVS^4eDu$2f^829#ii67hA(6L^JEmyM8x4d6+tg!R6I~3}fr7X`CMzt_R zhPKJZV9jaVJzhxg;-rMd1POPFM?D=ua`Qy4k}vL04Vi6!_z9k!h&Uz;ddrGXJQfZ$ z5vhHg6PQUVRrT_?mupSw!hCT7GF>jGc3@)Qy-5JNT5Xj9l#%IxE_wZF>mmq2(V81gOAMYIdC6Cl2||HNGvF04&7U--=V zxq`wG9G$d&#Nd(|7vNTQZBVJlyii`A1ms%3Ew447Q^kk#J93Nj5M#3=?Iy zfd9BxerO4Ux5X%iG`fKD0MNz)Kw*zZazL^5YbtxBygEY96+$WI(CK#c_6_&<4kr;W zL8lq4F;r918pD8{hCPO{PT>?XXq{n3*bYvGLSi+%z7REjLvMr)$~27M&(xbEkgNq{ zSwm6s8Hj53fGvUGK@oIe(;7nrCfZ`yG;DeR6wv{M5cTvSe0K-YW=`yL`L#Vi4+*I! ztE=MTesRL0?h_5NT*A)6C0c9oT&FvMZT+i_ErmyU$HyL=pRw6#D`^=RCO+Df)n{Qv zA?F>Ru>C{4e0}+d5w;DZSa_^^9QbeDy_hJ8v+Uk1Q@86s(~n`N7gm66BZM} zQC2A-qlhzVC}Y-`m~PFZ(gg8yt$QYF5T`4;gIA^>`S8WsU%q_Sd6@XCg;yUM^_cp{ zBE!Y~h4HKD{+TEfw5Yn7c*H^%GVFNSmV&Z2pC?RVTAQ99a&^7zC>8l$ebn85>+$7# zr(ECp!u_u@oxY{^J908g1rY^a76PrzNw#2MkO+}98XKyf8>gMX) zsr|=)yEr}J>z++m!lYCr`o&*ez;a$seT~pFLy}M(8vZ`BP00}ku*fwshm)uK~ zN~8(N6_A2J?z&b>rbg8qq0 zm?YiXf;4l%#k;FT?^YPmElB6@zipyYN38a3&Sv!p7As1|cLR10V*Wun>1$n&Y~Z2Z zKKyvO`n>}?!9{jCLA?c(Eou2Wcvye6mncAF+gL3X4;EMNKA=5z%hteN$^)=y4csPR z36qc2Ab$Ix!QtRtv~nq+Wmgz~ZCk-laroWwnqVF>H(SMV#V6`QQ6sOq3nmV9yhcZa}h5`YS2m=?2mm()@Nug0XAsv!B?%%cI;Ax4oPjc zQhpDc23*M6)uWhC`nG5eqf>)|!zrn=&r+@lHQ9+K`xdnpXm*W7Q*()x!_~4c;?2iM ze?qm^)MlR!*sCc`nS~Y$sdr2vr(E|>P-Jum73pMbRF>aK_cB`;T+V-hY7`yU4L<-3-iq;HPDWQdW??Z zRH%Y`hs&Y(Xc

      HDLSj2i2aL4meVt-*h*1X@P+dEshQ|1Nx6=Pb9~reuC~Oe|7rKm&Twcg zB-V+iWtqRV>)x){>;)HnBjfC}?-K`^3^lf(B}^WvadwCYfjf4evw)&{T?D zQCl91Ert@X=CJlYjw7C{%~<_D8xa?y$$np$iDdm&ughQcd8#8mr^dsIRwMrh5}ZN1 zE(gz_DVL{P>XOKcwI~Ut z%%>`1SICKn_126~J2Y%{D2CVn-RAY!h!2_QOs3?bVj&@#_F97hcP^YQ#(f$StL_!O zPU~2HJgm_$>Cl@c^v|-^kb&9E2vHtkcVjwiBWk-GC z*w|V&wcnr}Vm%JEZz^t2XD6dd*uo$ZLk&vQ)|t?9+%puxba2UZxC`RMH|~iJO&x%v z7o-Ppv8tX|#U&o_-_c+6ZAFE8akz!!rA~2N8s8m%YGU!}i{k0y;n9Ga4cbRD_SM^y zqRK>x-at4=#>|19?p!DhsXiJ0LbW&<>eoxi=S_A!FPb`H`=1}3xcq?0W;g3h+MyBk z@YRFK>0XA7ilOT2)Ih)$O=b5N(BI!Cqc4;Vd6s+MM3Km48qx{I74u5(n-4`sp=}Sd2{oz;NJ3hu*`@JFFSMr#06s_*b z3;xNVps}+9F}v2HjpdK~qq%oUgy0RP@PI4w5ao1I3T5|@PRDdYlJ&pojk$z$TF~o< zUw`ZDgt|~Ybyq4i%7h0^j__j1?J4#I^*kJRgbH2p$9i=gG8hx zk?3twtEq-sBtmFd?G{6TJ4$h;7`uv+a%+Z$m@N?Lc9k3AA{Q)%LuH+noqgnZN+12z z+pZQ0sb0?Kf+L=Wq{EeV3dI?foei3eE+Uv(_5@?Hb?6T22kpV*8naJB>PBY5WG|m` zD~8n_(eCAeBp)ag{Z@N-@WS+Xb|jHIa5)^ggEX516DcQ`>Jh?4bu3uS9CWLPvz#aH zi)#Y;d|xRrPfRwbR{N1?;YQy{7_GY6+ zk5`z}wa^r-XB&^x;}^##&bwbIpO}qja*9vWXA_^UebHtrh<_sOHUAU+<72fcn;&g7 z_tJghzG$M5sc`1_+T!Z!zLft>YsKiq^s%An5%=QI)5Q6(IgszZvsmkDS$5t7wMC`! zeekvz%tTdT`v$taCcjShd{eLZamZ|99;=5VxG6?@EsJL`!nK3Dz4qAv%toT!=*I4t zfO;dd(!*WQ@d8`XJAbzpHM`gh(!zAZkUQ?CQLhWC>Ah?N41O1AJB?}#()$gl>8oCt zYWBB){@Wdo4Ww2)HSt~@)ng8=mFPn!-(H$7XhWmo{)xiFyrcQD% zj31thrL$jg+~@mB?PCTw?r8Tl<>8~m07JE{X*YTeC5cORV2|395f2w>TiYIW$ZOk)ueHg{ z`rm3fw!XZ5xZgqgVR<{k^^3~iz_=a-R4>Ek<9m_EvqxOzJW30;(B!i1TKA0z%e&pB z#b+(c-FL+IkMwQ_ix<7?bZY&G8ZUZ}M`0_MmyZMt<57RiY->drt$H7zjhr3tdhZO~ zw%zZ82H5?cKP2ydPfWw^_e~f>MTSeMSZ>NMZ-7U2pPAZ8<-0J(7x3Qh`yp=ql|5lB zW%IU*sv4avTP{E+vD#K{;OOQq{kAg$JHq|<8iUyL0t&w_R^=kRw!xr)(aB zW=LmJ4Vl7|fqfRmA)z#jQjJjiQXM_MoO_cUMn~> z6(J6Og1m~}pH+C9Xn%x|w$Xd;<<6*0=A31BxS!k)%SBVL*3aaS*3-KZag#4GGZBlW zeRQ~*AJ1%J^gsZX)Q2NOhLD#qGYQd(QU_iAfcNt<-shqIc1PDku-W^`u3y~?;uO-< zjUE%U!XCA3OFraQE9_;x4Go(c6$>udZC+##7bL(}L>j#Aw``-s?`m0TPjiC4ZKJ(U zfL(QXqdkOK^_BK_HVN^l&T63qh4DTYY_*3i>lWeu6`!8mU8(;|%ZmFRjli^SxK9bv zhI?4ID6hDmYnOtfjKSg>BrVDMp8II!nukorNlcs1%d~kFTn~5! z$mB;2Q6CqwJCfE|JYgo`KniTbA20}3X&*lGbDEfsfZ2alS-Rd%p~$b%ni;`r_{TVUW~_r>Dr*iK&lmo)<4KOI0x~ym|)gY zdNmbt`u6Mm0XY0lM-{N!kx#;<5-yrbnIZv9NLq8#9ZgCe*PCocR&msAchOFI^q~$- z&OeF)-atkj5uIvyBqUHaH%l4ptkYn%`31j)^^36{QfW&BkqHv)V!`aOs^b}AtX=vZ zw~z)~zkckxBM`BA>B#8-SR&YYifHLmegM<*F0eq4b-fuR?>$|=wP#u)LnM!?Acr33 z^iTsjreD<9lBC*1Ke;r$BLU$A0yb4x@KPPh-}Ta|du|={B>9tKJT2NBOBu7bB3K6I z0!(tC6dCOIaqf`92DD34Acm22LE98V)%2}R>OG{hnkkRcbRWSuvC@Ro6qk)gp#xX= zU$30J>8b7^N@F(aNBT(Bh|QmgnGdZ7{G>%^=EJkT0h6nkj7F2*Fm!=I;4QM+N{QIl zPQf)eZ{bpFtclm5Q%C4#MU-mZte8~32h;E%^bMQ?`?kjz1S}gRB@%J^RUTRgSwX3* zHcui4H!3!Y8K$wM8o_{drW(0mtk378%+nLs9{5OBFTVTqP4_w|b2=1j|Y+t6xK3J_^DA|*xJuJgMaUct_#f?R=_Q-rAzVMfc}&WR~Z8)JA1oDA3h5Y^l zFfEKX)$c)@Y=HnyZ(!!)cS1t)V^PL%FPLP~qem-&n0ZTFzK2&n?hTzRv_eNprAUGv zwrvg5OP_3Pe?A8IY-W@n#6HAf=;?wE>CQP* z**p_~Y!ZWO?Q)qhiCR>V4~Uc^coQK)+~_~-2&5-F%AQV>p+i2WBRiX&WiuH%bY#&p z7BadbhDgR7oSIt>rhn9gb9dz46-eviq*tpIa^2nC)ucB^k1#HVagwy2*M^c)Jw3_- z@so`LjO14<`viv|8~JMJL)rsMdc=*A8_)m+d&#Jh+Q{|F8V*v9&1?hff`ct__@5y+ zz)-J&P#dGw9dW!~I{vydh1nyanShC$b{5B6^QW$^gvMr%T+gecXT#%gVAihEo4Qqc zokFcJ^bczKjJgr^km|v`Kzr|4dF`^F^}4+Vx5dQR4osZtPWZg#04X^6Vbb`gx)E}) zZ$M4?29@d_yJ|q++cRhw*7x@-KD`ld#FL*>z8CZ4ez>1>@)e?8uj@&^EToWH;E!z( z`yDZSet8FWD76gDQjFu>bSnpG!!UXxEDkucN3y*++ML8K4G!AQm`+a z-wmUmSzM4w9oACZ?&1n)iDpMKn9cjW%<#E#2e7^LML62!=vMU7kaR+}7uk{@%eMCz zzU^^0>Raht$6@J}s|m=KG+?BRIU*VBgtsJ<(krF?+Ddou@55$hM|9s2$%*-CI9K4E zIFq6R$;4d0YNSx-LIVd}I9F|Q;h#f2&N$p{f*q(yvL|S_2Zt40x+AoMCVnh2IUP#~ zs#BHGl-{2%1V!aAzdf72^jBsbGoToTfOa)4u+|Y3lgT|)-BslsnUsO`1Z(Oa*zmr$g}@oG5R(?SxTya?Z8aLW8=Cb z>pY9L(+Bds7VC5*dSrgzd0N%P;ZPj5$E0TGUbL_*tO#az#bf>7;9my+LcOLx5}uyB ze0m`jP@LO<%xo%&p}B)KSzT-l2_e)x)_*F;Z&i7p_XV`K>J_6T)kn7gNpg6xxy0?c z2%|b)I3NRiD@Z*wI|BEH)a-mBIoEA9Pn|tByLe8OZQ}L?uia=i*k7BRL-5W1T)u7= zB#b?Z%&s8T40EZ}%uHH0(vLXn?7W*%OtxY8(od{uUaerGt5L>8r+DzT5+ak1_F6oQFKqJ$=}6pGrmdN(&9c@6`Wrfn)nVPeT=bLW zISm&MjA#PKD>=LA2cLHZDD$6v)5?xl!YO|+ID2W{ql-sF5n`eZ==FoNk+xZEv_+ER z&&V;yO<-wJ)p<`b2Ouh~J*hYAZU7X(ZXjAO+@ZAz8>C!fU;&sGPle0;yCb--9iL28 zQk+$7WjrysqejPk^st48HO@T4Gn~USvXV`E*h@~&nI^XXD!^@=TVH!+idx_95KG1?YEVU}{&E zGD$Cefo2odoF*P#&9crxl8ntJ`(wpG)N2e_JW;`Hv_*aPAuDI?wy+FGa{*q_5(qx$ zw2m-=+9fTi*Xk*1S7Ou-@4Fa_g~Oa@=ul$uw81fWv^;Ax@e{?gKRVqLppAe0yvJoS z{K+3!Tmw|r8_El==$s<5fi!~XarT6Gma~T#+DKx53HBn?zOQ^c&_>eKyHEudJRuJV zYuS2yg4A+shaN4=%;s9-+|h&x*Xh5q{>;`*D@~R~u&jIJ13Er4Tt7;ttN)L=_W*A! zt?tHsC0Vj1S^cW(UX`nR)qC&7mgR1b%Xr#OpV_|4%r>^Ou#{z~p@kYcfh8n?1yUB4 zC6quQKoSUnG`>&*B$V(0fwks;-uGU~^4R0CJbcgd=Xuzfxz=dz`+Lth?|D!8oq)$d zjOh%Xau0(MX+pcXyJ|o)@2C zIjbF?(J(MHiUugf9M^=!vtRe*puyPApCwX!KF>m>))BCN_iaH1$C>(=5Vvgfen1hf z7W~a((;?m(EVcOJz;+&c?Vw2gqt5Cih-IJENUItePQl~XS&24%@ri_>^K0g{-<1D8O zSmz`I=p4f20LFx`loK=#Vj_E+maaR4N+ zu7NL%YD4{S8%4Q{f&4c8*7OCsE%fg6yVOu7x8;`l9OYe|i!VD^lt9v3RUbW`tQb;n zeQ4>{&Ud3;2bxp|LxI8*#?R;GH;pt358EB?s~%w+Usoob!BQ#cw26+zCuSz~#m3xq zewSEgkJ{a=n>A@&nM67rb6dXlU(w5M8PC26MnuCPR11H<|B+CK$@^{h@2irHw{iIT zwLd`nZlqVTXx1wf^?bq$Oa|%6u;E>+k*qHEii@)+JC{O?$sBa*p z`@w}zM_x7K0}z=Qm`~*C{2dIl+6|~+%I&sVt{xmfc+pWbnNw}H>kN+3 zm4azFQh~wfdy+?QAwDq?ueb)n_Z?=fQE$>|Z%nfcIi_&<19pqf5%u!&`dRTC@ma)o zVXPo7rwRQKZ3qjy~@u?fz@ngH1dptg07lRRZmW3sE~0~H2MY4-LWrp-fuHOXN}>pW~Y*v^&9Mo2zC4&g)_6Z z@_OOiOK0i(<+AWXG*?U(K~Dm zVZDoZ4%1EGK5zAZBcgq++5xp}&}z1=-b!e)L=j{0&piGHG_EU7K0XK%2)*e|G=6I1 zIIEPRyw6b-y^%&OW;Md}>cMcC#)#&Kd$-`Tah*5E$_*YwfP;Lnn+gFRx46bTTd*2L#B8|1BDVp(*6j$=z@}*X~M?D`r;AzExw5+BRYP zD`-{G>pV1!4bl^F2Ii>9?w8NUN~^1-fLn1D0H+swf@Ssl3^y6ykm^)iv&4tC;&%&W z)I#9}@Z9A6z;iRo#zHQE=LXGg8W(>Z@Ek|8a|Dii3}uAiNm-<%)}!qP2=U!Li!_SB zEnDEk2}KV8dlpHoN+=UURTARY*q-Q9HTUusg6L7cJD%Pf^*QeP~=NZC~EgW2&xW#Ur_|S<`X@sHt z^s%|M_QdH4Q>>cRnshHXo;v?tl!+PDFyLXK_{41ISz&F9*jL9IwZq~zV|r+5#+_CM zjHRk>4=l=KZeDy)ngwamBWz^p;iXKlF%b&nmJi2QFXDxU4yaYLp}utnN;ZXfjD0Xf zJ2WFI7B?m$PVSMMet0rgJF;F`vy2?B!@9#>wC?8|TzqMhU$x)m^le$Rsxn)pl&P&<}W>l1ngEX)p6s18m z=dh2^$;}rcZ`t?=6gne#(Buc$cK9ns^mkI6c&%Mg23rrUP>rc*bh=3$tI@Gq;MB`6 z{+@9zXo*E=(TGG@rkT<*80z&#$`&YCM~j8|1Np>q;|3z*F0{`RPp95`zkl)UOj4$H zl17(CW`en&r0ZpOG9jIRF{8b6jCFd0olg_`O7iqd<+ROCRwq*Cv-SGa)Gg;N+L4*+ zjZ-(Qz>mNny0!P z302x7WP-6ja_-=II=MV`JX(f|oqHcNQp|{1r?QJkdQ4-HdmILfRz*Bbe&g0(-j)Zl z97nd*a8k5Cz{HOqe@X4kGZTSg zq6SZk78*P)Bpr{ZQ#M1Gi>8WdsVEY~oe8mSQ>WeORjHxv&|viGtAOPAOxAk%zGF+E zU@+j|GNjX*KbA;jxu{2!oO47yTE3yvS@JMpXy`PA zprKR1@{vmnTe&XWXKy2kbPvp3d5;(9;=STJ)LAW34kvLzTbhh%e2{Er};nV~yyckIgqjow){VR8|Q6Jj;QW@__v!otY|x{qGY z{@$p|1h%}eMOrGxDIkh=EA4WZ#FYerfGGm0_YSHMR%|?fMICCarkd39Y z)ffZPQ|awoT$`-SbXuliKkcojZ!{SIuUJY&2+a8pg~~&S>)+$CNs= zX2g;Jvj32Wbwo?efC#n8glw^s@)48C1udHh>xdw`H$$}cK0GP;TI@hK`70Fs?b@~J zi6CYJI95Sq!K})Cd2c&4LfLYc`9akUxsMGa~`QN~I%i2Z}$;LT@H-V{Zrh z`g~l|e=U|lIDt^#7~Ud$)7hnOjCWpk@5kID)SBv%15CLbb7w|mW*ciz`)8se8|n_T znEk$3E^iDa_%=U9L#4Nxtel9vZ?n5^IiNRI21C8mT(2K!tFu$dsia3Vs`psEv3XWz zkU6W_L?YvhyCRFI!!OhB{I64QWaXqK%lBYXmC4XW)|5$^@E$xR?7{P(&*e2kZyI{n z@7Ox;*oq0(7++jB+xhr&5H(}s`-QM8J9mHWaZ||L;ZQWq_WCd>yMm0+)tVv6_@j1b zmaxmoprhA{Np!b}_GqlA{gQg5zwHZmzzn)as2$VbW5c69gV2si8*J_{oEp(UzMxe| zO|ck_4$+u9yyOUbw4#SQ|7*2dPzNUS5=TBq#hs;#LI)S^x9;S6%iOH2+sF4UUr+8 z`Zy}Y@4+{l2@kX7gy1g*n+L?9{5;=;sn>W=52lxPGQ<}WJ{Y}D0+lWuUebne4`y6s zNhLBCLzs<03uY{gm5f$4YRhVy$;vlgItaIY{CUL97BXOLe2c#uSz4{dZHLE;TU*bL zC*nTn>WMq!q{0&AqCN&vpl+7|I?Pz;!3>0w3PWlJ9Uq({RJHi*Dt}7z??#K(IcjL$ z;S5IYeplp-TxK&n(^0Hz0larvI7MCs%tdb-df&C^8anPbtD5oMW3%(Jdq$xeQy4zJ zrEwPBaiHg{BHm&EuSwOU)e{fj#GXGDOywgEdb8ounUY&wUV{pETsq9=bjCuWt>QZ_ zqe%%f%7mz#-g<>L%K`PRe)EYN9|QH-+Hx5TiR5~>&~urOM8Q1z<4)9bIh6qpoRQA2 zwl-OU#tBW9==`4)_UsI>kzC_F0PO?v#emLQaKg5CS)#20w-w!=x~+fs*8$wtIbULG z^1{P^R4_!}eE#AME~6zENn2qAZ|rbDoCrb-X52+XW2M{DfW}IrksbIF@K>4OdM5k$ zEzn~*wQ%Ud$%dWj^;nJ-)}l0;XGA`JtbZPl1E6LQ$Ds@7^9ymJ?K0;L)BL@gYSu8HfVr) zFHx{rp$a=$5%Gruj^peV_IH(zW!|0d{ByGz;wEJ@%lW*)cz}w>6GjWnn5683Vc0o1 z-)iOwdFR{O#8j?UYDdd3iE}2Jnq_sJUsEO{WwzO&dKcviW;<5#zhL`v7A(wuqcxkT z^r!N=nUu=_0{P_av@o~{+w47yD36uKTaQHR>_giSBM7V4YqfjX&JV5;J8J?FaVM-h zV7P{cjKDmQcl2WkXWquIduQJ5kjs1JHOp9EYVQhQ@?JkLZCe7#U{sLe_t*39(FpJe zhqLW-Q`uX#0sL*P6;-uZp^I8a1RXRK3daBY8liSIP?1f;wFA`mL*1aojLK+2Ff?gc zLHmOal~f0I=x_SKM{(Lu2-u^!!d)+Jj~+daIP#;9c5j*9BZ4RUI#;)KOAn^Y8{g@5 zsP^|ugYH63V&mDKyxq3XRriImu#2^8(=UJaV`1AP68Ur@S!}?Noj}&HV`HzEpR6+= zD4&TtGInY_TCc@&w36D^%-i{bz>Lq^IN+(}eW-Kbi6XA?{m6&DkG^U*l=xU%5LVoE{mOaG?3{HSgH=&gi(K z09r`N2?d3#*}BEMV^|Gwj^r-|e9;`5ePN3n&8=Q3etHcQ}%%#<9AmeQw7_Q!!s9KR7aByR!^6 z^`~58C!0I9nRdP+6w8C3vGD@|r}MzJ1I&H1s`IG#zf7oUVBujW{NCqOS*^f1GKP+9~8?X`Ts?QVzIETkp|NvU-v&NRYpQWQ>bi+T z21DmrAB;^%P5MApF+OWT%$A=qvmbo)0*j#wQ+ByX7qaLXu=#?j_JnggVEmCVfYd3& zb(gx9==|De(h_%d9%ETA_g`!@UzZzXljZpwYaeqYvUSV!T%B{dVkU34?j8`rCS*J< zr9&2lIt4v&{>f-;5eVSZsdU_3(n)KfHl^SeGb=jXx18R5AXuV27{_%%moW$D{xlh; zNedxV6w}!TWG{xgn+PTo17rGbqd6Lgb^e_*tBH%9m(h`!M!0fc{7axq22hI*`%;W+&QaqEa|m7q3~WuyJ)!cC}PcQBAsv* zbR)G;%crPc+PyW~`d_81tUU80T0!+$viXtyDaeXz0v|5-9w2 zB@g9JP*k?=8dO~GT`Au<11U3wQA+~fhJ08t^5F9H_0rNpd~P-}pO;Q$LHm=(TL*Re z&a)}H9ZgSCF?7$}___F>@ICh)VC>s(u14I)VafxFqQ98xLC8q%3Mubw_X<8t+v`2> zb!`yPWzi`g`NCVX>-n;MF=Uk&C|$r;2&d;c-9nYoO#|-nalJKFt{7YEHO}tVt4XUw zqZ-kPG`dlRR%SM+)JjF3rt{4KCA?D)w-^0)zBb~be9EBFU>LFLEmU-N+I#3eX?ZES zFc)6Rj?AZ*{fhX>>M=dpxmT~UNu^S9RPB&!SglGyKLd;W!of$M|J=hz(yr7iZ@ulN$+*@sS!I|~LvIQobOF9#;J$2LdlMzxsQJyT+?PK9;-PT&kb1uKPedv;rNf)UnY>d|` z9~tosi0}q6nsg)nHVY|v(ajSzb*6Um#_O7;BO|$1K9|Z*$3|L_S+63rUR}^>ZfG5G zF*Mi8gw!^mRXbPF8iVDkwYdlrF1*~t z$}gZ|DDS@8Z8mF+hEOl~s|pV$_8Yp9H0v)HgV1Aj$Bm7GDp5+!aoS*@l3g8%Hz7hg*z1xKNnZs!!IB2i%^b&tGvlKTfJuq*O(%vkp@)@~d__Sl;)$^vmHdfc=+4 zhxQEY5vn_c5%l1@4ew{WhEYqE3yx69uMa%D@r~cRtMk@96`K)1%C8g5QR11~Zuy@3 zJ4a86261?8%QIj8vtw(p9?7k_U91gz_$-GTj?p@G_WGHI zqx1SfS1U`ot)$gx#jCal4Qt?*a-wsE_X4m(^~|NCSd~jU1@fmg1eK2gSx_a=2JGEm_Qy5>&b?BQQ#ydKId7 z8|;2j>OfG8v^xwWy`F>NL}OYm$vQ@*U0ootF1T^G7%w>}`qHav1*?sma|`onsfPVlSB|m!Vl(90Bn(ya3}!()^~1HqqQMwA9IM$( zUwzWaHKIqny4bnOu{b0$(Y@j?gf$-pp5A?)RoJ)cxd707iSH7i9B8~YUs@rQBMsup zisqKe?ee(ZPKELw(wCSsB-x2_nho7zWSqtZHz*RfPSi@J%3@Aow|w;@oO?31?$%q^ zyp?0IXy;jmV_N!5)6WX`*?+@#gWG{4cYl}&qG|LX+Y4 zod4?Fvye)&figQ`D(8;Qb6%z0Ql2d;N{lyI3Rz38Fo5UIyF-S<#61SL&YK+YlC|;P z@q@95->o^29KXdtsm_%S7-&zco{PpOBq68$i%)XyTGly9>O%g*c2T?yH&&E?`A0#n zU~196JfO`SVlT7WRiizs&?lkT_jAS02cl3Bi^&@XlbDU)HiC=|(x(3`wGq=uj|qQT$Vrq`9k`0SdcF?AACP9>85nyx-}G*gf@w8K9fJp z`JfLr)ad7X6tJg2uf7%wM{0@d=F0J)mWKH}F?T-E`Bs#n_oHbYWg`eh=|tz-vrebg zY_w}kYL!AhRxV4a6vg;G0jm~k9>V2>fXnG?$3=QI>XbbK@|V#%`PbR!Ep*;eB{T2( z{oDFmVSz~STo^wG4_&ib`+K0Gf+{IK8*`Hn= z*mL%+Y5L71o8ayB>W<1+rjq~`6o|5RD>n9s(DgNBjr3!d{HL@?s(_d5nq>vCp>QYXt;irrX~uK!WOND&j|xX_GUWj zXyH=Dt;mN^x;M-|aAsxJSf4b-;;b1#=twd&%OVK#sbVh0TE86FQ+w01pS9>|xl}Y} z=p#G{(n_forKa%t+07BJp}CIxvT)#Sqf0k3V(2E;4LpHV19Ms`V-#pk_9&t>;ya13 zshGzUo`^)pjW;jcFr9vCF#YW`r&@24Iuo?V;|m*gu2MRmPXXacvB{=mkDj04@9Mx~ z&(~O;gmd!FYgv6?dDR|(KoSRcIV5p=2Zi$0Be9wvCX#N$W?rbR+6P9qbfnRUq;0!k z)%mDUw87xG+K{><+{#xqq1%9JQTz>~THS-f?78NRN}9A8yC-tlnZ_Y<7b; ztwsFxo65PZvVP}gLM(N3IoWQd%k*xDejhjxpjp#k1`d1LD3Q~_AT3q$ItekP&S!V5~rTjyft_0PiD}}YrLDb_U%>22w)%J;$XQzep{3LwrY>zS{ zfM93qk$9E8Z3`46bhVQdIbb2^CM5A#tsae8w?p%N2F7d+4>Ke%8uIn#{27^rcpAd# z=KW_M1)7_yAq8h4DnCaf53YDD?%MN$8e;_P0!gHEiBns!Gia@5m0Zi$X6#GfdN_K@ z=-4cKw&VD;)oV7hmcCgL-LntrSvQv}OflJ)p6L@67_$Je1JshbISw89_!?z#qKW#<(NhO%j5!dq-m!ed$N;av+@+S}6xjP^ zq?d^M0jBk0nt+}wmIa54+ri^P{q^XRfXWuS1-`}p+xfY~#V@`3`JcUQoIJv;8LH<# zeAm1GH68UI^81@Hf98NUT_2Z`amE@bm`ATa5uF;-EU-uB^PX^CcPsIJvkAnFIWoY)w_I&5DPQ{zF^|?gfUvnYV2fVDrLFuc|KQwK3==8 zoJrTbZw2NA(a>Dy+mf@eK3sV|+*j^~JaKq??1^KS6Ri_36VB~T)`Y%Q_Vvo+HDay| zDXxSN4tt3tkgZ4KHR-LN*uL=D<5Mf?16j|OWy3&)mF}Xc{9JOu=3{MSm>VAtp(TNeqC#lDZ6lsj1E7I{?Gww>`z$Ej~AGMN#$9 z0mY>{G69zx@O;$$o%9%)O+2!K>Dhd8IYL6ZObYXez<~Ag-~-^5%GILrYB;kKX5axZ zCZ$wlaC~~d=q>x`X1Gz06r8TfE1=jp&)6+qkx1e;+aK*B%ICSee!)^frY=LGN&X{!(uvP&}-gv)Zo*tG_I`xFvlfL=7(& z?LEqH)8W_3O8Iaj44fM|#^}t=lLu!L8P1grj)$xsznmK|8PTbYg%YeTf1r|%=c1JH ztB`!iCr`4v$Q`wXSfmVdO2gHVF_cqbdngk0{!XaH*ssvtdo>!rP=}S00M$@oU?}R09hA3aTO#x=fDQIC8A;4f-VJMPldQy z7Gf8VTtolq{*mPiv#x9c2EjUAM9N=^?t-;OYgMUrx@)*G2&f-my)bcZGBx3GSFVQo z>n(axAyt`oFaS6|5Ww6uS=fOsk{uCk@e^@S43{Q?4x2Vla26Pq;6eaw2fS~+B|CtU z16{8Z!bN=+0Wy@mj4t9nL>>VT_Mz38>qd>y7EeG0JOtdK^1)1Uc`_DH=2MMkHspnv z+F_ktazl8q&MmS&ZkDPzw%B;`_Ug;cE)epY@j*_MG>vFm^+g zeXcvYopF1V+r?Nw6P>z$@mry!OK@dNNdsTWzkQ+vpF^7}lGO1mj7UQ%+le z@eNwXIpJSOx~i?DYkKO!!AV_h`nm^~N0-ub7N^bpwI_YfQuLHpAHKb`9*tH)OKxA8 zjm&9~y@mO*JP*yIFbDe@Q0x!DBRLeVLq;fm+gU8HgePx-p;!*LMDHEld3y}?laAyY z@A`9$@Sm=d`fxE}F?ov~GU5Y-$LmRtGgpfO+0gp?ZxbYq*$Wb{O3G|mQ! zg`i%qc;Welx~5b=cwuH_IyPapla^1uhjEm>hiN@`eP$^X$g@+>yzB8#syZ`J`Q#zw zVvQXr+y%SLtZS4(TZ$TImM(i}ScuLnp_l-=w<(1@$swrYdvL$#Y-aN^zz8TLKzipGoPXZS zaq6CO{Y3_Q1nn>vN9hudjuyFKp*`kH9WCSzbV9iU*$CMva{jW@4-bzJUqiVQ;AI;O z!;RWV$&WH8OlHhmNoNX4z)?RRpIMrnuKvU9bm{=YHw_D=$F=AO(+4`&p)`t{f)WiO zkAnC*vk-Z@2$**Bo_%(;FUo|~8pRj49#n{r5u=I>L?+wi3qvV5p=NL=RD~Z7ZDygi z#9#)iN3O=|ljo+~4k^fIpg5^S@>xh8?1Vr>Bl^CF#K#$nS+AmE-n5PgIVd#9Wj4wt+?`RW!$c@!0R7)<&b!XCSY&$K9|8b8W@^7+rA za8@3;uFsu(_iuOBT; zD!iGcI`S=SgT}`u=QEC!M=!N-#c(zqZ27dtW}vcoUHXRRNSX=e3ju>>?4`HQ)K#VC z#JR|wC;Yi|aFRoxDlc{7Zg4GJ7DRT8dK$X1o;jGa^OB)AUkmC&bu14eG9Ng+FL-(I z3o;kyJNEG(rM@&p5L*oW${_$lJ{u-x= z&6K7(Uy|jyV5JncT9vlU@k*fO#vzP#98)x^Yb?s&&?a{t#8hgu)=}VeRck~LhmSaVLafnh?~zo6)%iD(SWoMc9s4Tdh((ZpDb-F?*f6V$-vhibJK~g7*;#YB&8Z=thC0!5i`$u&go|LoL;Mq&M?J^NRzQ94mZ!7su%oC zybqUtEqNdK110#wWp2=BvZ?p3J4z3B55zxMzkaqEynd?6#g|jg(qt;uIn<72GsP4& zapVBJ70(8jOA{mblTW-Bv~v>xUHFkY>6?A9-7XCTX$YxsZ6&!cck)# zJ8X+LR{(KX*Yu^+!zk~yf~ugfgCh^M+vT+R;o0jKmmC4z8?U1Z1x2*5R4Pv`&77CH*m$V( zMZ%CQpP$a%;6!Mo!sUE}u_g~Kt**`G0t=6hZKfGuzh1&2~- zcPVkVu4}u%rBlN&2mlp$d5kiwOOV+X{nVbSN1Yq_b}@io`Nr|qdG9+3y+4=v>6;o= zyDQlGBjV{%clK=aW4Z`zPdQ&_EU_a8R@dgU!9VCc5nZjuU-`XogDI_^c|U}JkgqX) zsR=&X)9_a5p~}#7_swtt13qxJ6{ZVvw&OeUz5*(2APvI%nyK*?T#cYXxEJj57O3v> zn8?zD&;v#7w!8_FrgbvX;T%4YH%ihB?syWGN;j%U4^}4Jds*uL(k6qIAZ&UQeXziJ z>|;7E!8%lM$%fprV4DkIJ-WSqJeMcv5;h2ZRnfatzNRuJU@6#?JS2F(x##9W?5=F{ z=+RnXrEK-h+D@+oj1xwXvK51<&kFOnRmjds4J)}xaT(ew;qMtt`A*GxY4T7H;+f0I%$B)b$Jv5aM)^9ucIMO4qah-4Acb*vn7k+E4!#>{~>)B-` z4#7k@2_+7Ty!d+GXWh5eEq^NqP5j>X-#wd@jXLOxM+fE z1-Vio)=+F9*DF~#C|S;;k_C^`JSZgVFZ&=G3L};hay!h0DfnP63{)wEU8L5Z7clyi z_-n)`h7w?f&JGRfH)Rr~C}2f0ZqrxYQHpzahN~rv`CKu|zyBP&t&bf$TyHE)*@Kx= z_3G)Zj;-j=GJ%;;uo3o6Y31Z9e0{ z?8^G;@(w<4=Wk8xq3L$17z@?N#&RM%lUX@jYC(BIF+~Q`s-K1&^_*eCis}=lJEIT- zM0lJA&PA9yv>!wSNdSYkhb%ha!QZ1eDYoEz%6yM7{jiLx61c)nIB7D0`%q!R*qF}p zH-lof@f6iU^$009HG2ivbb#vIr*KVzMCK&z&+oyA&N#TI{vF2g48#i`MH5W-gJhq| z?hQ&_$UqOV8g2%)dY96H;Qd!8hZ2(I>=p369|#vEqcWAfzZl_b17rQ9s=%UD1 zkU=~E4S*6-?#Nlnc0UFO8t+2!MYIoiN#bs;sgX!F%^!%BYvDifO_YIa<7jU34z1Kv zOq83M!t`rzjhtGTo<5xWKcsiY>7bo9%DxfzSoL<3sczIyJN#%Cq>oC6qs0L0q0=EQ z9-gR)bJLmJ^mX-H?xI?;O2FR8Hp$m#9rjF|rgEJdpnaVlmOAwUXXAAp#3cBgVE8rbs zp7DvhoIb0^`XucM305lpg3ZV2dS8GpMm^%K%m1cOAH@Gf$)-&8{Z{-lZ+zj<-&v5<~Pb9w55TFMksh4Nif_1Z(HALu-ibGaxR)lub~=+|#5%ABuZ)2pph3PsuD zE4V|>gfBt4Q-z!)Ka)<)A8oEy$_wd&Us3h?8dihaI-+5V&Io)g=5(iuSxJ8G+`_TO zN~HpydS1fqiN#!=WWw!Az^`!5qI2aPk_`BYcR`K7%V8n~^7v8x6dV;iXh5@tgjBdy zW_#RaXbcblh^9~VaOW?cDCfWR8`1*o+y0Kw(VFR|0FjvTw+3E}@pQMWU<1T;*F-y9 zS%2H#8(mrAhPxb4IT>l$H=giU%fWX%v|_R3U-l+yn8`%SwRo|0|BbHkcDQ`-E&pJm zGsOFen(rMCAFx{sFMqQ`!epYQdLrMtUu2=2RtrVH%j$+f*NkUl!bUsBR4$vtLOi1| z$DA#OJbHmLFw<^-+~sK|g3e4Jlv`b9<`-`h=ccmhg+r4kZ$qDKyWx`#l2OXU;cWK< zGdJR&cb-YQJ>dvo-#LwD#JO!IhWH;kOBjaCweCq76gt& zJGJZX1OmQFZ7H(xncu2&WmKAL$RUa(3EiJ!qLY5BmvOB3dsSk zzxo4dhJMqN?IsKOVg%yWiItf}xipY%BopJxHJ3#eqg@W^@nUg?akmPgMR&CrVIA?& zl*?_A4@F`S=Q) zODnFE%$1f1y|NB6PvaxVLZ^VaK%DO_mNcwZDys)eS*~@prGD0FBq>4~G0|}C@T5jY zSer8vaVwQRXxf)TjrkWu6znC7nPG0kbEx{(j~uuw?<2aTz$g0VrSTyI9cJZgCLakykOWx?C3c2w2NI2;%UKJ_T6YW`;F#}ZL~@KH;@rOra%?Xg1V?zoh#@*y@hQK{^sqA+E(A5t_TjW6%d?oCKvrT5wGzUBmX;l*a!5cf4Fx!D`7 zN{vxz(5ak+((eqIbRL&4QS!4?V2r5o=vD|@%xWVOl5^{NjZ+J$_^W~Yr;d!#Oo!?& z)$3jmZTZdBxyH$uF`ZLUlx|F=ah0>NSO$h}CuUP=l8E=Dwg52RYqAMUdCA0wq@I7TvuYD-giI9itGzyQo~N~19XVE3$r6^up11LM&? zsG18w&@egI(YbV1x16-4U*b+>=>%Q6c+p2@lEwh+fv@v9(cj@cxEXpe9)WD~tAKxV zuszsrHFlhhhUPW(WWET)s?mnPV6@(cNdtc*Z=19QR%O#r|MkRy*?BoO)T2qb9Q01; z;KI8KheEL&W6>zI5Pddi9X16Sc9xokM1YCeof(_iawF9E_@dFKzBd((k|Ir@VkyRq zhNGRu)9Yx8aXfgViR5_8ojD4df-JYgBAo4ODSWn9me8hT!Vvi5glT9xvzH)fz14fg5PcT! z%{@>r|B9j44ZUUPJ^R@k$Rfkk-!6ym_Bm)!dBI0;vCX=C5E{-#?^$oq!HP78c>9(2 z>C4%rcr23dDAiggnu5kS87J}igwLWi8&$@zYm5$YN`HupQglLOOeNA*i;s;*t0p2D zT+=$V*Wb-=*-4$*YI2FJ&t>dRyU1m)KX{`>zo#urMT1_WG3rX_<(9Y~#umDb1_wjy zZ8j(cv;?heAevHWk~4uom~p$KrJD-L5A`+;#5rgD=IF4TGA-{{(IDHI`L-Qqw@>wZ<-K)V;)osqMb~&6F=P!QA=wz zj%mk?*0B~$iov8xd&kRLOtjmHqW21T{XI;DF^a`TEd(h;%oaW+EK8pddBLuEfz{wJ z#Mt+U9*!ON$ovGI!V1D}NlTmhPZV5nj^e<(2vcd{Xn(H6Q&6>Hr z0)KL=c_oU5xLp0J07cF;d^0AXyw9zVlopGPQiYo`j?SkR!UE;}lU<$aC<8#}E^yx? z{aO385QJ*TVOrZhidW+xhPM&RxEL2T(HZ0#iQJa9)A#exzMy zeR-cvNg=-bso6T~aoTv?7&Fk`UtJSJI}qK+$CH_K+*Q%?MEAah?6OYxu^xa)r#BZ2 z6+ILmTU*C>A1_QZMC{6Yl_^MWVfW<<0QM{u{uJ-gUoLIQM4v~wCnUc@T4Mfq=igYf zinycmI2DOdKiWcaU!Lu9+*>D?vq6`0{6&An!^uLy8lt-2-LP%^6Oh|mqMj^IZts8$ zkio%|+s7NpOe*Ot_Q>taExmRV)U4Z+_lF8FM__oU(fO9hgJtqo@XjB>)t&g-z5P7f zYW4XnkKmf4539f-Kp#QSb-R}?f4)f=gz^vk|NDT&#{yDhoG8N@{oKnv4B>bPF5DYV z#q^#4r;r9sW(Dc-D-}AY(_vDK2KYaZ>a2dRDv*Fs6KM)qv;l+8h;KwxEbk=UzP~{K zK`3A5`P~lHf18e9`Cd1chJ>{#G5cO3w}-3X>_)XcODigG3NK<+YpWtBMIFT=9e3SUd^HKw|CkD zzEO9(P;c7-d=%l7nvh`I-CW!m^9P)rCro2<;?12iMuX8nG#s>xQ%YF3LFZ(Y3N7uV z4T@3L<)fJqorChKd~pYSj%4jduTibb^CI6;l9WgH3H;xy34SMWAdy=)%hh3)w793j zq48mVGad=Yn#?Foz4TFrmiQZqNFX)tmKC_RWyE=)SWv4Y5tZssdWL1r>B@UtRhwJv zau-~lk{yNbaoqU%A_nix<3q0>di&4^2DdT*^L9_%lk(s=3;b}mecDu^om2%J_&#kJ zaIgMDp?A9NomYqmy^VNZXI)F%4aBP5q8`(!EM}Wo!#Pa`r&poW(@vLOG0OjOOlf6U z6$DkR8jIHFFmeVB>2t=P;kRu?X`mSWr|^HTwrv~#p&`fg33r^(TSAoG>T-dE5LTbj zH|nnkQ^7>dE2HSg9`(3j`_P}8URl9EVIT3#7mKicp|LT~*L(Xn?{t?areO1kC{M}7 z7Oi;y5U0f_aa_j>k>iy;?;UUPx^afC^#Vh**<;mrlJ0VT&KJggX~ZCG_T*TLKQ?Vx zovh>;M#kfHHH_a^{&|wnc zTpdV+;eW`-dQ_ysxEzD%D9=Q`2g}M29z;tQQoPWln?#p1jt_hQirWA~?Mx8i=oWbM z>WEl`cae{ul>Gt9k*s+WfmYRJlfyKYd`uB_Sc4HpAGa_eG?1yRb$ST_va-gic5v3K z3C_m5$_t@DQ#}_fpVHcuhx1cf2URPCW5KG#M_E4hZa0-nEYdpN3~@sbJB|qijiO+~ ziR$$_KM>BO)u9uENmH*0t|v_RH<$VA=(z7QUb|p)hcCf8^>HVqw)#8C=>|vsT9c0bmyly zSK)=4xl^c;Y!IE=wA?$w(AUAe1&2)|z6&B3{o_H4)fdxh4NeZsrkV9p?z9pH`1l#S zIpDLn{5&RaR$JI8kP}=*zXD6uOfnrE56TVZCtmA>wA>S~E#|oyhf3SzlCzL%^!-^+ zO41H@IT!-I60Bd1&Wl7wtY3%`5cLP{$y?miuR(OIha@({{kn!CP@tSJhwaS7%Jh=F znmXyTNmD3td-~!mAGrOwpLLrc2W_&sBW@3yiCYaa{TLVZ%PGp>V(dB(X?H_B+vFz4 zY*bW{B@7tF*n&>wmK(7Ho;?hyKNP8j^9mxh7baISJ=bvK_mhjEkl$CAx8mhhjajjl zYUyoEun`P#g;Ca~|HvENw1NE7H#(`ZZ^5Qvi1%Pn!^y?YDVwKB2c;Zfit?R$A=Xe6 zYGwCgu@LUEEklsI$5o&4-c6_?1@a^5&ff%GHgmvf2-H5YN4;`2Lv9B#*7+wn9fu*m zY|yG@^11voU5OFw@DahD%s}Q3>g@L@C%si|i6sdY3p*?jt_&zMwcFMIVx(aDXv*#` z1cF88_X0L2TCTq;EO$NXaz(Ft+3Gl(LB@*4IongwS}mHg%c+Ff$9e-6ox6}Je7d{% zjXy)&+)#pmV@NsSzKVR2>mXORKNRq_YAZ=OoJLzt9-PE)W874zx$Da!x^36P`{f+5JC0$ zE_j4mGo9~@SW8|Wf!D-B0hiZbHXG`m-`C=$2#iu8`Sdlb=U~4e|;LY zi~6h=)-sReJHKs}eUY@C8(W?IPhg!2HxYHk=VZ7 zd_>NJZo*q`Lzsto7jR~C2plfiP9>*ObDI+J5gwf?1LVurDCSJYvhoC*s2bzI>t;lq9X`8wpVCgt*(Aa$zjlrK$m(vW8e)@n$UuV8+Z|bx0 z(&@5#%zY*{9*_8AoZ0Z9H#qHq*b=4XPNo`=R1HNqFY);0x^z}F(z_=kKJ-2L@p=IX zd>ZrNUI3&o;=3hg(!(Ru2Z#_);Im!3pz~qcs%o%o6xb`7l-36L7&(NG$7eNhR2=d* z^s9J)9yVA_TBw2n>Z;wfZR1Zpg)x=;__*DY@TOAUki(kd4w!ZCc@=F92IuW?FHF>Y zY%CCBJqcp1i`d4;>?VUvEVdbp(0Gh;gH0jEfaW)$u7|y%hjj=^lHkqYSZ%*V^OCG85m2|z4#m4w>-by;=95jw7wlD+br_U$ zGp9~`#FiM3$D0m|D4IN4DV{8(w1I+6{*uGX556qv@mP&sPM!-Tn&WXtMkO&FO)sym ztd&k0ZH96qX}vz_07t~@=&!Mi}eKVL(CmA6sxJT@rBy~T2J zD4_n1U=fX~E5?SmylpK+D+t07YJY~{-EDlAFEV0VJH2=W!F$3#>0PuCw1~2Vh%P_4*tTzd z&$;X}Vks)IzOvIdmg0bv=)#4Whi$&?@7GC9&tL+g*>pAs1UVXmd4-!2daUog3$PGbZ=k}J*0AA1 zgH#%kDs6CXUB>jxY~r20i3!L@0p1Q_O*QCVhK?M;uI|37em|^|CFT#pkMsvzW>V zoW&ZWnH&p7z1nGkhq$_y$j+u$4mYa7xWAO_@epg8HFV@(x`cb(-!EF%a59tVnV}(# zRQg@~eD2aOBvSsl7!u6z{CnN!;#)+A@#h~M62bHD$SGOOD{r|A2pf=@;UE z62AZE`1yb0=g_?_exLCCY5e?$_<8%%FC`a5Yv}vMk6r4(_y36hJbcgH!slOsKmX(I z_YZ$e_;>#nKmRZM9NvFeE1E{%Bk^DQIegE53*Ylg(I4=iCq9lp{}bW!zZ88@c>aIz z^PhIVM{=RcP`B|QHJ{2W#Xc+SGVJ0v=U|6TJC0iXXL;rTDcf69Me z^acF+U+~`pIJ{7J{#N|_{|ev#Q;~oVSSa-G{!)1U3-ODD&%X^n{}q0|0GtI63C~}T zpZ^*^M_dN~%|91Q@$>)fK9?L9o;PDTv57Djh+_*bl2&p4gLh^wRB-?g>K%|qt%@LGC-A{Z} zqSfk((Bp3!8Y2>-2%M8cSz!n(iC%{in^+Dn!61D)I_c58^Pb=*4Hk}6o225jK9(9Q zu1(t>{y;+8{B)q^Hp|31R~kBNl0(F$r-o=K_#OpJhF}^CC8i0$1qxyblhlJCsG{)@ zz$zkhqoWpA)Fn;O4MED1gz4{P;t|qEYw5C)l8K~e<4ybM4JGL)Wo+x>akEwngXJ5G zM4Wim^&6)z?U9T0?hI`iD-Bl;*X$Q=uPR5S8m&YfXJ}F@wRl8QQ6r~;{UX4dIXE;a z4uNMgM0icI&Tj};=pRG}|3M1I1w_5`x0mj{^yJVx;WPtxmou8uQWLx-SCM7WyOWXO z?}y6^3)&?vXrPQnrD@bTA|Xu@sZu7F$eFQ;*M(kb36|8PMm?gE>W9s= z!{)o?#;|?V2xGDo-?;DSPlz9WzH}?YS==r&sU}=8X3VAtPn3zb>0+X>VU^Ng)82R3 zN+lAGBMoE0W!0GsBC(Cr$U5Ipxmziu0w6zQLoXy&iJt(U$`H`>nMgKD@CgbTUK>1u zz$88nzvx;rmtVj56_aH$OZnnPlgQxmDkU+axlNc6 zR{{553|%Ci54fvAYbBPPSS+o9Wu9L9$MeB2Rf6q>71aWy4@mk}d`vMvW0XVU$zhg!$@ z9pi04g+NZV~P@$5#CaO;L?P# zNRS>a2OOIu7a@L}nlxFHrgx_Zi_EIFn_XV=zX+PKJH#WVRNWyRg%OHbasCF{8)4r(EWE_!b`j1{6CaaAYAzh3U^J1=J8+u?x&s-B9~TMHuw+DR z*6D2ywQEEzp~gH1MuuAtxviBYz1lLSH5@eNS}ryDsz{z59kbUIBQmL4Yd6~1=fpjB zvcecE6x9ichb6-HBLvpQ`&X(LA6r07jWFc%y4 z8NWzkgimFt%suLm^B0NCu#$7Qw5riDtr_GJ{HLMU5))$Uka4IECw&D@VGd=7R3oGT z^U zN^-u4Uayvp$qgfN`5$~#!u@}=y$777X;mj&&zsYIbGkX_SU1$IoU6M!$La2wo}Qd% zm>FakhGAwDM6wA{Sr8Ek@*#+;f@|EMtC*10U3GPL-Q=?Hu_}s)O5fW5^WLhOo?&!9 zVZR?Oc6AqB_c`Z0=lswAglAl{R#xUNCOB5+L{{K<0kf9dy(ccMXZ3We9CK{`S|{)K z)kkXGOjS}7j_e0cT-7w(abUrj50Ve!E>Um0AKm6COxXXlH@H38g89yOk`I1%c95&6 z>CImINX=(`9!>PM+&NcUOU1L~wjb>Gzn44Z?v}mAAh&YQgLARQ$rD}D?q))7oW+le ze&$EXas12(5AFM_qD8rkXdO7kF;sESy1fN*{0n|=o0GU$aW-4I^3j$>9BAXKA#^ssU721l9qF=sl`aLlC71GRckx#ghbNin;9z; zmWF=6U0UdR)6XZ*JWF29JUN5auFy)+q5x$|0MTG{kR?ye3oaLK#tJeFncLc!zh`G< z@s$N5R?}QML~(PcGPca36ib{z`y$6Pox$XFSC5`u?1nz$YPPFovSELAJs)qzQ=Fu( z7s$KgTtJ~zB&YvK79l5CmxG^N-PaF-J$*DQplhN&)7&zfRkHYB{_gqqot;9i;(2957RZOwOWor{umUo_-k&^V*XE8gE4z&Z zUP@CEGE3tsDUmLIrX6Xfa$|=g{V72iKbka_mL%55!zuS_oy&>IFMZ`Jq;xMa45w5| z)cYs;e@x@ij63t^@cXryIC24sP5_1A%nAmn(zOHhH~8?YM5I0K;|>oa`1Rz{seCT* zMeaTQrkRkWWi>57Y%5;eyqj|*UDc&>m#KLhgT#*zi2T>d4-N;n=g)eMv3$B3w|t%?bt7QO!-+gQ`JI?=723)5jMs5YTNC^J z!jUtvr5cgBW8+fJGbG(eG}yawatKfYvUJMvw(98dSl#ULJY`CQ|^?dE1eUv7+NTkj+v znA}SKXyBMaHym6zeV3EyRoAOqy7Zd+dJCz179B&$@`dTo-@8uQ5e~^kH!|`}h+`4r zKrYCwK^d5grMoX8t_O;M1~P;^A-T;=wlT^Uj4H3mwx}qMw@jX{6z@;_j{Sbgl+m;H zp;)n%4ts*tOr|s^rbsNyI1BxL?tx4u(PNapo&eOE%HieYamYcL$w3Z&fV++%{dRa*s3EjCyDqC3DYr~zr z(t7)bsOq9E!6p75b0}cdPm$;FIXc)dweRgbG?T*K;T7ohJ&b$NRi?ou8ea{tk7Y!j z6HB(^5UYJU+s4psFS8If7wy%7p7b3PdkK=R*e)`YCsCtFqfn&WQEv4dygit#W(&F1 zWpB79s+y??e3%x7KQy%wGQ%LoKF;_vHGCraNdSaAH$r6*XotZJI|AG&?F#n;a?jj2 zmKI5+)V7^4-VFVCgB2A>LyeK#x22FNUEs+xFS9L@uG>AU)MpF2T_|#*CegS^3M*?D zAS-t73#36FfGngLXQlwHP@WGcuri)H?1Jb9`=$!PL;&zDwi`N$GMiCTIjd@sXWiR3 z2lMlj*d8%MXeKY}@G_|1 z(T5ap1*TRQMNga;MoAx;o+EeFR?<4pONNR1hq=sa3L2w_?)Q;T_q2psm4n!81=A~e z8{|s5QBbv*lL-QCHW8Ba7HYPArDz$A_G4z5IGL13i5(iZ2azpOPe}bv5%~!&W`=+W zIDqBQ!+x?tLEvMLk(+-CB5#);8EwuQZ~RDOv|77RNol&2OWMh$v`4<$@4LL|^^3p`ljH+CmL0XtcaabLcf~7KrLE&fdZ!v`g#>(1-)YTm*zWR4y%2Xr+aun;-umu- z|G6Y1W?E9?*0tLf&)st*p*7B)okg`bj34@`2Jm2KMx*)}9}JC9gR6E9qbE(4BA7wF zGW?_~{EQITM#{&-JgbtfD1yZDWRaZtf|FkrBtBM1;#sD^Veh|P!tT1bUJkd2AjK3* zvdCZc`+pZo+khgCf?$^7OHaZkA)`luA38HCmfY+aRw#LB1+Efe|MgsnkuRKKV}x zUCo5H>pWtIt$t<$Nt!4jXeFr8{-1maiyZH26gRXPi}DK*^h0%~TEJ%<(@%ZKdLV^i ztEUSOvEJ1I@BGyAm8%PX^71FXLhe24>Z9ep_hsqkhA4MeI8jP{%w8&AdHdN4LdfLh z>Bd^#B*5#}5v9HixllYq=gr{4#X=RGMnftQT+V^_M;CK<^(--8%U3F;w|<#?^^VSu zZB?&|wrm;A)%O(I$GY@f%-;Xp`wQlO;NN0rZi2`Wad?DdD$^G+K2*sF$22;LINa1& zS6Tdan%Y4BQ-#1vXqH3yK_o*VGr7(%M><Z1CX-DVHy=N}>=hSQMv|}F zWL9O=jTXmZ0aT~cIn|0Yd@Hr&R30mCmz`27VJR9B0}GElFnfQ#_eth0IO`ncKg<1K zgd2{So~PITYq_Wjg>uvd7oo%bOs79bQ&Tx0`bvEFtvf&P%;as%yS}vfYHUs`r*m0@ zoZR(&x0Aa|{dUt9&RjGqcO83(3B^DS^uP|(&mBG5mPWhM&^+ewNXhH_se}F}lGNXHGvH^~V&)LgdIl zr%r1X>CygHi*ethtd;}?(Yq7)OvUXp zh4>27CVmryu;9?gU3{&0T4~-!{>lbzjgP*!xA%LD%zS&aGYHke8xL~hhWmgf3oqcy zq-p+5jVv032T2l;?>DteSHmzYrJlCBn^_H~x#Q{kQ`!RyjgeHd`>pllVk~XhvdnP= z^pA8_4)ff()%Py~+TE?^h5q$Fq?~24(+uksH>LNhU>T0y-pELEe)+!ihED&-8ZQZ) zqJdiLU-*S53U5urmi}z-$HF+VWg* z-o9_+V?m+xly#EfZ!_aT-g(k%uckG}5wAQk8piyUwU)biCbYcfGI>ifHj14NQxB1+ zT8@|5O!)o&^`B7MX*Shqg{7A3gu{xT+AjA!ar-7iUc=}8;@&IBALH{%lkQJ2Xs$e^y(kW^P^OzE*VLpizZ#5$ACr~lJEzWOmwOesFF}{<^ z+_r?5AGsy7@tvm3#_m2*xiophc0gX<@7ITc*C;NoPkvQxWW{)+5jODAf=kOkvPo@$ z+55}AyUAyx&vYwfNDX*yRH^cm7LyQus~#L>WCmax4n7iH<$Gx65n~*YW^lF7lVub8y>&iKx;y9ec-qcsC8@y*LIbMwY-`@h?k19hK~Am4QnRDXk^2&leR#H4zU8$B z9+BlUHLd#U=A9VdirW`*hI4hGsDrMO~zUOr1gr)4doo(jWzhho8`79|hX1B1^J8`y1 zT((eL{N~+Tepjn>a&s}a)BwzVWV^JxIoDKnb48|p?Uv!&hGA&=h11_#O`9PTUTDsp z==TYT>M%TY=@qAMev=?^?W}lit4Mvo7x$hff6e;nIY;H4zLgg-PL#F~>Gj@En?+Ot zUhICS`52TPSuNg^FVbW+G7iso>G6?7ky3Rrsh*sCqMCX+D@jg!)-Ck2j+Y+!>){Vu zws7g2Fm904>Z`3<=gs8JO0AQW^YH{ zj?<3&kz+=H)EQd1@|`JlB|^`hOQ|blT+v@fRgkF;Bdrdoch8a$luoNsht$_+nj2YT zg)5G_j+o7tnxmzRYm+0H&-{30QxH^QdsZ(0`h`=LBfiNp%*K*%L!@pkn(4r zx!77CyZ4_kgWmaJR@6AjB52be1WKj6xfci894h9}A9zhjD%|5o1h8oi>+vaEz06o8xO*~C+WqlFk8|CLLP z#d)W@JG!Y?(3mvKTW+zjR;sOLbaFnsqbjlNZ}t2CirdL2uZ`B{CtpFWnb$>46j>tD z0MIVGIb~Fe7v7XOde=8!#496(ow@Z^I^8VAkP?x-|F!oxlfl`Rrs#o!uBr0`=Z3@4 z<4&!YDlsx&oRS)ADgdBUYqH#+<)7H+Adw>9cJjdu)W(k`u`ITt{vJ?A11)tk)MrLGvQk~;%D{o-;p{LMfwt^p<;7iqw&hxC z-o0yOdNED^< z4J(x(olbePku#1_d!aGl8D<5abBiLIGHR||7n}nRXAm(%^fMhwl_q8$oI)hkgSX(R z;RJ+!;CC0R!^;b!jANw5e4^Let66Ehu9#<&}2FlLVAxw>jF3R)0 z12UAn&boXN1W8S{U(wsi#cW5oc)mUyndR3W70+-)-}?5JlW=`eiA$Lu9gJ6h7Wyc;7)u{3R30uQxA{}<7}E&bzZTPa*(KH%j1N4dcL$+b2R-l z*8Sw@xzJPam(hKu^>LWVzQKF69e{c;q+eK|MsF>BcOD=JY=u8S9#8ob@|u;0ayySP z?&Q0Nx1GKzQET~TxskD+L59^zl00F^Lg&@i`Amjfb?@0ePATc%ZJiI-cV31`Rl+A- zCzjut4SCi99nY8B3bAXaE&{xxUIcmnCNl&FyMa$eq3w+v?9@nbL8k#_ijS$GP#+V~ zvr+Jz8a?G_$&q_cKRfs7d`=ObeZxiD4KjCfIv3;B#owVuEH0df3G)W9xXezS2HE@k zOo~b2bM5T=H!7nSel%3!0$Pu$6r+y_yM3{nGYCH9{>Q}K;*`Rb5@Y4VQl?ic9`h`o zl~q^qgUK71{wwlM95rNI$8*PRmoR81J#}AP`|+jUAr}M=n`_#gbg@--EM8!EBjcN> zr-BuYPkuT&!piAV*(IVTa|cJD-2C3Bm?HByaPAR^nxaR#z7tImd{7+)2%$9N_?oLp zO#|Rp1OZOn4h)@o@>PZ`i9_>TuAGl&M%7F_W)j)v)Wr4~Hwc=ta}avoap7Dctp4ax z{E;qbDO*d0&C}#J4R3uR_uFPZ+fB5X=e|eHsapT~ZysJpWKdc4%G}J}rQ}Bv9kG$- z6h1Ju)}R#KyI){_5V|- zDj&cjn~iFk`N2tfedjgH=W@x1ul7nEtz`9JvWsX(HN~WnDkolc;f$J-+M@?+7tG2x zt#OOl((xwwB}osoe!q3~{`BUETx0Iuto4@TK0(WZI9paHBSp-{EK%CHDOWGqR(@8j zW#?CpT_~rQ!TN&p!+rfU&cj8_CcUragVdX<<7==0y{1*Ne(j!D9iRN(_kYji$H;%a zX1QKDd@$^E)0QP{Ur66+X1{fpyd|~UfB7#y+$q4e;p>vDpeC29y~NR< z|AoE3W0Ls!ePsW%-!q8f;fr$}osSeh^$WCJbvzfv!bkOGE+@TU`26Xtd3Lq6R+)86uD=;Px*5g7+ZHbE*e)C0y|Om> z6K3}MZ^xIOGo`nF&sF8j6H5j0)_yyiUtR2Ex}|x8E3Pg-dE4S&(;LViJyNW=oF(xR z^&yP6f0jSr`?biA$ao!yb{3?G;8B8qhD+M>vb+_pQ|(mL|yP`j0> zUuJBs^6JC}inv=^Rd4sxCrfv^7q}lQZi_2)P)x2TFp|X_L+MpA!ZC zG{;?7%V%?PDqB%fS;Ub~@BKQHX5JX>(3o;U`yrzc1-`?ac?vxCA6T2Z4y2EfrH`wK zF;&`pHHMRbd&IBmi2i?U>iTDetxGPZvoE4^0$pO-KErbJO^xw_wv$T4kGCANt?Ng^ z{3R`(+vwkaqJjj!66C9aqL_{%m;!UcR{PgKO`RSgiFSjc?5x_a`YEy$-j+f@%BO;4 zo9`r+YHqcEt!}v*FRqkKJM-38N`fPaG?AjclmD7&LO&817sMwAuAG6ncsPiGpu{3A zI#dm{tq79rt0uY>xKfA))Wf5t4-1emqZHU)R<1P5mEeIBpF<0oWC%Ai&8w`<7V3?i zT^u*2R5h}d-2TqK`K@c}b|s9JJtydquX^>O;l`Qw{)b-LYlr>Y$rxQ|Ng1m8H9=aD^kdMZf*DO z)Q`Snymoo{cD~WpG`N{W{%oG%6Y6)7fBAWiwSsmyOSU)H<8tp?wo6Y;4eT9-LXJ!E za;BE5ZN4dZV|TgY4OwI)`DA%0Figy4K{wgD7oc=P@6S&$b)1QZhocb?5jab5dtMNT z56^h$IzUU%V}kmR;_lL z;|^t?;t79!w_X}Nz8|6gnJ98FDLuQ=sHJjDT4K3O4UIJO8F3;u;-HQ?B%%k8 zme8n%GQdZ0qh5>WaYL0>LT|X}H-6GbGJ~7CLQ>y-kS`sAh)0;hwYFrbret!Ge6`lz z$Qwe(6keU^FK#*j69u`^Zy>=f=I>fC$VYEL7RTCBOpZ#XQl>YXC?@i;`Z5;}J{;i- zcJFU-pDA7w(OvO4bPE&$+yh!tL_$P{Q+x3C(M2?-h~Lw`SH!|YAPwhzD1O`? zYGKub@*~Bm``=D$K9p_1ACb~|L%L0UuzySJHG$WiZwS5o;*VKKhsKygj zBAM}7HLNg=q=NGBaG$to#FuOMe=38W}B2+2oRYM3EI<>^U}* z?~|JaOIB3fy(%iFn&owDe9j3ko85_JTDcn6mJ?oie)4-_aeSORLH*&eTS3x+6&&SHMdS4(Ny%>p6~K@`S&cjA27$3GW|HJ z>m<%6QOGu)FcM$2 z_`LXFMpWELu%qusB1QRF>e2rck}G#4cl0w5Ugs>xwgiO7kXxAJb-wIhQMK-QbdLdCJL*Vff>x#g@-Css|#Se2#pp5ZauzRr?N2%6sFB{nl|3chA)% z-YKKNJRu0EvgQjvye4Q0i7@6>z8mBAp93NoceIu@@^{%8uK-ZWcqtzcYa7JtBS zlvh+1(k1Q&Im?P+^Jm?rWXoY(uSPPSahb2+zOi(g+M+ey{yqvsETe5m5L8sHEn>PO zO88-Mv>|Cf_t^I|kmmHepdnO%1KO5yNY<|s<}24F=Iq>Xewe7u_61aKHLX)Bt>{+m z{L$h@AFuP+AzP4>b4!<6-PN?7N#@H*TQ}T%vcBe6rpolQXy~7cpz;q_^)rH6E1nhQ;KPeq9v{Ry@n69VZsrOuL?6 zyL7y&a8@p|HPnB9fngwrQ!^K6js+P|zls2J&{hF+cwR67`!6aF>-z*Rd@#r^5MR`l z14vWnej&3N%P!Xkw{29_MrvcZ<#v`*8Qx4~l0`VwV7)$i=IZ40jQwkikLNRLB42D6 zB$gPLcv0S6Un|en|LgJjA+%dGNa>L>wC zrrG7b6S`5u{)_Z0QDX9WZ}noUL7Uipnvkv)3X_jfOF+>Bw02CeSXpAw#OjqRQhZR=JON{gqcEx8lH?;IA zWoNP6YdlFfmRFWRr26QC^sTFpo=K^H_756aK5?Uwk>m4sH9st3UVH4fY#(XM)PEn@ z_bsoT`WA9X2=6B>a4x_wLZQRI*rT9kLhH~G`~h%&vBgbar>3TfGH2wb_PvxY!c9>; zC`Oj{(?+6D5Z-L3di^x~@Rg@WYeDAZ(a|th($yFG8zC8_H0p55>z*A5k+t=Y5jN#F z{NCbrF{p_>xGss>nIMa*V9E*Em3^HBcJ5z4E~Cb-CKu{(!KS}Z^eeB6m4}x%?rBzD z=!(=JMHo5qMj5=QQj4r@x2AH8qiZXj)@mxbARO8mGGm^V1cUFy>_+J{9)ic*)ZXLK z+|(^IcfeOg^_vPMOrq*v0IQ=Y0rf-z+5~k$iXfxuB8;s~@dUl!Q<(6z%`Mb>5!&*y z@4T9^a+n-R$HnGST=wI*NoN^`6|7h<8#gp5)nsHL&p}+(Ua7D)8hy<~)&kyFSGQI+ z%kB2>vt@nq+p#%?&3AHov*b#is;%OP#4|pwrRqLgSgB?5+fKJCZhXzm7N4uDzsh{d z?qSY|+SlG+PCm!Xz-Qk_H*?Wwj`LBE4Xc{Q??b0V*_jtP?0s3lt=-_Tr&kS4rV*5) zZ~;+_hJT0@MnxNZgy7d6sii7YXMS+w61fzL#?+G!pT2eSB_{Uil}F1JIC2lIAF*WQ z$#LUA@(O7uw9IDj#7Q}?kXqh&VsS^vOQDLs(8so)(<2wZfAy?-H3b)VgMYue8O|Tx zym$ug9XD^IHTkk6t8GUXq|KWOxg4M1#AHck7~Sr%Ca)5hj0tUh3tqqq)0P8ug3*vNN^pSpQArix;^gATtSS5A9# zo5TE3E3vdzOzph>9h1*6C;wk{>B-q*P{*rUF`0aK;&?h;TYvN1F*1p%95;kL#Jp5I zQ>~Z#^~}lod{W_Vy1z>sp_pgR)rQrSSzuyHr1QVpdlU1+ID-;Z)1VJN%fN?NMez8C z>PG0@KN!w+!x<$zKZxsBvq-w7#j7y)!NA2Zv~b`hc`v{k;h^7I ziw8v{N!66|Vtw}Wi4s!^vKH0n!SN%V7Tsot<5eEZ9o;hA10%8m%d?6ud#Rl1Zq(Z? zq<`)4?28oL=+^_Q1P@1J>fg?AQO>L)*QfmgQLap*1uf=H^Jj574GBG1eo=cxRgG4%Fz3f4=uzbVg~$gAW5Q0LO*oO}K#=7)QB3I6t4ltLf=z&cBZ~ z2M0&p2VZdbNP;42iQ>-}TnOqCNvT+|^lLAq1Fm8-52w4uUfL}uj}KN(_e;xsF_Fe@ zL~EMy$CJgPsZ`H1KlaC#xp-46pDL#UDjV`2t%`8gdfoFZz^@AvJ5)=}anfEcA1jT| z?OyiWL@DDmrm4P@0t*4=%Ll z?OV%-*2$~1tOR=XZDFkAB~}t zU&{03O_O&zy}Y@8QaW4N4r!_4_dDZ6ve#RSa5ICx)&GFL2-@!n>n~Gcd%x8rnl{46 zqzHNnS*8&kkeWIC0}yBE^Q?@}h#E}$qpT{0g;cK;XX>0maBMmwA(BhHnVwB=6}(hy zX)U#wo_C3DSJS!>=1-4R!-@%dDjgHksk?{8rE=9WEijE>V79Im(hM z_;`%zU;pwlu~#y@9Ui^3j7)|O8Oq?tJR9@%Gw$A3SqJ*05gNF+I-<2CB-K+}hhQis zj#7(AFtjHmBLL(fbB`J?qP`0R2j-#GhcVT=u@K|}O?8v4m9=!=J(Uz=>8hMg6^AX; z%Ap}Y<_U^IJ~4Ui@b*)eHKL)*7@7Q% zvV9x5fY&81$3oHYdg1KFf5KP6cixgqG=ARuC(VLYZe!RsG&UZW zWnYfPU&$v8qO_asy;*aLPKcL|%%15S;EYWBVfsE()VU^-^8rU() zOa{<0q%-X>xY5EP8-#m8d!eaxJlHyfL+*|nNwi<1peEk3+&G{3RIk-}*X`@gikorC z-A*m8xyGqp#eF={*ggXhEp}~1J)wsAbMsyfTg6d9V~m*guAeyLj(EQlaPu6in}p#^ za&NvH+scqvK`9rHj$bV%>H_mIMO8#>@YpqsB-aj>TPu*)%D~kc-LQQ#>y=NAAg@>u z@&qE|7t6O^c{mpbpG$kwe+IqKZ;kdtP3w>pTvLVagH6h3Q{#SNS2u)%wdB!)4cPxw zBGlG#dfMClM*s3v)TM1{HElcSj`MSdur;V0HPw3;TJs_@mUYh$!^O~RT8@m9I~6^% zTK}OH8BF7y4P|ispX0Q->=-B~%($sQDi69L@pkU4XQgsAS1MH!8&16K#^hL|mN9DG z+%Jw7s&7fb#;M!)iJx*saI6-)e>UpGgeknFnS%wq8EO3B`o8q3D5{wr?EQ1Y zCv5+7#}cOQyP6~eWilx{U91o-7H_4!u+{J~$@<*k=}hhLbeoT-84U+Kw}VdX%Zyo9 z2M8n8OhprT&Qp{5pzUBpq?xD}VhVb$#a8x)g9;`Ns^gvPQzxbL!C9&PJ`Mf74ZHZG zO60x*#C?amuSpkviKa|csc6oo3Y{MK(3G=;YL6n)l>Tror@E^@5m=4*nibG!{YNA(iv#<1CL1vU`^Q%_4omAs%528nEtGtyv&+E*jx zM`rI-$OjfrLV@MCreh5ST@1hL_O!GoDB@-0blOS3ef!OHUdD@`c;9n5`^l91La0NZZM^ zbH#)$=8o9uM;29tCE|8>FhFAZz3>8gj}V9&Pq?HYD(K2i zgqbzPhzkp2M(aILX!YWLLRrUv(H|Q@`|QaJ)q%%^zE{tM<$6r4(zOy1Z}%?dJanhv z+^@vBr$??%2_$EF#^~7KLh&nNIPrA^HYvtv5}IL9?cGq71BI|etM$>}PJTf~q)ENrgo+N-(UJ^PXUCC10J2iBGEP7wnq9yG|o|YD#$L|NUMHORI(=K|EIv#Q!O{9vj9P`a|HkKfH zTe*ffW>5YtHp2wf(g5op$Ro=)Nv{byJ0+VPWUl{J<)5>k_+!KF-ByX`IvKyD3F8*> zKOYosCF|CjNnNNVV>&pPTY7Z$%+}kqbTLfWxgu7+{C9>`B_z;}qRKpRJN#MS$Xcqc zv|7%gx(UGlc%CMU$FAB|iY;QJCsA}%M*SL7 z>nGENABp$l4=k-FVlZal7&~^o`ZNF^`ZST=fz;%iG zJI0hfqf>yiHiy_)Az(RKE1lMpg#Y*Fb?KTq`3}oBD?nm+Mq5$hLm?o4w00g!@p|Ki zV0Wy^UltS1)uUI2j+Gngh^dVfw16}muY+DM|0w%DB&93oi)k%aFmyo(5{h&@8`o&> zL1y!nuc)TDd!LoUpqWZFo0_Or@z!*LflZje(qEPIm@EmzwR{gr{M(b*M4LcU2rpS! z$R)Rm*XE}6ZDpKa%`O_LR=82#uxLW>)rgLVN!56nso&c_2X%7i+tq;>cZ@(GiXBt4 zX>oFem-u!@I>Y_;``tUPWfNsmFXsf0#Up2#1QRz5jQ3JsG?`&p4l{fj=Kt@<{Q+Z( z@o4A-gDp{X(1|fR-;Xf;#ySjHqiHEq4^2z8&M}Krj)1NyF%~A zR0~LrC^RXKNF!BdcuUb$&f=!ApMk@n$j_2 z=LT|O6q^60o#Gk7?+zR7<+dp|ZpRE@Hp%mReqs5X+oJ}-s|9oHNq$I*^rxC=sx~?phmumGn#*L-yAQ6~+&XQsb zLAIypLLw##Z&#D)a!QdMlt=4*3=5Sq7YM;UAu-md+QlsI=T&8HUcKX2h#2aTmdI^ zInx}n(q-s81E#YNbQ28M7=Y2}(ogj>`p2u{fmYp)g$eI|G#*G?Lh&)uDLLk?cu%hQ zA}vjR{{~I4XvX#MF46F@!J1fHX@<&;`WyEM&s8PX8yx8HAEmKZm6k#wCSx}aAsoZ; zk}8I$3umEY{PM8D`79eC$8M8PN$dMMmx8H<0R;-Y`T zqyLi#*!+F>YV=uL91~+wG9$=tW%uCrh`J4DlM$M^28VtSWQZ&?k{5gG;1XeD1Gaf}=am@okc3aY zdfa&Lg0GD9a-g}kq*M~*)^EB&`V#^m-coq1nnbA2)&IU5MmeMqHJ&BNJc*6nkKi6r z=uH#L=`U-4>lC)rpfkCGz7z^@FyZUKF+q-46BV(A@M1tCAj`*K3gPKc8o?|-MeO)h ztWe4`O4O?e4>Z0GDkN1HwKLdFk(C9-dxq>3t(aTGoXV;t8u1>3O_)n}cG;v{KRc+- zxlScJ7hWhGM{!n@#rZlGsbr5O9OPpH$8vO~5yLV$T`AZMD@bLFBk$2K)K~M>RFPOB zuf)lpadNsPjsiw`ry$l8Gy+XNC_nX%jd0=4W3_DD^%~;2bF)K3Nz1zE^$;JC(6?Kv z&Q6O*dYm+LbU37Gb3JYd8D6LYc;y-l5 z4+a^g%(&&!DMdi+6++FI{-R&)&wzttr7Y`I1=OS;5L7AV#!NdKavwsaM^lKQ0{19f z%s{6gn>nt3zW6v(xUKvp{f(=dH8K)ejgjntsHy54b1!ulf*>1#AKs?N0T@27D7F$q zlbqSlU0{>1;_rFRl`HFeG}y9&dCD3O;k zbf+Ss3z1~Q(5#r0m-31g^%VXT^U3HA=TK949V{xEgrH)e)&LPPbh#_`r;Ml;FVg}${U?T9y5OWpvGdnR4XYLKtz)tzpx<2sMo#)>&iDf? zu8=fKkQq}=Ixcxy%JSBs)I3P?cD>xn)aH>6R>Ork;jSl^>kAk`w?sCxh9Nn{sASn! zmK}5t3=d^G!1&I)0HOs}7Ij_qGT4iV$#fvFLI%5Jbvs|Dua9N6mB_RRw!+hUKhNSXO(3$XSC?83{iX z^Yb(o0-w!9^472|v5oHU_uvnKOs9qjtPPRC4!=I(dlBUnb?Sdzs$f>uVybIvB#!xs z$=`fqdeM!H9oJ6vn)-6BRvdhNN=j8#iPse*XyW&YtB~XztO9OsR)`VPO%Eh zCNi?mV;lwW1SUd(55+zHcGB5e|N7MX4cJLKM=ngf3g76*rN7;TjC$1x=CwQ;O@joMsl$U?H17f9Z&nvi?iImoyqWI-O;v(WzL9pv5##)*s2ujdnZ3 z)?(f<__(O2k7e!OwAk5Mq?AfgIg|Ai)mPBdeZ8}^=C$bwZt%@f<^ z>{eGYGzEnkF=*$Daa-ISf2S{G;~AUr!46Qq%+GWuKQkcg5j+Li?*lv8#L#2lsPke@ zvlPx)4;_u4{4+%&`AfijAsc49`LLx5%(19f{BvxGbC+k{34aAkr4#6M?TQN_>nZ8)FcX zc-z|&2I+38l&lHB-#LND%$c5TB=k%P1zTa(DlC%M?Kp`-CCss%X1lh1r)9i z-9ka%xX%6o%edk%Gh&MT`+rcWBdWh2k}xi(vrJo6JaE(o>!NG*>(}PeOBo7O9O-zQ zc@Xzd!ETZ7L{|qKNW@2uQ27{B=92m#5vru*6)ROX9PtPbSLhz@xbn`89-l7Jhyst(PFf0MiJege0}b$ zgG#RM`Fb3yQz`)eF~aKgh9e1f2GsBCWweUk^g7;T-(Njz4FX+4paUfzI;E_if%P>mQ&@32jZtUj%tYd(dm`jul*S`+*7)W3K)Xc zxd;?=8Dvr<(sx7)qEUtVKbm1z$nQTQCMfG5Vm!gh4$Z_^VJ#<6N>&;Ot^-?2ARz8mM5xr%3@gNPK|Xx}zFBkcVx za|d$=X8dw=YuA|CH3LJ&t0=VS6^R3K-!GZYMFrC8bS4e?c+~qubMa}>F|zAvR|MKH zreT)?DgV3csN@xr#9r&&ezg|wrhRO2jbqQQQJJqjx`c6~TPq7o*WSiu5JX0zWXJMB zOw4KmxwcU|6YC0YVqv+_uQvbMHAOXF{*xm$<$SO9co9PK=7W}_X`kpU{L{&2^u^Mm zBHg)uI#GymWx!3OJw`bmsvjeNm z4ZAFjz&-#TVB*x|B0vbvCW4ieU_ga@T3YTRC7``B)XdP%i_9S6%kUcy9TT*a7!et6 z#L-8i!;z8Eg+TBC2<~*!RxoHFi3n)?I|#n0q4=Kv&a>!iQ3?C3FhVgk8IOT|XPCg& zj5tW*Y#6U#p#R8U1lYj>s_SLrVAZN+ecdr@Rg%W=haw0>S`UU7{L5fMf^e6g2ORV+G-=W+>= zrTwSOOdh*ts(6Q_IrC9qrYRCf6a;MsDtRA|(|aC4beagzJ!CNJ$O(%S_>9)LeONRd zOw3?FaUbVLt^hCz#z1Sq6jesBE5h=)7N`sdXlkW&X>=*zwIl7*k^=5Q;DLl}?c*N`;YCbUR8@5dPM<;|S5s7t()4XOHkKr33Wtz9JP-zsb(WXMRT^U6> zI|x1dw~`=f2eN{ThPG+JD8d1BKPlK<7VYDIp;bG%+b6$NcF;%6NTzD&Mn0Qz{Fuct zSX>2PN^ZXG&Uommp&g6m`-9qfY)mjJrT7AR1n(!ynwG7sF5i7p)!4Ky6N2~teCL%i z^NCn;q0;~2&_brFc*$ARQ3JOI=wqjRw4=5LjNo$o-1cU^-OsyPC2dq14L_lC*x6Hw z>r(Q|eL;_T62~3snAk{!8CpjLdqYrwqq}2IFd^iG>@S#h;~-@VXpDgvP)_TQ@n6)h zpy!0bk*`}o!J!roV9|{_paXjNfwnCPV=fCcGN;) zwvJY_NSvwxaaJ!-akes%IDeFU%L~LQF$d!0W2GL|lWRdyflIZN%uTgqgprm!Y^o`o zH6;rR)bGW1l|WZ~&vY3hzG$gf=|f1?|7Itv;w_eb*4HX==cVNBVmt0s-lAgc%bTc) z#ajQ10XEqf{YZ}%Mn@t&R{F!K9!tr|-%V$dX2?X-usFs>_-VkRjihUcDgt$MS>_Mc&wdEy z7*9JW$IxENgK|tJ8%H25(mK!NcWk%(fM6ucj6N*%1$2G{a>#URaoHNixFziF**+7G zNjhBvs_80TwBw0q$C;no9b)A%3Njt}MFp8U8g--k&g7r!{(U_rn=l9S9k+xkULd(l zQ((LGELMZMeU3?1bLeDYIa${9n9hPQfxM6_&v@)P^b^zl=66DXpb}^+H5~X{1aUB- zhr?EIbE!E;TQpIlkD5qnbLJS8uBt_6pQ83tTm@Q0GZ+fQVEP#ErDeV8j%|0^^;s9xTfUsnqzd*= z+_X?cFTIqWPo~|CaBvZT^W~DR`%H3vE0_h)wExvOjFBDpY$^R)eV)5?_jsX#X3RD^ zJNuJ(n=lwfN;zheOEr0p6`JwVuu~|%=i1td-s%Z+;q8SYCJ~m*JmkXQ|CZTjk<;WO z$wV2(u!?k%UdU-Nhvt@OLl~BC5D)w&jc1V{_IVo-e~l55sX*wx-51FkwxzS2bZ4pM zAS0ATmhuQq+=*Vtz#pBK!+ajRIlvTFoK7duw$=2o(> zSj?fyV`BUmz5aNRIqhtQ;}eQVOmf~oyCpKe{6;~rQyp#2y937TRWdolESz-DtefA} z?|&f4W=|-IJB#NZ$WD>`V z@-q%K4(7lU!K)u!CwkxmbNPEqp>woJ>}!qWuc=kU5Q*L1?FzPmOmEM_2UhabOWn1y z!LWkumlj^aK)y;%LKj)iU)y;Gi#hhM%txj+^3oS8uIMji5_E22<~V~#SLpmTOddVh zF!x|gdo}6Vk!5sPw5PDtwfqA#9AI zq3vfCD;V*~Rz0QR(ImOmI&>3NvhOBPKjh`3BMW~xsL*P$X0;r#9YB~d4JX+Odt9M)+`WuQ zPiZq%#JtP6lh0ABtVWxishnut3yrEYOJ%2v?x|N2bvEMJDJH{%J5zv%g)R|de+i35 z9c7BJsn_z*QIAXuTtOA1Ry4*^|>{@Spb-AC?1h0GB?VcBu31hont7)4$!81t8 z&>1D&8l$RsV1SgF%9fY6v9!6t4B2MwEM~;KSX!`~V*!f*#4S%M^=6MhddE^+V?OfM zyqL_T|2J*#0Ve5Lor(4zs{Wi~{grcdRdsiDb)24_+!Hh-X(Wx(NC?Rih#)W^Bay>m z3>a7&Fc;g{u$aYRF~$aiGfvmpYkX}S@Lt<%RQIJ1SxPi$)(+HTN!|z)n z^QSkpyV+!3#Sp^1qc5tlV63{3!il2d;5n<0=W-Qn-O2(JDcKpJBAJH@i_XpWB_~=M z2nnKwL1&O+`%YXPgdhl^g`ldY(==3<`-H!eH;c)44nNsiP8$A88^ycg;_yrb+GPp& zAV&7gg6*ie==n=)&dn>Rn3U`yT55W}Ud-!F?fA{dB?U;Ngu2X7V~1=pgM9|%4{tcg zAI5>ICQ0c?$&}ws<@gYn7uVY)bf=x==p& zGNkB5>Da}7*>@dY;^%wZ<{KsESb6msIu`uu>KXXe!pu9VUo(D3o~;kjdjL;6z%#cG zW%7LBXr>>J;TnomydJBKT<5FtxP$x{n*vik%N%f}?7|6RD{Vg@8NSJHyj6PEZfT@m z{=wl7PkFhi{?Bdg%bn_M{CuEhx_{;-?uT%vFUhLAaTxSQ+Eai5I}3kT#Sg8@^W zzr9}PD@kBhGOJGc3(oUn_fILDF*TSQyf+Nf;i; zU?wg2qeFMA{GpQ5%>j!Fy>=Lnb>l&zc&Erbzk-}S)F$=un6Aijb}e^}Nw}v*cTLLLD|^gyp>R$g zj?IIDcz{%97emo@IB`E~P%Y;}<82-~wfC}@i!nxk+m{J-L?})_npGnc_n{XY`v|GO zm!ij*L@BcYi543zrVNW|kl}A{(b}pHy!Q6xvyKZ)QRr=y0@RXvcG-?=p`_Ppu~UpZ zx4OCB+sN{^0lr+6uR;qbgl|;y80lBIrjC9PU-ojn5Af=hFLSpqJ$$~MzsV1*VtHd2 z$QH8k6}NG6S!=(dXDYD4tG=ntA;-J9^L)J5W zl-WQ=#`q0WeesDf7mJMS)y9{y=bPbI)cAnk(EmLXi%>Fy77I=NAV)r}2Zma%Rz|wr%?3&L$cM{0pJVW#GK3Yu*)lvMEv?oiq}_VGw8DqAI9R^& zch(X%V55%!iu=p6f@-NoCkhisKap{)dAhY zPtPk2H*}pN zpkaH}r6}6GlZ3P$*ce?A>}qX!o8;44>=$1{@x(UKEtjR-QPKBb-D~SF)^aCwUkqe9 zwxU|60#=s^C4fw>vaSoL8hbs(|L}g$N)=#omcf`3YACdhGQs<=XM+n1=Q<`P zX0K;N?lMyz*$>bZMUBT@1!tXnj>C?#cku6pJ)yUajE;KK)TKjxHC|8w-(#exagoJ3 zz(}jd+FX>)Or|#Jf#*&wof*t>>ZWz&ulSGN8+e!V+EOxKKUa)Rzuf8Hwz?20gUhcf z-`qS1}+^2;J<{ILy;su**xMKlcZ- zZ2VoR_ewH65X0|z)5}`c$xeCWm{Hk$H@eE#bCsvLZ>YikSy<-Z2Obd6YmZX62#xIZe8%l6D2 zxJ3YPFoQ?qotP5B`m$qOJ#+2o7ZBXkfGqwH>1ki9aBq;CG+T!h)*5|DzWt7&p#MGh zC@mBW&lMY;GXV|Oy@A6ZykTf@9lp63r~@p4*@W|$gk|FeLc{!kw4$iRa#`joGV=55eC5v{ zY@`29;{^<3c@eY0^GUghP?Tr+!9eMVK?X#MI47v~#*+c#DM%=zAW8jB&3~rfE;yni z)Zzk-AR3K@GS3+Oi!{k7iSjAma6G;I(&X8i!CZO=_I^Tg5%Y0+@pxY~Q$GHzOLTm= zq!F_>2LApx`~dzgkpd1zxyiX#)&Mh32GQC`t6)47a4f*3yPZkPiP9~=!et5!$S7EX z#x?=6!1t$d-^Up08|@{f0B%~_35Ivy6u6S!Ib4Cdvo<&22ct#M6~g25My-ngcM`38 zDQkwR1oDBd#j5%i`L3ZSkG_qxOK6mqeS9Q(l~;cknol*wIojB7A67sqrNK&n(mH1 z(y^_aJ7}Pi$<7bYI=X;6)hj3cJI2JkLZsMr$v_39;3>1TU|IS!ubkV zzU((yD94Wv@t%R8U}jCr^kglIyr$MIS(4oUCH}$Dcb$w|H@haFVL7vqbbGnk`I>1< z3lHV0=;2o@8N+<+yM+23n1fJV38EpZKzjzzJW&zN^1f|g0N*s?NRKOO&&}s8Ssi?2 zdHMAN(>+v(Izz=1<&*x#(IdAx*i5xmTNb44vvZity)4NHLG z(y3iO#{D7e0%U@6-1NpuD63E%VIl>t3ght9NGAwqg~1UxQ;LLidGXg^$stCCai09P z3GvJm;v5F6+pdV!j-KZXSN58a<&>(m z$e7)T%>I+yUygqDNTq)BfQvCs>yCcT3G;@4pQ+7Z*;YoDGfqJSTf}P)C0>m`Q>}}f zrg}Y1RD1{ygob?Hk{&p_KSdtAFQpFlczqn>t*wGBmEw6Mfz8uSenLA;mWct_TG zT6f`}i3dJ^l~zUKF;Dv4c$$-grXlb!)K!n-y~snc0lR-uRZ;M#9yY}JSsD#D<9!6k zsWgx!rG1)@ydb$lDHwex`&Q095E5`==b>C}^Xb0#iP2pZ4QJXO zfA@YgrdTiDh0&pXz8iTw_!i#>zQz44HjdXc1BTqi)Y>6UK$Vyk(^$s=P?nu7%Y-07 zdLV&|`;F^TCJJuT!y{r_i}}`|voxpaK9;u3?$5s9fBImy#A~>wA8@8G40>L7aZXW_ zcWyJYtkyK;g5|y6#J>COxSf-J*qDv>Y`ziPj00>ZOfd*kI>nx-h<;d<_QOi?m__o8 zOmZzDMa!8`S(_|%^E1+}co;$TA>lXP?u*2txN)Oh!&50Ow!JDhx^kV~7wyJrbH5Mn zM4q(WQ4@hYAs{l~-2`<42_YNP7sfa)k03&+2VNcIB&6y9XJZ6pU$l(s`_ydL z0A=5bs~||U+FDsvL6P9iWDcu5d^L%OgOah3X-VDuYN=ZDXKx;6WWOG8p|qOIVAMe3 z_-rUAwQjXFSjxq&?yF~`7PfO^ea~zMtcWys8O^LS4Gm(0;e&}gSr(b%Zx#7BA}^{| z5LU<>Y5heu#;y}qX26tS(oq&ZCW4_nBke+q`$$;f^r2yyMMWBo_#>k)3%n_Xm7ZWk zq5jxC@v%E;p52i&zHLUDBUq{;&z|Vs+zVwXknXK?U36if7Lb(zod~+koh-%rp{!J~ z!}kq`KV@aZ$|=l6E>v5WU*;Z}zfde3EgX{S>t};V3Jpyin!;ik#Mx4K(?%`=bcKWw zLKL8(=panfuH`4#cfWOt_wfiIhedF~YypRurye`C7x z{LTt%K3nBXyHY;>_0)X+A!Q?t$ho+=-jOYS#lg9V4yDqjE0G4;{tJ?>U5(vG&w@o(53F1HgvTwb`T@<(2H|M zw_Dme?&Lf#fRN^_km-b=^JL@MJny#rxI1ihU!W8Mk^&yRpWk|amAl(LeyDMzg-$E_ zL61B?cE8@i7`xu_8*wpGBj@I$P9VnRW~t(pYCQ}H3mA(DOOXF^3+;NR-aqbZNs`IR z5!Se^wr5#R`3hzOnR*}FQ@3mA00!g6JF$TPI+ZzmGYo`I$%X3ksQdWT+OTW;3gM0b`)xgP0s4(`$I0s2W_x?_;=m4HGZaKO?U? z23isGr&L8DeTJ~*22o_}P~4lUw8=0zUMMaVZ*>EOSB)qup6IS(-_LAVH|1DfRHM)k zIS9x2Em?&0d?i{4FfGq#s!ncp(CI#waj-`g+q?dBctymuP z0P`u>gglC#5dlp^NT|{r8LoNyw$L|{d^h_QF+%a1h!zq44X-Y;V*Ca*f+*R+kL@tB z*vb_Or`(0pr9pe;kyD#_wUaa5;o>db^_v?F85gSF>lVFRT(2JKIc(Bwow;*)o?W9# z`Hp%nGAiXG_uZE6JiqPXM7IvVIXQ99E6-H)rDFAbzb%|@B@1+w=IZ$kF*o%6V4j!D z5ul`c|4wf>hZ)fprqLQNINqal#YTO7C8>-wzn*;5d z9k1vwSxd69Szf!)k)fT$MMD1M{M^Y-4HFE=M_$$1YywaVFy`Dw8C9zG%e!1*wXMJg zFvQiT_%Ff+gzK~S0PI7Y?{v+ISNF?DNIZ6Uv#JYOSLF1l$ zX>v-bb$34t))T|w7o^P<(@rbYjE{|#yIU`(!^cjXenRhVKM+)J{|)2KXQ5Lx(tfi>1MR4 z>U>aLxVU!H_7{-d|C#?h_<4BW#_urj7FC^lM*q7j)s8;5q)0|_+MSJ_u9#3nnZ(dqTPwn_ei?jZE-;cS-w7iOG_KSzI zo`nG~!OZ$D#CjDT``j9GE9|iygSP)RyeZCG;l8pXi%j$_6`cSDFbf9o?`vrC1?;SFd4>!7z&%RZRp?Sv7 zol}#2zCMks-^1U}&Jya}be3&wD+C&bDg}+;70{EfJumjW+`ws%b-NEvk`@;$oQ1Qt%0$}7pnc0#riG>S~#@rK%z8yo!uPciJ__bAy%@8kvVvuvf~2)8m))n|PI=(h~;hbxFe>`!QB4w)3Z# zbz&p6z7An5v2JT;a&j#{izN|fhdLNtPS#Ov!?ES|=m)vKeb~o(DJwE>>ty0q<&5>_ z;R)m^@*BM$kd)=ZX{nY&%2BAb0_0B_E;r{HGorkko6{>&#oerCJ)aO{y9uNp<6d$UPMq zs~*w!4D{Lk<&S;wl;us~XI|ACDq#^SLbNCT>Y*Oi(Ac#5+;y2x`!I1 z{7hx$JOX@(Z+{hDFyOmLn%2fuiOB(C8^dFiEbYP;ccws*K`g+3+0r1Sl`JctgaO)} zavg~AEzKJDNF5pv*dWk#xDOq_4KrE?j)R6P;QdOjm65~`4SRM1ZF#-$_2=3b;~d1U zb`5?_&53fK?SstYyey*8X|b653XP2(I2d}kSpGRxQZwTBSG%@VR(S^!#E;L%dAun6 zi?=7i_6&^j&<}5+zxWRDNobP+41yLjB{MZ@&jHaOwHNY+m9iMJZ8GpNfMJa01aqfC z8ZY0e&sBRhb` zeT2>LYaM78XQFqXh&+MQGTa||SuqD0*1$7m*K!f~h5U2>DAWyV(hh&#Iazf!w#*D# zm0?p-EWPG9a^`ibv%#7T$@~aAR5V8sq2J7G&wE0KngwAS*F{tmv6>T|a({{zP^pdQ+Nct;N~gABfrDbVmMoGB0(Dm|2Rj)ZWH^ z_YiZn=*^Vg_-)8rbe;GtBEI(@0PnqK<_LODce5^VI+Vtk`Dk3O!42pMs8Kg~EP4u~ z?EXs1AhDVUdyZJ~3m=IVc)(=P_afV|*p&W9?k5d@>-J&6&wgsPr9oY_=j zW%u`VJqKBvHR{*D#-heBT-UiqilM@pV9{CFN4y1f{h zMxve97qpz@N8z*$-gJ8PdHn1A(Qhxz2k(^He17p&x{8ii1-8um&#_GrmrHnWev zv~_1dFc(GOZa>;~m+t6puz%Qq`nwNujQzWMu8M!|pYHK37RO6he|daoUb^ef&@{@y z)`3?st|hWlR&X$;CFYgU=0mN*fax@n19zh~==DwZPy5?x>tfx`6eU_DBpY=@ZcDO< z0S#zL2u`!w*8zd_=JG9{ht@>FKgehgA84sx_Xj4%1XRupgI)=PZI~JYnX*wY8D>U_ zPvje3viAR6V>EH5a`oSlo6pY}(8)c_HY|!Kxc_rIJBaz>b+dzS>|30G=T69o zbI+qp0q}g9C%lh6WI|oosATl%7p{GS=>o$UzQn&3`2u!i(B>F~T`bs!fEL0ut$d(n zVv5XzL=!+3j5>w>U>-n+@7&BxpFlx^=2QxRO-j?njM}k1@oTm>Jr+GSuI>BVd(>hRa90fuTYXu zJ9DwSafRoEv#X7Y???p*M)Pv9B#b_g=k@blu^LB(lR5FoD;dWKdE`g<$Kg+yA;BM> zy6bE(h``FpMWZ;J-n5j}ynWZ`lL_@m>jO#@SjYxDjeHHnEEqSaf{X?aMEjo1LmeS@ zOJQp6ugnTf4Oeo<+=eX_*xD`=irx;cn*>QF2wc;Ja~s3{V!M@BpdKUQiRK_2mtQ`& zG5=s>WoresU?oNV@zKh;Bd-gC{z}cr#n#|(XQ3GsB)-9&3wSN+gT^+B{egn@yDAqU zlkOD(ltLk$UAt55(&4hGV1xcbd(Y@0u6OP10O2*7a;`+j%0XY-3Ufat*RkK_-^z%iJ`_1NM|7cdey=~3E z`0M@{O~&7z%^RyZ<5HYB8u6{=vSDGy{=0qIv}GH$$%k)=9y_&|loz;*TYYOd{6o;W z`nG(e(V6XrrMp{xP6gM=Ud5k{VMK2l|5<@v-}s*uhdjkqrK82mmg-nfc6KOm0{ZLE zpPw_YZ{zX}G6vcx2nPBy0h(Lm+ zs-568*AR1uPgYM}0t@gj98j5{w$_Yo{b$7wW$bcf%bDVuxw08!W6oz#dT{Xd3@snHUdB)gVylvEQojNX-PC; zCE@!J>JS4cN@59o82!RctJNp&JpS$9Hu@y@XU~yx5F zpMKzZuR8zYo8~qyXYPM&zJ`MM(|$$9z8W#BYYC>-@snO$nXfk&xk};OkY<&>eD!^N z2YDR#%Xi&2`aOR5dp7r8$Potf&2JD2^Gla5 ze%<=*k6b7O@^?HjI8>;X53e;vwtO;0=)Gp~Mx*-@UkNOviH9kK#T z*XVMy;+!67BBX6&O4mF`Wx7nOdtRg8x#L2&rk9SEh1g0T3%y*a_6GIio5$|%ERH_M z{muh*TTC=c?XsK{m*uV~+2T04!?Xw9nq}_(l}fjw&*AAB{YVhgt1$EjP)v94pKW$M zlg{L0{y;0yYoZF6h+(hEIEg#iDQ>1Q&;n_2WAD4v=P@S{8P$c zQL|w3h3xg5esR;yn3Ueq7voKsq_#{n1xOE$m$E#W@m!W$eC^7gavu*)Vo>KSZ=NH$ zM_CU~MjNYVbmX;pg)PYRWZjZ6H^iP=T9FAllhYjb=XywNh0wv=5XZL*;30!Qi+-m)VR{o zQ;MD6)s`QgZ%#MlA(fr!4!SnlXkLB53!WeR5Wm5_vQ#R}^U}?MZNH;2P%?vZ>5M5mkNqE3rh!fL}3F6RfE+-oIH zU0m(m9tLw7Ix$IjhnDA_GBWZzN~L6wTIe78sJySm)uXj?k&jiyvE9T1 z9a+mI^(L7nUw~<#(jmEX!)7L%TsT}fphF0!Z^9rYNstmQdP-XYyymt>VxuL zlaOOfKKmwo#qbNt;h{ZlHwu9FS-)|4Jm+8pfuuzQ0lwClWt$?dc@zh18|K#v*WstFFm>k2OLzqFPb66bq;JIb(LV)VKJxu|1NR{|HZ>wg=6F zZJVT&$`_*Z^>kkivEhA;hwF{M5xu$tNq4v&RIo>5EAO)1k2f@N@+|z02lY*8#O6=r z!r3(5vB*D;cP&|4eRz*`C$u|h?|?u`yYs`o5#>=1)5|s*MQ;t-OQEqb%o=f6i1)l zd8VI~=39GDBIDb5dRicMitCR&c^o^4CxG`hj)w=E=A^sgHj<}zPY0NvS!!Mv$g4rY z^NH+(JMX&?%}vf^NyF;|t+Avq9Ey+ty6GEzMPWdBY#PHWzcE4ipxufbv6kJ&`Ov@u z&R5<@n)~8>ge%MluRsjcW*(<_Ps4s`>a+c%QTddn&Qrh&wA=trg}ZSa0hu&|WRUmQ z+N@oMaPJ>qx{-%zT=Uc`j2FnFbPXd7PXICVqV#%*5h7NY(}eGJLqA1VWg zrWeEPc6Ub__I@D7d`@@^_$~U(yT@-O@+Mlv24dBHNbj}oWNn+>RORt%j zUq*KX{HG^Mr9ob6H?giIpFcaX)shA^S|nBEwo8Dv1h-s1!9Bn~a!;2oz^P2m;3@vi@ZX5-&Z9JpDiq4u zfsWDe8(QngX`%j2xyb||BYB#VnC|1I2aj?W9*-afdC*5(qaUL)p@*M1IXE`_CjQwh z7>V@U)8B=B0c}d0bUWmJdNcT}BhgORY*xp<;#l&a)4%2o=aq8tk=q}cGi(tW3^b`rIFvYS)w1c4t`C_9;Wr7TrfYmseYj!?G)_fh`MUlb}<2%T^t6C6cz z+ChI1&Dsww&g&T`RAfGzQ4OqK(lqO{i-*fwvv)l2rhMU0ac;FPKNy#ew#v1|uDK{B zaVYQ^Mbp#}3#b572`eSV3Cgux)d8l#TZSwv!y)hLQ3(z7jGk4yI)?k4kjpV#>Ia~i zHIJDZsuacphj2|ca7diwy~BoRxZ$s|u#MsgCjbkw?2wwZWL3PtsX-~}0_gz;ZL?IR zhby85A6*jFp7qpE*tAHh$*h^xn ziFuy;tw(CSulm{LO5%7wXhNboqYP)cYB5hUi4k-nQ3X`zOQz$l>>5a{p%2`^qDGoV z)Ku$8HPdNkovxJk7tqM{3+>^sv5L_MzpDn>bCbW5w(`5n1~^?(l1juenG6=04YFoJW5ze+GW8 z&(vog7)SMOG=P}02rB3R;@@~Idu2_SCU?HQnAdvU3 z4X4YXH{`-BbaKWkabH^Fj>h|xKm1KtkZaEMy^<+s3Vk@Ipg8`a(sVhLx0fxYtTzL5 zyy^BctmyglpfrifJC*M6%72OGddo#MlOS-3p%X-|o4AOqlou><1%lXG>yx@lb)qe+8Aas2_R(IS%egg5jrN8p1G&1PnkyeLsVf4ibq=a-T z45uL_JwDkf9fk(Ydv?kc_70(z{2;3(pF`bvtYsCiTRRda0KzVy=qdAnjLk2>#$=N{ zXk$ngnkqC8Nzf?EWVwUt%O*7K6bv3IP}7TrOjZpeCFf%K2sR0!-DMg&_P}&{!+sx} z``G<7D?%?wDpo3RckEw$e%K#~GGHbP(q0_EWF6z%nu{%fC}pLPiygPQIUk=$ns$-< z)O2;qIAj9hYbGY<9>bm5(>vZ(pYE4Ajc?PW8UXbJ_8ZIT!5OF7WVmTG%-LpM$o*=; z@puUCGGf{26+5Z@bYf(77^cMXqE+f1n|3ie<7-pgG8t+uC*U_kLW@LD#ZsD?ksUXW z0Xa>oseE!Sb*(~ve9>6aKB1aDoFI=)sb*LjLR7OX7MB-14%q@y8nV>~w{7)p*SD27 zsVi^H8hBz4yt~_`#Xkx^M71nJ8D*WjhTSpoaG**5o<_@1Yu=dsrV`WL_McR=GL3ki zEbZ1gJ=pA{pXN&u=M$Un`X=TNIG+!vb!~obcCXqgfA!z4{vCfA{;Sc(Z)}ZYZve$Y zsD}u+nXJh)CZ#goI_k}FvI*RXn)rBr>#XZUy#_*;31&fsMNUjKKwNq3bws5EPzm=R zXg$U~mrLt~!1q;b5B+%+OTcp3oQ0kA=IFcmhkirxbcZXP?iLH^*I;1_!gl6t*$$l2 z_bxvAVje1qTFmkFrhBU@ihiIiEGvy-Cn_0eHRJ~W?)I>C8T%X>pAddUFr*~w=XqdD zg?B71eTvVDncFw>t7TJ$QU#Y$wdRl?{i)l2?zx-RG<%lE@Jbxy=RpK>6yNU7tGR+; z7lMK}AI2KfXZU}GA^+|f?9;%vBMYR?&tUCnCZ+k|3qi&L@rlOku?RvW{x{Ikv8>ia zRSP!iaRHGh0H_x^2|q+qhpfV%R7~vkD08daykmP-F zbb6c}s7Y$DUG~~}Zjr*Qa+|rHB#fTq-$_I1&?ck}BGW4Y7~QlrwR{9C0d8NxF!z!o zDpd#O%CFs#TB}|)W^X;dhz2p)t8DPXW9g83r>vX1_X4E+(#c+cLvyXo&`I|Ke5a8k zL#^~ChH6!E73KD$%f}pxOvU&$uVS|PZkCZS&K0f^k_h1I6v3YMqX`Fk_7-Lf-h%B2 zxi8+gy2L#|dLXMP9-h`#bI;-kz<$cG7-=i+HK-pg6VUmMZ^DQN#^A4S(Pw;2WziAG zO9ghRgB)_%N&%X0#$5Ls5hu}w^mfHEgg|2Nuzwpj=J(8b(-9&qrpQX2we1OS#KLw8 zU#EjF6gDYD;*r9CL{7>g=Px0)4Xkl&^Pq5#ok4!6R^`$6@o)ZDfwQKjz}H@0wjB+? zf*o%qB+BuMUbD(bsOJ6G zO^=4x8<$^pc5PO`E)q}S{W9j$(vk4^OgV`m%%LqHcd{}WT^3s&;&u==Y^eF#T{a*7 zD6=2@d$*qXS7DmnkIK^>#JE1)AIpYsGf{`NdS&5RTJeU@32Px}V@A&0BYZ<1p5Zs% zW;{D1(^GXLhq!om?kh+L_}w}S%Jho1xBfY0K&PT#gMi@+~skN}|G zOB=>i0r7zH@b7J^9I1x9rgyx$1|Iy{63A_M=kVTgf96IaD%yN0EH(@Y-~P8GB+d@r{Jv zZ$;PyZrHxpi#JSRLFe*rIWNY2Y~->U+{+)b?LtczJ;QNcxwJI;ch0~Fkr$im7prJG z-&tP~EhTm(3?I~eKcjm_$A8}JR0q23vte+RS5It)R^BWWBfgt-W6QFNO)G3!~s23nvX$nVCq6tg(ABmBHK<|bvs2k=*7b-LS?R8kw>wAOj-~rItutlepUt@&k=(t7nK617pxts8NzI_Dh8?%dr?qW#6m}Gio^=OvNGF} z%%F2fkdM_GmE13jey*xy>{zq8mmo`Y+J(2nUA}A>LEJk(Xy{n+=2S|B=Oz#z`8y*k zB2X(B>&14dP9U3S{Jsc*q!>%>vqG&AXxN_!rhKVY)2tqrq@G%UI9p)vt_u zOEy!fPkVc5Z>b$rS28=vz`-da4SHYGQbH#bnZ$N8RNCDf`qJo0?%i_tpj2_rb&mf1 zbW3P3#n)b7-M6&I^PJ)Ei&p-?v`~5JRCh-ovaaVeLmSF?&_IJBF5<4dD2+k56Hx$K zC*2Bx-J1RAuzNZTHO9VWU7PI-bb!I4e^u~#hG(o07dFwsg&qB?@Bkyj7R~FuV$>Pqo?eVSnYP~*~K7$0Cn!emG%?xV~` z-}2Sjh{0FXhG}6@7psVO5i8kH35pZ+zW%paQSgLXP$s=lLFlXm03dcGLuG6QI1_vA zSDyZw8aW{iQ5W-25+^l>4X_nt0Xm|xXQd3y(2vg@yYMt;K(X$d`A;L(iHxl|jGVfM z*;ou#5Waw%55zkvgQ>8aRCs94EABgQ5&EQri(?CtLQa*{mgpg-8%uHM5*c%3O59 zaid$f?3oS%xZCG`eL45$rKKxhu`6M&zRz3D1yF_(wT+-MP6|$b9@0v-kv)phO!y_< z5jC)Kg@NR|Xp$7wHBp(n&09j?j_g^wlb^r(aX#SRPW#>&@dCsd_MWp`34s?$6U+hb z@+y&)L1afB0Gc}h5z1W=Lu)qY`JX*7)hdl;%}=bhA*fmk)sH{7q!qyiX+W4U939L zZ@JWUn&+2v)2YP0LfMEpV_8wcqdEU*gv_e3o;N&OcCnl+s5Uaa+gPcNUcxFiNg4~W{wxkw;$D=mBlrQQ!Ke!&AW+bms)Wc4*GMI zZ+LQ1RW+$tS{VIh$bD9dOYL}I8Rv)S7jv>=8Kz^%Rk^A<=H1`H2}cW@`v_+myi{oW zNmz_mYGxAlNclF+r#>U-_+E?MOdo6;ILj)5#Goyvqacu)Af_^VA4xzK9UAsC_#m`! z>9Zki3wOKDhl5JXtVcm8s8W?$!ra#y_uj0UwRP;Y$R~Qm`cbplFLl;S@m#yOyqbOZ zm7BAN76(nNX6~I|bTFG<7M^H&ZrfN`po#h^)8qnXnvK+`;jt3;{?P{oL|@}*8M{D+ zHrBuBwUVyLx*IEI`RMH2dd-!?$X#A-zYu-W>~n0c*Y|9U3Tat)>7pRk;#cHu+uv@? zTeQL=80qHI-A^fh>h4om&N1c!df3ml9=8_T zF4x|^fM(V$;{w`2#R9d|Pj8?+-1i3B*&+I1pU0f#CtwqE26H!<>ql&16b}qnN?!vr zpfyN7d954(kai4NZm-Yy=vQHu-#t(*z%-!{a5uJ>O!jB|AJ5iO`>F{zEFMwJ|046N zw;vGmpP}pQCVuhk){b)qa?ezSbv{d@JLInb=!t&E>ZqOI|E$~#9Ir&BmLn(_)Kg1I zUgMTywubRLENOz=9sY*{yC2O*QKN>>)D!RwJ@CpO@AM)C^xPP?E2X#l7@L+&+0IH> zP0O~-K!2tGls`&}8!?YUXuh;vVVHB`1c6^$i+^fTeY+}X3uhE`o)TpkWhy2{DSLX9>qOAH^kYMpA-n~ZqpU~(sNuVo%*&3h4Z$zcoleeaHsb4PxMjC;Q2-(f zDY&&I^pH6j08(dm{bT&EkG@OGh!|zWO5hJ6cc%UJJUbk0Bb+*#GiqM7N%I`DaIPK{ zHPM7HF{Ijb#e`gkmor4ZgM2D)$oZ-u#_s5cCh~7V-LUoiZuvK>b!kfcEh(BJZ!fo( z7l%XL#KFcS`G|A^rY*U`=HVf$0#tm2PF)Ylj7)c6~OF+00q(wnw?>7 z(;rJP5h@$`bEu5I>KIAJ!Z2!^Z3iHRk?p(EhG;6HHdpsE^1(Y!P2G!NwspSuu1Ebo3%4=Pdp zaJJ?3WWl!jG4~C&TQNam^xY)i8I~j03+=>teXXczBu3blwBiR`hNJ+auPzoS%X1jhSTTM{uWh z%#F~%21+I;0R;xuwxJDHV~awogK8wYB9xIaYp(4!CW+D)+3nls;LteS_vGkE=?>B~ z&SZRv74IC;t_VaV0lzyYrz7ax$y_r%GAHbs;c7iQJ_YgU_zVhsCUQjcm$=u<;{yn1 z=>QBVhg+x9;d;j>hnqn({9#MmIo(norz>K$p&!Qem!!L((#V^l?5HaT7 zwtak}$=xw^uA`siH-3mu&&QOj>+EpCSzT`yT}+LE!aaR39)tvJR~1BG!TARcJAW_q zoFFmY9XJMa0HH+=;MAD|fD)qWqd!jNnn30_hEBfE>s z$|E$JNPC^z4C%%_D|14dt_xY0y(z7=luJxK;P$dWB?VI%p}WV1(I|*go=Nf?fKPB- zz`8+e1u<|5zgSsa`{Tt&x%u@YtBPxck{!eO2sIjI=chrjd# zp;rt9-Q2RwT;5)vj~o2?FkjZWRWUl`eV}4ayn46x>|_p3k;Uq`yQdh17%^2aE=ZvV#H@?ne3$<0tF$ zkn2PQB9XjFA%-H3(1bedgLfE$3V18pAQY3jKu`xx{_X4K!fZ*#hhm9lxX@m}wuyj$ zSJiZM>_F}WqQDO>-Bp!abrtZArg=_bvAe<>Ia|wSgtdD6p1>~#uUpD$^49AMUg);G zTmc+k(c?bbGcI#awZld;=Kj;CiXsQr&!PvKcE0f8P60bl3KoQ;xtEoykMv!THnZ3? z!$)5{wjitJM(E**aJ7}$yPKo0gv*`ha`!&wW6n1d`kbIhOH20^F;a!HZ3{iWOb^P&cPWJks}*Ss1=XkU{ErH0m-9@TNL37*&ParcW;i z^&(^#SV!@oRv0HVHL09cVXGj0ak+1069Y#y{>jY9T7M1q`qnx|0iahm*1nm>eVJ&C zB%7;tkYKemo>J~9NOoh4T~{6~6n8S5iZ=a-7RO32hmpY)gKa#RWO1&+gCQRyIxRe4 zco@lsh{wMs6ktOEbA1g=5fhJS5T&DiH)uhs|B)h2TV|Y;z^K;@5aA!nO6UFih7@R# zms1ixnSsHi5qHRN@82=8TG(accW;|m_%t&idImctB%99;5156K_x23OvoK?R(qtZq z`*+vfbpUmF`T$Df1Got53KQ$LaTWOOV-0otkot z&k2tru2SCq-m%?CWRc#K2+?zI+74$!|8QqOg7mbftuaZlx9vKa!k~x>s1Z(^N|dlM z47^NKP~t}HnZ)3(Xa%gS;%au4tL^dOuyqv!w}(d<`yWtc(4tS&nerq33#Jr zF}q+078GH!>lCz8W%C-*>1e15C?~6;(#WwBIEH&`=&|u!d-QLHmfa~+%^RQiaLkN_L%L}$Qi94{f$q$V^Rd4E(U?IZp>dYqz;hV&nNJudp#E1z3 zz>wh-kzhfDVLZ>&u=|4(Pk)?n`6+;cd$rbe?bmg?KXB)%Elk z#MxkS3WC0U3T+9e@T1&+*>wtLb_bR?W&v}0F@}8hIq6~{1tuI5WHXTN6dM!9+;h*X!Z8B?NxBdYY}ob-j4}m;6zZ4-Z`3i>v~7ybhA@{gy$u3Z>S|T_lEV}`t*KMwLd&QlFDoBwQL(p+8 z&pM3DF@0h5Kj4pZ-;wv72JHJh7I-)SaH3Ls_@1S#i?Ji_QX{3+y@~PZp5NKcr)$pR zt(U|z1wEd+4lL|2Jnq%ZM)HhD9no!Vc2;blQX`}W1D4D*Jdx`NqyDPQL~V9NF0wxN zhE%p4lBlWW-m<03`r%5mC9R0g;6=q7GMRH|%DY*xhRN>UIfMCB%>C!bHvIhM;jhY) zUJ&`YY+F!n>pZ>jpzONKVPU-KgGl4Z?_=jQ&3#}7ZYq9nzil_VYsC_$Vg6%Kpju-I zAHc8auzl?tXR02d^~J(c;o`L$R}2Y7fv>6Ci2ZDacCPrMB0;ZfPmtC>fT`gUrjSubug()bj>kqnkM8Vu0o0 zybN+6s2=Dr{yQdfv^!27aT{lfP%gykqq(oytVjgXDX*8!MVY#0g`}-vKdWfH4{)t#P?Vl355)5=%o6j5& z*iv(5d+6SQ<3Yt3_z_IcW?}#3FWb4-Rbw#7v_&oh6f001N!oi;KfuqB$r`Opu6pbi zGs`tJ^AFT?iN{$a?46kCh(C)~_?2|W-RMs!F zsVkUOZfC1tYVO`WFc!PJGYjLp3t(~DHj}&*gbnym>PEYSf9Uxqmct4qq}QZY=^gF# zDG!YemWNuh&AE!EmP-?@>}al9&$&|TjF(-#WxsnkDgiyDtg|)OrmRyL{a={0ss^@> z1=V9Ept!GP`F`<7?=9}SX6|5+_IJM`yayOx1{hz7DL|vwg6_#w2A-Mb#Wo=m3Xm9I zMhCqc5+#N8iTn@2endw=WV+_-xsMBId<1_u$-*&pWmGTLlDfk4Px4ouqJ(<(*e+F+ z0jEOMDKn)QjuqrQSDatHWslo%Psv(F2)5Jl1^~Ef(bAs~3-+*{zZL@Ji*dmdc4Wjk zu6VgP?KQY0)Cd1H;a%HyA|)W|vWD33x?QR4vQyfjBA{{`CnkY$28U8}uhrh)CH67w zI79*4ALB;5W+{=WuW_G2Ia$j7)V4uq0sdU9rCKzZiwv<`G`3m9rl~@5UD6;l_&`R~ zcBd3%`;A>N^!6y_{(va=*Vv+~s=ExH@{>pJ;!EMo)g8`p0L60PpsI6h#dddH%Sya` zFtG`2dOvxf6bof%@yo*7a26s^yxh!ta27;0K!cFP32-1&2>y<{?gKVc(NB%pl%TX% z^oQN+F;nRvW$rpV%DuOn`#AJUoabv;?tzStJ2$0qC6RA85AA`Rw>5ucqoGeL{ye>Q zH;+@iCN^+SWze~OUa3ZT;qfs7jcT$O?82O3=N(<|AmxPIh_1Kl?2aXAoSYGUg}ouW z>URW$G+x06VMsjC-koD z6FVke99TB;kf+C*!};}XteKB9h{5^2!Gm&{&k4W5FlWS#oi_wI2VffN%^@D_3l{_2 z*n<@_QB-tJGLQujw?%tMBZ;9Td*TZF>6P&TF#Cf7>x^wDh~^6S>c{Ti4=z@$`fk~t z9&+cy#h?jANKL_t!-ejd))33DsDqd4wQg)zb z^xZd_+j-{itQDn0Q)u!>__e5iTAh2}#TACb>wFNsYIkZghYB5NaY(@myHFQqXMLnOK z7UcizF3o)e!c^=P>xhXL$JQ8tt0ilZ04a|AEY#GYG(v>9oP(dx-F)tV^*!dAv#qP} zx*hHPU*6`yVNpxSRvCZ>m$N-Rj;eVjqeLe`fa}`7ci=)F!sFIhzWgAmP>`kx{qM>+ z)7b{!@h}51N}Y&qC!hA**^5JO3uDFN(Md(>uhB9|r8=h43+|Ma+V=^*dMkEO+V+{H1X5Fu7Cx^b06aF+XFr#L1al~X7pbtHiK}7 zt{6SYc&X;ZY9~A8jY8e1aN%|?iU%1n?+&()>oR_Ux}Xd}ZJv#oQN>lKaFyPjlnIOm z+X5bO(4fb3YWNPLOd+6w2}h|k1Nn)b!1_MJkbC`!3z=cRsF+(`gynyt8-{b2f<{pa z=T5X&&zRP|FI=nMT?$?Oh~_)T6H{`Npj;}>)>?d7dk^;ue+xoFCR2S8cXaVgNy%4Y z$vn4}#I>BD|3SR^BqXbgt!ihnyH>beSq|Qw3xuL(J3*@<=A+nenWnjD7#Q8fKA2$+ z>+rZs?7Kg~e-wA>4Y*NA{%KPxy>}E|$O#0>`nKtQ_}sm8KU0LYz@Q&nj0%ezwM-S3 ziT){nzik7D?GG7|Zyrb;Bk_5lDHDm$am*+pF$_4Z@VhueF{P%ze*4xN$+j@Oaxe>!szk77` z3ja3PwLUXo3WIPd;{L#^R!DNKE!Emodm@lCfG%j`?TdzMD|OWKS&0B!2FHTFmvUTa zJ0u$xLfyZ-mZ}W3+1a3Kp-2{y$AR?4!af&6eNI-YC0jbVP)G!AQ{pqc=L)t2v72mc zRWeJ>oGg7K$9*WNgb57oYq#+4_=9_wv43El6Yi;*nWcuTCs_+U)>f^pXFGX}Kw2`! zDNdOXvsP?AQ^`BOGAvg_DC~q1JW3J8jH1@_(SP!~ym*F6o=?^y4{~+_kX@*(opDw+ z6Ip-#&7~^^-Ls9+o2y&Z)0maR(m|u^Epmoc>v?(+tQ>}^d_uSrHgsr*E3qh6n9DFd z(r9@#mD9w(j*=FLVvDJ{oNbJeO| z$~^xSUi72CxOSTR_1WIrv2ibJt{gvV%>U8hPB0XzM=Hr?9TwqjADz^zi(HVjlANQ< z_nl!wpJtd;(AQ~Z%SpGQ4Botz{7~cV^J#3ljm0KxW802R3p@)<7>z|WKp#pxs;CVf zE=^A1W0_IXU!kMOBwV?OUb!2+p8E!_q==Sg-jRe@mfChX2mUi;5IxiJ!P>7{y~Dy% z*UkiUDnwPlk*&>N|7so-)RNqLgU(Xo@tT^1rl43MXQK-#2R?>rg5wptz5&!=Davun zQT|4*Bw`)a#NQ%32z?eEe9a#9rodTdZ$4hNwN=3%`w)fkbB;DTCyEKwUGa6|$nzl3BckL}+mvwI# zjA=0?K^LMX{ghnSF$gamkbA&@{4k}sjAk`9FAC0@<@oO7k=v);8$ zzR&CrueGx?_x{g0|MM@;|9K$mSWA*O?!x3!tb)k}NW9zo@KgDfGhL`#%5qK*cmUdr zihH=+I0X)tKqyUS)BS+|0#~}MLz!XXIr1b~b7N7i+TNcU-Vslx3#qu9<_qM*N~scu zT*Yx-E0(8Hl1 zQ(xgBsW=^?WMR!gNHySMjo3kkLN4P4B~6Ul>7re1pnN11+oG)T#Q`sDnPNhjCMCYpME_*L%YKO`1^u2anUao$Sg0zGz3Jb<{U8fyRn6(gTR z#NN&vTP5Oi+gFkEUr}n-3|Zz<$%+xp7fP|S1>MT(f+?!tMyzo^cWtAWHZh7M3wj(r zOk4W|Gyq?T-A7eBs7wVNE@0ItI?B%ofdGeO-C@XbpefU*Z(A$lN=3ttRw=1R=jyCw zjDwC{MxHR+TrLfNS<9_7K=)HkhIBv9p__``8!P=AEXdJG5HXr+hpa!vst^-Z5dZjB zG2$P)_V!F$Ym$4kiRl9V{+SW8PaBl7-SeMP9zpzjUe`Y61CFi|&-$~-yT&3ND!TU%Ru3i&1WtZk|) zJs3T!kB5QKR3BLshTE{C!V$~xW~TIL3|@mSjCKpUhdDmr^k^7!$nQG_!ev{4L%?kK`j@Q4oOPr_zwH zbzej+>4GDGxG`{7;EnMza8%S+;V)n$5Tk1t6xf&uWX8zJKK^t-o~RgtuB!>C!19wZ zZTO$-bAO((W$rInm=iTUJ3ek?)}6>Hsrqv9KsX4vv~OzDAm9r5qv4w|WQ{W>XKO3cbO;D4%{06kAYg;J za9zNaI}mrkpU^{0&nJa&P*?~4oI;oYaiE`L7MFoMaC%V&4dXdxSBZikFmi!T#VR51 zEoIesC1bqZ9|(Y7B&{l>oa1IjhdVNjSO#J{iA?F%09@rtPbF0&t}k++Hlaf=nZ;WD z@MH>*`e=+eDzBTjO&gsV&{;KkSL^P#gUnaCyN7?9Co!jy*5afveYdxaVN&v4@6Ki| zIXL@AGWgOo2tFs`Zk$RbD8aM4xzr5>xc_{OJ5)=QF_)U<6f1em1?g@cshebubIr$^0{u;#W2LLRSrLD9CTx-tp4%{sC4{Sa5Y z7CMVm8|Yvpg8aCT(zi{6iP42$bm@U(ttRTt*)g0(1Df(JhXDgS!L&%zul;yA9gCKK zE_z$7;OU>^%EPax59%@SDn*^nX-$z6E4gaTIG&KtE|jyHC}-!>S?55|yG9W;f0>YF z=S(I0q6y>cRdFqt>8Cgo?u+Dmizh(7AXXS*k@Y+(@br+Y6B6|ma?Th5A z+|Of;phz8h^1fIf?c1<-f`_E@3WGXb6Dpb-x^hZVL&*&2pph$K@3Wb6{1t@R#K#IP zm$EPKA3xHq+Pb4EdZ4GGpy#wO5t2T}+MhY=u#JL{*8q#G8H+&bj|NLh-S;u^GRFQcxCTQMdwI=o?99^qYf&QQ+3pTp- z@s2KKrv$Ao8=NJ@^Vy>dr2zPOrxCWfWu?C$yWEWW{)WUMPv zDnmfqzZS)$nxV<~u2OO(>NwA6)s@F3k_Qwg>dJDU`=yCO97K0&vMMAC^9oO{uv4B_ zDe@Lnw@Rf(ut+wd<%XszAj!v&*tBgSF^L(qP_>t z1fe8Nkub;{t~09AJZ4lVoDxDc%te1QU33d7`CTJ@le3hKCf%rGr3>Z3O@lg5qOxCU z53-$U^6KH&K4B%yjP*aB9n|{Q6o#+PR$``VI!GY><+#GR#px>sKL9=;8mU9icgW4+ z&M}dFoJ8)y*qxB@>p@obNN@=lIY11+!P%ekVFEmdbz+WK!$IUaE_N5dW zB6)^7D?@whKOa3aQA=NUAo=x?M%VCYu@D!ZOFnr^Dp7jrNoYN)cc)9sOV2x$l%u3I z4P!)|K;$udDw9XXaspM}dQmP@)LM@sMtpKzqw5h`jl1k%_xyj=l9xZ)8U85f6(5DM zt1E7uGE9d2lmOj4zF7 z!%{32tH3}ZqJPTdQ})P#lf{k)#fPihSZ(>yjmN5n55B4Zym2~bl>)!jnP^NL7BVib zisA2b;yp#8w2E;JttgkHs)2jQWqK#u6lISzf!;sI-z(Y9f^q#3W>) z=IL|u&=&q(`0*#i6yPJYEd$+kB%F6UQ+tgMj&r2m7dKjLx z(O2736_*~CSJ~^G&rodojke^oh_^LrjqR;_`#BtyCm!7BU^1a;idVmX?FZcb;EKp# zj-VaE3uF7!Q;m?O4kt*x9c|CB=SyOb4=#Z@qcuVkyW zgptwTdnQ{*?Vmr?OwOOq8)sG~S8Fp)#etgJ-O~+acr!P5{)=twx_bu7r}F zWW&qGQ!CZdTP=06HkJW^K0+)ZpCn)TP$8vj(yyby&MQHtQJO3lYUF-K;-B)sxWWxT zq!-P6>83kLX`Sj{l6^I9W4`ZA)pE8DIRsE{CiH}cHq?7FQmy-*(R;m^^%Vrn9-|{u zr3bxVhn5O`To&%ISlHuPb&g`xY4D8ar^r+IF#Ha`SW)VNCSZK?p~0xnhLI%TG(-~6 zcM%ua>xqyFtYjwMec1{pN#L^NrW%OL(}|v(1GqaX@sPHkIl9wEvG{Yj$eqlPz_0tc z%fXom{j>YnTR!(VeffBd;O#9v<#@vHZ5#JpS>sG$I(0S5;WS#Er zZFbs~Y_eQ>-H7b&k=)Gf)T!LmG^LQw&dTT9Y-dboSIjXsyT&{(uarTC^ijn$1&5$I zaN|0c-TD6wuW}?C=WejuLKj?hMPJ%XRk!L;raI-oe6h1knd)fF{|7j?lv72BT!Z(+ zB1Y~49GWbmJoKv3V2aViz(m8* zhVRieJ6OEs8S3HcCcr+)D5LR;-^qZ|dwixpfGPK>NG#&eOn^otnoy@;6rYyfBs#jn zLK8H{%Jr~>POlNKH!4tJMd>ZMBK79TC!T&H*+`Z2=HKvkFVoWA{)pjiS@g1a@s?Ea zF;`bJnMc#2`QfiWb+GU5L&sUYeNczLj>jD(C8vOxs&$`??vR;qVwul*vg((nZq1-d zNqblbM^4_Jt?#STV)?0i-Fv3grIg#_i%VP~rFyy{C-@i~6k@$~b@~Xs1?k?RN&kcB?zL9c7-vHVH?E!B)ac8t5-XWF(Q8GU(_neH*lM^{Pe>%H zTX|XqX>4xy6*}bam73F8=JO@hl`pdPP1gQ>?LOcM?xpBd6d+OI#wmn%W;qP*p3twZ zC*O?lVclK#=HRfI(`EwXG+H1&t&WFO6YSDuOmFVEV#!#iNI3Y?bBmxY^AXa{Viu7V zL&z6PSuN{$xoRqD>%|~IvayNv76Me;=K$skphDv0*r}&q-K^Fc`&6Z+S%=JeQEqke zCzsXizO+}!w=;S;67z-Och%PHq`?<>J1^)N@&Z3kdx^*u^%K4+{SquzL_UBRnH)iyRZ&0%H<~hqfe#b{I#H zzW2&&7wwdSHme+qYKs8fi|YJ?w?7x#)gXyzhkIKZ64`pPd7E>M(yvxJiF>uU$m#m< zS09|^VN*m?J@S|EPZYI96CoNvpy&onOt_)hX2c~y6?E)T) zM17hAqa8x#3ge=?TPye$+Y9@ip0k`O;#nb>Zevt>5%wsW^*F>_4>(#m95?V z-gKu~$s!ArjOiII-Tcy(HwFkVQj`5oZ=&FU7e$luseCFblPEIc8=_av9M@8qd5w~o zkcb;Gd&T$rs{l7}iD(Y@F2ynY3HK%R8(4RX^7Djd*?P`L%pmKdgQKu)eO}$)t;;p? z?_s*es3~bR2!kqUU$8Td8uaLpQ!p*=p+6V3lE3+w2NarlH^|>qQJg*i`ke7O_dwM= zn)it&Bs-rHW)qDW2Z{x(&lNT6-kO zgB}cDI~r7PH#amc1`ZqOA#Qv^&t+Y~j%Hc{gxAB~)&cu^Dr11c0y-q0X3Z;=bw^(2 zIgKbg--r+YYzhd&pKN@7ivM zx28l@GS-iFK69@ji_lOT{_caeb!ba%?GJEIy^?Y_gto-~-P|bKyC9RM62?qu4NtZHfw12V4ae zSjKPldezw?kLw7`qz}-q3m0H}tL|mqrVGd0al-|}mpPpVRZs`%G_Yf17*rZV^}%8% zzqslKC>TFbpO2u2`3KyyM?QsB1vhPI*P98KXXDb^W_Q060xur4;X@+ajeS7w@xJ-p zh0!htdkDM2w7G}R+FKX;k5VNu#Q=OI9IZ!cry&SGPZ0rkmrUs0kZL9wu_qbT)hktip)7I3nIf2Zi+`BN}Cr5o;jh3RJSg~tIONJs8I$B@eeqj{UqEO>49@hvZfriqG zmc`V!38ButTVDJ%L%?I#TV5wn-5lQ%QQyZc@ip4Xnv+$%VS$T>V8k6vQ0Qs~i@Pa3K$G{I@Sw>@Ciwq5gDCQO|XV$Yorvj)yn!^qlI7BS7nlzdMC>Ei~NIRtzd9md{a^E?hC;zhja0LYv z1t&`G6BFLtVK0U)GY%Y?QM##rAd2PGoe%daB&%l8kH3Ot^N! z-oGvW;-^}nh3(fyu9(f7=W6%5_xe%S%!hNu1WNRb+ zr-{|Y_W{uY_Oa6+F#Av2o?ixKN>me+Glw}D1x%jnwq1|_*xrQZb#tnJ=h8(t4>^-G zhJWsEj?8w+|I@>t4MWxOls_?&izZD9(5Rj`oVcV;V+?J|m!vjDW9v459Blq<>cO}B z;!!30;kWok!Xc62*uy4T54Vl~^y{rK1pAGx?o(5Szx?nT_VrF!Mi}|gH$#}5_JhFj z&hWnIx6!h44s_`pZTL{%2nQ%3nxVUuO}w!JGZo|Nb^9w(fP^u!AMSJ3@1$HN zY4|p?;KV#Yd=n4~QbAN8bWVFSPdfH=O^()&&VaQh7F#eZCFkYMWH5;iKAPH`T&V7^ z%$6!$C{LVNxq1Nn%ykosVP5$|?g!`*U}|GPk<6@go=1JMhk^%cl;{Pso1h+|*IZh< z^cn7Mi}zp8k4BIM7>1H7;#;5qPfPN&5YJ-22DnD}gsv4bCkm{gz=jH>KI`IJcQgg~hwv-PwjS zKj{R(IqP;o(9J;B8C9mA?HT4FkaV z*F(eTiBU<-y?RtqGh_+q!G+!JLGQ@>xVJLg0kCdZckCP!otTk!=eGLq$p43Rp-oo+ z@Z&vJ|8?-!`?z8Ef+7GvIl?aN@cR8(f}nxn6Q0*BZLSI>EyvG2BC17IA>lXMX$}Y2 z0u9VmlTYxMB^)=K2L( z8rynj6u!mtKOD9m7nr1V3x8tl_m!!K$GGutOozLfY*_WrMvi|}{L!@GyB?}l-{^&T zHq6QDYTrVSbSm;f{0AI6s)_(4053xSU*o8sA9*g8(2T)aY^T!BDGI!!Ng7tz%wr~N zN+{RMwAqT*2Q6e$VCOaz${2)#TZN)f$XkkvN*d@WC!M4xacWvsf*_bqOD;rdg(*3{ zJT=*NOF?xi&x@dMs87Uv(M%PyMF+wp9H91)2LU#Zqy-G##7)^RqYZy}#b~5CtL6mF zZmoG&3=kI4HHYuzX2|_>buX<&)5vwxWf?v$RdXc))Fwdot8uQan2&f->gL8ovXlX5 zw$sqFyvgS+{1^Ho0jRZOyoli?@E|9Y3U8M4mtUsqxhQ}ynRCVK6J;tc4FSCORUsYG-5PRnl2v}5tq%ho-25FcM@Xb(a5 zkL~Xt@@HXp%=N7IGPc;~lCGsoS&pL{Mmal-hena|+wLoMY4d&c;EYe6vfU1rw%ZM6 z=!1u5Z<=H0*1o{~2>7jdRp*+{*^PUrLn=yV`wudl=y`r)gciGTyt~8eFP9(w{4PcM5p(ZW0t^Np^C7rl_^C;68yUmv zEvwD3JJ2>_*^&J}%IyEVE%v_vYHm{{d6(uVT^^c{?r2mY$^d+RuLUBTjJ^lb?vM9q zlU(|GtebgHP~M)sl8;`}GEiSl_xSH~|H5nxHsDQrd@mdCl7H`#58yn|EQ(^Rkm57H z&5HKa$e<{tjZ>T$hSH?>BgJp+0(5*}vlCPejF5Tz+0Fy`A+g(+NHx^QW2cjT}ic-5_Lq5>7 zYl;I-1P)Q5pn%M%)hX{^UIlV{_-XD9=w)lO+4Wwwk|#H<}qqg+AqYa(x z*i?Bw(2=mqG>p}qESS#h^b_pq34&#i}+ zd?H8hn7wU`*Rta)5MyuxSC}qjgF*1h~i%p zGqNPL48vE&#Nw)|StQX4f`pn(#)I|l=@^qk>t6rGy&Zmyk33?dH}sHAwp&8Rz5Va!R!)UDcxSOhST%+g`L zdYMhVRlz?GkN4p6rcF~YsKO(t9E~`H^?(89j{8hDZbUi6C@R>LTRs)KRqo72 zLN)wEB@wmkUlCIUzsgOW+9)c{c;n;>gA2+QsM$yr#hX<9WJepTq5zpA1!np{(reV3 zMijGl-MZ1RmIE{C!KVm2iJu}+_>^s z4~8!p#r%^^ApJ&|Q()0{h^9c-N;q1sin%N)__J|>i9gY5ce}E6bW0khc3LwbA;%drL&ReSK+Dc}os^;n0-bSQnL&UE%= z*a_`qIU2?EP`!4F%>*VORBT7V6z(7Y!*@aX9=Y6Bdbk0&;b=g@ezA_&&dcFf5BoeI zGhmVkDdHZn15QA3I%Bc+R4(QT*^yj(G5`z+a_v$7xMxU-o@2+{O+0eWLRM-Onr$he zMq~5b_cozAL%a^Tf6?RPZeUk27;D91wG_E!SD3+zDHJEvZWj_lQYf!LJ&=QXyXfix z^dkWF@f>rY_>)RpNa&j==PW5UJrCvFSWFc?8Y-_}DFEbTkZaKOpjZQwF=g#o55)No zqxp9aeYUT_-Nw|zWb(KEMQ`h=+Rfq=q43d%%fN3Ab_FWHcSQ)WhP1z%q?1F8<%PvD zG%!ZH6TED6CS|>(w{?brtpS}6qV@k#^0q#D5MChfOsBw~kksq`y{6QktRJ3j8pgHT z>JSOLEzjnrs_g?eCcLvq(7wz)d-(m?uy7G>%GXqMS=545Ml1h&R7j^Y>DjhjAg;MB zLNf)|{O*Z&(80#xjfD?weO)VJ6157rm45-WaoH?~NJ3J>Ppb9Kp`F9&aFN z*SGzpad$|a-ua%Ze?AlDVSByc_qO)?&BX8@cDx=9e<|`GuZ8+ZWbKWdjyiWe@{90g zqw(c%5R5ih2jB*!E&MEjRv>2FkX-sTxFoiI(7Ip8_R~5PN58}en1UWb#@Nk({ebl^ z5kH(k3Ss?N?Lm(PF%%LoLiLB^l}OB}j4AFud>6p|?@e2|4D@#sE+;0y9yC#vn`T@! z9J>`PYW#Hk*QayCXL0%sad}3Ml4g5wX1ScM=vtAJ%f8Yx+m%YW&6!qT%J{KNOwwzK zX>pLZ0!1k*QLqhH2EpPnjnmWvhRIn;Zla;yV9zEnIAD>ko~`O0)NnwADXMy0xN80$ zz3S;{EtB=RW~v#e?>+d`UT^qDFd3#?A7iM&vNPRk42~Q!6>e^!;#L!Z20`I?$4tg} zRk9B7`)adN9BLLE5zHVvV@^y<35mX9)JWNUd?8i1-7qpW1*BMH?f*n>Am8B5vi?uk zAGOYapP-mfBoWlkSQ|ueXs1onzFRAVjLr>k&7&0zGcuOZB}{>#L5y(>3{_F9(?*?6 z1#Ut*1@;YDfyCz|b|GRJAFzxfEoOq9lo6LKF=Fba1KxDS2Ji zEn!B(_;)mDDNuIGuEzDa6w_6UCnTo>!Vj;mmle-ffFrxrv<)uCd7w5~$|jRZqmW2c zqIoF&@WE9lN|P!~>6mVVPrBsMhG<6B%yIE5(+B6EphRho=4C;lk%3T*6(^Rgix^^t z@Bm50NVFb>%#MaShHZh~r}G%2<|_75p$kq^S9elJYM^unSA0~Q$R#JI%BPPUO}6ex zb?Ur-!Zu_zsg<&BR-)$~vyxxr{syy>I2{+jX6;oA$HotbvmUZM{jLEw`O!At=#1m7 z9eoQAgSKpnqnCRKbD2aLen;C}3fpyj%Nf3GBa&8>Ez?^wWa+`qa{j!zxkiR5uJQW3 z6YKNR3*fkZ`m3`MnoC@N?7{W+PkA*yKfVseFt1U!A8vnBp!@JGz_@S{+Wi}-gWMDO zpY&YRD9DTY4eD6nG~jwP+!}CEG|Z*02-!&;7+KsXAcBMp8VwX^DoH85LLA~QHM*T) z^hPTL_bSIyo}Ki;BK{;Kt)LeVnk1C;kG$rgY)r+Tlcs!zFOngFO$w2!O$6Al6QBuReU+xTFQ< zLCR5Ff=CkBb}?q+pmQi|vH?#H3Xa?on2J+klqVFb#r)nkxOZWF-}x}C@5bq%wdrlR z_f74s|JF7A;$H&j%O)+y=hdA0?_Wcjscs%#8J}Qf_}K@uassU%@qdT2evCPuOIA- zDM4M#;J{E&}3UMh|a6r zOnZ_-@3Qr56bv(&5%ex9hR{1n1@vw<>z9)C+?9uBH_7i%^+4rw+~Q_QIty77_=ZU| zJwx$#Q44fl!DD0Z_;~8(Sc-U2lbfC(qE_$$yVHdY*qsg79Uy6Kt;AcUW@_Seygjj@ z@vyFqi8|5;xIck?waEWKE{tRdgzBScrM~VI*NYmI#hMo7P}HN5PRI=epcfswrWHK| zH>l|0EB25s0GBKxC2mJak71Lx=o;L*rF}S&;mv5tDvgKkbPZE?pu#y3*739hHRA$e z1~I#yYI+GH;QoY$@*7Y)G_~*dHwzs+XIrr(mm5Ao7KFB$VB>VAz6?gVuzuG8mk9x} zuQA+1=|El=O+XMoLXX2|jr!cw?!Un7j`^!?b_c7`_JHAGGy8faW{b7oIgSSsy@$up zzd$Q^)H!W4@bJT1t2LTFe8WRGFsL?7_`V6cGz{3CdY*u*3i$(Eh;syn?L{ve#|eQ8@|2ypOAL$q!PyIFICsJJ25K9;H8qU^>X zu3M)1_Ed7aYTLbH1n%&jy(8kSpx1TPH*db`s27rbdzH0yC|BuhK*D^~ru$lPiBF1fH8-#>F?vP73hT}Hvx#Z19SLVU~G z08i-55p8^}g`6Xo0;XkKVQ*=^JJMK;=C$d-lmZq^Z4=;oYpU(tyY;FwcW=e+igON^ zJUp|%&(3V9)%P*1ABskoq}8`;qPYVLMj5xpj`hJqZXXssKav{$zs}}!we47^;D@sk z1(H2jxxa0ijTbHV_tId~`PxZvk{UjL9XxtTa)8%mH_JJq7Dcr|en0Bs+=lD^YY$@G zw^pFGquKv|vevsLvHzbf?|S~a8KT6Y&HTZKX<1o5`*Y;q5dR#DoWPo*DVPT|f~HjT z7w$rIyYLH$C)UcMLt~7`9H|vjT=cmBrRcM-VZB1%tKxW*w+P3ttE{}(PL-@9$7`pO zy_us&YhG1L8wKcFLtE5g?ZYF75mODMXlYDvDBk83R z#X{?8`+}T0)6w(s#B*~X33AjzUg;>Y+Y$*!v;v+hs9Y`{Px~Y$yD2l5SxInK*1tY? z*~c-#MLEAdz+I1bybci_u7}+~YM6v$?~crU^!hoVSsz%vtVnUKKS*Ee%x{a%^ntoM ze+e2~*AJf`YH%$s013X86^>Hrm|Atpzht2;%J2Rk+#B%j0{ALV!x)U)5xq;$>VjRG zwgCEr9e{8)|HJ(69w_fH_}M=(KU0@gUWSNTUK*TemXzF`Tk_;WE0w5rw*a}{yeYT9 zbQx0Km#JyLp6H0O?xqZ(QfL;G_OK;RkEUGsVq-?Tr*+oX3XmduH^$hjxG8 z-6u}Bz3w>Rhsee*Z~3nEi@dwz1+V_r+$h!D^~G9Sr$TX>zq|dt#se{wFZKM|H@Vm1 zeLU!y+yLAIZKsU7_GNk&fn+LC+I9;1z})h#_bC0cZGio)VeCHW1L!O1>`e4vHK+JW zN)lf;Lh!$R+hynNc;8qiQa=kM{pszPO+oFV3wH79#q~|G zbF3q(Suw+LCtd`y#%J>UR1Au6)%oaMVpT5~9)!L(#yQ%P!zXZmw_}`RixK&xm}=If zz4r~9@PK%xn*i=Xkct1Z1E;76rsD<*=pVs98P{XKwt>}mm0brsC>Hbx_qLI(pLh|r zzJLwKE@NknVCPy$7qIT|uP$V{w~Z&wH`qzryIB9i<{bX=h3qt*G9U4hj{0Gk3z^<& zaE4!s)VQz1hK0xxc-$Nxj-oS8QA%|VbbXOBi1;*;sFqyRW`S9vszB3>Be#x$bChoZ ztfqBXazd+2<&4$Yz&rI=3~=+)>EUs+P#;W8tK_*iNg|{Mk6zwbo~$ff-BqiZN!_OW zB2VSMjy%mS%@=ZqZw#Vm4yYC;#8>xMC|QUv&8-?|A7Rbc)YR(D(~fCmpV9ADvQxet z6;AHEa)C~Ib8A0X`zP+v&;Te#9s?wU*XxXeAEs~wc`mBOMisCmpQ;Ip9AXIy(V-LD zw7wjQW8vk&QN@aLc&T!!PR9vp2u0(H(ablbf7lC?Ma>3^3PNj1#fnXzaf(vZhvw7d z56@hk;!JsZ_#*D9?h%uIm~HmzS_3F&k(XqMb4X5-$KR8QK}_Ax>U5l2EGAQRCu|r}OFG4wm z{>_{kkic|7Y#+Gkw%MTlXdV{&2kwPfXQ*}1>O3juIi8kF!nZ@af4hz7s*5Z^L@5P$ zwJm0%y^=i)MWKwi*vfq>8Yp3=*oEi9x1u`+|A(ytvgB!wy!?Qn2(D(wr(@eqNXX>y z^OIFCmGbE;JvQz9{=n3?n6_6*%_ma%Sd4=(q=ref zOx;O&*`Qwn34SZkq9xc`So=rVx(8c_J>(Nqi3_KOCfbx#8geX@TtK3rK%6EPrnAq> z_5~M20$eLRW}7$c)|EhfziH3*=~k_y07I%$RJl5lQK2Me)WKYk7vl-rbRB^lB;@(7 zGFk*Pj(uDb**@j~Wq{zRX8zUuGr42Ct${5`hRk+yDq+t<=~0_#ko#rXxGj@aVzDTJ zNG8b?a0{CzRF8R%bjk4SXdQZ$+=_BgOq-##vA=mq5}>{p*Hm(DX0|)i3wM6GFj@yd zKQ=b`L_@bZW0vl1n%{n(`)#(j4d{Ph28(Um@+Q4zR(%Y80Nad`4}>1aj&*HNqSCdD zgadA^&J4)WzSBMg+;qe4USK5e<7Hz0VWZ{9O3~Bb;&ue)1GrSBp{ZJJssQ^b+ArNm z02!G$aIn-Vm{M_~NRo;aS9i$WLyr8nVZ4M8jAidD?`_Vn%FF{4UfmDTR$&`g6-baSetVQT{uxmEEV;_HkDgZ45$z`YMP3LLU;?Q?czB;*Ot2H|E*0L55WJsgPfM;Y$v&= zGT-e+AW+Qq47BSmp!rD?wCPaq^W}7-Ja!MUPv3QK>5Ozfd*`^7Jrq8NTrfLzTo|i+ z(z{z;JI1-3kKY-QTSr!%9f|w)AowM*u#GyeG97@4;sCRYg`P}NV*g{X!djh{$GJhC zj!Dulfn)*x5-uZ5PLfGH{A)ZVW_C>8&lKuhzU{{yC{96uVIeCptE zmhh@d__#co&{IoM<4~X(mp2q;;%u%b0-|?fsU+qtD{s%A<6h!mG`A!1V&SgD%)+G6 zTFoki7ml51_d8E_4mMYxuGY>6PB`)QguV zJ$a6-T~LtpF|~_RAf>VRkKw;)-<*&9%;=42*heEwgptK98ljN#X1u+uJwzF+z$*cV zhQ<*xu}hUAB|oAzIW`gpebVr+H&N)Gpc@-j14ozo8k&pHD~pbhn3zT|F_5r?yMTP0zWwJ5 z`Lk&7OZk5B69MK2f*|kN+7sq{|InRNlQ#{&L>^_ywqpg71kJ03tKsek32oLkWhvcR zzATtb#`7uTAN+RZiK;-ZIh3_0lHIjPT(nkw^9t#T8|a?Oq_iW6jV@#51+;^c4CGjJ$C zSNY}Uof#vbkfvhFU(LA_CoNN;tP-FECcJ*pNZ<9X|kl9NuJH z+=5CcNVJ{6wSwAgNiUJ(wl2oJPTJ)sOuumR%Bz)h?McPQ9j9mJEAVNbfQ~FrHM6Kk z15HI1LZn5L(hfpQ8b^puv?4Uo;L&xOgrb9v6Sb$ZEOl_ug}q|naJ+_+1AgmLQ8f;i68;qBh58hjOb07Gi!FP7DnU#EVuK&! zou0Fge=*dn6TTCV*SqCs+Lj-ySCU`-U^X0q3s_yc4aPYL?v@(P>X-;^@K`M z``JE@@n^0&)qKSPCF%kKC-HXUEO%6n+iANoJCp4dbo+4KmktDawYlVQVxinlt2s-^ zO&zJ$^H3=Uy=S_7W3aeB|8*Do;kmlaKDSq~*n3Mizj+OM%|_w=rc zxJLb&<()#fc!3}7l))`6?W^n}eoN#2@m*Qja#OPXgk$8>K)`{gDUFy`*|m6oHn=4r z8R-g-1TJe-c;Wa`GudiiPJVs(Wjw*@0(WJ(3@IvCD+qID{@@cTHh+dZlGS1&KKy?L zdb@mNX{-MaAsP6A+qHHv-osi`6#GYq9_aDM?M;@bOZ$~Q1$O6l=<4Fx-mHX8^dEvK7KD#R!Nz2bEDR&B#w(ov1P9?_>%9p|xGR^!VqHJS$Eo=3+Vz)8M$Mi*vUU@98CxsJ zAhR3;{lBe5!PwB?HO7VF+(*r+~KGY*W8a_=wbf{XpE|~$NBx)0& zi04SzR0XMWj*GaDKX`;d?)z(rrH)}7=pSvC`ec0Djm3D-zum`y zuo(MY8Qf;BB8`QAW1t9jc>}e&i_+~;Jlyw3EV3VCw68C@=0d8r2hVZK>nyOR zM=G{I*jv7qTl>-4;Za>`oY~Nh6t0&XU1XEhLe2UBb>A}Owv=f6T&t7I@nFOB@fn2| zi7A?KLp2S#K72p<=5;oixpfwpph5|Sv88k5FM9h4G`GaKVtC5F7)e0M?#D@e{*_OP zRa1(rm3eW0XtNxi<&_L)uSM_?i;Fk7I;eL-op5(8T63oi?YrnB{_zHT#vaUghp*^t zlb>BW$Gz?Wg=dHD$l4CsS=N6)%{_(fLv$8e8$n1#Q2 z%JfP*elR`wDOja}7TO2oHoU~NR=`XXS4gf}j#lobXOAyV-RA3JDHG4=sVw)DVgLBP zXM65szoaGuy|XkiU3D`OSD86Se&TWoe=;hG!)I8T)rMWYdghd=5Rn&5&FXfSPuwM| z+4?-WUNlNarzbioCsAg)j_21-FkMHwe~Y8F7`G*D_7>O?8{OnGS)u0s%Tbr{iQBu1 zG#a>qFBxLQJuNP*7n;@nZ!DGc(5tw$}p1sNh`*&t`< z)x4zZ-c2n*V?OmIwXWFhTZp1P)6fja+;)#n@^>u*An&WEzI-U2603#&M9~951L*t7 zE%j89y~AnlEPDq#vM{pSXjEXtWf5AB5>k|=*%tBW@lNzkOyh zE)?XbXS%*+r8bx!Vw~*Kni%4N!`uP(%w7bl;q2VenPx;?=#XISftWUuW*o(E-?B|x zCfC!4yeAE%%2J}}U}U&f=%@0Hu4i7qkXtz1di<1E%a=40J^@GSlco|&*0iEUj6^eD z^m0A&yz^_`^xdv2PWt#ctD3Lecw(hL%g9M=;) zQ>SO9TWiM)6{hHn@J7UA{%T6uii23Pw&de+Hvl2nDOT$ z2S*k|rV0?vXo$Z~hm(=vNRSPsQB2sYrOyk`I&OU+dPSv%#x>*|wdKc08n(~p+}meE z@me*oeK#{RR=tmhe;81m%E3quvAJoHt_XXP7WQQ*VDk4M0X2&QAZI#@J7y4E?%2^3- zx;|~C(=PXW^Z868Cl5c*Nl}~p^-WIJeRfYw$cLYku|2D1Co?^iPqI;>NZyQH)Pi*8 z?SE1CD%F6z!+|h@1cC#>o1M6oT>p3nL@fd>W3jV%oO?3c`&MKWg%RYwo2F(qqu9-Q zpKg5`lTmkq3xyl7b}am0jl7g@swZVE3a%Hml-VYmhXS&X?(99&f_?STEt4zHUY|BO zzqas=Jw{U4xwwgZk3Ik4QFgbkIm<4*z1jwhy@vtQ!c`b`AAW*YnBAl=J9pXK#cIk{ z&XMnJR+63X6fROdc9f@%Vt$l`~z)XvlI-4?um+8x{9(xpB(S z#6T!bX4CzE{{mMU{%JIZiLF|)920{B#dCMZlj%Y#?xuOPKW}(4Ieka9R=NCy(dZo% ztOTF#2Dt{5i1cdC$dsHD%BQ;BUnz5#r_T6oMF!s<+jF;a!N}jvjNg^stjt|`EM7%% zX;f~YyHP~Pn{BvIiGxgInf|?)P8OP0vhYMT;a_J8MykTaXHvxiAHDNHYO*4nARih2 zLGj#6GL2$TDds<^TBqto4wa=@UOb+5^|_z*`RgsRf?I&z0Vfzg3_ZKK2+B+0t%N=e z%|F6uiKnIN(L+KXB)kDAV@kM%$hCC;zb=Sht{4@6(lC@e>USiQL7}Xh_1C#qyzkJI zn;M8Fy6SnGeE$vvC?7J!Q&^tgdpD_%yqqV!gKgPKfpbviL<|!0 z+2zI{nFG59D*kKFAxqpl@w*;nY8>GG_zqGn3csb{Eb|!DQ-a|KoDT3A6bC?q2*kg5 zF`I69WI-I85erLWtnSB!9ur@Viwx%jVe;&c&vDlqT9lNUI#|L4SykgQ9~1bB;dN=< zQOO@Gfrm%R`6?e21xW0sY%W?kMkC7D?BvWXWw407r2^N&n+wEZuZ zxx?l9v>sQYe$J(|FhI1n)}Ba;++_Z0$T*p@;971j{mW;W*cs)NTG>3FGB z^~BZyT9K+qnJwalmU|*Q+dCyCe*8CT=gxNATAo*pq}uAYjCfSnghnT68|6IEp`{9+N{ctvd+v)-L1I?%yadCJA*o}?imFF@v12u{aJr$ZdmTC`TPy8=I zP?H&{awLu;A`Mzow;^~-bNq=(yE~1x0+dhGs0zShG^47i{BuUTqk80Gb_co6R8-G8 zb(o%%p#Qw1I4PQ3e@UFXJgWtkk%$X$C#vA)9f?QZeY{Dy+4{Ck!VMp@R$u!~oT0FD zltW#eqPhUGDq+*(?DXpcdWoX)zyjbr=OT`wK_q++OgJ|f{vt@26RD)m5j)*#C7V1- zh*2JlCjbE3t~i@W=$xAB?aMav#Yq9eFM56;$+E3NU6drEtw7T1m}A#WE$JzmIHS3# zR4SY6HfLgd$u>|8@)$1)xAv=%zmHJ7VV!25Joe)j64q(1PZQ{^3Xf3WF6XvD(?LdF zj@w(OTvOlp#)cAJs0M*pxZF4WEwiYfWq24eeAQZN?F*PHz$vTJMit#B54OGQiEYRmrqJ2p5aTdw0edW^HLD zM5f>Tna_;rib4rQj2B#<4QD+`5pPF^&mR8!+H;_;szo9amY4#F!`{j}_Rrt_TC4Ho zT()VU_wlct;_BnOSDrEbVj}P>)Zbtq{a)ms@N9ir(Xc65F0QINdeMZ|tMFhnpwIz1 z;%G?B?k>89$XT${=K4Hp<}a8?n$?P7CQ?L-O?G(>z11mz^Ab>Mb{qvXm%7Y>hpa1d zylQ-&%%UkdkwNGfD2bvcNJUPRQFcfOnr6w-xDwO!xSq^P+=MBSltwhzaG1iqF~{;f z)ZR>33h25XNb%533S;p)-QBEOK>tNkKiXXyxkBW6)LGJi9^HnyxerGb&Z*gM(>v7! zFi8=o9+#|ev8WOaG|0D4#L#Y9o@=(UYJIwBCT-j8dD)sM%y84)UyE^)Qe3Pby$TCX zt||AUdMpr^%8nx_wmRY5IpLdeubs=AZZybOb9pCMrAaGy{$JPr8t>3Se1Pc|`VKs$ zoS-&k8-R@ptaDBP$-%BO%IKfR@n&*Qn;9o4YbpyZsL#W%xw*xAr;i>CdM75^1_~t@=!DwM?a%s#>XC6c(p+4aoso?0I;4ZaA~{C!=-4{tDL(rDwb|TK>p( z(c+_8KXfnAS_z8;LO%!Gi~GyYqK(gx*DD z?Z{dO`~Urz+K2#pkF5=a47>uI=Ij860g(u@JIjo|9vIrB+y;?=+&;RC?Zn zJeD9w4MkGov$60$80@A2_WPW8Pf^bL zHo43|o50&cx@)ek6sq*XAVYcWacj-Ub0TT#r|G~`SXQ6n%G422A4HSF;gjZ$Y8}th zH6^aq1GkcuymsfdLFW2k_|L)IgkgeIU9f{}tvFGJ!O8HAYhPdcWaNFQ6-6YPtkv+H z0CyZ|r?I!g4?9kLVl`(VHx@5cauel)v&ZHUoms_e5n=_rUs&*~-OJ9{)Lz{1J8REh zdk-?17=2o)>-T|wMh5G%ssTq=wl{F=f4-cCW06(odV+`5W~;RzA2a4kIi=_?Bf^#+ zMR03q64!QJQBJ#mB-8Kx=(T684I&?lNXU^RRX{8dDC0ZRJQy&UfjRtZ6b6<{#LjhZ ztlYGqc%E>~mOZU`F8+s)Sv}HJG&1}w{QK+I{)3#xn#Snvwi&>aP9Gs5WWJJC!l*U~ ztB&0}AC~yjCsUA7o-9o_qM@e8XUOSW$kS5e3coyjS}i%Vl(PMGJr25dYpu1HMjnr! z1qeC~-)RSo?x8ZyIt78?KvR{@@ManDy_k#dzAR!^jqU2;DfORosplL>e!8mYKik~B5jYyeIqAmjTN`tx7E_HIIP*r;<1X6x*Zr>=2S zn@4m!YRc`Tj4t+5lo8rw6?x#!?CZaMy{l^NNgEqU7B=eg*>4>!RVaaT+NipkV@U~A z;y;Rqd#~Sa&1U0*8Qa3dOzm?1Ki2MB`=612MBYPVkN#M+oX~`j8ffGM(G2H?UwzSZ zo6@Lc0@t2d-ha>&{RGHr7BcSjhp(!o0V0h^6>gHcDi(Uu#uktTxWB+p3Y2@e?AT!#3t+2{ zW6Qibeb>PdV`evLj&GJbIwEZz6?C764<)i3<>FwsmgJ}+qARBH{^?kmSNXvi;KaqB z0BJ6^fg2Y=o+CzMyp?ZF@UkbzqoRlQqa@N+4d-B*0CEett6&n?QGq5?S?Fjp))|{H2h-51IJw|hjDR9@(c2WNM%PXDAa(Xkk9zd z*tB=kCf zi^IGPXdZDN(6kLuIcyL5dpbqv&wbDVzJ6*V2IPvs2b!AI7TASkYgI`o>XVCnuj%F* zLhKcOk~B*9xD!2O{Dx+B6rVSEUXa~E&fQ-y%8Sve)}ynwk$+`e##m1(g2np5E_5aE zbGH&0Bgv*WvZR55saBujH}MUVg%O{yWoU_}wwY;|XH>+*j`@bQD02$Zt97E_FH#oZ zzcUJ6rm%$_*klC4C_>7v5w&7ge1qE;dyoXg#Q9d>#i!xTSQQo~!~SF1moTCauRAND zCV?JOF+Zp(J;IFBv&nYql*e5v8PiWQArGw|$qi#+-; zA62u0ZzrCipoEf$AD7~m;jUCJM`d4$c8yf&tRzs~L-dNsaaI#g(8dJFm;4_58x3Q6 zxUN`{m<|;1IO%wXErb|99*+_%CvB-xn>$5-Dzj5ti7Cka>*E3KYR-ns3ookO6#aWPB9>-azpoJMAPu29n;dmgG-D1uItV{qjn8|b#l>5>@Q|2bMWTqYSa<)Al7=#<%9m2DxLliV^>bK z4^EUyR_feYo$;Da(4G_6IjIAL_2~2O^6-5VPm4$7!*?0~ zCpm&%t)qa&x>0D&(x-0D&VN+ZYZG~~R(<*SHzehPGAw5Ly{RYAC!HwH?muDa3)hfi zwZZA(hu41#oBEMyat)r%K%Rt58#{61$&kBU;Mwl8Ql7z{#nj_*f4083^>IjY{1m`> z_&*aq$jqVR8$TU}z?u9HQp4GtpmiMTQL(F7TH^VrKF~M-3%m{Pb#MRp(sI?&kR$4r zCM4}-%B%NDCg4fVs+!T}?G5Q696 zP7rfbEF>xv_;c)OdK6Iod}pgq_=bD)WBB36$$X4(Dz1cU{E6y9T6L1DX=We2&soL% z#?_CvQ1peE?wiph*3^8_IL-z66kIJvHnrJwwp~9xRf(b2t1TJxcOUB_1``b#b4IwG zQ`Lgf^ku^;XtE?YRw_Nw&HI+^87cEQrEDT0Ma{`rH7oHz|0 zbd3#MNgzPvFpPQa4aA5G>DK&g8tFQny5dE}Oi#a@ypY^)oR-teQ%ehXP7siwW1^~> z==IyN)Vz97IwYBm>-U$_js3M`Y&=<&PR<^z&v!9($?nLLoP_7c&a&ZfSiONxIpX;k zT2u*`-(So#88#VLf6N+w}qeluC_1o3A) zBG+GRW>N_scT%F19FTjjxV2XiqR=>y2`8dd4+R6aShN?9#nO|fd&4_(JnF!SVi_~j z*wcSVN@SUHp)-hwv$1D;UEKHxG|;<1rINZo^l<1i(2{+B_W#LuXUkX591+b{;c#92tNcm{Obp~l$@214vChR0ud&a6d;B?h2cKl$|5Izfi0}Ue`Z@j?a(9GZPp)8J z|2yNa=RPs|{KM??-wQt<{uOuI=<{3H=bs&aJs%l;{xbIY*Tc`(B(fHM9{D2s{4=A^ zhx}tlU;lpg`KRbo;m<^FiF^ZHZJH%%(4U1XXYPzmmJjHLFliYaIR7Q&;NivvED&Q4 zd`TSl!?>lGX}npJ=Aw#U_5x$FmxK(-k2{4VM83_h4fbDu+;2>#b*q+GZO@&Y%vGSq zP|2J3$aY|8vAIJl2&5b2T2qV1htCO|^p%J9osK8_RjpOI%qQ;h4UaUJ4^7u+*)!w+ z=reaH-U-iKF7ABD(JTV1%F(B$_YvLjC`(||hYhE&ddD7pxH@{&_q94pGu^AMJjkuI z)BR@FU%a7Sx>B`tLDX%nUPUy$i{A{(d@&W7wxL*Ni7A$Da3jBQAOsD4gS~5tKz&ri>SFYbM z?CDHzdTwl`5>XW2g0n)N5D+C%ZU`NV)Q6+=l8;{X?&Gi7%XAvgw-c4gA@jV4M}BFB$=^UGr#cj!%d^-mTH- zouzg;sYcU5bjpecUgr;?TK_gRon0hztM7Hs$dD^Kk;~2ug&?M6yW4OoCq5BRP&JiX zf4%ARY^j&VB_k8e#cA{>Y?ykVkAb#gJ_G)v+cD2oFtzJ20QSnV-2fm5o7#tG(9YOX z45ni+!5|(mznOs`FppwYIOuk2xI>~x(Fjd=n)+GKb@mRq&&O2WFUhWBp&88dk!>^G zsy*)}&58QG5$wcK(#hEeO!@HLiN;v$N=#WnN*u?O^6BHZ4raLjyuFj$FrHULm#t$C zN5H;yiunO7dJE|^ZAPXJKxhZPnGtCy!T@W5cY=g6 z+Xu^obD>Pwo36a-oKJ1(Ew3+C6VZ8V{KtE5ny?O&fAMb~j{1TcqM}wfZ%QA?cQQeR z#<%3>Rwgsem{+jI4$YGVQFqSETCF`dA6t%22+5Hn2d|v29!2%&rB-5pwzn7?E?Yz8 z<^_9>wH z(exWIE^q)(9^)u|pS>%cy}|0D1Gd5|f#(1>jiCT;w}%36$HbHM#{l7k!DE4K905g- z@nW&G)d7P_^|#3Xs&}o{Wt-l3csAMDSf9T-vG>yGcqoD{ESY`9 z-BPtQ{N%a!PruGr-9Iz2F@G>`xjBUv#)gK;3iF?S#vmKweU6iq|2+97^wO1%S2|wr zc#Qc1OrJp8V9M>CxC|$7&@^~)_6O1|o;jgR4>uqpwhugD;+fCTYO_J%|L6!Ov4xLq z{p?0i%D7RDV^wh2Sf$d;1v`EG!C+G_Cz6rQwpM3{mYX`ZuxroUuJwE7_dQSw+zSav zjePi)-p;Ro>@Zhbw|Aj<`OZ$c8_~+6GaC#`*O4_aI5JipU#M>%Ng@ckVJJUGeh?m4 z{H18N>I)~#6X%V+;f9a?>+%WTG&$7&AXo866P~}z7WGnjJidQs>#pOw{1e;eYT0Zq z_l5o4H)_XY*sI2H z^(iI6My_u{kT^;QX5+L@(Q(K&8mr6CHs)A=wo}lbFewEpk6njc1wC>sQmuu$RrgmX z$#>oHu&?plOt?_P#^p-R<4IH&2f&%$Ro)_wlqK zq>mrXHX=?Kkv%sIH3H(HyOZ@smrju@sC0!`@U&2gjLl5eY13P^uMbz4uHn zZnC!B`a^emad;~V`+kxwDJBOCE1`5L;Vjms3gc)_>x%jok}-1Ws*Rwh42_}5@qZ0x zoV^dm0yz)%=-E1Fo_rVh2HST8cu$zBGw=3ljqKbn;U26hT~VuqJ++> z!FO+*-c>cfG@J~g(2KXw*YW;eatAFjAo7+}KW1^Lv+k5A>zutlG2wNY& z^c9TozQyoUxw0r zZE-tBtzPdV))(BGFM%WzH%l?``#v#yOC;LfGQg+r+d2U|GC-;f80c<==Xo}!k_7J? z@v^}@y6G=rQ+KjaZLRuvYh@AR%WMi`53msXFpk+6EJolsTOl&d$kpG`}(0eDucglIYF^*9tGQ7r-|Iyr5%!0xvK^ z(SB?u5|Bw|CfVxjzmko6U=&#DAbVx}F1>6yW760Vu+_|pz5sC8wjn-PtjsukZ+$SO z3q~m(h{>H$q2$j^B>m#};@fAlfddOH1v46iin&bqMqf4kwDCDxGwl_R9^7|Wg|hdg zQvP@JzC2y+Ot`o0y>p*8>Qh|hN-A3|&E>qAk(r8T=Z-_A@WqGTcF*mF(YTI1rppJ; z`>Q}J$W)bEwN=&qOjD)H{`Vfe?UHjnRV|DJ5vVP%+P3x9JpCbX?iPl0nM5+&%J6&* zlMH~w3?5Tvs{>?jA!Aj|DAe1Uh23A)XN)R+s@eOyu}~%*Qmpi3*2uT3IX>9VyP?h^ z)rysA#XLf8VrfI7wp5O&{%peiE3d5zykepkT5qKc(J05Qs0?v-N&ZA-Q_WLpR})IC zx}#aj;6<{v`LqEIP}J*ZO;>!85*Vt=mUhN<3jTg95@lM0%sMz za|K(6*wVhLL%3A{ghVBKb*`>VIFoDDiyvZPLn9_MY)lwfWY(Xf_ducCJbQa|Y1f3$ zlZnTQUm8wfr8+&If{xjkhmM&q)erpny)#!|w|6|8DTYyKOIR3Px%lkjK(X|GsRl<9 zfkZM<+@BvJyS?_(4VfglVSQq9u6)f~=ZE(%pBJeK6McX6+>X1}m!6CPOkFfu2d7Kksd!XK8}g@z z_jWhmvSU0Lsm-q6x}5veRu*w)O6KWr969%j;84cx-hkceY@B)6{O=&fvf1HivD83F zOCM|6i4SK2fKwWygMOk+VPNEKC27wA)DLM|r=Vnqv$WvNn_}^q**V2H-naJ;AA06! z6VT;eMO;c2;)(8bE0j?cnDh;IWntU5CvqfoWN2t^_V?54Q#M#()_o)m4bUA5cXxjO zidwbzouMMhpL2HaR~vFE^?QMwyV11w3=r-uw#-}rM12#}khUg=NZTq>I1?m8>iZ!1 zw1&X@*%`6IDYSj&`$OiEP?&2$av|S`HW1D4q_c_@@nXF*F?np=-ua=+_jS^Zm?@5w zCpOe~3@0@TmB>V7$GTKAZiw!1b$r+8-o5j?A6R?{Bg7|0pPl;PWxX#RB4>xkRU0Dj zk?-qOr(3&bBVW9`Fe)2KzpGqMFLU{mfpZBfo-LSD{;oKi?O!_r5+r|ixe zI|JQi+ad<-n45;cH1?H{G;>`sv`Jg>z>?eEYlm-)vT>#FZ}x7Etl>}k0J+bsl*wyE z0j08U2r=>{RgCzO5&eAtq)B09K3X&-t8?z-hwgjsylk^`M=^89C=n+gc!n7BX>Y_* zVi}JB9fYLb#C5anwFFD@G{15tcK%ZwP4B>1u!#L_3+wACvoMlLjE2p!C>ONE(RL}2 zbjzVe1Q9gsYq9|_#+dn6|HAzmSnViQ>n)CZpyz$M(8na8G5RPNzn+4L=j z_a(|^b8LySanC8rt}mAZ`NW6^R(Za)^iF~KzU+Dd?$>&{zU#XR%?$(U2CWD`km8VlRAutqfcPCl}>y}sk+2&VFgk^svF+N#K#V@;d z^DBb6(Xp|tE8e!;fk+`c`+!$DoEnXJ#I@uf!;i-~pIdTWFuD1IeV&k!O0L%4Y%(#l zaX!MhKZX@g@Hb#=U+H+j@n*>InKly?Gc-5zM+ca(b;_mdvnFd;Cai56MGXX(smMNF zNU`x9@Jy$DMO>-RKj8+sKJ9D!HaY<;W7HOJIRhL3acJBl-<<)4l)mQL`3;xM;xkf36Y(G?(E9J zmo~_rTnK7--UZ-vqPIK^-fLZwQyAI!QS9C+_0AbhHy123UPya_zDgrDKADXz=R+=4 z?UPoTN5~GZ18W6!np@cegf^u6rZ%suh<+prd}27;na!=tmdS@hLqb~9dz%v9P~zEO zB4h4%W_v%FLNw5}uNTmpvEOIKaS)o6Id@3Vv-K#T493wG=srPm1uM3eF$qiX)Y0uI{j(#)$$yf_|DUheb$+%Z5f@|%0~U`8djYS$E=tfho}Kl5HSha(;W{v z-i~}qM1{_<#4SkUX#fWu*oSZsM=_NgcqC`gS*w#dp|<`FkK1H=6? zs%#*V;0Ga-_K>fR+$pfK)}-fun#l&!aC<88NRt1y7UZ0n(72aL>*$AX?d|IQYGL0Y zZi{W-ch2|id!@TL7rs0(It-Tpz>o1=M>bR>aiLP1+}`Z$5IrGg>31MQZ+Q=_ec69+ zG#DYfM3>ePT>6Pmua8CAfsuH6_@%#}eDto5{=dsF{brin6=^BHQZzlh^s3^h8TH9} zxjg!Kl2=l>Me+kcYr6boh(i>X)d%p`Oz2y#hv5ypX z?OZz0-&alfgTPsg7kh={hCj`VA>ZoM9Ajoq&+!@x4C2oq0Yur(ayT7w8Q_Xl{%KXG z*b^w6$(x0%wXn^baSy>mN2FmKj_y6sD{pJP{lI`F%eNZ)E@VLA%s`CIs98~4XLLj? zVU4kA^E19z67w2H8(njXP3wIt$*IhTe}?09F9v-iGq>4h&n}snKGa!GHf;28&Ah5H z4Smhcw}EJTGFBZ7X<`&MWx%mfegwfCNFbFM#m~fwdH!odr>C5I zz==sRY9k5>(uVZJ<}|X@SFxA4p}b*v=-Z1C_}5al>Q*)6p&_={?EURX60E<|bHbzH z-%!PJ6FyZ7sxy~<;j!6R-Yuv{7^DhYZw_U>@(rUoKTz~g_B1IqJG_=WTcrYfXThZp zl`6rdbyvk*QB++)fB;F(erCH7uXJ$t*na&Yt2=d?9fUo_BqFtYE&X?xwcN{r5m*>8ChFkBxaLYW&YoJ_lU zfKF`dBndA_#|#J35mPzV=uhkmUKPK^i+(E5bj^~#{*Jq!KA1jk5!qAd)3PCM z90bhTNb4Hz@xM|DnBvv92gG8K8AEY*v^t$EQ{T*FQnjWJyyg6jw`?t;Qc%YFV^*ET zqpuGo4|*~g|KGgp_OIT^!0*L#|AZNv$&F-&eOrsW&)+ni#*A90#`a(d`Z z&z<|Bs~E7oVyqu~M^+Buug5!I?|3!Pz{_wbrjVhSJ`#nxLMflqbY%XIxx2wzqQEoD z?PTO8;-^f|@%t*dxoRueWo=upGiDcp(jnHW=lpHI+ghxQ0Kr~k5(&z>U?Z?%UQ$4R@}{>wIE4B&5T;9@!`wFZ$wv(h+@6; z_iIUj7kgisu5>0mTlaQWjke1a13qT7i`XUYbwbsp%D(p=UF>FtXNv>py|$2YFPv3f zI5v~?Mn)?cMvbOwVZWqG?oIo_jgCZNU7|G`cW#b`{I+$Rp*^RYui&fo|(6~dX- zLx%JIj}iA=6v|tMH;d>2s4g#f+xp$73Dd)(FIC-C{V%!Kt@GDKN|WvQ{7sQlYxn}6 zj}Mj#R%RYftv6Fk>CqV42$a2HU7(2@Msfitd-%1wgq@t}^laPqyMDwyXzT91jtkf7 zZj0g0|0_n;Mz~DWp%Dh_yYBVoe|9Y%@ z!||}=3Fg_eB{<+zb&BY7-_KkFb(mFSRMDB*Zq@Z%^?g7bF-6zsaZmf7EXj{?2h8%l zY}{vE_|2UZtYvbEnmG(B1n zhL>xTq8V$X)@^Bo*KHdDkhs@>aHa`n(;EGGC}CjY5Mt2mik-n!VWMdG82n|5z0uDftDtI7Uy zva){Iw{*@k<(22(QflNAMeqXkzCYSKY2(lHSOn<|Ka7q4Ko!FP_cif*E!eHz=Wb#)r~9BSm%}2)zMJo zGz5L=)nJI1ZqN0eobC=d@DJ-2y!i7*(kqL};n|_^#QyJJJyPp^y;vaSg9ktj=Ti#p zv&n_K{^J#h6hCd1F>rk!XDiTU9qIXfe}?1#0eq){JwW#{w&YY~4U)zpYYbno1^IGX znAsXz1~G1DitQQh4x^0i1Py3_KXPGD>0e>3V|vO|eP=zRloc;R4~W3+nJIN5FC&d@ zFA_vZNB73mzSxd?l)JOZkpYuTU30C*SmCsD`bT6mF_&WDacd-&8L9S$`&9Ei`y?Y7 zP!NPbsBZRx`F&NF?K6f7g+7`5lvM_ZH=Mn#!0^r##P#D&v(&p_G`+a--l3zf+;e1S zcs(4@Ar|BtV*GR>H8NE-J>aLC>he*zm`lwAzld81FtT}I@vOh){y@Lyc+~M{Omo5t z^H30{E?9agagV;qsX|fN9m^KBfuoDrj`am}O)uNelh0-XInuP1a zn1O+<*|}4GU+NS+14VTzf0siyH7Ex7OxT5PaO*cKvBc~YrxkKv93%ofTexXYs5v!k z#nzgUMDEBd;nf%d^DA=hqTIu3l3d*upCRzSJt6&W5Q^4Z{O4~T#<8Pa3{#6 z^3*N2T-fO*GsPPd^?Ig-3^=9|W;kki2pOB}{g%Z*n4m`^o?K})!WQ(6lF-G?QE#_k z)~fNVV->&JtYj#?k3Ri>;(zqP*xtX@-n1Gd8Rb$C2lBmcKT4 z;bg6wiN@)zvD{KK&!{Y9sX0z^{L{8hPht;8!|~@1m)D|n;2e=Ca3rNDKZ-zhmu%69aKVc7W*;f%Lwq)O@MM$DiYAE^Z>*CR$878=EyX?TaPN z;hD#;WuEi3x1y8`O9H(+F`g($W*!^%T*4KjX|13LB zr|4z$XE-h)r+n(em{`KJ6mspIwhZ9#7r&Z|o#RNWP^5LQ1-`X^o<*O-yaPG6V+-WSFVgTT}v1CzRh0Lo6qA#IY+Yh4RY}0&meOn4y0dN zHa~)ADo7b*FAd6QU>_Kox*%QMYO=?)Noyu2m_`Zj(f{$U(?f;Qc?>_whx z(wob9@t9YKEZr4g^HIQaVjS6g5afemeC<69YmPrc9$kC<4Oo*PO z#vn;mn%HyRiYJ@xOAvL4^y7|)xozNr4Tr<)6Iqvsu>ccgUtsLv(qy?jso|YNX)fET zRy&omv*BsF};ED?x+0lotBMj){gMh+;jpd&!hk?gcugu?MT zwhv?I+RZc@QB+i7o$9SNE`YFvpA9P0DIg{d6lAl1!zVb-*h|!nG)OZevD4v{uv?CT z{vcl#P(iBBp(bHAl=Ea&G^Y~Q$B^Hq#kWjxyf=nYYs6VWP$%Y>!tQpU;Ew1h#)1N4 z9M#OYFQOCGw_B{C-sc6rR7{iRuyblz7O@-tY+i2aUYfZ`lLa)b;Ek5xo%RSbQY50E zh1yLj7ZC_{GE2X7@iOO*`b`&tMjWN%yKb)xAeRpQjNTtYCy?>q|nT-IZvIIm+bbt&gLSE0fX zHl8b(-}gY8u0j2t*E0-`{p@V)Bs<_^cfSFqm?kYiK`ccqQmKwl{cMm~qO=59!Jq}q zK1)W-168m!jDMI9lQ(cNHjfy3RMNw|)RBPD#D&;7*z(4v1V=4aF^KJ|M=m*v7eOtc z?h2bkw5hD?4aG@#XUtEzNv~g5G;9JRRxDHF^!k#rk>{Iy*sF4Td6fL2sPIZqY+zK8 z10>lEp)X`|g3s~tNAw^{6nLqhyTRgg)Q-ZnlNcSUDiI;Z#RGLB#FYyKbf0iKhh@vJ zB4wIf%xWC@!;(I8$tJRe7xj>q>mS85cSJ<&Zc zFDfWV))WGiSYP6UQd-(3&8Ic5PThfFfJuVv3RP+=;c$T8qbY6+Rn3RFeKFA;(NL_4 zt(AuzWqLPtVmEUa@gD4+wWXR35k?RDb}=0o`5G-)V{AD9dLebHFv!n`Twqu+mQ7Ya z-uB!v)-3L`x+ZMZ)JDT@PHM8r0^o*Ww%RPypN?yDEN z;#u$Fp-xBkzI7<4hsJb|Nu>ONm?6P8ROR9Uuf+MesN{(kGU(|ci0+UnruQPzjQ&jb zD>}Kk=;U>5C2E8N(p=C3VbgNQHY5bs5)3sqzG~j2Tk>Gvr8|s0!B^-$Wy|-ymlsfK zWl0qRu6WM$@O&as!gfq`hZxco>Iu%4P_oKr>#O@5Mc7sy_0!ke{tVXoAov9^FoRb_ zDIZu#CU%UXL`edS3?vw$i{jC?@Y?dq&cHbyuwZ%WLctMY8XFS3e5zK_O>U=PNHO7I zHUAlfyH?E{UgY>a#AR+66I8dCXN_lMQ3)NXObx9w!ozT1_H$`Y(akqal2$3G?7Ugf z-2tJE@-jO~E>yXk3!8CHRIE}r%<;-(@7q)lpxg}P;3Fr0PcNo3=$p62u?KSCgMx%Q z!_(<9NGSHim~9)<^uxEXtEd}341wv#Z0se*mM?g)f}b6QUTr}#ka5gk{;9Mfnof_}-ZBmgSsA?1#T(B;b!g-hX2DFZs_HZKSh1$}jE$_JjxkH4| zuu!B;V#IMJ*-&&6pm>|tcP`0=s=lW6v~Y};{xDU4Qg3^Fd-%7dW<3o8UC z*!rdb$yTJkfHR&dXcNoK|bO-~^O{k%<_o<~hS+wH}*EUYNe)<*17er8fo*s;%G z4Ga>t0>P@xz)ry^VQ5j_3&sgU&YnmLkgo&^d=PbLRG%xZYvl*-ToB1lg^q z>wN{jM)_pGoebyI8WqDTSXQ1BMFqeyBYVlsZa-Iz3E{a$#~E3K(P_zs&Q+)o;EoOT zdR&v!tum)qir8$S2zjEWRNkir)#{iVwdQN8%foX~!xe7KZM+e+Fl8qI5zm*U;8~O} z9pK6PwJ{T$gjCrjd4zpAMG-w`O=rBK-yHEyhmQEYbwif$K!Q=^4?Q2^HnzotUCdXsra$ zh)VovO)j9YRaoB?yVYONeSwWsa;AcBMq(0mTyXNW^yBpD|1;L0AD`$&CML*_C)`85 z$j}h^@zBJ~4E>8v=focR7uD*CJ@A})$KRiPm`;)g>XEz-dwia@H7HsRW5U@=uyYXc zR#+*0bJWIMT0UroRvVJS=2)^RPv}Q{VHH_00m<9Af|)Vl8RC*!B>&ZlVAVyFi|Lq!24vSQN0Yk1Cv7$;(g+ zyuvo0ULFV$l;W9HY0k~bLg`miThb^P=0aFhb*hGsD&$70CMDSu(6VvfgX)lTRZ&3M zEiJ7H7ClTw7Y&q%R*xd!Do`h2ic>K!!dAwRq(<)s$vK6hPe4C{770KEI8_T768gpp zB#AD(25!nJ89oM75rI+AJX%>oWJgU!{6dIxp2O*CD40@_MGiCU^6Q-m(I^Q)y=rJ<@4_la<{aY=?7(0In1G{{@91jsH&<#+ipKc&Y|bgyO76eq9YsI56P|!-NiUD_JfF90Dmxd*gix~ z`fl;Z{m-es)X-Fn)8cQy9=&cf<&DQj%lpeKB z5WJ?2FOeg3GrbM_XpoD43MnvMhN3{|A%j>aD~13;1YWR7WLy71Z{czJt`^=LLtyJp zwjh{DgVVtQhSE?UCyh?M?Etmpn&LvJM-%mgM4VduVM%AY0_I($Kx!gM@c*I2J=Rt< zfJRL)xM;E~*QP;|P^pm(J2_gVRG;_c-t45e#T8IL^-bBq;81K69JGaoZ~}e0=*%gg(tk*afpoq zQ^;(KH=`m80Hk&p0#krDV!sto^T+Zt#L3J9!%a58${~Zc0TlqV4=9AfC`>Z&{=f)g zj(HHcBreVJY{^TmA(Hn<&Ua}O83N6{QHY=%GpD13Wlqw@9&qV_C0>)9oE{DdIW5q8 z|M(0vW6nyVR2r5wK0+PpI0{V{I5&yv!-9l`$B{>P6ab-A7Ipl7wu)&K2=>*DMGY~< zA^PDVD5x4o=U7Xm*n%~4b|NTn9z%(jG>^1GFB^?HKPEeCQ4_sa=w;|0mb42A@{Z4w zv*-?bpPgfza3B@kerYy71DQWy0iM>wepP1E~ghB;!KgSs_@3wiICywo~|!fB=~`PNV8v35UC_R($h zL#$2|f{W4sdND@;jv6ao+77TnDmFN?(=M22M}Fc#hchP}0)gBeHeS&+{XzcipV3 zW6q6D4b82$7=-R4vPpO5MJF~qnGqr`aHfX@(h+hviefjryzU)$`iO7#Qj-@Gm$gU~ zgr19Ud*l!tU^KO!@pwqWLUYEmD+M3y>Ji5l`XTajFwvJeu5;XG%Me>fY|d;HHfFJh zuJNpvCfux-#;a=@q7Df%?%q7p2SCnRS@OI4h%$<7@yj5CmHa zS{7r3n42S-Q20>wV|0hvbqRIF5@(CKJg@vf%rlQ$RwXU=rkIL0wNZis?1W1c_D{Z9 z^W{G+Wa!3uXEB`C-Hj(M;nL!AZDZbt7K~VJya%P^MDO(-_l`_~hFv*NMs{JZj3<=$ zDDQI_hKu|>&x^cjEPJ+%6}=+>UoL?U>pnERpO8_{6!sDLS=8#)TRc8b@4Im_H|;+w zBWt1RJu9+e8Kq)E5jj{uqN}_l=TT+`iLU_5UepboH6oTf!y^=F7@C782gw}yBzpI` zP?amhxcrCDb7!Hhc0dxt95;gqIjNi&PGd`&`Mm`xD3sM>ihC+sCeHQwUOmg&;9x%AOg`;+iGI?q(_q=PCb2lXRRK2Kh9l-CMituO~wdsp|8cJCD6+1erItI#l`?9YS3( zKi;H*&hRWg{a(k1@K#LX^9?BL0GP1>+t=zBPsax^NL~h*ASrlh6dr|H!Xw#0zb3$} zv2U|*g?;K&zhvMT>dyek*&G7X){K6rk0BOm+cF0K23&Lkw%IoYF|%zT$}dF`^7x~^hragULq{%o;HC3!d*#{Z+-g6Dv5lSY) z`A8}xxty{ps5FRb)WLKV*}(ndilMl`&xAGmZ~`u1b}5%z%8CKQ=geiDUbiLok4P4d zWOL4?kxY6lHR-Xebim5`Ow&ig#~*#-A0B_=ienExbo7!39wHm=JaF#qcOE?Vw%*=r z_UyXux?OwjO@@N;VZ(yUDH*62RZ$c;93!bMDDgM?H9vOyb(cC$ zr|vVmU0(njdpk>Ar;1-Y9p5)op>Qe_49%i+l;!rIFNqInRj4Yq@8lu+DE%9-g4-PX z9k(On_!)R>zjXW_pwdOa74|K#AGnN-I2(GVCNFF3f)*rykFW(f-8SJ7aNLxU7v^$H?#WKau==1Lv%)@paQg6fE~ z)mk^zu60YPRB5)_PO;zp?r+JGScG@KJ~WI9YwN(#77`&|LIuKNi(s^>Ugfk4$f9HF@bE%NlMIU)H%rr_lkHZuOvrDil{+p zAT2+F+I($^m+^Nl%2VB7?=~Ehfl*K$9~+yU>LRjlc{kVlTK}50&KJhFU}TDR&Vt)< z{>j_vC+X+W-Q}&0FF3yM_*ck!fovyx$(7_bau0bEc{}+t@)vfFN8h?pDb4CKGZBL? z=mTwO{{#tQ-X&zWBeSrpXCN&s5bJL-{SFle!^mJLOLAa#n%YJK_iW=D_Q_1Tbw1OA-LSB;q~HTb#%gxJQ^kF){vyIc z!gH`HeNeDiVhyO}R=rQo7g#!Q-&{^1hD61tK5cMxj+!;)c1}aHFxN``w4f0&PEvq=|UqRvjn^m&NKu zK0Qzo?#+&}Pw{Ph5b)zkz|f3AkBkLqXLND*1nQ&346&JugbOXvi1~)1le;&JV2^3S zkD^CGc*1BP0XK&CCydm(eVf|hoG0S;Xl~97i*CcM>Zk^n2+KKQnsPWng_xn@ut;T| zrMjA&VtU-j3JAA1?ORt(gwG2n-jnoUF^0X-s5eYeZ$Al^6bY@&*$sooMsYbR8L>l% zjLT@9Z3^3YpNwh+vgA~W=L&6-7d>*!RD}$7=L@`4rUKv$9phDJB98c^>EeiMm{;Ap zn&pC9d}f+zvL!}Em5(I#4DTaGT>>91dO*>EVB)-JqXvKd^?Z@@V(oJ|#pNQ*7s1MV z4O*6Xoy3SxBkcvIl#fSI?4MGPs1dhGR!G3fIXzi$eq2uDQHTHVMCVYtGGXxNx~=sa z0-ketW1^Bi)EU1Rok`+Z!7I5?>zpU}jcmVcY33My2&+&CT16F6LRgWa5qT!8YMBWW z3{ghbBhzvu3cZL*(m-Sw9JPY2o4gjrH;>IMT~S^>6-9POIk;EY=ZK@6(@V4nZHeCdy=G8}5#wUX zU-6>{d639XivBpbeOv*>DGj**nY|>rQ&vW~E}$hBFruvDt?I8l zH$^grio^?KGxX8<@-KogumX3X&|wqpC2VTuW+7m9@`8TiAM1U9psmNW|z^m&l>cx#y2g{AndB>Q^Zo<+lVFFybW)QnhEikl93+sgrd*#k14%Z z@u>nCa3be*XweMQ=EdOY$+bqB`wLyFdB&t4}&$9oc~7hN}*i&VMc!TS)R}I zu1uJyMX4MU$!#HzsyxO&8~uJNnN0m6ZhD+Yq$dpWmi|wVyO&o_?cK3@>NlU2GZ{{J zc1NXLQ1axK{>_uWCBD_C{ zb37i0i}#-NM1^A+?A&$xgU{mS-s+CJo;a$!HyVjVZ+A!a$B!!0{Zo3s?Vs|lX9XIM zgLqKbycUY@8C?4M!L5evTR-8V??#(O<&cVhKj zi7JL8QM3V*iQ6Tk2>(q|vB2$L`047KU!O2z5*s%Z3-Gx3e9GxgQ0(IsxGjP#xFjDz zjy70Xz6}gX6S@{ian3_}<`$4TG~tXmHjzCXeKQ zkzw;E1lBxFe-@Wdy}*$(M(eHp!HUQGBmI*i8!XhD>rY4Tb%Q}8>jx9{xo9-<{=vwt zP8zvpaMo=Ff_eKC74Qf&-t1rchW@l%)SocuNT*}l$-RgdeA98<@h)^^_`KtLj-L~b z1V{??8%eoGD|$-dw;znV~ooE?>uo5@TRkOoEV>RLLFp^XHwjk&i@Wq#rm%kCchJ z{HkAD%wj`29#545afx?w{z(n!{USH4Tv5=)NE=01WvAaA5s~W8nQ3SgfM*r0=ti;d zBMnaB#0>rONSf!ADKToqtAY=aCNTHF7?PrUonySGFwUE_C`Mdf(MK|t2m`J7H6b}; zIn~O#+M`YpUI+HbaN0OXQ1(5STTO04vchXJ*<#(RdVIZ~(?B~VyJ;-U>p`~jK;0ek z)r#l=pae9N+{}Ka!*f79gLV5Om;0H(>)rT;EyL z&7H1T;DVr;ie%y6c%6nWX(eCE9l(Z{>EiZ7wK2{m8A`VIGlOSIwUwY69P*B~mNUAZ zEM|nT>`LH;;rqGLE+B)tyJF@o6c(_~`JBN0Je&f5eY z<3<^0iG*IDZMZff`;8fN5byRESJ47X@?f99T0()r6!$HgZHtlK!?I1$Qxp~&FdktT zW+rVE!7c^IMe=3r3$hpnnh>&f-fcJ~Sb2!Z;{JUn06vl*tKN^$o!_>$DD=;sH!UG0 zrtjV}$L3r73@?N$nM(w*9Ci)oh`NMsSR#_AkcWfJZ%*15!?Y^YjmQ&gZGuoW8p1RL z&QJd~D!vv0ITPz)mUE%)H^haj10ZW8?GtBn`~fgEM7quEUO9-8n{9mTKYSm1%| z@NhOWJVH4`Z)H71a3|u`UMtya37YOQlAK6?D-TTOEuU&zgh6t&bW zVH{oRoEq*BLRm2pxi^#qw#P(7=$u%&hT2;hSr{2fXF&3!0T1-_Rfy?-9@)$(;Mt?- zlKeUB)&bkjNcF%VOb_Mdhs(PvWKhOZ-ll695(PNJ9NNsdg!qlE)0xx9R4~H!#1Ez( za24$E89WdxiU2XS3!6hQ+bAUqPM^2fjsR8^4fzxJ3t_5!0r7rzOBO0)1fl&ubzcSs=9+V|4fCTFYkg=j# zZN`PMLu}RHr#_|MWD6}&w_0Ya$rc{2)UMk)zQz?0#2a|Pee_aT2-P@; z2!)}b=<+uZKP2#i4UU61iNLBUdfjLo;Nk?sH6|$ARdP6j9*D*r?(~Qe0H==-7%Mmj zHw$@0R0|s@@5=+(A_nQ>*L%P*!D_*gBQ9n$bV%e7Vgag?XoNE6pm-r}61dGT4<6SaMQqITjgWfjC-x3jDM284KXxKS)Z^mN6iYGFf(INFt z^CGyTASlHl?}AW|TR~u)*94iM>8mcHTOCDK6@W9Mb)1i7r-AKzc0qD{0qR%(HxHe12e91z}}facxxch`MjHe3}+CinAl6_lHPC8sRoWbte?~9 zURTgs5-o@*I2|5XTXZKRh4)y9LW3a*py52Gl5sZg&m=rf^po_8$geb1WKNGk_GaZ3t3V}C+Z36g24i`p}75s-H0R_(7<4Hye`k9qwKZ67d zz~8loso%msnKtOzra{?1g|^i$^#3g+DEf+8g}T&6N?RAu(vonxWZ_@?(pc`uQhF(H zew0AQIJ5)wg`G)Pek|^H1y!M==`+EyZ%@q=&L-du`eROAAZk<*(5g7Ap_E?CMb0%h za+Y*ttGWoNyQpqG0xxHycV*ew^@>;QGL~1of8t|vWy#om`Q^KfrQT1GMag;;AP7b$ ztp;&RURS`G4onpylI#o^#0<@GZl4r%g-56v3W>YLP~22|7ep)D<+D0BHLTkH{WYs` zQ|BysdnH=V_=h?(MSr>ysqByrc5Z3~s{8g;1Ff4n2c;c2nD!TEI%pbAcXEP;Z4kN# zc1U)-|KtOR^}YeI%VUl^kr(tX$G056aQp$52ysQ|KBnnGOcu}#%!Vk?e{4Qj{5OhP z@e=%VrcS{&G@49x+excwsnJHr%vQ&?DJUS+$#OCAIa8c=((7t`yFayd)+N)UC@m_$ z@__ijwd|Y=I4Zal+fm8X@G3Eb+)b9ch$IYlB7_H87?zGH{eGgK9U8WSCMJVD2%=kf z89XjpOL3+hrGR7Wo`CA&^i;59 zR9{!}x`#|ucgRG<+%}*G1*;LjB*RI zVWF%fbiZ12%cdKUQ*k>#gm#f4pCf7XT!~5{Wa47QOR7gCArbmg)FMcsQ~mNsoSDUW zGlE8qQul1;+IXT~Q*;Mpm+GG&ewAj>krYi;tc(f15Rdy?a+k?Xq68g2p^L7eZpdpib><$O_$MS9%aR>upx8g)Aiv=(;3Xt1 znH+i_X3QK{FyFaCZqD`&Eu2I0_h;{?51ja)^r-j5Ui!e*z3+Jm+jBu2i|o7fdDe5* ztb3TEFfAe!#FAiwLvt zKZok*xbxbto9Nv2boX`bQt|oh3%g3|pQujVb}wD*xqfw(cNf{PifOKb1DJ2^U9yJPqRy+_F9Pg_s%^yw4N(?xpX^;4l2-akio zoOtS27bVZPugRS}VZRea4IW1qgs5Z>E@M0KR&0Q-xO2BhIsXgUuiV7#NUlHcF*Zg! ze)Q(+y6-3FdwZ{cmb=M1_CW97>_K|@T;T!PW3fM&D{?{hg%7%)$v*3U?s9vw*yucV zLH7LaIoX3~)$vDjwf5`%xjN$#gULGMDyws)pjXFw`UymJF;{G?ATszHS=el#)V+nd z7l!Dkhki8jHFEA#)>8rc_7lIME^^|-7@hTm&Yt+@rTrmdQSd<#6 z+q~xIW*uH2urjnJ_POKKMjOfaw}!lW&#tjV!GFIeFR5g+fB?Y+tu+R4Sq77GY9APT)Dg zH91gC3EH2~m1|aee;C0w5`&M_iClE|{%R=3;c4R|WFA{{7OTm8 z5=+;XQ2W_(tTPWw9rCdI!e3@~h2i|QPt^Yz`B?p7Zi>E2XmJB)2C6H`B}th;=cu7? z7oyKc%ReNGzNi-Qt$SWFxMZ75BI@`bScL(%D5LfGNQ@H`Tdl6v+-8lLb!2`_-{uW23{7`V%s`_RZG3&8gYo7*Elk z0vP^*40GzYbMfaB#UB=9Yu@HSxYUg-sY*)`LWMVqpnvtSIrrpH_kZ~HXm&6O&*UPa zVFTOsFBqrP5%=!h}3?uY_rOTm36|osCVggj6FY+x3&bq3?tpI2XTQlW-fp zI-`CD89IoZWb*betWEqNIGvUtVk|NZ=)v{|w;1;bd5Z(pvL-udq+qXLwm=w#1d+^> zH@mD#NToEsd2_r{Yo}Dn$s6I_@ml%PQfcp`Z?lQqW4D1)dbQ#Cx#3-t&E-aNsXZG+ zNEGbdp+ogl)a9Mc9BlIBz1USfoI%6w>1uk;`I?)uv07+0*c_Tz@@kLHFXuC{YNjwd zG_kHZ(^wuF8-feUxv=72+?8=AE4Ps{N&4m1!65pkD+$9byLCBqkX=9F z_$v8{ef{4#Cdn>bzi+#pjuG@R+{fg{j=6!HglmAc3th%`YIhl)$Bo(`hHX>|n2AkT z7=QToBdjo!og;{eVNZkpKVVbHY-o;PY`rn zT=RM4N_&C%1^>dH%#%?D}jZ*zwTG9{C5l%Rc{M`+V%O#PI-*fAx&(z;5C= z3c8?GiG7_->^i`6_VJ;UCqc5=#}n+hF*qKu_hp9j=Y#8i#XcW7{Ww2}=lL-^*3yVZkC;yZD6Sv8+j5WhLPr~^Gr3reo-iH3Ql?)484N5g2Ss9Vy ze&Hwt%Heg^Py_;Io;ie20y7>Y*1Hf(xM06f=L^M(pQodfqvKwJO+&IgO0)H`Oc0zG zjVI2(b14UAgCmJ3w<+Ov3!!#t$ra69IJY4_>l6S7#wefPY(|LH@!T*1CUB^wmL-b$B*x-5F z{drydQ2xv$%unZciDXJ$I&^C{Z>>gKJP zb+h^E@EGr!oe2aI^EWJC8|Hl=2h?;7L&-R{TY49xets3tYalnK%X$?v$ui@}f02-5 z*F>W5>1Rd-um9qi2@^Q>p5$kZdi{SW;qn+)OcXsr@9#Y?9NmxSfA1Tca%gC27Ci%PU*MqvJ!7 zbaq74yEA@Ya{l_I<6#ahwB71RzIPwKQO6(5>xtgq(F=$$82?=VZP?heXX99kAOZpj z0(_qX1(lYFG1h4OurW54sn_d|^M2W@AWzLuqOa)0FQg|vY>_YBW<^rF?#0LKzc;dn z+l`c{00?85+dPqRuWTY`xfB1*_deNsf?NVK-d`tpZ#Ex{*0g00Dgsm!LVO*CF>?iS z33NcX(Q2VGQS%)>qTW8*IwEi}Ip&J_6S16`@{&8p#zr@cjg35se?PIf)gy2Hw65U`}$`9My3KieQZVH{Z za|tl<$ly$26Cq%qB@(~Tx^MXyW9M#}amHg2{=lv85wv+z}33(%T8E_>~A~K*@vc+J4+Akl$0!E75_u1Po+2sA-+`R{YTvvHNy64uJ zxl`}VojbkvKC?SzXLo1&YPChXTJ_$GWyzAeWJ#{VfDJa-#>Uvh*cePPHpUc#DS?>g zBqZUHK!6tlJV*%n0|65PMzimC?yQ=T4dfA$JlQMl%+B6(&i8%i>m>-NwEt2dJrri{ zh?m=T-P|wl0t#mC2YHu=mS33sYcIQhaasGu9>Sw`&yApujF>#yh^lgaWsZsPkAiq zI@SIj^EX}V5ye2qx-%{5vKo1U64AH|iF4YXw0@Lud?3Fj3jISPQ%btziizunyo|(N zmSI-s4^@b%U^qNuKRkQIUYlPR)1TTz>S87|`gg8~g+cXDmNjwBig%W%QFD1{wV5#v zPnvce;?~xeC812hyk7j5#TuC=O^shb`=lI_el1DVNL3T5@9P^F_!z#ZI4zT*#v37C z=^t`eYsL6}vcj+(NBToPi|ZO({0?&&^P{d_Ou*cWx+vN`7zP_^pz5GcY8@j?OM^UG zLpu~M)&p<=QJw}rJ@v+P$En#|uL>~x5GK}=AeYQ)`ip=m?W9aUNq9yGp%SQst_EE=JemSQyG_!Ap$$bJjmK!Ua7E;A0WcjD0o^S##M{qeQsRBSmv<{B9u>T&cw;jMd|-n#okk?ouB z=#z3+)(>PXvOp{;{pLWWzIw-pd}(F0ch6e}qlw`EQ@PyiGnsl(9$c^W46iQ-N_`c7 znLPNn^DFxIk6$XxSJtFL!@tt$;NutMKn&+(x@yecu3xgF@TtP`vDayVTuV@w{{3Vh zE35Z02nc)Sy!HGSY{IX)3{$YHQ7fb@od1H}0j4Y0Zgl;4QGxvfcrHCx97OyC&lf+~ zd6XbnB#)dlUGS>?kdHoDZ;?!>r?qdt;1zu~!JhwgY0qb#EL^bD3pdx+w5WS0 z{9mwOpn)Oem4t#=t80l0S_q7$34tTjzTq+omB*oGuh$u~{^G$p>9#RW?{;&gC|HjEdP<(col* z5AzA4fQHev60Fdv;)I=N*J*V_!c&OxY1GHbF~8jr@7rmMW}kM>Fc~9a<55F*By3fv zEoof*GTFnPg8wIv=Q5y`F1&sX>e`_T!TJMb*Wupjq;w#;#12US&f14I3P>!`*vA8w zZc{8>u*tPvzJa&%kC}Sh;i84X;`| zuwyUwuzK;!T|d?KP|)nsOR6fEiq9>FU418GwMO|pUAMPC1B-R` z72jXi{z})+nUCXau$b}t^X-2^q4OuS=MJ_pCw%F-9a;Asd=7qUd=9T!9r=#7&I|2( z@VWO>*ns!{2N`9OfI020by29J-yor#k*i^V=E>hg!S-zBCk0aKA)kE-F0LM$oj5Qj z?Wkg%U*i06Z5@dJi?4$+m^%2iv(wuF>7Qsvnn>>W%>|p?y|P@baBSVBN>(Q-nZlt2 zVudeVzx`-BlTB6K9%Cw}Lv%7s$pLiyCgA2n1ch$?j zHBW3A|}=;_^qh#Lvj-#b1&Mjjttwfr#bY0NPE&;Ksy^aT82 zw=pKrEp<51x@f|@nz>TbO}v^HaLJCLH4jh#z<%hL9k&;q1SlJV>C7Yra#g)v-`l9y z$rtu*P(#yi{}$((%C)w_?YV5sR}G;}hF*A>>Bpz&pVN1&xp|gdwq~ozmPoXpTsz79 zSXG=6V?Jhv6^zx7FD|lgB_GxH0gg;9D$O>AM7;Ap$V#ib=Ja$=eN10T zlWRssMo010zGrUCJCK~`t=zlQ)#+op-SKGXkGam`3phiDiD~D7&kXTnP3K#>>q&am z@9pjDdmdlbT=$DQqSVO`n$5m`cu@X!WMS&?D$7pv2>$~;hwHjw@mK6Kj9uH0q}642 z@Z51;T^!0U42_OHjIZ|(kBpFYa@dBO16)q%yEA0n5~S;Zce}B2!aJB=z!iEQuF!Ga z-UP1Df6JPSZNR;X`t!3stTT|O_PKV);BVCK*xLsN20qo_LJ9xCz_xr3P~fbSZ@{55 zgs;9ikvkqC8lin%J^qT;0Sv1$I~@iYDMj`&&D5m*!!v?^#i?et8F^o@2?oWaLjzRO1WZw zI8KnOC1=TKU=evFo?1|9r-MBAjUl-Z5gE{>Xl{|mFW5i*36PEwTOf|5b zo0($Pn}Y3os#VID{=m=E;Cyfi&JFr}z z_JISd?R@*$+q$jMW#vmg=fC&O?i;chaiICy^_Jz~rni806OF^UY?c&*Oy8d^n+o;! z$NT#8f~l`pk%J>gMlN%q+Z)Od^0B9KIRwX8_*0jo_h%g6nP{I@Dl;@&9w}*kWXYGh zbaO7|OhwWFbpVsE*WkIoB0rELdV{~*+wQl1;i}CJ{=+ZM)pefC^3pYb9(&h2e6Ot( z#gXAR?Q(4z%Ty6wh}OwZpgx@brZ96z8p(Vo!VF(>Xl|9K(wFs@yDNfuWYDQZCQeLU z=jBz&CPf1qrqE|=P$<^7Usu!#Jrh-G>?vqrCn+3*K=es=N|o=;HC*+t$<4$@q& zcqfq?P63swuc%9Os^ogBWUZR)jMLW>3383+>&QA@v0V+tbjCT+m}=}FU9nvu2?me( z13rtZ{=ba1f0{o-#v5Imc7 zomf=aKkNEA{8jK&EtwU_@6eo7NW*4nwrt>XWdJudzVM7^Epy5JSi=9~aRut4E#pp7P% z{#tTgp~UVFBWjP@>&oT>VfQM(*Bkh(MfeAY(`sf>qktZ?Myta#BkL8fYtm@< ztgNlft%^Ak_%qFN0i|k}GA5tS1|yltx{LBq-Av*2KWHyphrY-Q$cyXm8tNK5pUU9N zpx&6@q%vv`bzB-}h>WT_XM#cOl|3N1L_CC6G$1&eJ?{yeBe;b_gLjzDk(;|%E=TYc z!`Bk&^~C6`&HQ*Gj0(6jq_?McVlv~%&yJQsd1F?w5hrRspKlflxx4W%zzW@4yDR_y zI16ZmFmGlKXgYBZ&073zRExV$Z$D)b0dhV*m}V%{>l$>I%Hf!IQ!wBUf7L4fOmW%F zPSF%MtE(J_K&W1CG?MsA*Lr*BjgG+j{`KWeNoN{=7SN2$->vMlcz9Cs^w_s{lOs@t z$ME$Yd?7yfzhY8 z{_Yk*85kIExW;_tupx^HJKe?NyIr4Fy(n*W=JyDzPQG>_kDeq}BF0FJ{pkKuiJ7o? zlW4~Oz{ySbj2XF5E$oKyqjL6-yB@oA{%@m$o<>z@_kij$GlxmX$PGX>L`RG)d9c(v z-ayfuNd22A-=wPBkRz6G3Jy=TQM#AJCssAS!UbjD%1ehg=k0@$oaJbte9M}nqk5{)xfgllb3jo*7-XZZb6A8Syd|0 ztetcF%xjzpnm662Xcm9ZjiP#pGg^Eo>-&8+i)>X@v~Y;n{Ei!D7ylKT?nN(T7QS^v z6*O%O(*Hc_f$NJxk$SX2Kmw(o?Eud|N6wK@)Q4`bn~lP{W2?KFg%evS0sRLc(*Ean5?Y)FN z^II0w4yi47-g>|58DF}hRQX+&wDz4lBYPHy)II}bH4E*+ll}%K$+LxG@t+99pWDP=Jiu6;4go?ZTYV9VJH(Yv&Riy~R>my_1lSpGEmAZQ>l_G1C@n{)4tYt-HP$4wm4MxNr+QF0ut# z3bnTp@~Pix6P5vioCO8xy1BiDxs?8A!m`bjw77qTtZ_W=-!b2*K_)eMKx;^FDu%X2#8Uw}t%w_$ z2k;ak2#Y1i#>UKKtinvqOb)Ev#ysX^-oQJ!H|u-~dJpT_5i*$yCFWYQTec81jv^Zb zyCU11EgDN;fVbVujZ6d4Nc6_-U=ICAUJ-RvNxXTuxh^tXALn|;C1v)lI&ND*xb{f& z&gD0e-IwkA#uZbaE|tseU-jQvn#%auf!>lXjncT-%BF6_GIeZnCJ!7s*_~8sGaWp_ zSH{vh7R{diJ+OIOxl%Fzt{D9~a>kzhov=#f#*ZPR)-xM{SNNZh!v!ha!7RG5p2I8! z$3IN*o8VSe*!%y>_6t0tn3$Q@ zGVD9?gx{n%dP_S5N2yH{4wNyGn6l7*@vHot+~)?#H8P;Mn@YuE%ASsg#bm${d2JD< zR&ii`YvUv-AXf|})?T@OZQ(hj*tQ?DyOD{|y|zqjcu8|=|L5$5Adj^RIkr_;q@XyO zOpESY)ZC-S6Ai>`HtD&EUwOx4G(3 zJM-^L>9nFPT-eyK*H1KeuXhiP4srR^?3hcs?$Keh+T$?}C1Ya-r-hF6fo}3YcyEjU zh7I0^?(|6A0NemD1c4~j&L-GWNVQnNiJba8H(kDT&B}AhwE&E>wE5aC$SnNA0{W`( zy36)Huxl%FYY)5?Qyoh#V=$k}m12ZYIQ%i!LO$yw%%_=;&@43`4WrLy4^n{!v(E}Y z44nuiGxw{lD>nRmz*?BuFu5|iA)e?d_860E4lcw#z2i~g_0v;5cDZnv=*TmP^j$-x z$J;;9aQa{T{KcOka{epi_n@B0t|o0L3$noYhgDN$znn^W^Vx%B#RdcOiJSH9V^i~9 zk)36jedtU39N_%_;di@kI{kg7jwx}l;o@lci5?165MV2K!Etf0y(_02hw>%v0ACb(N zO4QfF-T33K2VdFZ56SzwzK{GxRFG*6=0)_>5VA}aU5>g{P3*vSK7nlYqkYY$4Do4E-m67ZWXz*M+#Ojpo*74q#< z=88ctwWnx~82Ksk4=Am@a$Xp-?-kO)$SWm*A=hc~1;)Wd5rORZKX6BByRIZmLiCnI z|C)NTX4i7bLD^`v2QH#n#VXnHv|x$4_pV>Rca`|s)!nYYYlv?$xF#5P_cq(j30G<5 zb|(77r<}gc@#Fn?viGe_?YaBgR?L{3lM%%&difPfTTXvy zWMnjgFMy@9Hw`Y-Hi7x8aTzRVe+i6Wq`VA>$X_n4{Ca@OGFGRcDiqE_>az7;JVhbZ z{^ZiKq()(8M8~w2C!w4J+4x%I28&$950Jrj`_*EL#KD7PWQQONgSw~i-%@@EDkGKv z^UVuWME;s%U%#}Smn4dW^IuxpfOhW1U()AyJ*+()BC3ATeC9K&Brl%Ce0HgqrY@gd ziba0=&zQaJEbP82t!IwoI-z|wNDXZW>0~adJP5R(BTh$qSy3{CcEKan9YhEc!i_tZ z0S{7zKkJ#y7@Airq~9Rxq++da|5L(s#n<=noP!sfE?L%Ne%Mf?Z}(KqmH)|k$?-jk z!(H}9NAO!}Qp>9BrtycGw4lLXa?NorfrH2ruYT8bu-E^(2A zFyAd*BIP$vJX{OB^VmJ+qZzN_j<>(Q|5_cpd;jSRHtzK1v2pg%olmwrq}p6VOj{nh zHgNlq4^`jswKoXQlh<9aLEQiAG`Mfla_xW3OdyB;SuHMkT-&$yJ~~d*_dl+^zh}|I z>}CE!`~2$m7tZ^<%6yl3p1x1g?ay{T4_>A{9}~(cUVm?_{$3dTy|D%SFvx)hewgPq z{QP$8ydoxE7V4A^qKiLee#(4W^8tpyKOkk%;)JTgnqv;*nQD+4Y*gtM^$hu1G!t#$ zYjWVV)o3A>Ycv{4`^{uO*+-u9ltL9>G~mhw8eB%z+viq>t@Vu6Tuuu%u5(l zOeW>@U(xTG)%0&XpFQvSQ7vBcTh?I1_HKJpe7U7=Yd`lOH?nop%PrZynJl#b;)`FT zXJgK;o$Z>&=>Wh48p$ZM1rGeG==MYhu0|oS&U}C7=L-K@c1hBQjn3PhM(wZjz9oBJ z214&z>$6$VBk0TYAA4y1*3Q3w(Ruf$FAKkOXQ*QSU>8xSc?Qdw_NoF6XvMv>RFk%@ zLK_#_sDZXbqf(eo5THtB6=fT*j8>i7rH*d3I_wV#I=ftKI*iIy7D-X3hXNk;oo2h< zrF2`3j$dE=Y)sR_nEVU3I<0hAms9XeOnPOMl4BUP!?$@u#!0`$ysB_u&;g~2SlVBH z+2fvvvlz|qLDhYdDim60E`$hhnr^k;4Jc3)E;Z~zLEkH$k36(mScg{EZnMd~ajyTc zYBZ{Ms-_>m%yIl*dh!zqj6$_AuEeLjIMluOS{SSM%k*0dBL`D2w|mr-Ev`n-89(J- zT2uquLg#68V1&B^d4tq9(8(J_frb_>g1vk8{aW?L{)J?Gt<$-B`*31+DtVkYD6X*8 zU{m{C<%BFJk8={<@RCZg?ij3GJ^7v)#cv;AWuxq}sA{k`yT4#8RIj^j@Y z29ri1?GQ7;HMvre1_cQC@V}B@VO{9AXnI6l$TS4DgjE_Y()K~YM)@%{hIWZ^Hn{xg z#P%S?WACNQYVPET?d6_j0mG@dBU0(B95N_g>qIs4wp%I-S6nwQU>D%gaogy@92%UM zp$L$!_~Lf~InB?nc@BW24lX(;EMg1+JS5b%fd>ud9@H7&t45x;R&JTO=hWS=8oRw> zMF%fypZ6Jk?sYb|%-=Mne@0EX6upuAWYV8Kc-I3r-MOXdPno8QvFC|2hJM{&bGS0@ zEHQOp9tX@b*aPj_fkl$ogVuXXD;>a5ae4|7P{jp=15ytVCS&O7U3p3=^rSpsJTp{tdTp3) zUX5O|p+mjVKI_7Yab0550Glab+He#T^T^hPYwn(WPjy(1cmke$hh`(&+_R%=VuBD( zhxbHSt6a#vqZky*e1Dl%`j+CguT5L5I9YPhi?~8y8!FT2p%I1g5gPJFm{|?WH`G za$QoaU7uJ&tkB~A!BMGbph2UMrab=>{(l+l6jnsU5%666XI zcHJ9#ZQ3Cyr%Mo_?z=>FUFTgo$03|!;uX$;duKoILS1kWP?t7b<|6c~(TMoZ_-F6- zhD}Z!7xYel@@NT7@Xr@;7o`kC`xw!kBNHkQwQDE%&7rZsUUfzW?9t><276x;aT+{n zb1dO~lWLAFrt*+ds4J(%^Wn&17BJ?hU51a9`bXiddIq&rBGt z693`)6SKJNtFz*jr@lxG=I3l#(%j(Se5dg+y`ku7H#swZx> zxs4h>U5DEFi`}$>IKuePGE~XoGS~~NTa=$(v*p^V_2sXa&Xz4*rR_I}`?Lc49k?i- zwf;LDL39CjHTFR@nCQi5)SZZg$rIZfAWh&_QPVo3#s8s~rOU3xT_(HLW}yUm7NI7a z&uH@#AszO?@l17#HK>{iQBAO;)6^+6ss5xXe$X(^6JPa~Zh-2o^aE%4KYIg(<-=fW zlj?F_ZxCOs?oe?dk1(QlliHp^A!9k-SYYKace;8k6Ag>>?c8tMjLasqPSxno|8_im*)@GpKBy#zyA<`LB! z0pVl;f6=jTRE=b*#|IZnONs${XwOrkjNV?h>Sz~mtJM{h?^yTnI-M`KP<^^6HdTwD z>>e+V@7gtf6BF9p2fdChS<*I_e$P<2nqFy(WW(yyDNp=x4Sn`}@fFRvDUBAs$D9Do zBFIkfx27jy>4esF;sTfoRF*D{0gd~tuDBa=(Gb!l+Fx0|!@Pt(CE>j?HCf%<9m$!@2I`CJ*m8d8N#k@+FxJkQ7r>5y z0YGQX4ZPN-%Ab{z^%ezJ=TZ^D=R5jvEw0#Psi&EjoM|%rR5_v8t=dbIXtORcB$cya zScXP>%nf=^(rt$VvL@$A*$q|OF1tPnVA2nY@AtVwHg?uqZXaHFW+N! z0G^OJ+KfVw6vm;0Tf&*xvG}NLhh!H!uORB_|D7FEdZdI{tCG)nW83HVyDI}L63fC4 z+z~Vs5>_#8huH<@xJk8SqE{S*iU}ymVNB@D;)8{8n5DwS`9Gz z6kF13-aaL}9Qa-e)3;=Eeyz?Dh#RD9r+pd8&02V~@5IR{d`7T;$iLx!(4HLB6R5@2 zDY{$m{$m6g_6N~}BP1~H5tgLJT_N%597iYlxBTQxJlH#22!=}|^+w-dDfIo>nfu+9 zQecOj9p+@NAh0z_68XI0h2@9){ifvLk*SeAy)mOTJAClN$9MfoEp6&QdGZG$KO=}E zdQ2IcvItFT7%^SR#V<2!u(zO=h1JQFJQH(*QBTcjxT9&eOgpuhsh~0g@?>K7m5)!| z=xKzd{QcF(&5HL()9TNMU0<1+mE6_1GhgsAp;xVcWOdNUO6DGA);DZ3+ZqwQvrw5y z|9N|JZu6kG+K8G%L)nv{&m``QpLr|IL*~!f!&K>soY_SupbqYh21t~-1Q@bAd0dC- zRS|D!blh%TIGRk{wAChBi{YBbA(^DUr3>M5$H}jp8#fwtk3D|xqi(aa6|Scr{JSYF zmydM$Faz|}%oB)Z(kkO6y2m6VNHciS=WPkSBj%4;|K1?CZqgN*C;Vn<=27JYC;Rlq z%8Cw+o_U50-b3v)4Si~zQmC0(ZA%*Lac@-qd%bV%jq+$L6}B8$RGp^ zeB^fK7;_ix6{|giY9o})MGflgtR=Gb&0~F+Pv!moD>o#1=Ca`sxjiihx6f85CmcS9 zeQP~hE=N1hT6~&a&n#%wl^BE}QXm%5wTi~;kVahVX4i{GgHX1*EwYAPhM7 z&%Re@zf(}W_0y*_*tCARgRwt){rVI<9piAd5R_SzzJ{EbUFD~&&*Ieo3N6v zo>UXkWUo1%4|uD)+JEJj$;Xa+13IGyo5fEtXzxM0MDf5s^%jCFVk!)V0m7C0@ab>% z$7`al$O|FwN&Bq3ApPj9Um`8-=yfQgX7&pvqPfA?6w9(zIyA(+(@WU2zBVKOXNkb2ua?Yjq%+2WYHzGN|P z@AHzJVpteOo3*vX|MO3k(t!;gwo!DfaK|DFAVqQ4g{~Eh894$GD(#o-eM**8pH5!* z4!KR3S$*A%El6VNs4gC#nm@5EZ_?jK9^*n{|GL4oZoO>r%aXPIHGWu^-?ePoZJ})& zz`H^Bh^vw4c#$D7%h|blnTy!s{AKZ3`-+uo-GzLJ++ePhB;dvsfk~Iy1j6 zp5L`H>}Hy^RBvlOd1(7>;O~L{y-i+f#@J{fJ+L;SR{}u;hjI4J_RsqYgJY^e4LZ3A zo$PJj8qQxbxHT)eYynqAuLrZ}+>dA3FC!1yf)`Zb!l0hI6DeDS{qljo`#)c7)`!id zwW-X?(}*XgFa6x-u066~IQR>K-v$jXKFfTOc^kc3aK&jpCVEUT3qTW`KN=xVoBfSl z#mad5;mhA9Rf^X=cye7bMSf|Bo6O~0KK+^YkJm$IS%2fP8}i`b+A|+u9$`3Ix8LCw z(10L15JuOMqq@2)%p)USQ$8L~zh+Cg_kjN-3BF~XJe7Q1c)%GsvOhQdp0ZAP1e8nf zNPzhzxksx}(Bh)FjyRjfVyU*7guPFvi)x|)+KfhTAha5}La(n6GlFDF?p)m8sE_d+!T{jY%S8($`+IYOQ&?{oR%PRYwop^u(Blsr<`( z$;njIzhdpkoXzSNIHxi^HR}#H4bIg_BCRdY99pv_WDLCe(hfaz*|;Z>MS?9+KONQJ z0KOQ`r15g_akR{6G2DAO>z;#e{p>yMAMSA``QWf!nrW`Q;;Po{-LE-B?i9KOhkwKT zo||?lCB4Tk4ww2yL#3@d=^dardLEqn9^~Ygw4D4-0v<9_6!eRrmx5}9buFhub2QVk zQmw?YyCz1d4n}5Uc?;R*aPJgd@oK=Ea_E@?Mwy2a_v>7->PWuFdyF+)m#Z@O^exZw zNNaLOM~744dT&tg6gfRnN{QIWaO(Y=u9I6{*hX|u0y9qj95hqZ_y=|1(thOuJ=L;6 zsdRj2LL=JqM|fgv7QHXf41I~&?5eH73WhIPAjjQefMbHJfgG+)WH)=}OpaH_Tg&t5 zzG;^$lXs`d5hH8YDh)HR1-l8#L~7%Eio{a!?KUX+!z*TCAZsM?XP3(>+4pkAPjq#}#OS3Q(oT4sV<&SbISpUxTFi&t*>wpHN6k&j zA1G$&aAPWGX^@J_1Wm8h4htQVwyoBZYr)wn^?-m`=D6$luv)1{9ZC3N;e=OVttyoo zbDY?lZhMS~K{}Bb;beNj^FE77bPKBLnEWa#(EHOp=&Nd-$;7Sw{QX_p7jZ{`V zG#(Yi*EjB)3aBlW9dz3N|>FQ)1hLb%$$w8s?le?v#|V&WmHU%>F_v|td4CbFV5e~B_- z{+t5~LX8Sc&4q!_X*a>C(mI72>VF()tLJp}#qw#fWEc|lB{Jh0;e%Onx7liL4!Nzq zpA}csb^1Wo&~Pf|@ocN4JHF`+MlX2>ubL#|c%+;woBREOL+5;t*~r+H(pG;}Z?h|* zZJgm19Uu<-o~zfk?{Le1`Wb69a+N-0^H?1=F>ms?722REo3tuff!J!tX~4Dl8*m@-w%e3~>J>99d*e_Iy=h&p%WdGz{!QiB*u-EcAru#SvD z)zqGqAMYdlCm*`+k%2+o_`-GMtOv#1wobBUNGuv)xExZ5Fvbw=+(YeHJgIS|D!kX=C z?K(H6#fk!p>4dhFnDm+~tL`LwbrDV~_SfQ#sd1~1(IZu5I%|*>TRtNQmqt}RSrJI` zoKDIo%?^76k{

      $c-DI8NvZB|Q&pF;`sMO~s% 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

    - -]]> - -
    - - - - - - - - - - - diff --git a/manual/src/main/resources/conf/docbook.conf b/manual/src/main/resources/conf/docbook.conf deleted file mode 100644 index e690287916122..0000000000000 --- a/manual/src/main/resources/conf/docbook.conf +++ /dev/null @@ -1,38 +0,0 @@ -[image-inlinemacro] - - - - - {alt={target}} - - -[image-blockmacro] -{title} -{title%}{pgwide-option?} -# DocBook XSL Stylesheets custom processing instructions. - - - - - - - {alt={target}} - -{title#} -{title%} - -#------------------------- -# book document type -#------------------------- -ifdef::doctype-book[] - -[header] -template::[header-declarations] - - - -template::[docinfo] - - -[footer] - diff --git a/manual/src/main/resources/conf/docbook45-slides.conf b/manual/src/main/resources/conf/docbook45-slides.conf deleted file mode 100644 index 58d26c62bab69..0000000000000 --- a/manual/src/main/resources/conf/docbook45-slides.conf +++ /dev/null @@ -1,55 +0,0 @@ -# -# docbook45.conf -# -# Asciidoc DocBook 4.5 configuration file fragments. -# Modified to output docbook slides according to -# Slides Full XML V3.4 DTD. -# - - - -[header-declarations] - - -{toc#} -{numbered#} - -#------------------------- -# article/slides document type -#------------------------- -ifdef::doctype-article[] - -[header] -template::[header-declarations] - - - -template::[docinfo] - - -[footer] - - -[preamble] -# Untitled elements between header and first section title. - - -| - -[abstract] - -| - - -[sect1] - -{title} -| - - - -endif::doctype-article[] - - diff --git a/manual/src/main/resources/conf/docbook45.conf b/manual/src/main/resources/conf/docbook45.conf deleted file mode 100644 index d2631653beeec..0000000000000 --- a/manual/src/main/resources/conf/docbook45.conf +++ /dev/null @@ -1,63 +0,0 @@ -# -# docbook45.conf -# -# Asciidoc DocBook 4.5 configuration file. -# - -[image-inlinemacro] - - - - - {alt={target}} - - -[image-blockmacro] -{title} -{title%}{pgwide-option?} -# DocBook XSL Stylesheets custom processing instructions. - - - - - - - {alt={target}} - -{title#} -{title%} - -#------------------------- -# book document type -#------------------------- -ifdef::doctype-book[] - -[header] -template::[header-declarations] - - - - - - - - -template::[docinfo] - - - -[footer] - - -endif::doctype-book[] - -# glossary item - -[listtags-glossary] -list= -entry=| -label= -term=| -item=| -text=| - diff --git a/manual/src/main/resources/conf/fo.xsl b/manual/src/main/resources/conf/fo.xsl deleted file mode 100644 index f55b5b2a19f2f..0000000000000 --- a/manual/src/main/resources/conf/fo.xsl +++ /dev/null @@ -1,407 +0,0 @@ - - - - -qanda - - - - - - -false - -left - - -12 - - pt - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0pt - 0pt - 1pc - - - - - -1pc - 0pt - 0pt - - - - - - 0.75in - 0.75in - - - - - 0.5in - 0.5in - - - - - - - - - - - - - - - - - - 10pt - - - - 14pt - bold - false - always - - - - solid - 1pt - silver - #ffffee - 12pt - 12pt - 6pt - 6pt - 0pt - 12pt - 6pt - 6pt - - - - - - - - #E0E0E0 - inherit - - - - - - - auto - - - - - - -.svg -images/icons/admon/ - - - - - -.svg - - - - - - - - - - - - - - - blue - - - - 0em - 0em - 0em - 0.5em - 0.4em - 0.6em - - - - 0.8em - 1.0em - 1.2em - 0.3em - 0.2em - 0.4em - - - - 0.20em - 0.15em - 0.25em - - - - 0.20em - 0.15em - 0.25em - - - - -1 10 1 - - - 12pt - normal - italic - false - 0.8em - 1.0em - 1.2em - 0.10em - 0.15em - 0.20em - - - - 0em - 0em - 0em - 0.5em - 0.4em - 0.6em - always - - - - 18pt - 0.15em - 0.10em - 0.20em - - - 14pt - - - - - pt - - - - - - pt - - normal - italic - - - 10pt - - - 10pt - - - - page - - - - 18pt - 1.0em - 1.0em - 1.0em - - - - - - - - - - - - 8pt - 11pt - #F0F0F0 - - - - - - - blue - inherit - - - - - - - - -            ​ - - - - - - - - - - - - - - - - - - - - titlepage - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - < - - - - - - > - - - - - - - - - center - - - - center - - - - - - - diff --git a/manual/src/main/resources/conf/footer.xsl b/manual/src/main/resources/conf/footer.xsl deleted file mode 100644 index ea3818f09a51e..0000000000000 --- a/manual/src/main/resources/conf/footer.xsl +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - var _gaq = _gaq || []; - _gaq.push(['_setAccount', 'UA-1192232-16']); - _gaq.push(['_trackPageview']); - - (function() { - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; - ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); - })(); - -]]> - - - - - diff --git a/manual/src/main/resources/conf/fop.xml b/manual/src/main/resources/conf/fop.xml deleted file mode 100644 index 8f79fd7df5711..0000000000000 --- a/manual/src/main/resources/conf/fop.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - 1.5 - - ./src/bin/fonts - - - - - - diff --git a/manual/src/main/resources/conf/head.xsl b/manual/src/main/resources/conf/head.xsl deleted file mode 100644 index 8a9366a577b3f..0000000000000 --- a/manual/src/main/resources/conf/head.xsl +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]]> - - - - - - - - diff --git a/manual/src/main/resources/conf/html-params.xsl b/manual/src/main/resources/conf/html-params.xsl deleted file mode 100644 index 84ba26de3acec..0000000000000 --- a/manual/src/main/resources/conf/html-params.xsl +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - -images/icons/admon/ -.png - -images/icons/ - - - - - - - -legalnotice.html - - - - - - - - - -0 -0 - - - - - diff --git a/manual/src/main/resources/conf/linkedimages.conf b/manual/src/main/resources/conf/linkedimages.conf deleted file mode 100644 index d6818ce56ac53..0000000000000 --- a/manual/src/main/resources/conf/linkedimages.conf +++ /dev/null @@ -1,17 +0,0 @@ -[image-blockmacro] -{title} -{title%}{pgwide-option?} -# DocBook XSL Stylesheets custom processing instructions. - - - - - - - - {alt={target}} - - -{title#} -{title%} - diff --git a/manual/src/main/resources/conf/offline-footer.xsl b/manual/src/main/resources/conf/offline-footer.xsl deleted file mode 100644 index 5d328d008a325..0000000000000 --- a/manual/src/main/resources/conf/offline-footer.xsl +++ /dev/null @@ -1,15 +0,0 @@ - - - -
    - - - - - - - -
    - -
    - diff --git a/manual/src/main/resources/conf/syntaxhighlight.xsl b/manual/src/main/resources/conf/syntaxhighlight.xsl deleted file mode 100644 index b0644068c38e5..0000000000000 --- a/manual/src/main/resources/conf/syntaxhighlight.xsl +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/manual/src/main/resources/conf/text.xsl b/manual/src/main/resources/conf/text.xsl deleted file mode 100644 index 75f5b438bd33d..0000000000000 --- a/manual/src/main/resources/conf/text.xsl +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - appendix title - article/appendix nop - article toc,title - book toc,title - chapter title - part toc,title - preface toc,title - qandadiv toc - qandaset nop - reference toc,title - section toc - set toc,title - - -qanda - - -
    - -
    -
    - - -

    - -
    -
    - - -
    - -
    -
    - - - - < - - > - - - - - - - - - - license.html - - - - -
    - diff --git a/manual/src/main/resources/conf/xhtml.conf b/manual/src/main/resources/conf/xhtml.conf deleted file mode 100644 index 9f37dea277438..0000000000000 --- a/manual/src/main/resources/conf/xhtml.conf +++ /dev/null @@ -1,4 +0,0 @@ -ASCIIDOC_OPTS = '--attribute docinfo1 --attribute=icons --doctype book' -FOP_OPTS = '' -XSLTPROC_OPTS = '--xinclude' - diff --git a/manual/src/main/resources/conf/xhtml.xsl b/manual/src/main/resources/conf/xhtml.xsl deleted file mode 100644 index 77f2eab53dafb..0000000000000 --- a/manual/src/main/resources/conf/xhtml.xsl +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -

    - - Return to top - -

    -
    - -
    - diff --git a/manual/src/main/resources/css/content-bg.png b/manual/src/main/resources/css/content-bg.png deleted file mode 100644 index 2dc3e0c81918e8c3ff3fac929f4baf94249041af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3387 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 diff --git a/manual/src/main/resources/css/external.png b/manual/src/main/resources/css/external.png deleted file mode 100644 index ea81adac408e15543ef579933b8171d1c5decaf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 811 zcmV+`1JwM9P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_0008MNkll?hDM z;u<*TV2mLejXDGK!3kAW_lmCV`|)k$1sG!hfT72|0D#bfYR$GOIM%$=lB-xPnL(Ft zK5@T%JDkO*-}WLB`3_YLKve^n7<~=^SXZ+C%bd@Dd*tKXa-F_JI9Aw#;cz(0&1O5Z zSe%lgQwH*!n(A4O`H-7;A&tAb`w&V1P zgQzYm(3hpBU@#bFGh7)K}tYGXgS}G#@%&js40c6 z>n1LWTm(QMB!|>bwRK@j#YSGUxiGEmvsZe8lhd=U4<31I-+vlE5MKCcauwuCJo9@h zHf`XOQ(x2Gj-I=LA@9@C&u<30U2BSt4!JS}9m7kdHxbq|XMt5XKr5~;g?nCcE)(B{Hny4yQIk|Ylbf>F*CFP<_> zn}h>Ev!@cxo=N~f)z%6S5r{Mb0K2^y4JR(91bNPt>uGFaj{b-19X%vT@`xy!WB@Rm z9e+A78g1IINN}RIrrvF|S%V+|x(={ZXW~zvUls)8lpq)=k@%H9f+Sf&@pxp9Z{~xH p8ASiFBgPmL&1T0uV`40`_#0LfJGYCS()$1a002ovPDHLkV1m6wUZ4N~ diff --git a/manual/src/main/resources/css/header-bg.png b/manual/src/main/resources/css/header-bg.png deleted file mode 100644 index 5ea72485df1f72820c86bb9819513b787bde0e04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmV-Z1FZasP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_0008!NklyG0f422JdPG=u*Ut-^1tC^-T`yZ;wUTi@`+yx%hu?qT1Gw?=7w3gD z6?}ex9)~yDRG=%?GimJu#Iue86ZG-j;CK&c`TCp=9RLRas#sTe&q4?2N)b4LUjJ{UvGR@z9dJB@6W7SVWer@g{E`TH3|+J*?2QHYj<%oeHL1(?3Yvb-n-860BEVT?+yK<9%rE=bS0k~#6vt(DPjQ2 zVt_v6yUgNcgUJ zftD@PQqvJ8uCoo=al}2K+r@RQ(@Xtx!;hW%Amv8jxx86uK{)W)GGtmH`#{SU@%hkl zk=bnM@GUbwVe1+4MiK7;eY1hkhsPTa--Dw0P*1CElRL zkWAy^Cdhx5Th(rd#If z3f&0N54v%pe$efWvt@h#6c5xa-=Ypd(AX)3_X>MmBD&ymup(yQjQ~5_<*WxzG=9%%g2hJ37?1 zveRewXNw?*y?DU0Xk~Cs_*2jedS$$++=u5ky?}g#W`13 d=-tk_{sF8oDMZtL1cm?r002ovPDHLkV1k{Bmizz! diff --git a/manual/src/main/resources/css/logo.gif b/manual/src/main/resources/css/logo.gif deleted file mode 100644 index c8897228c777a4b0927ea6e9325136979b6eb03e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4611 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 diff --git a/manual/src/main/resources/css/neo.css b/manual/src/main/resources/css/neo.css deleted file mode 100644 index 73569ad3ddca6..0000000000000 --- a/manual/src/main/resources/css/neo.css +++ /dev/null @@ -1,560 +0,0 @@ -div.section, div.chapter, div.part, div.book, div.titlepage -{ - max-width: 50em; -} - -span.remark { - background: yellow; -} -td p { - margin: 0.125em 0; -} -#disqus_thread { - max-width: 46em; - margin-top: 2em; -} -body #toolbar_item command_help { - /* display: none !important; */ -} -.syntaxhighlighter a, -.syntaxhighlighter div, -.syntaxhighlighter code, -.syntaxhighlighter table, -.syntaxhighlighter table td, -.syntaxhighlighter table tr, -.syntaxhighlighter table tbody, -.syntaxhighlighter table thead, -.syntaxhighlighter table caption, -.syntaxhighlighter textarea { - font-size: 14px !important; - font-family: Consolas, Monaco,"Bitstream Vera Sans Mono", monospace !important; - line-height: 18px !important; -} - -html -{ - background: url("header-bg.png") repeat-x; -} - -html body -{ - background: url("logo.gif") no-repeat 100% 24px; - margin: 0 5%; - position: absolute; - width: 90%; - padding-top: 14px; -} - -body, div.navheader th, div.navheader td, div.navfooter td, #sidebar -{ - font-family: "Lucida Bright", Cambria, serif; -} - -h1, h2, h3, h4, h5, h6, -div.toc p b, -div.toc p strong, -div.important th, div.info th, div.tip th, -div.warning th, div.note th, div.caution th, -p.legalnotice-title, -div.refnamediv p, -div.sidebar p.title, -th, -div.table-contents td p span.strong strong, -tr.question td b p, -div.abstract p.title b, -div.abstract p.title strong -{ - color: #15708E; - font-family: Candara, Myriad Pro, Myriad, "Lucida Sans","Trebuchet MS",sans-serif; -} - -body h4.title -{ - margin-bottom: 0; -} - -td p strong -{ - font-size: 1.067em; -} - -tr.question td b p, -tr.question td strong p -{ - font-size: 1em; - margin: 0.5em 0 0 0; -} - -tr.question td -{ - padding: 0; -} - -tr.answer td, tr.answer td p -{ - padding-top: 0; -} - -tr.answer td -{ - padding-left: 1em; -} - -body h2:first-child { - padding-bottom: 40px; -} - -div.navheader -{ - position: absolute; - right: 26px; - top: 112px; - width: 4em; - text-align: right; - z-index: 10; -} - -.left-column -{ - margin-right: 160px; -} - -#sidebar -{ - position: absolute; - right: 0; - top: 160px; - width: 180px; - text-align: right; - font-size: 0.9375em; - border-top: 1px solid #DDDDDD; - border-left: 1px solid #DDDDDD; -} - -#sidebar > div -{ - padding: 4px 12px 4px 4px; -} - -#sidebar > div p -{ - margin-bottom: 0.33em; -} - -#sidebar > div -{ - border-bottom: 1px solid #DDDDDD; -} - -div.navheader hr -{ - display: none; -} - -div.refentry body h2.title, div.refentry body h1.title, div.refentry div.refnamediv p, -body > div.section h1, body > div.section h2, -body > div.part h1, body > div.part h2, -body > div.chapter h1, body > div.chapter h2, -body > div.book h1, -body > div.preface h2, -body > div.appendix h2 -{ - color: #ffffff; - border-bottom: none; - margin-top: 2.2em; - margin-bottom: .7em; -} - -div.legalnotice -{ - padding-top: 3em; -} - -p.legalnotice-title b, -p.legalnotice-title strong -{ - color: #ffffff; - font-size: 1.5em; - font-style: normal; - font-weight: bold; -} - -p.legalnotice-title -{ - margin-bottom: 4em; -} - -body > div.book h1.title -{ - margin-top: 0; - padding-top: 0; - margin-bottom: 0; -} - -div.part h1.title -{ - margin-top: 1.5em; -} - -div.titlepage h3.corpauthor -{ - color: #ffffff; -} - -div.refnamediv -{ - padding-top: 24px; - margin-bottom: 24px; -} - -div.refsynopsisdiv h2, div.refsect1 h2 -{ - border-bottom: none; -} - -div.titlepage h3.corpauthor a.ulink, div.titlepage h3.corpauthor a.ulink:link, -div.titlepage h3.corpauthor a.ulink:visited, div.titlepage h3.corpauthor a.ulink:hover -div.titlepage h3.corpauthor a.ulink:focus, div.titlepage h3.corpauthor a.ulink:active -{ - color: #dddddd; - text-decoration: none; - font-style: normal; - padding-left: 0.6em; -} - -div.refnamediv h2 -{ - display: none; -} - -div.refnamediv p -{ - font-size: 1em; - font-weight: bold; - margin-top: 3em; - margin-bottom: 2em; - width: 60%; - line-height: 1.2; -} - -p, li, dt, div.navheader th, div.navheader td, div.navfooter td -{ - font-family: "Lucida Bright", Cambria, serif; - font-size: .9375em; -} - -p, ul, ol -{ - margin-top: 0; - margin-bottom: 1em; -} - -li p -{ - margin-bottom: 0.5em; -} - -div.toc p, div.list-of-figures p, div.list-of-tables p -{ - margin-top: 1.5em; -} - -div.list-of-figures p b, div.list-of-tables p b, div.sidebar p b -{ - font-style: normal; - font-weight: bold; -} - -div.toc -{ - margin-bottom: 1em; -} - -p.copyright -{ - margin-top: 20px; -} - -code.literal -{ - font-family: Consolas, Monaco, monospace; - font-size: .9375em; -} - -td code.literal -{ - font-size: .8em; -} - -li -{ - line-height: 1.3em; -} - -p -{ - line-height: 1.6em; - max-width: 45em; -} - -ul, ol -{ - max-width: 38em; -} - -div.sidebar -{ - max-width: 30em; - padding: 0.67em 1em; - background: #c1d5d9 url("content-bg.png") repeat-x; -} - -div.sidebar p.title -{ - margin: 0; -} -div.sidebar ul -{ - margin-top: 0.3em; - margin-bottom: 0.3em; -} - -p b, div.figure p.title b, div.table p.title b, -p strong, div.figure p.title strong, div.table p.title strong -{ - font-style: italic; - font-weight: normal; -} - -div.important td p, div.info td p, div.tip td p, -div.warning td p, div.note td p, div.caution td p -{ - max-width: 43.5em; -} - -div.important, div.info, div.tip, -div.warning, div.note, div.caution -{ - margin-top: 1em; -} - -div.table td, div.informaltable td -{ - max-width: 35em; -} - -div.table table, div.informaltable -{ - border-collapse: collapse; -} - -td, th -{ - padding: 3px 4px 1px 4px; -} - -div.table table, div.informaltable table, -div.table table th, div.informaltable table th, -div.table table td, div.informaltable table td, -div.table table tr, div.informaltable table tr, -div.table table tbody, div.informaltable table tbody, -div.table table thead, div.informaltable table thead, -div.table table tfoot, div.informaltable table tfoot -{ - border: 1px solid #666666; -} - -div.table table thead, div.informaltable table thead -{ - border-bottom-width: 2px -} - -div.table table tfoot, div.informaltable table tfoot -{ - border-top-width: 2px; -} - -div.table table, div.informaltable table -{ - background: #d7e3e6 url("table-bg.png"); -} - -div.queryresult table tbody td p code.literal -{ - color: #000000; -} - -div.queryresult table thead tr, -div.queryresult table tfoot tr -{ - background: #cad9dc; -} - -div.queryresult table tbody -{ - background: #d1dee1; -} - -div.queryresult table tbody tr.evenresult -{ - background: #dfe8eb; -} - -div.queryresult table thead th, -div.configsetting table thead th -{ - font-size: 0.9375em; -} - -div.queryresult table tfoot th -{ - font-size: 0.8125em; - font-weight: normal; -} - -div.queryresult table tbody td.emptyresult p code.literal -{ - color: #666666; -} - -div.table table th, div.informaltable table th, -div.table-contents td p span.strong strong -{ - color: #333333; -} - -div.informaltable span.strong strong -{ - font-weight: normal; - font-style: italic; -} - -div.informalfigure a img, div.figure a img -{ - border: none; -} - -/* additional styles for slides */ - -div.slide h1 -{ - margin-top: 40px; - margin-bottom: 1em; - color: white; - border-bottom: none; -} - -div.slide p, div.slide li -{ - font-size: 1.25em; -} - -/* Breadcrumbs */ - -.breadcrumbs { - border-bottom: 1px solid #DDDDDD; - color: #333333; - font-size: 15px; - padding: 5px 0; - position: absolute; - top: 114px; - width:100%; -} - -.partintro, .refsynopsisdiv { - padding-top: 1.5em; -} - -/* Quickstart list on titlepage. */ - -a.xref em -{ - font-style: normal; -} - -div.abstract p -{ - line-height: 0; - margin-bottom: 0; -} - -div.abstract p.title -{ - line-height: inherit; - margin-bottom: 0.25em; -} - -div.abstract ul.itemizedlist -{ - list-style-type: none; - margin-bottom: 0; -} - -div.abstract ul.itemizedlist li.listitem, -div.abstract ul.itemizedlist li.listitem p -{ - margin: 0; -} - -div.abstract ul.itemizedlist li.listitem p -{ - line-height: inherit; -} - -div.abstract ul.itemizedlist li.listitem p a i -{ - font-style: normal; -} - -div.titlepage hr -{ - margin: 0; -} - -p.configsetting-key -{ - margin-bottom: 0; - font-weight: bold; -} -p.configsetting-desc -{ - font-weight: normal; - font-size: 1em; - margin-bottom: 0; -} - -div.configsetting table tbody td -{ - font-size: .9375em; -} - -div.configsetting table tbody td p code -{ - font-size: 1em; -} - -div.configsetting table tfoot th -{ - font-size: .9375em; - font-weight: normal; -} - -p.cypherconsole -{ - display: none; -} - -button.cypherconsole img -{ - vertical-align: bottom; - padding-right: .5em; -} - -iframe.console -{ - width: 80em; - max-width: 95%; - height: 23em; - display: block; -} - diff --git a/manual/src/main/resources/css/shCore.css b/manual/src/main/resources/css/shCore.css deleted file mode 100644 index 34f6864a155b1..0000000000000 --- a/manual/src/main/resources/css/shCore.css +++ /dev/null @@ -1,226 +0,0 @@ -/** - * SyntaxHighlighter - * http://alexgorbatchev.com/SyntaxHighlighter - * - * SyntaxHighlighter is donationware. If you are using it, please donate. - * http://alexgorbatchev.com/SyntaxHighlighter/donate.html - * - * @version - * 3.0.83 (July 02 2010) - * - * @copyright - * Copyright (C) 2004-2010 Alex Gorbatchev. - * - * @license - * Dual licensed under the MIT and GPL licenses. - */ -.syntaxhighlighter a, -.syntaxhighlighter div, -.syntaxhighlighter code, -.syntaxhighlighter table, -.syntaxhighlighter table td, -.syntaxhighlighter table tr, -.syntaxhighlighter table tbody, -.syntaxhighlighter table thead, -.syntaxhighlighter table caption, -.syntaxhighlighter textarea { - -moz-border-radius: 0 0 0 0 !important; - -webkit-border-radius: 0 0 0 0 !important; - background: none !important; - border: 0 !important; - bottom: auto !important; - float: none !important; - height: auto !important; - left: auto !important; - line-height: 1.1em !important; - margin: 0 !important; - outline: 0 !important; - overflow: visible !important; - padding: 0 !important; - position: static !important; - right: auto !important; - text-align: left !important; - top: auto !important; - vertical-align: baseline !important; - width: auto !important; - box-sizing: content-box !important; - font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; - font-weight: normal !important; - font-style: normal !important; - font-size: 1em !important; - min-height: inherit !important; - min-height: auto !important; -} - -.syntaxhighlighter { - width: 100% !important; - margin: 1em 0 1em 0 !important; - position: relative !important; - overflow: auto !important; - font-size: 1em !important; -} -.syntaxhighlighter.source { - overflow: hidden !important; -} -.syntaxhighlighter .bold { - font-weight: bold !important; -} -.syntaxhighlighter .italic { - font-style: italic !important; -} -.syntaxhighlighter .line { - white-space: pre !important; -} -.syntaxhighlighter table { - width: 100% !important; -} -.syntaxhighlighter table caption { - text-align: left !important; - padding: .5em 0 0.5em 1em !important; -} -.syntaxhighlighter table td.code { - width: 100% !important; -} -.syntaxhighlighter table td.code .container { - position: relative !important; -} -.syntaxhighlighter table td.code .container textarea { - box-sizing: border-box !important; - position: absolute !important; - left: 0 !important; - top: 0 !important; - width: 100% !important; - height: 100% !important; - border: none !important; - background: white !important; - padding-left: 1em !important; - overflow: hidden !important; - white-space: pre !important; -} -.syntaxhighlighter table td.gutter .line { - text-align: right !important; - padding: 0 0.5em 0 1em !important; -} -.syntaxhighlighter table td.code .line { - padding: 0 1em !important; -} -.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line { - padding-left: 0em !important; -} -.syntaxhighlighter.show { - display: block !important; -} -.syntaxhighlighter.collapsed table { - display: none !important; -} -.syntaxhighlighter.collapsed .toolbar { - padding: 0.1em 0.8em 0em 0.8em !important; - font-size: 1em !important; - position: static !important; - width: auto !important; - height: auto !important; -} -.syntaxhighlighter.collapsed .toolbar span { - display: inline !important; - margin-right: 1em !important; -} -.syntaxhighlighter.collapsed .toolbar span a { - padding: 0 !important; - display: none !important; -} -.syntaxhighlighter.collapsed .toolbar span a.expandSource { - display: inline !important; -} -.syntaxhighlighter .toolbar { - position: absolute !important; - right: 1px !important; - top: 1px !important; - width: 11px !important; - height: 11px !important; - font-size: 10px !important; - z-index: 10 !important; -} -.syntaxhighlighter .toolbar span.title { - display: inline !important; -} -.syntaxhighlighter .toolbar a { - display: block !important; - text-align: center !important; - text-decoration: none !important; - padding-top: 1px !important; -} -.syntaxhighlighter .toolbar a.expandSource { - display: none !important; -} -.syntaxhighlighter.ie { - font-size: .9em !important; - padding: 1px 0 1px 0 !important; -} -.syntaxhighlighter.ie .toolbar { - line-height: 8px !important; -} -.syntaxhighlighter.ie .toolbar a { - padding-top: 0px !important; -} -.syntaxhighlighter.printing .line.alt1 .content, -.syntaxhighlighter.printing .line.alt2 .content, -.syntaxhighlighter.printing .line.highlighted .number, -.syntaxhighlighter.printing .line.highlighted.alt1 .content, -.syntaxhighlighter.printing .line.highlighted.alt2 .content { - background: none !important; -} -.syntaxhighlighter.printing .line .number { - color: #bbbbbb !important; -} -.syntaxhighlighter.printing .line .content { - color: black !important; -} -.syntaxhighlighter.printing .toolbar { - display: none !important; -} -.syntaxhighlighter.printing a { - text-decoration: none !important; -} -.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a { - color: black !important; -} -.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a { - color: #008200 !important; -} -.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a { - color: blue !important; -} -.syntaxhighlighter.printing .keyword { - color: #006699 !important; - font-weight: bold !important; -} -.syntaxhighlighter.printing .preprocessor { - color: gray !important; -} -.syntaxhighlighter.printing .variable { - color: #aa7700 !important; -} -.syntaxhighlighter.printing .value { - color: #009900 !important; -} -.syntaxhighlighter.printing .functions { - color: #ff1493 !important; -} -.syntaxhighlighter.printing .constants { - color: #0066cc !important; -} -.syntaxhighlighter.printing .script { - font-weight: bold !important; -} -.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a { - color: gray !important; -} -.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a { - color: #ff1493 !important; -} -.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a { - color: red !important; -} -.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a { - color: black !important; -} diff --git a/manual/src/main/resources/css/shCoreEclipse.css b/manual/src/main/resources/css/shCoreEclipse.css deleted file mode 100644 index a45de9fd8e34e..0000000000000 --- a/manual/src/main/resources/css/shCoreEclipse.css +++ /dev/null @@ -1,339 +0,0 @@ -/** - * SyntaxHighlighter - * http://alexgorbatchev.com/SyntaxHighlighter - * - * SyntaxHighlighter is donationware. If you are using it, please donate. - * http://alexgorbatchev.com/SyntaxHighlighter/donate.html - * - * @version - * 3.0.83 (July 02 2010) - * - * @copyright - * Copyright (C) 2004-2010 Alex Gorbatchev. - * - * @license - * Dual licensed under the MIT and GPL licenses. - */ -.syntaxhighlighter a, -.syntaxhighlighter div, -.syntaxhighlighter code, -.syntaxhighlighter table, -.syntaxhighlighter table td, -.syntaxhighlighter table tr, -.syntaxhighlighter table tbody, -.syntaxhighlighter table thead, -.syntaxhighlighter table caption, -.syntaxhighlighter textarea { - -moz-border-radius: 0 0 0 0 !important; - -webkit-border-radius: 0 0 0 0 !important; - background: none !important; - border: 0 !important; - bottom: auto !important; - float: none !important; - height: auto !important; - left: auto !important; - line-height: 1.1em !important; - margin: 0 !important; - outline: 0 !important; - overflow: visible !important; - padding: 0 !important; - position: static !important; - right: auto !important; - text-align: left !important; - top: auto !important; - vertical-align: baseline !important; - width: auto !important; - box-sizing: content-box !important; - font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; - font-weight: normal !important; - font-style: normal !important; - font-size: 1em !important; - min-height: inherit !important; - min-height: auto !important; -} - -.syntaxhighlighter { - width: 100% !important; - margin: 1em 0 1em 0 !important; - position: relative !important; - overflow: auto !important; - font-size: 1em !important; -} -.syntaxhighlighter.source { - overflow: hidden !important; -} -.syntaxhighlighter .bold { - font-weight: bold !important; -} -.syntaxhighlighter .italic { - font-style: italic !important; -} -.syntaxhighlighter .line { - white-space: pre !important; -} -.syntaxhighlighter table { - width: 100% !important; -} -.syntaxhighlighter table caption { - text-align: left !important; - padding: .5em 0 0.5em 1em !important; -} -.syntaxhighlighter table td.code { - width: 100% !important; -} -.syntaxhighlighter table td.code .container { - position: relative !important; -} -.syntaxhighlighter table td.code .container textarea { - box-sizing: border-box !important; - position: absolute !important; - left: 0 !important; - top: 0 !important; - width: 100% !important; - height: 100% !important; - border: none !important; - background: white !important; - padding-left: 1em !important; - overflow: hidden !important; - white-space: pre !important; -} -.syntaxhighlighter table td.gutter .line { - text-align: right !important; - padding: 0 0.5em 0 1em !important; -} -.syntaxhighlighter table td.code .line { - padding: 0 1em !important; -} -.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line { - padding-left: 0em !important; -} -.syntaxhighlighter.show { - display: block !important; -} -.syntaxhighlighter.collapsed table { - display: none !important; -} -.syntaxhighlighter.collapsed .toolbar { - padding: 0.1em 0.8em 0em 0.8em !important; - font-size: 1em !important; - position: static !important; - width: auto !important; - height: auto !important; -} -.syntaxhighlighter.collapsed .toolbar span { - display: inline !important; - margin-right: 1em !important; -} -.syntaxhighlighter.collapsed .toolbar span a { - padding: 0 !important; - display: none !important; -} -.syntaxhighlighter.collapsed .toolbar span a.expandSource { - display: inline !important; -} -.syntaxhighlighter .toolbar { - position: absolute !important; - right: 1px !important; - top: 1px !important; - width: 11px !important; - height: 11px !important; - font-size: 10px !important; - z-index: 10 !important; -} -.syntaxhighlighter .toolbar span.title { - display: inline !important; -} -.syntaxhighlighter .toolbar a { - display: block !important; - text-align: center !important; - text-decoration: none !important; - padding-top: 1px !important; -} -.syntaxhighlighter .toolbar a.expandSource { - display: none !important; -} -.syntaxhighlighter.ie { - font-size: .9em !important; - padding: 1px 0 1px 0 !important; -} -.syntaxhighlighter.ie .toolbar { - line-height: 8px !important; -} -.syntaxhighlighter.ie .toolbar a { - padding-top: 0px !important; -} -.syntaxhighlighter.printing .line.alt1 .content, -.syntaxhighlighter.printing .line.alt2 .content, -.syntaxhighlighter.printing .line.highlighted .number, -.syntaxhighlighter.printing .line.highlighted.alt1 .content, -.syntaxhighlighter.printing .line.highlighted.alt2 .content { - background: none !important; -} -.syntaxhighlighter.printing .line .number { - color: #bbbbbb !important; -} -.syntaxhighlighter.printing .line .content { - color: black !important; -} -.syntaxhighlighter.printing .toolbar { - display: none !important; -} -.syntaxhighlighter.printing a { - text-decoration: none !important; -} -.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a { - color: black !important; -} -.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a { - color: #008200 !important; -} -.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a { - color: blue !important; -} -.syntaxhighlighter.printing .keyword { - color: #006699 !important; - font-weight: bold !important; -} -.syntaxhighlighter.printing .preprocessor { - color: gray !important; -} -.syntaxhighlighter.printing .variable { - color: #aa7700 !important; -} -.syntaxhighlighter.printing .value { - color: #009900 !important; -} -.syntaxhighlighter.printing .functions { - color: #ff1493 !important; -} -.syntaxhighlighter.printing .constants { - color: #0066cc !important; -} -.syntaxhighlighter.printing .script { - font-weight: bold !important; -} -.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a { - color: gray !important; -} -.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a { - color: #ff1493 !important; -} -.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a { - color: red !important; -} -.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a { - color: black !important; -} - -.syntaxhighlighter { - background-color: white !important; -} -.syntaxhighlighter .line.alt1 { - background-color: white !important; -} -.syntaxhighlighter .line.alt2 { - background-color: white !important; -} -.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 { - background-color: #c3defe !important; -} -.syntaxhighlighter .line.highlighted.number { - color: white !important; -} -.syntaxhighlighter table caption { - color: black !important; -} -.syntaxhighlighter .gutter { - color: #787878 !important; -} -.syntaxhighlighter .gutter .line { - border-right: 3px solid #d4d0c8 !important; -} -.syntaxhighlighter .gutter .line.highlighted { - background-color: #d4d0c8 !important; - color: white !important; -} -.syntaxhighlighter.printing .line .content { - border: none !important; -} -.syntaxhighlighter.collapsed { - overflow: visible !important; -} -.syntaxhighlighter.collapsed .toolbar { - color: #3f5fbf !important; - background: white !important; - border: 1px solid #d4d0c8 !important; -} -.syntaxhighlighter.collapsed .toolbar a { - color: #3f5fbf !important; -} -.syntaxhighlighter.collapsed .toolbar a:hover { - color: #aa7700 !important; -} -.syntaxhighlighter .toolbar { - color: #a0a0a0 !important; - background: #d4d0c8 !important; - border: none !important; -} -.syntaxhighlighter .toolbar a { - color: #a0a0a0 !important; -} -.syntaxhighlighter .toolbar a:hover { - color: red !important; -} -.syntaxhighlighter .plain, .syntaxhighlighter .plain a { - color: black !important; -} -.syntaxhighlighter .comments, .syntaxhighlighter .comments a { - color: #3f5fbf !important; -} -.syntaxhighlighter .string, .syntaxhighlighter .string a { - color: #2a00ff !important; -} -.syntaxhighlighter .keyword { - color: #7f0055 !important; -} -.syntaxhighlighter .preprocessor { - color: #646464 !important; -} -.syntaxhighlighter .variable { - color: #aa7700 !important; -} -.syntaxhighlighter .value { - color: #009900 !important; -} -.syntaxhighlighter .functions { - color: #ff1493 !important; -} -.syntaxhighlighter .constants { - color: #0066cc !important; -} -.syntaxhighlighter .script { - font-weight: bold !important; - color: #7f0055 !important; - background-color: none !important; -} -.syntaxhighlighter .color1, .syntaxhighlighter .color1 a { - color: gray !important; -} -.syntaxhighlighter .color2, .syntaxhighlighter .color2 a { - color: #ff1493 !important; -} -.syntaxhighlighter .color3, .syntaxhighlighter .color3 a { - color: red !important; -} - -.syntaxhighlighter .keyword { - font-weight: bold !important; -} -.syntaxhighlighter .xml .keyword { - color: #3f7f7f !important; - font-weight: normal !important; -} -.syntaxhighlighter .xml .color1, .syntaxhighlighter .xml .color1 a { - color: #7f007f !important; -} -.syntaxhighlighter .xml .string { - font-style: italic !important; - color: #2a00ff !important; -} diff --git a/manual/src/main/resources/css/shThemeEclipse.css b/manual/src/main/resources/css/shThemeEclipse.css deleted file mode 100644 index 77377d9533477..0000000000000 --- a/manual/src/main/resources/css/shThemeEclipse.css +++ /dev/null @@ -1,128 +0,0 @@ -/** - * SyntaxHighlighter - * http://alexgorbatchev.com/SyntaxHighlighter - * - * SyntaxHighlighter is donationware. If you are using it, please donate. - * http://alexgorbatchev.com/SyntaxHighlighter/donate.html - * - * @version - * 3.0.83 (July 02 2010) - * - * @copyright - * Copyright (C) 2004-2010 Alex Gorbatchev. - * - * @license - * Dual licensed under the MIT and GPL licenses. - */ -.syntaxhighlighter { - background-color: white !important; -} -.syntaxhighlighter .line.alt1 { - background-color: white !important; -} -.syntaxhighlighter .line.alt2 { - background-color: white !important; -} -.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 { - background-color: #c3defe !important; -} -.syntaxhighlighter .line.highlighted.number { - color: white !important; -} -.syntaxhighlighter table caption { - color: black !important; -} -.syntaxhighlighter .gutter { - color: #787878 !important; -} -.syntaxhighlighter .gutter .line { - border-right: 3px solid #d4d0c8 !important; -} -.syntaxhighlighter .gutter .line.highlighted { - background-color: #d4d0c8 !important; - color: white !important; -} -.syntaxhighlighter.printing .line .content { - border: none !important; -} -.syntaxhighlighter.collapsed { - overflow: visible !important; -} -.syntaxhighlighter.collapsed .toolbar { - color: #3f5fbf !important; - background: white !important; - border: 1px solid #d4d0c8 !important; -} -.syntaxhighlighter.collapsed .toolbar a { - color: #3f5fbf !important; -} -.syntaxhighlighter.collapsed .toolbar a:hover { - color: #aa7700 !important; -} -.syntaxhighlighter .toolbar { - color: #a0a0a0 !important; - background: #d4d0c8 !important; - border: none !important; -} -.syntaxhighlighter .toolbar a { - color: #a0a0a0 !important; -} -.syntaxhighlighter .toolbar a:hover { - color: red !important; -} -.syntaxhighlighter .plain, .syntaxhighlighter .plain a { - color: black !important; -} -.syntaxhighlighter .comments, .syntaxhighlighter .comments a { - color: #3f5fbf !important; -} -.syntaxhighlighter .string, .syntaxhighlighter .string a { - color: #2a00ff !important; -} -.syntaxhighlighter .keyword { - color: #7f0055 !important; -} -.syntaxhighlighter .preprocessor { - color: #646464 !important; -} -.syntaxhighlighter .variable { - color: #aa7700 !important; -} -.syntaxhighlighter .value { - color: #009900 !important; -} -.syntaxhighlighter .functions { - color: #ff1493 !important; -} -.syntaxhighlighter .constants { - color: #0066cc !important; -} -.syntaxhighlighter .script { - font-weight: bold !important; - color: #7f0055 !important; - background-color: none !important; -} -.syntaxhighlighter .color1, .syntaxhighlighter .color1 a { - color: gray !important; -} -.syntaxhighlighter .color2, .syntaxhighlighter .color2 a { - color: #ff1493 !important; -} -.syntaxhighlighter .color3, .syntaxhighlighter .color3 a { - color: red !important; -} - -.syntaxhighlighter .keyword { - font-weight: bold !important; -} -.syntaxhighlighter .xml .keyword { - color: #3f7f7f !important; - font-weight: normal !important; -} -.syntaxhighlighter .xml .color1, .syntaxhighlighter .xml .color1 a { - color: #7f007f !important; -} -.syntaxhighlighter .xml .string { - font-style: italic !important; - color: #2a00ff !important; -} diff --git a/manual/src/main/resources/css/table-bg.png b/manual/src/main/resources/css/table-bg.png deleted file mode 100644 index 24877cb68324d217f5aeddef41647ebb57a9dcfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6613 zcmV;`87k(9P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_000?iNklc1%ZUnIU|G&&z@(Ih%g9xwzf|?m0Np@pbxopcCi3g6xK|ufGKmQ956$QkGr)62jQMH#_6 z4~NROCqfVHcJ_2l1(N6+d5x|4)czCw-zO5gHe%Mb``vD{zBhB*kK#!*-P+bpV zd2uP$2l*i?5I|!C`Fbl*=)o5>KhV_(Wax zI|-Ef601tjH=rBsaXpK?_#T}W-uL~nPlWQL;!_EXU>~dFH?DuAPU=Ipkt^x_iabuU zjNQiC&`uOuRSAKeu#?TkmRO_5tpRr-4cyWOSff=%9w8CA?=~+DREs(}OxroF0*qi& zWPzQr6dE;xH%N+@Kn2A6w9qj!o&_3ws)Ygc-UB<*C>}^kWt+Bdlqwo1Ip4;c;AF-d z$fV~07^;P&w9)w;62z_*e3Sh%b`lQ9%}^5PXxHeTe$_=Sr!=g|RN-_UBdxj|&_zlG zONEvw=sSVl1i|Yxow&789W3$`1@s~VSB5VYQFpSHb^j85D!bCd8tF;#@s7vFDer!T z*t)R)ONib8j~~%dOkxntlK)-ftF9rhuL`n`il2(34tnRs#+WJI2n{UtINc5hxN%lT z<}cVrti&9&ksFjeS;DPIY-DX!ggu)+VJUrqrRKfY2}>ObUe5RVJwJn`%51L=A=hi2 zP_7)vRCK*Ft+!w$UAs=Z+|hV~@XZbJ&?6DQV9zJ;acy23k)t1~HF2=d@=AZZFABT( z>#Xc;nKm<0rCqDe=zS$qtZKrON&Wv-|?MPH{l?RA6*}K@SayJ^~%wG)}}v! zrSvyNU#sL)-gC|i;_@98*%jRKhgzTTh>Sm(9mb$hm8s>p~UDGw#1X85J#<05lxjH9qA*fp`I)4GZJ>jFMq5NCbU7YelEnrB zbEGOVu=}3?P1n;h=$hdu#+uPO#MdCL>emM;xgjEol~801)ph#%2G)ak%6@&^L6*43 z{Lv}`>}uL@uR)9mm~seflr}$XH4rwh4OyQJ(KkkMAx+YxuXBWlOr;G=K_DnG5`?3W z60n>pCPKQG3^}{Qr>H@%njYwn*?3gS4RQW<4HlxI)S;~b|_MUzhAtySb zjbXM0=J0&|Z!mGM$5`pFN$Nn?dfg&^zHAC)RV)UO#brTt%TigYB`CwMD@iA}q)F%~ z<5LtCeEL17J)uM>kOPPBIAULVC0X*$;YQu~v<&@M(cs7H4DOe&p-np$J{2`>_V3jF~~BSPD-f zIH+On#>Qbj9=1&Ma3I1hAH>7%QCiaXyz}efCZc27r;Bbc)C8;Q(62eB>=U@jWG;_! zkSiMl8xtTiL3hk1teA-lu4Kw=PVIx*c1mzdkc811>A|fD^jhEsxkzrM?36_bZ(vO` zF#`(Q9?;D4wWK#AZAiWD*Wd;R8_aV9E$Q_!DRmTmKd)o#QMS$MOHv9*i~V@Lh`OZ_ z>P9thZ$||(87F=X-4&8Q&~g@vNW72D;?qiA^kDP1bx=~#1!NFTh5&4CDygrj3uKio z;dkiBWX22t3)JU!fp5??NFG{2$%g7eUQ-+n+d*1^47;*cNPiEyG4lP%pE`>AF%HPQ za%vCBs)X;oXS?os?U{IG|6?D_!l!n~+Aw?^=?$NBO$6#PJ5pfbkoFk){0d~mQGESl zVbKHwj5iC`%x+rXyS7cHQaJXD&srfw5efEOjUn86cRP-PleCE%r7& z5b#F4nRIhB-zmwXV2--+L)U6ruA_1kMcA%nU1&LA zl^{6<3_Pxa3eMa*aW@+#x}z`=1BrxHOB|r4K$x&oR<*_U>H3qqo>N8ZKdngyU_o6& zMtgD#dBD>fo9jZdRv)sF(nv$2IzG}gruixzJgJj)Qo!orAGcW5BT|wBa;K<8xysqQ~)9fa>QjmqLjd!nC zHGvX-*}Z&incSFI`$h6~oc{w^)8Xr*vIF&) z*CwcO$m&8qrEH4+&~N8~h#9HoY+99b5>_Y5x(XTF@kTU`?(O`@!TJ4e`l0cu&27E( z!5Y!tGQof!4n!d#Y^P&+LxXz;^0Cs%opwVQCF6Dejb*hY3>AeKNN-Kmtu~K{1d^M< zZHI|Us97p9L>Bc7e7~2|`(XJQBae@=9*cj7&Y~+?Ro2d@E7qkeukh8tQ7*098-KKmxbH@I^M*NUI zo%s`i;xZPhza>yMoH=sI0`1A>B=!VjA{4bH-TC)dqiy*9{|HCvn;i8U8+C0!0z*V! zm(bcqxNVe_1%G#=7_X|$0ok&nHa`Cfn@)^iqLN}FIF;65;H$k^JLl(VW~eX^@pYYu+$%x z`gg`s|NFZyzp?xBFSGml8@rExyWNl6lCNTZ>}UV4NMz>|E2b&uBnjzq+B<}FWYA1) zs+Nz=J$4H?CJkw1%;&=_ub|`;VR-(J>W5(BNlmU;aKlzb3=FsXr|Bho%0o z)E}1m!%}}(>JLl3Pxt|Q{0LL>?Nd(aMwhBvn9~om+@(tCOqA%#F;%4#-PH2&u0n9j zP5?K$@uOPf{@m<%QMxUO?zMVLxq_S4_gqy(!Mdi$L0c|cy_d!eTd+}hO z0cR_>MXUT~l!~ldFV3!;B^_fn-O7^h%8da>J=ETvP1z1!tb&PeT(1W&gb!ZGUeSv6 zd#ZFbPs8i1gTRNa{de;rbD<(dk5HfM+e^r3589J{Hfi?o~{A1#;b|iKhIprXwh=F`xR%N6PZCMoZnl zkXsVO(QvHu(Z0J}AXHVOvfy$e$Z{G)RZG>>Js5HLTUHH3$@}S>XQ!?p-MM^6Ag4}P zRy$mpyspC^2dXBnk2Tc%c>~pjtCHI^v#hx`7$Xj6o9qJnvZ5{hjV8I?oKZ0qHH-2j zRdJe@Bh0bWsh*6c1DGbcq>j*mVJ{JtjxeigKAkO+y23_xK<>L~Lg)PKt}WNOjDiX3 zaZz=%!M1bfeCEfto{uamwa1@ZzsS;&F$#h(U82})3`vt>esLe;i9 zeOFWvxQ7?I9aP}!c2-cEJY8iZ>ZYk;7Old$eM9QRDsn{6EQc4o9Eav!Lq9ex?WHmM zPA*^30$UT6mkoP$FJ)*Xq@!>Re{giQVq}&lP%cj-?%3K&>|7>Gq^+}}3;QeYy719u zTeT-{wX<(_9xf~^+X1T&xk6d1F z0kFO7o`rnYc)8nN2*p=B0UsLBBpwGnkk^{a7la_LP`$fOX^)!PZv;Njr0_6Fpu3(> zp*BXF3+ZIVLDI4MdR=OXNYYdOKX_JW)rMi5q4xuX!?rPqC#2M4`sXI`8IN+o@50$v zF7KU99F^Uy*^8{MsfGrw3!Mu6RZL%Of$S$(YRCdA5`1BYKw@9sG*aa^w{z;f-m*op zO25c-TC1!x{q7LY%yE}1RLyC-R}>mj5tS8~Sv($sZ&`wIdfRq8i-}*O?x^JQj^fip zYTM3zkLx-9Ymk7j*hmdQ;@44XOLH?{F1d3TtJGXuE;z>A2UQNM$LKPUVxbbA2`gm8 z6&##8pnU<*l)Rm!lsq*@#wPk=GZlS3l;k+*I;^U0K9uB?DWdR7Qm6?8 zU)_b2I0s9bx1$!_-E*2M_piWV=yX*vDv_yLY<-kQO18T}u2pAuX~@p|!@7tI*QBNZ zUi^34QB<9zyZcCYsn6J8i<`1Tp}pQO30KYt~sc4?%- z{N2??Y1_Z!p|ar1j!bfHRnW5OtKWGoIck}B|FPb&EOQ4`#44$iQi15=B6C}3HY!6L ziqTdbpD4COCE^q6Lq|rG2C}$Ilf=qJfOYjgNuc52hUX?L+=quvAmau~sSb1lz*296 zS#HnB;o#=G*XFk*Y&E-%Oe9}7S-}Nz+JJlnV_Jv}z`7q6LnCYX;0lnBH}87?B_QwOh>Gkd?w0dq+4eur{Ak05ql#7X@TK%`37-_njfLhLqFLX;d#$9 zv1tW6!=p*77yF))H@B24;|4__G06A2&bl~O0?Adx+-K_HI3)}V$;O*k92E6ZP^mHE z+HnvKYYi?TlaIM&1C^_`$L0n}^@S_uuVIsIKGhZG$Pe6u1-dn=Hd)b%R9(aJSIjghb_H&0{h=GwZd&8oM-*M#Q0X0USq(^`cL+BBfo48b3vC0j34 z-1f>jSWDPKKx@6sN}cS_t#bxky4^p`B|A4vV;#;Bu~A%`(Oj*#M=qwz>um^g#v`C-ORSRNTPPvaU=y({=sb>2yaWrLni} zGe|C^rd;vWP2toj{N0T@^8T0dQGc}qd#WQ#$(CK*Z(AlDx-i$BYZsq)8Rfon?c?m3 zKuIFl>h#imTlEZg$)9%k<@67&oxfiH^g-@k#~UF%N4+XijY|A4ic>sx6VIL@ycM)= z|u7~g+a;hh8uM0+gNOuuWY-fi6V z5+gkg^pT@V_lmYPq4pGzaIAVe!lIM5wDE^cW5651FV$JM2Rk_9w^uNBqHTY;r92+d z*E|pQ37~zrZR?}bX3f{@6;3uTCbVm~756TUK#o|dx-`>>k&((8&X)VwAIqpQsWUzJxTBzW*OsYQt8%`#G&n zvsvDpJ9$*u2}`MbuILUKkGYG;!NBbzj!$3Lap5Dk3_W9Xa`)RcD`eyzKx|$V4?yG{^tLE8J<^F!|VNH0wwvSeiTb_DE@7~6kZ2s^r;CodYYOY z+VTb^yUImh?FYpzpQ;m)dvJ4KSY%K=Vi$`fR;o8abfUU9N@} z_e^c%{>8`h=#bPeo|28T%J4K0mA!6f*a3x`HqS)oz&_bXk03)&Sn8lkDyZO8k$Rt{ zwM4O0id&dL#ulZ-ljP?#e0I*3>xoLZtDqj72q&&O&5AoUV)ZrOy^@>cZ~RhQYWbYa zRmrI(u~%xD9-ah>_v7oZQ|O}FS-2(=S9`zfUb%H*E&pez87}51R4X|&)LD4RFe}ro zrl{4{SjXew{DPFUv8$Yq42hFhV#ECJxQpL*e#r+W&pSwujo+WaQU!HecZ}v;EOlyI z_H!}57EI_4XixFJ4k@x!yCQ*_WA)^#sv-GKR#a}gQUg@d;WZ(Eucu{cddC{ydA6TQO_-Mvw~;#+hojl9VDr=PhyHfxaDz*!Z<_5AJ$OC?=ZHqBnyN+&GU zvT7A5EtYCL500A>E8{85@u6SpgkQh3QJW!A%=2%FzEf7sm;6#muVE*%t1}U6BgLcS z*FMzrb-z?YtBIq&6yuXKm3%A4ceMCERln{3OQ`dz5%a)B+}g46_is%<=^g(KzBAod TBzq)z00000NkvXXu0mjfBCz$l diff --git a/manual/src/main/resources/css/utilities-terminal.png b/manual/src/main/resources/css/utilities-terminal.png deleted file mode 100644 index c5b797a7dfe82a52fee3df9c7e19d49a4461ac02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmV;N0%QG&P)LL=FWNdBW7kS-|1Flt9VjZIBnic?*Db$yx>QG&VIP!QSJs zc<=BfKy0=M*Ov)53jjFhb^=6%sSh*s_1@*#$P<vkh+39&!fBd1N{T!K~miLpN5%0^7 zP?hbT6c8YA-0Z%^@Yn!vCnpHf3aBY5S34BA-9-fWI{S@FS1*DHD0nwMQ@+zW=FIu_ z^4U4Rs|JAcE~$}90nl-_txCE=rBeGS5Gby0{l5*X^50PdrIZG#Z$944!ootiUH7xb zBZrCN2&L5T0Mu|cH-BwxY&6)|C=!MtVYo&VMHp+a)?&9O(ORrEXrozKDQMtnAmZ=j zm%fwD&0jXgWVF_mQ8uOw*&b!BHAb7*SUV&l_x=LcqJkHgP4yiB0000C}X^4DKU-G|w_t}fLBA)Suv#nrW z!^h2QnY_`l!BOq-UXEX{m2up>JTQkX)2m zTvF+fTUlI^nXH#utd~++ke^qgmzgTe~DWM4ffP81J diff --git a/manual/src/main/resources/images/icons/callouts/10.png b/manual/src/main/resources/images/icons/callouts/10.png deleted file mode 100644 index 997bbc8246a316e040e0804174ba260e219d7d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^JRr;gBp8b2n5}^nQWtZ~+OvdJMW|Y+^UT?O-M{rKJsmzxdayJ{ zDCQA!%%@7Jj$q%-wf8e0_jRx8Dqi$}^?K=?6FriQFLv>>oc^CE+aVHhW3=nZ+fQ4!M=ZC7H>3sl|FJr3LwU zC3?yExf6FO?f@F61vV}-Juk7O6lk8Yg;}bFaZ-|HQc7Azopr01?u8M*si- diff --git a/manual/src/main/resources/images/icons/callouts/11.png b/manual/src/main/resources/images/icons/callouts/11.png deleted file mode 100644 index ce47dac3f52ac49017749a3fea53db57d006993c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1SD^YpWXnZI14-?iy0V%N{XE z)7O>#600DeuDZ?5tOl@ql94%{~0TwC?8m~C^ZqJRG}m@H-L1 z5L@scq?{XUcxG{OP9jig5ySQaTl#^*93bKF#G<^+ymW>G($Cs~V(bw8rA5i93}62@ zzlJGu&d<$F%`0K}c4pdspcorSSx9C{PAbEScbC)|7#JBmT^vIy=9KoYUDZ+`aP)jU z&ny=ErrK^#Gw!AcR}pdfMERuV^@&0$@(#^6b8c@rn^6RWX3pUb z4*6@PZ+H0#u=rjsXzS?6n6*sBGbHqGTU%mCsH?n#%j;eD^2}qe=iX*J@VQ3BRpz+u z{PX#N(^9X${`$90+;!pWs>o@z_n8G)7Uo7PJz`jrS+)QE@=PWHmc~UIw=WmUe73o7 z>^bR(M752aYoNg~ozu7U7&{(U>{s!;bn#f?ItjL^o`e{*EOQHqO;ccnz9hLK5@2cAyw@AaPFL~Cp#02|E|4xeQteNtB7waMs QVCXP-y85}Sb4q9e0GRUFb^rhX diff --git a/manual/src/main/resources/images/icons/callouts/12.png b/manual/src/main/resources/images/icons/callouts/12.png deleted file mode 100644 index 31daf4e2f25b6712499ee32de9c2e3b050b691ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1SD^YpWXnZI14-?iy0V%N{XE z)7O>#600De9$%>2LVd81Yeb1-X-P(Y5yQ%LXFPyHJS9LOm(=3qqRfJl%=|nCVNOM5 zpg0#u+&RCXvM4h>ql94%{~0TwC?8m~C^ZqJRG}m@H-L1 z5L@scq?{XUcxG{OP9jig5ySQaTl#^*93bKF#G<^+ymW>G($Cs~V(bw8rA5i93}62@ zzlJGu&d<$F%`0K}c4pdspcorSSx9C{PAbEScbC)|7#JBmT^vIy=Cn>wTzx1(qV@bS z0hYvspf(--lM>otrqbK$7p{3DzJ|+KN8%5ows)AI?zWk_n>jwEHXrTJecpEW_0xL= z?}N`*R`T~d2{AN${y8T#GEn4hUb&52^}Op@TW4{oc)A6)%$5=G}h# z?O{QLj@aRcAIf&y&OiUN=H2gq=_}V|pWfuReDV|{jwXw~>#w)I|9${XE z)7O>#600Dep5bGK9wD%hYeb1-X-P(Y5yQ%LXFPyHJS9LOm(=3qqRfJl%=|nCVNOM5 zpg0#u+&RCXvM4h>ql94%{~0TwC?8m~C^ZqJRG}m@H-L1 z5L@scq?{XUcxG{OP9jig5ySQaTl#^*93bKF#G<^+ymW>G($Cs~V(bw8rA5i93}62@ zzlJGu&d<$F%`0K}c4pdspcorSSx9C{PAbEScbC)|7#JBmT^vIy=Cn>w>~AWNX^a2R zbkveVY|45D7UnZ&JtjPwvdCCscZp0EA*0()#GOw)UH4-^&)y^E*4%UC)*|J}q_Ss;tN`nd8$>x9$_Xb^O2EpX&@C ZI46EzbLxq-voTO7gQu&X%Q~loCIF_C`w;*D diff --git a/manual/src/main/resources/images/icons/callouts/14.png b/manual/src/main/resources/images/icons/callouts/14.png deleted file mode 100644 index 64014b75fe2e84d45ed861974c72462727979360..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 411 zcmV;M0c8G(P)!ax*-PXaQ9e~6^e1gu=a6a&KSz}bR`+prYG9ayB$BDjWGfIE;t#wl!+ zR3S(jA%y#i_@eOOedXoc%RQe%L;wH~k+s%ZI~)!<=dD%?4MaplaU9QPGski2q3`>r z(}{j@0a$CLl+)={2vLWml*i-oa5#J}DW$gCZB~Z!(!M#)2St|1_V^0qpmCrBof=Y&NUas@LmfSw=)4B4f;8Fu)(eFsv24 zJzXxBrayquXcR?J{XE z)7O>#600De0j~t#c`vY#Yeb1-X-P(Y5yQ%LXFPyHJS9LOm(=3qqRfJl%=|nCVNOM5 zpg0#u+&RCXvM4h>ql94%{~0TwC?8m~C^ZqJRG}m@H-L1 z5L@scq?{XUcxG{OP9jig5ySQaTl#^*93bKF#G<^+ymW>G($Cs~V(bw8rA5i93}62@ zzlJGu&d<$F%`0K}c4pdspcorSSx9C{PAbEScbC)|7#JBmT^vIy=9Eq_Jl&Ka(%QdX zh{H8O%#_7)Tc@t$mM`p4(Ne7omR*~(>gd8_8AZH{=3ms$Fmzm^yL@_+(#aQQ5>7QW z>3g2fIsH(ugM)!V$x4Rr_+!J_XU%4xbz0aE;^N{m@42Z|@0S@TQ=WbP`TMV5Ok;<| z^Ihv+@6tQ{sciRF9dD7Nr=KobwJJ68zJK$<1Pd9rz%4O)*;}Jzj&~nTGMecz>B%lV zK|`fmIc8mp-h8iSXiGFW=C(L+XH4DRxZQX87^-dLuD>odo6YLT@Sw)dfBEIG)v2@6 zR)%mL7GRj1x-&v&+2q@A%a&h0`Lw7|#(w_!tgT!PoJ|+re`lxaY7e*=hH)_rZeB4|imU1$R#1`!P>&$poQl;nzm}mD5ZFopaX|GsS%q*{P~< z;WtmO%lhToBL0i}yfkaOt?EN=nkLNGuU`ywhI5H)L`iUdT1k0gQ7VIjhO(w-Zen_> zZ(@38a<+nro{^q~f~BRtfrY+-p+a&|W^qZSLvCepNoKNMYO!8QX+eHoiC%Jk?!;Y+ zJAlS%fsM;d&r2*R1)67JkeZlkYGj#gX_9E3W@4U_nw*@Ln38B@k(iuhnUeN2eF0kK0(Y1u|9Rc(19XFPiEBhjaDG}zd16s2gM)^$re|(qda7?? zdS-IAf{C7yo`r&?rM`iMzJZ}aa#3b+Nu@(>WpPPnvR-PjUP@^}eqM=Qa(?c_U5Yz^ z#%Y0#%S_KpEGY$=XJL?(l#*ybuErX#^g`ttQfwn3r>K)tuC)r#2`iJ>Prt42#Ndx#Uc~1)>aw z3jE@Q4|!9Z%lVv}- zc=48cF7H)t`(Ck`^+mtha~Np7bBSw2NpOBzNqJ&XDuaWDvZiNlVtT4?VtQtBwt|VC zk)DNurKP@sg}#BILUK`NaY>~^Ze?*vX0l#tv0h4PL4IC|UUGi!#9fLzfW~Qojmu2W zODrh`nrE42VU(7fm~5G9U~HM3l#*m_WNcxOXkuzEX4g z+-vfUhb0A>b04=Im{6XiQd1v%r%>h0$G8U7E1If8OQ!N~xOYY5h0NDT$p9(iZ?Q&e z18-(+l~J8O`)kc}e&uL$eW&>P-#`~Qm$*ih1m~xflqVLYGB{``YkKA;rl!p+yCFkc(+@-h!Xq*<< zxXkpt#FA2=d1VEBsYynrsitN|Y01eJ$;p;U#>wWX2KP5v&I9V=1L+C? fTFYQ)RAFeOZJ=$?lDoSWD8u0C>gTe~DWM4f^}upZ diff --git a/manual/src/main/resources/images/icons/callouts/6.png b/manual/src/main/resources/images/icons/callouts/6.png deleted file mode 100644 index 0ba694af6c07d947d219b45a629bd32c60a0f5fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^JRr;gBp8b2n5}^nQ*)Bra@SU# zmiz#bR~{$s2si{S(aY|Z}Vd7tb ouUmn-_&~Y>fYve?8dVq?X&Y!8wB+ut1u%w%U~xZhnMEEs6JbBSw2NpOBzNqJ&XDuaWDvZiNlVtT4?VtQtBwt|VC zk)DNurKP@sg}#BILUK`NaY>~^Ze?*vX0l#tv0h4PL4IC|UUGi!#9fLzfW~Qojmu2W zODrh`nrCEbVQgk$XkwI@Y+{_8nv`N>YGIaQkz#0QY@Te9lBQ<)awbq0A4pdK&{_sV bqY6VKZ3AtCmfYR7Kp6&4S3j3^P6u&S`V$cAh@R~F=4@V4jxkzlaQrcFYWK{)(`o5XZnut z=nE4SU2g1ZW%;@@I$>_e3F8a=8WK~|CVXt1DqisQxtIX|`YW_n&?Nh#1gQ}d)$LrYTw(_{nVG)tp2V+#}WG*e^KRLdkoLz7g? qn(IA84Qgo42`r6v<+Hvch>@C7(8A5T-G@yGywn*$#_oy diff --git a/manual/src/main/resources/images/icons/callouts/9.png b/manual/src/main/resources/images/icons/callouts/9.png deleted file mode 100644 index a0676d26cc2ff1de12c4ecdeefb44a0d71bc6bde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^JRr;gBp8b2n5}^nQNRqa;^5&H%t0&v*|C|wdb9$wI zR@+N9#RIowg@Uqn&z-__Tzhhz!sG|vTxA7?=O|Y?u(d4T{!RM9c7chr6d%1?R=i16 z?@Ic{f32YJFJnVhX)qGzOMplv!L->5yAlT#}irms+fsQd*FoSE84k zpF44v;trs3T43Wc)AJHbN`dAXo0u6Hr<$gkq?lM38ycjV7+5A5Sr{ayr5c%-n;95g pF*H#D>f!_G3IJNmU}#ifXryhRZP1dtyA~+J;OXk;vd$@?2>@J{cB%jX diff --git a/manual/src/main/resources/images/icons/example.png b/manual/src/main/resources/images/icons/example.png deleted file mode 100644 index 1199e864f8502a57c3b8def7c2e1d90c5f760a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2599 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 JPDHLkV1oa#`7Hnd diff --git a/manual/src/main/resources/images/icons/home.png b/manual/src/main/resources/images/icons/home.png deleted file mode 100644 index 37a5231bacc905886c9351a291e0d5eed68dd60e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1340 zcmV-C1;hG@P)3OI*>m>ZTpH8MCNbI~p>5o#SPG&Qk<#jef)uMh2myWbj}ZD7 zh{6HICtr#Pz6cdXyitu?V_PlNrfJekvdJcU$;sK>bIyzp+pD(v!N&~4H^1*P^UVnU zL&|T@DlmhfhcPA%1~4H;FDc!up7NjT-fyq?59og26)=+sN(hw!KzBAV$s#Z-bbO+0 zKK$PI{p5ea<+o?YLA-;dUd?9G#RmrRa;V>B_dp9zC0ty~GGEoKuB_;_Mi}Zi{9c)j zclVl4e)N4mzR9uv0UZJH9!~z)E?&yw^=Gmi*d>@4@kA_K z=jyr{j}o3-V{HCV*_*3WD*7()jY!|i=JU_LxW6FYc-rIPVT+Wq`0iYbXD16hw9Vto z(+x^nT?XiE9#ynCpukP^C)W^Sp?W4p2p6cm;e2qAE6!C*mA`D+8m?m6$vN`kJB?lLlz!jk{Kkx~e@^*cN|p5gPK8q6#f zXohK8WTmD)(G;bU1cni^G>{X7UClGM$&hse?PILVE-@f3Z$XCB@aCNmqRz+l; zi23CXm5XhfK?l!@u|>q<^%|XE{fj-~vyXwQ1yHF}%#QN0xlY6*S|=mh`z_%)09MHP;2puk~TFsPZ8lgSW+>A$aX+>Yo z#!(W-7XMOZ!D=Jo%v^(|mFCP~eEN7vR(=Lnecw-Rfh(1YIW(1CtC`W$jnGQ3G@{Yg zX6(3jEHa*rEhSQbF$uNxfV1(D!|PC*yC+v?X>F4_x{H0000UP)43u_u#=F)kQX1Ygwnpu`6aE^jq1L2a))HZDYl)~8a%noj)x2VIVnR(9Tvr9| zF-w;}>(<|#0D^@E<{i+7LF~d#Zt7VT<<&lit`(a0Mgv1O0dpT?rW9~_yj>p1dhw%! zGcVO$v0_NQ`RU_&-vJ<4qIh2Eu0%5V@+*BQxg}%M>=+0k@amcqBLM(Utucw(b7d7T z7Clz^JA z@qA5fK7&xx?9AOF+8|ioVsheq9myQr^A)yH=WQjC_GxilGJqS63n9E8zpE z&#DIgPc%D{9k1DZvIoXyKnMY{Au1HkqAQA?MXsPpx0^gjq+1~o0U_p14hWQ#pj}k0 znyW;)Qb_XspAW?4=y}K$=D-3Cq2~!5)J(J*2d)>YYGo**?EM3NI;)rb@k&FW;GL&o z>od2YhlgP2k8|gigtA)$9pJ`&1Xp2(-d8J?y;rNlNS_U z{2XG6kcb&#n<1h;rA)k$Mt$w3+0EX1R=u|`tQEFeVYI2qv6oCHrJ;AV&4({V7N4EE zP-pkA9w`e_*24U#qr90)G|U}J8I#jSHk)NjM&1~sd!^7pZ@SGS*$@!71L9Ud!VXx| zAs3zU_o&BrM+=z3Uwp?DKG$zfQLD@x>=Hlh2J#CQ2n|*Jyi^j8TpQ#0?o|nCTesYC zW5Q*4)CSUPde zPwCFH1=om86#ULoHLxRQAmULIQ%a-&twW|}Dhyq%s&k{I^6YH!U`zPdm-Em(;P?0U z-@QS$ZQCY+_#kg=2xQ`Qg|$vf(cwgmC_u>#Jr%0Fi8m4nbBET-!^eRfF#DeyWWfkP zxr_Y=^M2>aqDZGP?6fH32$XEpK~1X4c%!~{Gi6Lp10}!()a`rkUpdA_c;_CU5&!@I M07*qoM6N<$g4<+Y4gdfE diff --git a/manual/src/main/resources/images/icons/prev.png b/manual/src/main/resources/images/icons/prev.png deleted file mode 100644 index 3e8f12fe24c6e042bc7ef4badb15449f71529ace..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1348 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 ef#-Q^63Rc48$x8f$~3$H0000 b, > strong' ).eq(0).text() ) || 'Live Cypher Console'; - title = title.replace( /\.$/, '' ); - var database = context.find( 'span.database' ).eq(0).text(); - if ( !database ) return; - var command = context.find( 'span.command > strong' ).eq(0).text(); - if ( !command ) return; - var button = $( '' ); - var url = getUrl( database, command ); - var link = $( '' ); - link.click( function() - { - window.open( url, '_blank' ); - }); - button.click( function() - { - handleCypherClick( button, link, url, title ); - }); - button.insertAfter( this ); - link.insertAfter( button ); - }); - - $( RESOURCE_FILES ).each( function() - { - var target = URL_BASE + this; - // need header on server setup first - // $.get( target ); - }); - - function getUrl( database, command ) - { - var url = REQUEST_BASE; - url += "init=" + encodeURIComponent( database ); - url += "&query=" + encodeURIComponent( command ); - if ( window.neo4jVersion != undefined ) - { - url += "&version=" + encodeURIComponent( neo4jVersion ); - } - return url; - } - - function handleCypherClick( button, link, url, title ) - { - var iframe=$( "#console" ); - if ( iframe.length ) - { - iframe.remove(); - } - if ( button === currentButton ) - { - // hitting the same button again -- don't add a new console - currentButton = null; - return; - } - iframe = $( "