Opened 8 months ago

Closed 5 months ago

Last modified 5 months ago

#27571 closed enhancement (fixed)

py3: automorphism_group, canonical_label, canonical_form and doctest in MathonPseudocyclicStronglyRegularGraph

Reported by: dcoudert Owned by:
Priority: major Milestone: sage-8.9
Component: graph theory Keywords: py3, graph
Cc: tscrim, dimpase, ​stumpc5 Merged in:
Authors: David Coudert Reviewers: Dima Pasechnik
Report Upstream: N/A Work issues:
Branch: 2136e19 (Commits) Commit: 2136e19817814b9466acb712bd15daa1ca2ca83b
Dependencies: Stopgaps:

Description (last modified by dcoudert)

This ticket fix py3 failing doctest in graphs.MathonPseudocyclicStronglyRegularGraph:

Failed example:
    L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff)); L
Expected:
    [ 0  1 -1 -3 -2 -4  3  4  2]
    [-1  0  1 -4 -3 -2  2  3  4]
    [ 1 -1  0 -2 -4 -3  4  2  3]
    [ 3  4  2  0  1 -1 -3 -2 -4]
    [ 2  3  4 -1  0  1 -4 -3 -2]
    [ 4  2  3  1 -1  0 -2 -4 -3]
    [-3 -2 -4  3  4  2  0  1 -1]
    [-4 -3 -2  2  3  4 -1  0  1]
    [-2 -4 -3  4  2  3  1 -1  0]
Got:
    [ 0  1  4  2 -3 -1 -4 -2  3]
    [-1  0  3  4 -4  1 -2 -3  2]
    [-4 -3  0  1  2 -2  4  3 -1]
    [-2 -4 -1  0  4 -3  3  2  1]
    [ 3  4 -2 -4  0  2 -1  1 -3]
    [ 1 -1  2  3 -2  0 -3 -4  4]
    [ 4  2 -4 -3  1  3  0 -1 -2]
    [ 2  3 -3 -2 -1  4  1  0 -4]
    [-3 -2  1 -1  3 -4  2  4  0]

and

Failed example:
    G9.automorphism_group(algorithm="bliss").order() # optional - bliss
Expected:
    9
Got:
    3

in this ticket, we do

  • ensure that the ordering with 'sage' and 'bliss' is the same in automorphism_group and canonical_label/canonical_form
  • clean bliss to avoid for instance indexing a dictionary with a possibly not hashable key. The new solution is slower but safe.
  • specify the partition in the doctest of MathonPseudocyclicStronglyRegularGraph to make the doctest stable with py2 and py3
  • pass correct domain to PermutationGroup in bliss.pyx

Change History (61)

comment:1 Changed 8 months ago by dcoudert

  • Branch set to public/graphs/27571_automorphism_group
  • Commit set to 45630b83893e2242dd9585778d326c4ca33d7d90
  • Description modified (diff)
  • Status changed from new to needs_review

New commits:

45630b8trac #27571: fix a doctest in families.py

comment:2 Changed 8 months ago by dcoudert

  • Branch changed from public/graphs/27571_automorphism_group to public/graphs/27571_automorphism
  • Commit changed from 45630b83893e2242dd9585778d326c4ca33d7d90 to 88bde074188d451a70022cdaa6f592199e42d387

previous branch was not correct (direct modification of develop. oups..)


New commits:

88bde07trac #27571: fix a doctest in MathonPseudocyclicStronglyRegularGraph

comment:3 Changed 8 months ago by git

  • Commit changed from 88bde074188d451a70022cdaa6f592199e42d387 to cedcb226dee96aa3959eb134242b98cd4bb65120

Branch pushed to git repo; I updated commit sha1. New commits:

cedcb22trac #27571: clean bliss, canonical_form, and automorphism_group

comment:4 Changed 8 months ago by dcoudert

  • Description modified (diff)
  • Summary changed from py3: automorphism_group and doctest in MathonPseudocyclicStronglyRegularGraph to py3: automorphism_group, canonical_label, canonical_form and doctest in MathonPseudocyclicStronglyRegularGraph

comment:5 Changed 8 months ago by git

  • Commit changed from cedcb226dee96aa3959eb134242b98cd4bb65120 to 9006edba8dcff2c3642bbbc67d2cb8205ad0d531

Branch pushed to git repo; I updated commit sha1. New commits:

9006edbtrac #27571: remove not tested tag in petersen_family

comment:6 Changed 8 months ago by dcoudert

With py3 I regularly tag has not tested the doctest of pertersen_family. This is a bug reported in #26800...

comment:7 Changed 8 months ago by dcoudert

  • Cc tscrim dimpase added

comment:8 Changed 8 months ago by git

  • Commit changed from 9006edba8dcff2c3642bbbc67d2cb8205ad0d531 to 8fcd5842211b9a469d3a631cb7f28cdc1a944be1

Branch pushed to git repo; I updated commit sha1. New commits:

7598b52trac #27571: Merged with 8.8.beta0
8fcd584trac #27571: mark a doctest printing a dictionary py2 py3

comment:9 Changed 8 months ago by dcoudert

  • Description modified (diff)

comment:10 follow-up: Changed 7 months ago by dcoudert

  • Description modified (diff)

I tried to investigate further on the possible cause of the issues with automorphism_group and the Python3 failing doctests in src/sage/graphs/generators/families.py.

The good news is that we have the same result with 'bliss' and 'sage'

sage: G = graphs.PaleyGraph(9)
sage: a = G.automorphism_group(partition=[sorted(G)])
sage: it = (x for x in a.normal_subgroups() if x.order() == 9)
sage: subg = next(iter(it))
sage: r = [matrix(libgap.PermutationMat(libgap(z), 9).sage())
....:      for z in subg]
sage: ff = list(map(lambda y: (y[0]-1,y[1]-1),
....:          Permutation(map(lambda x: 1+r.index(x^-1), r)).cycle_tuples()[1:]))
sage: L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff)); L
[ 0  1 -1 -3 -2 -4  3  4  2]
[-1  0  1 -4 -3 -2  2  3  4]
[ 1 -1  0 -2 -4 -3  4  2  3]
[ 3  4  2  0  1 -1 -3 -2 -4]
[ 2  3  4 -1  0  1 -4 -3 -2]
[ 4  2  3  1 -1  0 -2 -4 -3]
[-3 -2 -4  3  4  2  0  1 -1]
[-4 -3 -2  2  3  4 -1  0  1]
[-2 -4 -3  4  2  3  1 -1  0]

sage: G.relabel()
sage: G3x3=graphs.MathonPseudocyclicStronglyRegularGraph(2,G=G,L=L)
sage: G3x3.is_strongly_regular(parameters=True)
(441, 220, 109, 110)
sage: G3x3.automorphism_group(algorithm="bliss").order() # optional - bliss
3  # <-- expect 27 in Python 2 
sage: G3x3.automorphism_group(algorithm="sage").order() # long time
3  # <-- expect 27 in Python 2 

The issue may come from PermutationGroup that is used in both case...

comment:11 Changed 6 months ago by git

  • Commit changed from 8fcd5842211b9a469d3a631cb7f28cdc1a944be1 to 15790aa56f4c445a53f708b02c9759e15441ddf4

Branch pushed to git repo; I updated commit sha1. New commits:

15790aatrac #27571: fix merge conflict with 8.8.beta5

comment:12 Changed 6 months ago by dcoudert

Any comment is more than welcome.

comment:13 Changed 6 months ago by dimpase

hmm, I don't understand, are you saying there is a discrepancy between Python 2 and Python 3 answers?

comment:14 Changed 6 months ago by dcoudert

Yes, the answer in py2 of sage: G3x3.automorphism_group(algorithm="sage").order() is different than in py3. have no clue whats going on.

Here, I try to align the behaviors with sage and bliss, and fix an issue in MathonPseudocyclicStronglyRegularGraph.

comment:15 Changed 6 months ago by dimpase

I presume that py2 is giving the correct answer, right?

comment:16 Changed 6 months ago by dcoudert

I don't know. We should ask experts in these graph and methods.

comment:17 follow-up: Changed 6 months ago by dimpase

why would you think there is graphs.PasechnikGraph(..) there? you are talking to one of them ;-)

$ git blame src/sage/graphs/generators/families.py
...
4c7cb931a9b (Dima Pasechnik    2015-11-07 17:41:10 +0000 3124) def MathonPseudocyclicStronglyRegularGraph(t, G=None, L=None):
...

you can take canonical forms of G3x3 in py2 and in py3, in py2 compute G3x3.canonical_label().automorphism_group() (of order 27) and check that it is also an automorphism group for G3x3 in py3. (you should also chech that the canonical labellings are the same, naturally)

I guess it's a bug in py3 implementation (or in bliss)

comment:18 in reply to: ↑ 17 ; follow-up: Changed 6 months ago by dcoudert

you can take canonical forms of G3x3 in py2 and in py3, in py2 compute G3x3.canonical_label().automorphism_group() (of order 27) and check that it is also an automorphism group for G3x3 in py3.

How can I do that ?

(you should also chech that the canonical labellings are the same, naturally)

Since we try to avoid sorting vertices, canonical labels in py2 and py3 have no reason to be the same. And, we use partition = [list(self)]

I guess it's a bug in py3 implementation (or in bliss)

I don't know. I'm having hard time trying to understand this code.

I'll be happy if we could at least finalize this ticket, and possibly let the other issue for another dedicated ticket.

comment:19 in reply to: ↑ 18 ; follow-up: Changed 6 months ago by dimpase

Replying to dcoudert:

you can take canonical forms of G3x3 in py2 and in py3, in py2 compute G3x3.canonical_label().automorphism_group() (of order 27) and check that it is also an automorphism group for G3x3 in py3.

How can I do that ?

G3x3.canonical_label().automorphism_group() gives the group by a list of generators, so apply each of them to the other graph...

(you should also chech that the canonical labellings are the same, naturally)

Since we try to avoid sorting vertices, canonical labels in py2 and py3 have no reason to be the same. And, we use partition = [list(self)]

well, this is manifestly not true - canonical means lexicographically minimal (or maximal) 0-1 adjacency matrix (converted into a vector). A non-lexicographically optimal "canonical" is not canonical...

comment:20 in reply to: ↑ 19 Changed 6 months ago by dcoudert

G3x3.canonical_label().automorphism_group() gives the group by a list of generators, so apply each of them to the other graph...

I really don't know how to do that. I have never studied or used these tools.

comment:21 Changed 6 months ago by dimpase

Well, applying a permutation p to a a graph g is just g.relabel(perm=p). E.g.

sage: g=graphs.PetersenGraph()
sage: aut=g.automorphism_group()
sage: amat=g.adjacency_matrix()
sage: g.relabel(perm=aut.gens()[0])
sage: amat==g.adjacency_matrix()  # as expected, as a.gens() are automorphims of g
True
age: p=PermutationGroupElement("(1,2,3,4,5,6,7,8,9,10)")
sage: g.relabel(perm=p)           # but p is not
sage: amat==g.adjacency_matrix()  # so the adjacency matrix gets changed
False
Last edited 6 months ago by dimpase (previous) (diff)

comment:22 Changed 6 months ago by dcoudert

I tried this with Python 2 with and without this patch and get the same error:

sage: g = graphs.PetersenGraph()
sage: h = g.canonical_label()
sage: aut = h.automorphism_group()
sage: aut
Permutation Group with generators [(3,6)(4,7)(5,9), (1,4)(2,6)(5,7)(8,9), (0,1)(3,4)(6,7)]
sage: list(aut.gens())
[(3,6)(4,7)(5,9), (1,4)(2,6)(5,7)(8,9), (0,1)(3,4)(6,7)]
sage: amat = h.adjacency_matrix()
sage: p = PermutationGroupElement("(3,6)(4,7)(5,9)")
sage: h.relabel(inplace=False, perm=p).adjacency_matrix() == amat
True
sage: p = PermutationGroupElement("(1,4)(2,6)(5,7)(8,9)")
sage: h.relabel(inplace=False, perm=p).adjacency_matrix() == amat
True
sage: p = PermutationGroupElement("(0,1)(3,4)(6,7)")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-d9b1c60b9f74> in <module>()
----> 1 p = PermutationGroupElement("(0,1)(3,4)(6,7)")

/Users/dcoudert/sage/local/lib/python2.7/site-packages/sage/groups/perm_gps/permgroup_element.pyx in sage.groups.perm_gps.permgroup_element.PermutationGroupElement.__init__ (build/cythonized/sage/groups/perm_gps/permgroup_element.c:5853)()
    502 
    503         degree = max([1] + [max(cycle+(1,)) for cycle in v])
--> 504         v = from_cycles(degree, v)
    505 
    506         self.__gap = 'PermList({})'.format(list(v)) # Make sure it is a list

/Users/dcoudert/sage/local/lib/python2.7/site-packages/sage/combinat/permutation.pyc in from_cycles(n, cycles, parent)
   7041     # Only positive elements
   7042     if int(flattened_and_sorted[0]) < 1:
-> 7043         raise ValueError("All elements should be strictly positive "
   7044                          "integers, and I just found a non-positive one.")
   7045 

ValueError: All elements should be strictly positive integers, and I just found a non-positive one.

comment:23 Changed 6 months ago by dimpase

probably there must be commas between cycles. check the docs on the function you get the error in.

e.g. [(1,2),(3,4)] should. away from the kbd now, in a train, sorry.

Last edited 6 months ago by dimpase (previous) (diff)

comment:24 Changed 6 months ago by dcoudert

The format of the input is ok. I tried PermutationGroupElement([(0,1), (3,4), (6,7)]) with same result (i.e., error).

As I said, this ticket fixes 1 doctest and aligns the behaviors of the implementations bliss and sage. I don't understand the problem with automorphisms, permutation groups, etc. and so I propose to let the resolution of thee issues to another ticket with experts in these questions.

comment:25 Changed 6 months ago by dimpase

  • Cc ​stumpc5 added

It is a bug in the constructor of PermutationGroupElement. The code assumes that 0 is not in the domain...

A workaround would be to relabel the graph vertices from 1, to n, not from 0 to n-1. OK, our flight is boarding, need to go :-)

comment:26 follow-up: Changed 6 months ago by dcoudert

Should we open a new ticket for the bug in PermutationGroupElement ?

comment:27 in reply to: ↑ 26 Changed 6 months ago by dimpase

Replying to dcoudert:

Should we open a new ticket for the bug in PermutationGroupElement ?

I just opened a ticket for this, see #27881

comment:28 Changed 6 months ago by dimpase

To test if automorphisms are OK, one can also convert permutations into matrices.

sage: G3x3=G3x3.canonical_label()
sage: a=G3x3.automorphism_group()
sage: pm=map(lambda t: t.matrix(), a.gens())
sage: am=G3x3.adjacency_matrix()
sage: map(lambda t: t*am==am*t, pm)
[True, True, True]

So one can output matrices in py2 and input in py3, and do the check. (assuming G3x3 is already in canonical label form in both)

comment:29 Changed 6 months ago by dcoudert

Running the example with py3 gives [False] with this patch

sage: G = graphs.PaleyGraph(9)
sage: a = G.automorphism_group(partition=[sorted(G)])
sage: it = (x for x in a.normal_subgroups() if x.order() == 9)
sage: subg = next(iter(it))
sage: r = [matrix(libgap.PermutationMat(libgap(z), 9).sage())
....:      for z in subg]
sage: ff = list(map(lambda y: (y[0]-1,y[1]-1),
....:          Permutation(map(lambda x: 1+r.index(x^-1), r)).cycle_tuples()[1:]))
sage: L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff)); L
[ 0  1 -1 -3 -2 -4  3  4  2]
[-1  0  1 -4 -3 -2  2  3  4]
[ 1 -1  0 -2 -4 -3  4  2  3]
[ 3  4  2  0  1 -1 -3 -2 -4]
[ 2  3  4 -1  0  1 -4 -3 -2]
[ 4  2  3  1 -1  0 -2 -4 -3]
[-3 -2 -4  3  4  2  0  1 -1]
[-4 -3 -2  2  3  4 -1  0  1]
[-2 -4 -3  4  2  3  1 -1  0]
sage: G.relabel()
sage: G3x3=graphs.MathonPseudocyclicStronglyRegularGraph(2,G=G,L=L)
sage: G3x3 = G3x3.canonical_label()
sage: a = G3x3.automorphism_group()
sage: pm = list(map(lambda t: t.matrix(), a.gens()))
sage: am = G3x3.adjacency_matrix()
sage: list(map(lambda t: t*am==am*t, pm))
[False]

and without this patch, we get

[False, False, False]

comment:30 Changed 6 months ago by dimpase

thus, it was broken before the patch, as [False, False, False] is obviously not correct (probably due to incorrect indexing of vertices), and even more broken after the patch, which appears to break either the construction of the graph, or the very computation of the automorphism group. :-(

To rule out that the construction gets broken, can you compare the adjacency matrices of the canonical label computed with py2, with the one computed with py3?

comment:31 Changed 6 months ago by dimpase

even quicker might be to compare G3x3.graph6_string() here is what I get with py2

'~?Ex?????GCH@aUBIGU?[oIi@aoXEpgIpSFOJs[DUY`LTa@}DZDuLYHyFkBHTrxhHf^IcV\\{YJiBxbLaJxWiwL{@rqEA@FeOoWDZWIHaErl\\tAI{vfUGFZl[{BqEEjtXZ@PViyKqEFi|_zAqpgwXyGqx`p`{BXSppOLtBDnOBDepPlq@PF[KE~?KBrWgpB?gJ\\OpSK?oKz`_wI@_BWul?c]\\`[FUoAY{sLPVk?dj[OGfYocTo\\O_nQocVPVH?^hORKpk[?~?w?~Fw?ExPT`^IQphieKULqxKFdpo[g^UQgnEfK_NjYDTxJKj?NVkHbyELJGF]Z@[}?{uKguHTowbJ\\PW\\_lMIPgrmBIl@XwqJ?f`Pe]fk|LIw\\Op[nIzejPwdWo\\fMjlJq[ETP^Wu@llEe@TKFu\\_JUqiWe`Wvql?ZlPebFgbuDYrl`u\\kKtHyBlcvPrrXDhI}CZklWyvX?nj[}gypWTxk]Bzf\\w\\iEhNeTkfZrnIjopP|KxwO@fWWkvVhVdgG_?zdCZjlTNJWS_?mXPbm\\XrjWRCLlesFiKthvrigPVZl@f`YZRzjJCBj\\hDjBs]VvYWEWf?p]vt]ujIW\\LDI`Pnlq~R]SgjDPMGo^l{vqyowZ?deLziMGVZMPjaLBJP]ypoT[yXeqc[`]B}]FAe]qpMcjWhaE`VxRL`cyZnR_RWL?|tcUpIxmvMSaYDGtx[Tgg}YnqfFlUyw@VZRb?mhmBhZ\\k{OLU|IoEZbWmEZ\\mi?]uYY_MxYbKBd]?auNf^Kj[izurCq}?XYMy}i]ps}\\mCkv?auFmvKytK}tm_z?`adZIzsrjwN[ZXLcAFA[ri}RrvA}UucjG_ic]Ru{Uy{RsutWJxbc[_~lmDBjxA~rOFtTWj@^U}EDuyC~]cEx[XbGv\\n@bM}?~ufA[\\YIQ|`u^eyo^y^PGgs|`hLUNhxnbD~exaCTdZBQjg|Vh{sZ{vpOCXvcu?pf\\lz@J]zRNtAb|Xk@P\\fZ|CTr|LVZca|Xl?o\\\\^^@RU~RRvYusaey}i@Yjo|]EE?upZkWhk|qoKrjF\\ggWD\\dtkKLmne?]ZS^X`a_MlYwlvH`sQVWVp][G@YvmJRF{RPrCjaf[lh_CknZ`qL|QW{SeYFtXxG@WnygQt?}DEM{\\NMHSiA[ajoiiQJoTPytTyiPM_eIJlBKsOvCMFtbNpqPK_tEZKW^|yfgXCYzO~kALoDIdsz^v{YtCXLf_~XCbWB`Mh|N|zehPPRmW^x?jSBIHl^BydMjBaizx}Bd_Y?Z\\`fT]wRwqjA|m^WiYD_Dupa{X}KVMSYejy}bFCW_YthFfAFxbgqm{z]q]gAAIg|\\ipALtTRdNZlmhjoCC`o}upi@Dx[YkNrj^MYk?_iK\\tmM?P}@}@~}MN~?w?w?wFF?w~zx~nbG]vlPKbEz@Iuc_iq]nN||PI|t]DHSVwIDsgbEqn]nvvCh|VUKHo^gadYIBbMnUfyGBFXUaOJV[[EhKdBtphLez@AMq]KOQfxX@yGhaluWZb^_`DU\\WgAs|LGjSPotrRRP~?PJXo\\eErYgg`UhdORLqTFyA@ZNAjgTud`_olhK_xXdiNqGDkmGz_\\ueEASm`sCk\\DyxTX{Ma^pLK^T]AkEkVnZ[hdqsqzFIVwJozrX_k`wfnuwxdYUU^PxH}DYTx\\geOjS}}tSuYU{kZ_G\\kvOz]]WKDjDxutNKIlh[r?IZmkbzNN@CZWNhmlj_XkxSy?hYzkFlllCOZgvdjqm_VPNF\\VR_Ld]^D\\ou?lQOnTViLWVM\\]sgBhtvbZSL_XccNe\\wZkBt[|Ue@Uumw\\ZDgBscE{p{jShlSAQr[\\~dLaA{sKdmW@lREtKJj_QTbk^|YWcFhhDNM_RQefjAi{PHKkt^xYY_fLKPrm?RouXzuHbb{mvUNdLT{AS\\qykAl^yW|}Aii|fm\\FfRD{aDTs{xAZNuZM^OVFMr|\\`yY[vOKMrfbGJZ}hjav[ZpVey?oluEo\\Eg]ZI~HC|gommkvEjuoEBMsMbWTauxR|GdySTZes}FjYoIBrWjDW]E]kN{aRyPRRsFkx}a\\ci{]yJAzSaic`LCbZjixDZi~abkK{y}RA^DCmDHJC_zxzN@j[^rDUXfT^IgNkIeIHceOT{~US]tZ^CmLRGzqVm?U{IkFeYJhGhic}bZyKwZYBue\\kAVeFC\\StMQTBgTy\\lrBp[iFr`}g@^QbOxec}QOaq`nzpcnLDM[DatkEQO^`aERaDVhi_nzwhNJSht@iLxAooVdGgdogVq\\AF~mFHtQ[mGpLrGX`Ey``C{DR]ALtyf[GcVfTHokMS^?YRWzRNDTEYg^fpmWKKtklI`hMF[AqYbwZfGxDVP]]xfObDVksbEKhTwEHmFhMtFDDzVB_]oX}AsxzUtZT_X[?}hdVO]K@YlIWVoP~Aht]dvYrGXS_]mI[qMi?UzdIHyGnpLJfsj\\pXDeOF]PptBf?Qz]{ldycqui^OSpc~@Pj]DKv@jTAFcH|[ZNpMTk[}ADhF{GpvSYEyKUwDM`B|RZMxJLbdx@T`VwcUtWYRkUVCD]?a`N]q[wllgoJ~H]W[KW`o`Txy`[nUpGN^qTqLjXSQ~pUsShWISILVj_]ivbWD|zGyWvYbAvye]ESL@R@PytkRrVLY[kyzf`e@lLO@jDyFbj{|Kp]]EJHFjIXltrjDgD]M?PsZo\\ZZfxEXtqaVHMZXW{{ziF_FYp?Uo^GxjnV[TFfiISd]NQVhdmRNiojTAGtdMovYvQs[rCEK}F}IdiX^cN]oMpaOLhikVyVeUMcsCimd}bDeZJsdyyHpoIDps\\B|J{JbouAFRe^cU^In`cQHcUZcDMlWFk|EfOtoIT}ylMHiy[|Dc_JIUtGXLy_^FwS{hiOTl{vXRBhrbuES_jG]pG[m]?zVWY{HxADvmzFGauj?f|afUAuma?tZtH@ezFGPn|dXa`E`meGe|kM\\ATxi?LuliAH~BaDl~TFP_Sp\\QsB]uh\\`BjhGDutsOPngy?u~yEwKQWYy~oTVrGVcChDQJXZgfbfDjUEGpUI]FnL]~AbvaIj_JOKqYqx_|S{YVacWXdDsnU\\j}G\\]ahiOJOsImUmAxqw]TiEHDcfe^SVS{ts[rPu_b}VNEnaWurQijWTAIjLg`}l[ls{TkW|_I|rj`zeSLnOxayKOXbZa`^bk[y]W{kNa@vh{wjyMDlhbMT`oGmNUOZkVzRhfYmI|UMFbtM]WDH]k?BfR[lbL_skTvrbRmswumLS\\XmVU_XJNC?NEZx[FiHd_r]{iZeroyukWxlq\\]?[djO?\\TNjSUwHqbAPmAI[~yyTOeGIuVpQd{MkYLk[{JQrALglO^CEbn}jPcEgGtruEH{pki\\YMmHStOlgiWJo_t\\}|hKA[CbhzSHvQmPizBr_kwkEsrApk\\JnA`kuXD\\]A\\jWDzuWbBssQ`MV]ikTmBkYrySBmigNZKFLu_NxnAINcokHRj|F`iYItQzrAIze_t\\gduu?vllCK\\r?kFHnky`w]chdbHMfVW_@duOzfcaAkf}IdqN~ga]RxmncHkiHVet[GAFTo]fggaLJ}gxS\\~q_]dvkzqWeVCbrVl@?QZhFqxP_MH~cxWi~}OJc}uzVv\\NnGcAreJTXrtWj@BA\\~cGPAayqLRtimHnuh|xHGTdUSzQuy`wGSRZ~@?aEKubW^iVaZnUtvsh@KeYs\\Rr]Eg_oL^|?_oWMwjD\\yYiZ}M@p}@oMN~Fwwww~~???w^_?^~~_?^_[Bb|R`VKVAb\\@gXiznukCuEEJswLwwh~yhNKbE_RbHsXoTl_kBhZ|}tAbSQH{tA|Sp^|cfhdFCJIc^C]GZUHGmenvZoapPafrCNfGf~yH[uPU@jjA@ZE`Zmpk?ZUluuwBlvLj_wyUKzfpeoL`UY{GDkIhlfUg?j]tuZWFmZhxbIxWNYv`u_UbE\\iAHYETYyto?\\rmZugFttqmafMSUlzaz?L`iIiRKot^o?]YZcTnq}SDFcgn{btHL@tDQm^BkIVBcYIzy?LJRyBmyvMCKy`F}q[chc[eYFjeMhXbJCo|mo@Yhn_unJyWSVaa^kjpGtBpDi]\\IqmOv[sV|rdXZcgQWKCgxsutVYF`@vyAYmxJx_e[P^bRN{{\\SncGPWgaclsZpvWX`BvkIM]hNd_f\\?~Ss^vYfg^Q_IgoSI]Yu[xkU_bzwPW~Czi_Zm]sZoQmmaV@LFCOYdFFV[PeZQ}Jy\\UFyIzqhh?jYliHE|QRoLKkABsaY]^AirLV`~QzB^BT|D\\?LerYoRiuhMCsROGjPdd\\wMXNR[ZlLsVkNZqEs@ouOMljl^zoKRnLW?ald~hRBt@Hbx~ASTw]RHal_v@Fliv^{ooNlkWAEtU~KKjd?drf|IDRe]GsWu`YOiu|lnzOgVrpgCBmd~`TRo`Ijj{pQFh\\PWbkVw?FF??F?{[^{B{[?B~b~_N~}M@pp}@poMMN~~|o_vkZjkeS?ynLl?QcbnGHUZV\\B@bRut[tjUitymGLjSzfXX?FM{]W@`PmyCbHtncSSK|nFpyNRi]qwGlZeZjMP?]NjN?OgjNoHEY|^?p`T|fMlRVbs}DwlYodYuRRy@iZOwcQtW]UFmjZw{a`sV|yHoWLKdrEv`G|[hdxCsmGwP`mgtJRtpnt]BAkZ}sqhCEiQyLugHrta[}@Kyo[DELwTqd|bZvM_pkF~ebaPDJCbk|UEJjYkIntmAp_ZgoJBqubxlblZ?Ls`bZFFsfce{|PPi|hPJ|]gbPDjDAgtLk]zS^EkAxgSMtbnAxsll]EB]ZJEZnL_uGZWKRAll`vZ`zFOL\\@`UtTxbjfe^pRENhPElY\\CJ[Be_sj{xV?sFCRRriotimniIbj\\Nos[NR_TuhuATiETOX\\}KmaWHoIjffHNFM]{HUU\\VwsTFYWPlyT_rWadcTZ]jKoeHSArtwrLWvfjEEcLl\\i}VjTeC?\\uk?b\\D?]]uvxly_`ZAe_Tig~Ugkc_v[vjxjlJOGEtZO@lWWD]ll|zXwGPsXKBSmLvgbIMDj\\jvTZX]@?Tmw_JZB?Yt|lzZYp?Yox_FhantHXD\\vkOqUuU[D|DRnU?THsn`FJQsDu^\\whbaWxTQTUctL|U`cljKeH}EMvL?JSivIFDhkQk|}uRB`TSxhBkQmQ|\\_kdmTd@|`qnp_RPKniBhRkDkn^ebPoVFEYS\\ClofPjliI{|JRgRDWrm?og\\WZN?nVWLxsT`avv@YXKIy|kJev`lYq{jCo\\BrgDBEtEVSRTlbUtbWWZ\\sEsTINNtWZljBjtUZWEbWUx_KWTwSyoi|YJfkFPOv{ouaLQ]^mn_sZnJCk[UbAKqaw{tS~TXDTFEJjdYaxca}g[FyFxnMpgf]kWUhJT@QhPwx]H~KkiWqhFfqVBNHB]TEF{FyvNghe^JPddQfAOmE[\\Tp^rJGVCwXxsUozX?~`TB{b}[|J[LOKv}ugqAtGEfJ]Y@cr^dMAFjlD]Pfg{dfU]VHMks{o{@\\^|UD_Lq?h{tm_`Kv}RCH[}qFcy[jhJfUh{SilM\\DWBm~mKKaLo@jixs`HS~sY_Xx{TMdTxMH\\uTriHcsm@LUDgXkzXEhJMav^uWyJHfSsttbRmb?rlGl`?L~alXM?Y{Aqcy|kDqebSnvZoxDfHyLYm`fv@`FscUp?U~HYpN?RtCi`j^X@mIicnvus]HXXUlFl`T{pPD{Hdg_P~iWdt{jTfemFh@{{?s~SUuLh_uKKCUXStdiRVtcIO|nGfUS^NWvJfXpZOfVODV{Hj[ZaRJAa@hrJXShT~SPgLu{AxhSxzMp\\mNE]@[{_K~dPujXCeYKCKYVFXgQ|vcBOlngFpobXyFrHVWi^MV`cyXKYBiHm~OwbEPfq{}SO|WOTkAQSeXdd{Jwc|dFNTfQP{qapEXa\\}iT@oejf\\[kI]Q_gx@`aJqsXzEyHtXMVpfeD[uGuAyIZmqf@Sdhs~MkAmY_`lAECiu[RcDyx?BJf[ny\\Ih\\@i}rH{DJwbFpKBR]bUCn|^uqlUFWdF?^ic@Cz\\J~MqJUoUfjiV`C}gL\\Q_KvkNDH~V|jeXg}EahCzpGAM]xZ}TqYTaK|vQ]HHv@Xq[@S~`UgNzvlsnPbs\\rfQVj[Ker@FIjPFtEX_hM?CdKu{\\zsF^PZsnHhZYtG^OTw|hI|iE\\hAFP\\cFmDiGsT?IQXZ[^NwI}gnlMRTukZ_n_MylYUjZDdiaBqZDBl`yGLP_GcZE}NZuG}rJ{NQXuwvGZcRmMM?NoMM@~?F?FwFFww~?~b_B_^~{^b{[?[N}?FwFF~~wCjG]ttUZIHRrJFcl`dAkywkZW^Sp[aG~zhKkcQFVZ_~KVcpXQ}fbkXoMTuW\\FXGwFJrbOzPusbwDD}~HhPK_s~Sb|G{fhcXy]\\dcohtqgxRXaWbNNFAlbvOrgCr}{ejHC`[|qF{KyVbvv|cX[bgY{fCJq{`PDazciNZcDES}}XOG`qu^WV]QJKGyQ||zXa\\Khc{f_rM[iQ@c~EgYzsHCfNmZAB@iuVsRxoigo[\\NnnZC[wedfQwQlNPPOqfiojT}@EFJnhdAGVJXv@|hcsQFJeejqtH`]Jee{M^UWoXK[q[]Jiqt~HAiSMSOxwxJg_^ZD{_akp^U`JBwtTNhN]MaaiIeeptM[ezyWFD`QohVTPv@A}wZcgLbXnISiLouXnKlxmBEaMRebc}KzZmCWdbJ?i][Tr@E}g^QG\\vxbceO{epJdO}xI_{Qi[?PPZJYPRLkve}}Brjf[f^hXMH`Q}yikeOldgijC]|Og\\Oww_CTIqySQ|[lxm}`{]]tFzmYQhPCn]VERWKrkKp[F^a`FHbdO?oduTgpUyp|Nzc]iz]I|}TQ[cCcJsstwPlI?s]r}xIRR}YCubpU{MPK`uhWA|]hYI^KqXhGTxTovdLNSDYW@fUvnpQSzvOIuMRfpSXSLlHOLx{JWr]DqjH?zQ{_}\\LMSFR_DTZvnSHsn\\GJ[\\PzbDFOTkd_Nfql_tyTMbcC\\rSfwYP`BkCaXrH]ITfk@||a~wRt@|QqLcUUKfnLvmYKqGZQeObuyU_WSl@aeVHUqDfxA\\~I^yDv@^BalWEUjDvL}]whSgZCiS`|]WsIAepBDRkeYKqzGVvXN|_~CZdLExBJFI\\s~Z\\cJcDk`go^`P|{VWFHZruoofaarbDeRJwezBGqvD`ywF{LLEphmrRQn@cZaBFnirGhMvXla_{dExWXUUMweuJGfjKI{onoYYmRJTwwd{I_}KKM}x[`ce}llBAy`bhgXXq]iYsKgxlSYma^`RRiRb\\kkewYA{[|AFtl}CXTaX\\YMxcghFnzqkcL@HHA[vQlRshxPwM~aBdNhMKurQDxZ~@`XiXZWh|DWXBz~Q|GL?XB?^FQyTu`xW{Q~iBFRw[ZFjR@nJ^pClHLd\\cnaJB_z~lYhAcOeCJjLZO~AmkNA^xGiY{qjJ[uqFF`tadU^s\\c_zRgPoOEezjQUNr}obUmFbSjPFUwJlQNUKvkTu_ptFJSMr\\ilDBsxaPa?NK~Ecr]^{SFlamMHuC]N`Twp\\bW~OlY`TUNJBFT|MpPFsm@T@?lM{sfJ\\^lOTmi[VGuGxnCu[KxjJ^?bUIFi|Pnuxi_minPEjD_sPZmLglS`t\\on_}d?zbpCsUegBKUm}QtED]jW^}mMCYyZp@m`cKpJylhJF@U^alpMsGrZU@TPew@YFi}TF_pi|[J~\\UIBZJx_moqDPD~EsjFGZRtQ{JwSJijOJHiZ?NBNZgeAUi|iEN|TufdqWpyD_VYzjyG|Sx@NqiD?rRBfmh{crlvMT?WAyoahtZoo~mYs|LqajcWa]rnMtDrdQBmfAaGZPTrtrgitl}Rg?oEtOhg|YpP}uZYxtMBf_Y@}N[}crppoQ{wiOHNDFZ]VIJutyhcA_Yc]euece?\\RXnCr`hkwMU`_b{ovmfqJme\\`Ki]hA\\hXevVzjna@CQVMlLHM?d[tN`UeLL[QqiCP~CfzdsRzc^_YhV`KXxTInr}x|o_SChx\\hhHOC{mewJqUeNAXXQC^gr^M[i^MJsROxqcdre`\\x~s}{CQ?cvViyMl[MEYAjEH\\erEBElkNzBMaKb@rKLvDYvtnLb`KFSU{ciDGumrtoxjWwioPsLRKlwSWLn`myJ[BSIIZ`Zib]vL}LXIC[g|tHCaXjfY{pw|PpeGMokTqlgWgmua}kNKJOKXMbXmLj^MyphaO{JNpGeQJn]klLAF]L{`@gVIfheLdLClGXzChEhhPNrjh{YyvG_RSYUp[}IS^vvbJRSEvD|D@WFqFyDhfPalAJiwgThRBLtxp|RmVgCQosetNMQ[N|vrXRQ`Vo~I_bCyIzQkqYoqe@ttOqKyDE{{{mxlJ{A@pUcwfjiHb~fQwJbpdRmeDhIAzYyhRsuDfA_zR[[czeqzC]TTSe@VCsR]Ub\\ylHuueOrfDedxKLiORzRdqYhs[iKDUjpwg}e[u`ybeCkQ[IcureF{vQZlUiOymEUfwguaGNlNePjLWuKKPsnbiI}XMuBw[UQgPwJSuhwVuzQX{sU{j|eCeEqvqDSrq{{RzK^qCaNKZ[KG_ZWMmlqoYqJo^VoYH\\kQpQpejMz]@MDMVsbPVS{{r]gnqg_Y{F]IG_EuLfd{SUMRKZfqIQ^[DcSjD\\W~ZPHPdJz_XJjfVPnsR|DOJUanb?oAuarq}bELIlD{|@iRy_koctusJqu}WZLYWLdkwxGvUxOj^GwJUQx?PZQBqpI[NOHBie~QRh^Ke]uNtGvdu{IuNR@WxfbiA{ngTFzCpJaeq?WuaNU@rE[aGXdNuQnBvXD{jN\\?}lZsgytLCY]VFaB{n`Ovkq_lgyo@Esg^ICtQ{A_m`ntG{rvHFkd_hysvdmMYmChFtnmaJ`\\wpSAVIZlGgNIKQvsrXOnv{``HW}ZJLOCcPgHzsuXnFUX`MBvZmiQhZ\\CU?lWfzAgIq[Dlxk]CZn{iDGZMYw|ACcDEGniZZFpxJgMOzZ}XIpd^Gr?Dke~EObUI_nnKlSB|~PQcPjhsudAQ?fILpPxYGRUr_mhl^tXBDr`ZBlMaaqU}lsX]?iEr[hko\\VBZsnSV]C@uqo^EFRWQUMwbVJN\\zOWXwhYNhkEKS|vkorqCWtZHpibK{I}xZ`ft?ItQp]EM\\_XEjiBZbt|\\Og\\iDk]ekWLFNyvArgB`[lMUJDswM~JL`vd?ZEUIVE]QlJLS}od{KOBzxLDknsjP{hH~CFz@iHISqfNyHA]|_eHHIf~FjTBdTfabRJc}sF\\GoB^\\R@{l{hT]bBmsDuph@JPUJr}P?t~OggWRh}xrx`dbdtBRd[VZA^KP?nnaWuq|okzqEVuA]sSodhBHy~I_enwPCoqL^t]]fUuP}KfDr~itJ_eKTejmUYKDgGfsPo?FUE~b{SeRR`mpm@L_Xqp~O[_xrmqFwXpNV~DmX@MEWnTsktOiPDMoYO@Eqlzf[`MUSplhsHY?{e\\yPwDx\\jWNpXTNNzdqh@iPYju[ifAY?p^@X?@VINynSPhpqUleWFWAsxVlBgRr@aGqumsvjd{|YTM?kPqvg\\GpgsaS_uByvJ^qqbZ}@q|}j_HcG{uOX{VYOkAklfhu]d{|uDi_LPSnkNBBhK_f@KPzkx^yqJY|aS||xoHWAnKcF]LVAE_[lb|JZqvVuKsWEHbd}BeHShoFGHg\\lsn~JGlvgRfvj[?xARhcaz`kv[wz_|@notmGWkgqDgiVqm{PFtKh^tEI]AHQ]pbCAYpm?hnUma|yZYvRru]TrDXB~DXtAbFAoX`q\\pvoamrTB}rBBsDHQ}BWGFEpsBLY|UFysu{umnVY[yLSJ}K][EBRBG]EH|Mz_q^ROr~PGjcCfHyIgGdbUWBVNNWZyeunS{}eEEZfbj~lda?jL{_ElHy}X@ffGqoGongrhVsi}lOGKh]DBZLzcvIbSXQJMDERmkZ~\\fG_ZP|G@nQ]\\ePdwwdaHAjrBw\\xMnZOGHMU``U|fwfWpUJCXxP`XfUjnyyX_BivH?mYVNioU\\Sol?hR]H[p~G|rXCCMUWoMuu|RKwN@cg~pss}{nk\\PLbt?yILI]YvjVALXropwIyF?\\@C_sDPkpP|TvusIG{OwcmTx~FdL|X|[jEKywBdPYQvP|wyDX[mSko\\Qi@w@cEGKjDgjwy}v`DHogxDSy{}M\\L|XvS{IqjWFcKYM\\L}jKFDs|OuaLiKBcCQJ?sbTcf[^^X_cj_ihRFYso|SrgFBcrOo}hYgEZ^^CZhh_qWwSKvys^VLuCTKc^sy~KHfch^qH]e?hCeWtsqhESkkWK\\mWk@zVv_yxROceiKIlzkNVZ\\@`LGvk}^ghTwg^qXMsOgSg]IuZE`Qe[kDFmTe?lm}wTrYWOep`bP|lbnNZ`DDHU|VN{SY\\Or|GfyGOqPJs[nW_oac_nZe^S[ar~PnwaALFhHKnqPnag|{d@~y^@QC{zJQLPPOdtxjpI^IhzKE@c`C}tN]JHEz{r^`CDhMXBT]aZ]FDzXIF~q{GoJffEbaQWSk{|MWR~Gx{aIGaWB}plxLHbn{R~@CEd]CrR[hZ[WrzXAN~MwcGNVSsipPDQVUs|EJ}]_IERNxJen`^JugI`]{uIphkA^smobPGwQkloMjx[H}s\\ewiOkAkptUmb|JVGEDcVyRlZdZitkGhU{liRhY?^uis_rGeC{dwFN\\Sp]tVTiabK@jD\\Ll`~Gxw?pcb}Rfbyd{rmC`e^TkLSz?J~RWoTCq_ya}@uneQfZM]LqDI_NGxdmk^ce`PfZBBJoavNgVEWyaRHdswl`{|KuhMqpU~M_fwp}CyLArFMyEZTaNUsDyBqxBDrXPa^@Q}^?{UboeUOlix[JxxW|BekavvX@nHrkJdWQxJ\\RAy{Bi{pLSMewKF\\dCbmHByzCw]FI`qQtMjSZjfJKqwkrZvWHmdVgNcWJhNLhInSInN@Tc[wtZgCBETS~ymqA@LhnPccB}Ct{w}Fo{nnRAirCCfdqn{fTh@{djPFJJm}@\\Y{XZXCAM`[n}Xk_aJYNdHGa}hFnEmhsmlytOrkP@bhmZ{jpkP]dWrDXXy}`NFmFLi_PDTK\\~Jl__SZU{`HOvdJVird[rq~SkYMb@AxtJ~PxuOZqWtEKk~ZcFen_vGHSKdMxVuM{L@MZNjA\\yk@DDi@~R]SgZ]tHt{O]daXFEK}hoL}WpTJnLDq_RqOUGXH|RvLVeKIVY\\sRZpoHAlCLuVtd@V{wNfkBKwfO[MTvI`\\swbbNZQiU?VQOV@XD{\\]k^Qoa\\i}oL^M_DQScVtVdo`vnCm]sDiYdOwirwwbVegpo~NQXW@ExYL}qPugqC[\\kNtSQrE@UdKo^{tYY[OTmRDdqMdJJTDL\\@U\\Yw^^OGiI~tAIVqrB~k_|Hs?wzLJtpENAaQtLCN~FEU]AFidSkyFDrRD`jV?U]ZiM}sAahn|?g[yV`^{cNgi_TT]KzpKLgWP]Egb~jEij`BVCmE^@qqikos]WRJplbvsaQCn|cCheaHVNrjKQB{hG[OefxmZhzPvJFcdTyJkEuHCHrRb__HuKm@P]lrI]~jt?{m]JyxORp~Tqi_VjQAc`L^pmtjsjjFMdAzTNPKrB?VeTS_`QmDsGbv[jBv~MwDxdq^Ux?\\T~Eqw`NJQES@h~Umufoxkt]PRXc~@NGp?]fHqACRiUWCrzSkjz{~CRifi\\wpHEnm^GBHnOS[s?~kY}{YdRFcnBcOkhvcmO}UCmPIp~BcMMSj^xcfiYjotoLcgwQLN^fHCH^oOsk_^xW}|UFBXskpsBLBftIanUCMqGu^bHQYVB^vXHqjbtFQJdAmAThzts_cjx@UTOFzLf^MIdL]Qs]@IiV]JDRxOXXSbVwhIjJIN}xH]Dm[jXBUIRthL?E{c~yKkfRAn`x]SG{\\kQEn}I^[ePU[hDCLGX{KfG^S_nL{vCmErFOfO~o`jLIh?uhM~ofH]SD|RisiBizORL^sRzscbbsQIGXajeD]B]WHZjwydaeieTIh}cJNEas@YxJ}pRHxoexVe[IFMz@HN^eJnqCpjqPB@TEfQPyDxgJMzjMQiWmTPKj{oW}rixuCH@BxL[mCGkztwvAqCM{}ziv^EZOUhCC}CgbJ`zvLTJIl^LP@xsbEwlDjbjimp}CAOKxjTY_oX^V[NaKgI~Njre}sUsEwW@nCWEie]nhlAwzN\\B@jU`TjJHXpq|EynOOQCmk]JWQBNj^DwL`BZjl}NVuIsbWp@LoRAsqVt{peSzFmdCTzOMLjDW{]FoCCDAmIf^aLuxySeYeCsYc}Ze]CiY]fJ@\\^bs}ad]iyLTLUzdR{EKeot_\\Cdkq?~?_GI`wpr|PMnreCmpSDjQds}bscQr{jIBx|VewpMvRpWxau}a^pDXEgy@wglWSD}?P@Ahox\\xKrnV`QmHWTLMRe}JeQIjmKkRfvMZqHuZNK[YrY}P^`FHWjWBeIVHCRsKLjr[WBlx@e@Jk{IzhMdwKZK^qLYHmmDsmgt@E^mIPQdpE_Zoyz]tllzOEH_QZzxDDjy\\aAZ|AHaIl\\I^YQf[IJYNqjERlihejahOHvyqDCdsT_JrIz]vjlZSGhOAjv~?ovnKsPJ^_PgSuNKNjQY^B@nB|FEiUnDVRK\\ACmzYKcarQK@|HxnzVUxk`Cw@D}~}@poN~}M@o~~Fw?F~wFw?{???^{[B{^b{B_MNpwF?~~?wz{?^{?[[????[^_B~b~~E{hk_~gMnKXh|^iDgPYWxcZvBcRyKaOjnN@Q`XhITXDQc|HULVNwjN@IflAgSWID}JssqP~_fmo\\M{~Ie_HYi\\EZxPpRkSh?x{|AQhTHaXhPRQkjWLs~eK|?yXtQIPGWRuFrhc`}pI}gmdx~`TGSh[mPNsieJwMQAM|[bGThcHs[cMctDsVX^gx[`KukgdECKFrPUGeuqxwYtNiV]LA[mEtOmBNEQsDlqtNl?eNIqt__}jcHT}QmTqmRL?LxBrYRkWqxqgsBZY]mJJLxMnLGNeSrabaFipWaM|WjmcEhwVMg_fs{Cc~pRg|RhEg@{h]NPThTVNGZ?euxxpbsvaZysAyhRpI[H[xQoEnqo}lAWmhR]AAzNOHr|O}Ro}PK_VgrjLPuFRTyCzMFKPYW{{g~uy\\OcTCYIpV[HrAjzXBMyepkoTbqiIH}fH\\XGVbQZR[KqHJn~vs_SqB{iMaXhPy{K~]ixI_p_iMbXkJhQZxdP^MUhcpLFRHHLzTFLdEYhhLpsVOHL~~ze?SwDzENDDR`{ya~rX{SO[OXf@vSFognnGg}wzCrO]FMaae}chvGhTrQZJKMgCy~~vo`AXiA@XlSiWMLz}_nWnv[iM?|k}\\Cj|d?CwF]pc\\GqpV|GgBK@ews^jMBmo^\\d`uE[unUkOPJLg[[HUt~WTlTz^STGYtvigp}mGAWazwa[wPpJ~KP?d_MxWrnJ`NwRyss]aivFxwwGDcuSxOhl^}Cr[vt{HqAlv]Kozmc_EgX}gd[cRSv{K_DSAyep]k{Q}`\\lpbwYNTm^?uzJ\\xfKZGwlyEzRKZPw?]obLxE]PRk{vGKsL^?D{OPjWLFo_kXhuti\\g^{ze|q]_qu@V{lfwmd[c[mXbZTojTg?}aHNcu]BImmwcKtL]?TwGLLgKvaALEfzPlMe^nXzNq[_rU?zzJ\\s^BiIitiUlJg\\MW?~?ovhX\\@pvVTGTQfm?ewOUbWTZ__uHjueyTh^umuvh]@Wr^`\\GIUOH[@Ki]jyor}vXc]OcttI[jhtyKdHc|IcpPEutX}R~@\\WmBxGbN@@WeQj~fWJ|sjgGRWGk_eSVs|Xa~ZjiFgCy[hhrT]\\`ccq]sYQac]ZJnp^gYxFa\\DDJcCWqpD~t{Hn]Xe_hEOhQ@kHzN]QN}rm_}AQfoySlffwUPId|HcHHU]sm|R{`le[JdEO|@@gxQZ|nOjzkvYEWacLEKHu\\M[q`XLBsjVDA^vFok{y}_yKDw]Z|CjjAmtfhC[dUsxKW]OC|@Emu{U|d^QFOWceIoep{hyU@kpFYLtOi^xZ_nVM{bWaFoynxSfJE^PugeKfUqgmE\\?Qk_w|ZtFyq~gJ_aRKHgLYxq{JCXkFozWdP^svaUmz]ArCLox^{aNdC}exdPUPzFDTH]?FT@U[vqZxjsqWBS^?tZxwTsquwVcVL``CIfyeFzUP[Yu`VG}DHIF~UWIssaVoZMXyhQbxnwdhoKNelYeY@WZoFL|rEuP]tByEmSSI@e|fB^NGXpxQhwVQKKQ~]h@swqQ{RJp^CxQ[n|QKyCdtw{rX_KTm@[^\\g\\[UZWv_Zh`_cYZySVnU@tYeg]cxcKHf|]CZQohZ`K|FmHoji~ceipBM^W{Ncb[GRxYvDrfLfFpJIVmnVsCl_wcOYTIZSKcctI[FCqWT~`iWlt@zrx~eaQncpNIJMfPsmQ\\d@JsmreVdldVHJ`v[|zcQLacpAYOmYTCbcXawRaHhF}axEVobnrf|uQI]e`^Aii^`rMcjQ_\\wZ\\TNRuRfSdI^]^VoCubIE@LDXNAaTQsHwdSQeR|`mGndBzjj}whO|r?}hLEn[oSMG@{MYZzpVRxu`RphDNtwecuKBsn`jEPVaKttMpoFdHwh}vtDF_PkqgjZ^bsGySBb[yYGTS@MSzDzyeizmWHykcJ{{eeYa`]RkLfORsW]jMphCy`\\C~y}EFSOTxCfNZu[_uQ`RkncoTF?DtJa^nHZNm]CVMHS^riYEwKRc}axTBMWd]sjUOV`FeJ}zdDT`@uqINL|joJXAKjRz\\kYAxSpq@oJLBPvzNnlAuw}C[_At@{[~`Elh{NfgqERqEn|hWQT@A]bAgq^rAQb^^yaIH|[tQBxAxWDGdkDU^ZvvpB^F[PS_IpBlV\\`YUtrNVcIQNQe^thhQD@Q[ooeh^hPQJ^nqRAdzfbgHsTSqEOJpBLvlnnkEui{EM?RCbuM}_s|hsnfIP`VHS~mfEHO_h]HIJQ^oiGp~^wghHzeGNna~xaR@gxIYnnQ[?fQcX~GNR]jrKxLBGGx|clKzmdPQSSY?GQBVTtpGqfHHtFyUi[^VRWDvrN}cWghdKTt}iN?QYco~hByNr\\HtEeIGNNkTdR|q`XOiP_?h@Mm][DTEcg{e}R\\KZx{e`Nmb~wWREa[HZvjIwCdMPJ{c\\j[novDLGo`t}Spsnr`PpQDW?IORZFf`FQXGjpZxErTm^CAqsJN[woLwX}{i\\tFUSzhA_XAQjjXZYo}`nMkS|a`PPilIKHUmNyWz{zZqfedVWDMg}?_MCGqtJNdpOmgl}{`|sdXsnCg`CqIYxjLnA}A}isY}BCSLMTKKFW{^yJZuxzgysrXgEj`u?OmABXQknRootW]zyI}XRqY^HQAHHOlnDzYb[bnFas|E@HUbKwSHu[^lEnnNNqTyDvCLEpy?`NYUXwCKfQfWKynit~GgWNogs}Q\\yyAA[veAY{^iAhQj\\aHrrHDPfDNj\\@RSf}glTSNnlJLC{zG{m?SdwTtDb\\x]nkcBEy`SzqQ~T`@Hun@RMj|?sHs^gKu]GckVEFtycLYE~cpkyB|vdd_]VaZXoDA]W]Wqmve]zIGgnIFQ|HNnWOQVYsPLrmqBKRL}ALjghR@tD\\xlBPeZ}GvPc]~fJEDsYwzUh\\P`pb?q?|la^eXCwHGjlxszVBR`BeZn[NTRb\\IVphrajHfdaF`fIrrG@xJudQOpCy|Grp|IteWSwTCQC|tA~`XagHGmnjqxsph`QxX~TNHVD{HvMbhqLDyqgYaxNRpCBdNuEQOsBr{`xpyVh\\ChSbAHA}m@~QkSW_eXvffNXJQ_huM~am[NBxa^TJqgwitdoT`syjggBgzwrH@WDxv@w_UUTSz@r?CKwZr{x}e|prIar[XwCvDKJztuPmdlUz][xGse]_D~GqiWxZXrfFaw_xj?ECY`UCGqran`J_AERBy~Rnq^ipdqTMp[aVGe`~]\\WfTuJt^VRHWrRo?~hUDpXXw}VIuWcMfO?oZChoOZJFByCy?_kgnN{mze}LTWjRLFgFSpKZnfeXe\\kr\\x{kaot[_R{fIXEdxjhsxii@xk?IDaW^Z}OI`qbwCZSHn|L|jMFHWZUpsw\\?fG}i[_kV`XG`}{JGufEIjiaOumF{BuEThOb[]SZMwvlfv\\v?gTQloAjoMn{l}bqbcWzVBedL?xF[yU?k]hSKD}wbIZSsMYyHBY[ZkJwTDdaRUUTijo~enVjyPAgwZoC\\Wdvxu|LhTHglybrISaSi}LKaTMTgaEzwLcuXWWlkqAs{VsRsYQj?hlZB\\Fp]{]r?~FFw~?w????[^~{^{Bb_N~p}N~o?M@o?Np~wFB~bb~{[Po?M@}Np~po?@~pp}?M?w?wFw~~w'
Last edited 6 months ago by dimpase (previous) (diff)

comment:32 Changed 6 months ago by dcoudert

py3 without this patch and no canonical labeling

'~?Ex???C^ckeoLON?T_P~FHYklbWZBU[@zE@VT?bp~FJclUZJWuZBWYlXoFbuKAlVT?{Pw~`ZqxJRYrXZ@nXkLa[tYr_pfbuKDTUji_]NC]NFUj]VJcZLjLeqEr]rXkCy[tYlOpwrpw{AjTTitWFaNwb}GyvclxJ]PlXZUUtcLzB]ovkCxjMYregWruK|bN?iiyimij?fTUqsvwpwuswvTU}@nolfWutS{Rk\\TkZUailLw~CxkBWvT{J[[wAvFwZRihkAilLw~CxlFZEyn`Zbf[fa\\bilbYuqRijXYZ{W|_Uw~BY\\TLlOL}DkzEuif_WuswvTU}DWBWvT{J[[yNwfTUqsvwp{dhZb{LhtSvXZELlMLtTnbWZ@nolfWutTjMAilLw~Cxk]p_{Rk\\TkZUiygAvFwZRihmNF{E~Au\\bZT]VHYfTUqsvwpuZJWijR]NpMZZL`kWuswvTU}EjU[Fa\\bilbYs{]p_ZEyn`ZbfIt\\S?vwUrkZYjwbp~DTYZp}HrXZqxJULlMLtTn`lXkl`kZi}DmM[ZuZBW{Rk\\TkZUrejU[AvFwZRihnE]NWoRijXYZ{WyilVT?{Rk\\TkZU}NC]NFUw~BY\\TLjTnJdqLb\\VolprerYrXk`nolfWutSuZuZL_fTUqsvwprhrTitBEufEyivpbpfbpwDTYZp}HrYjTTitWELlMLtTnbpF{P~C^pMptUplYlxJ]QvcijR]NpMZLjJYqukavFwZRihkvkLzB]oLb\\VolprhrU[tfLOfTUqsvwpwruK|bN?L}DkzEuitT\\TVTT_^oF{@~??BbFHHh@tOB}??^~w?M[TK[dIQ?^~~{???Ik`qcpc`r}??^oF{@QBqRajGp????~~oF}QiBxBbEc??@~??N~|bHhI_xrGB~~????B~chKO{dS[?~_NwB}??KXLHSFMXGwB}??^~w?wpqQYO\\Tq?N~~}???KdHaFcibdc~_?F{@~?@rahbchQ\\_???F~}?~ik`qcpc`ug??F{??~~xIgNcMKYPwF~}????F}cFcfDUPaj?~_NwB}??XIRCNHTFG~_@~??N~{?iqFIREQFxJOB~~~_???wpqQYO\\TXZF{??~_NwAQiBxBbEdkL_???^~wB}FMIeMQdHYr_??Nw?@~~s_{cwiqKRuKF~}????F|bHhI_xrGji_^oF{@~??HIgNcMKYS]Nw?^o?B~~?KXLHSFMXMVHY?^~~{???S_{cwiqKZLdk^o?B}?~_BbFHHh@tUrWZ????~~oF~HQW`xIgwtYr_??Nw?@~~ik`qcpc`rpzEB~~????B}FMIeMQdHTiygF{@~?^o?AcFcfDUPbwbp~?B}??^~wBHQW`xIgwlx[dg@~~~o???pcsdO[xcZUZJW~_?F{@~?Ik`qcpc`r]rWZ????~~oF{wpqQYO\\TMYlXo??F{??~~oxpSpqShMK{]p_~~o????~qTO^G[WsiilVT?~_NwB}??@rahbchQ^FaNFb_Nw?@~~_IO]Q[TXEItZqx[_B~~~_??AQiBxBbEcuZUZLc~_?F{@~?XIRCNHTFBXnXku????^~wB}pcsdO[xcfRejTi??@~??N~{wpqQYO\\TbpfbpwF~}????F|TcMSeKcNTiitYkB}?~_Nw??iqFIREQF{P~C^pF?^o?B~~?QTO^G[WsdnHZqU{_B~~~_???M[TK[dIQukljJYq^o?B}?~_EKeciBfK`nWZuE|_???F~}?~s_{cwiqKXrU[tfLO??Nw?@~~xIRCNHTFKXzE]pf_^~w????^rbFHHh@tTTVTTtTWDVElLlnCz}?~_Nw?@MildhnpbZ]B\\U[lp_Nw?@~~_KZY[Zij^BpTfWtjWu?~~~w???L}DkzEuicxZTZWr^b}??^oF{@wfWyjWulAtlb{ExtS???^~wB~TUe{^a[u?vM{JYmLk??^o?B~~ZEyn`Zbf?peuszpTU~~w????^tmNoufTRWEKuuf]Iiv}?~_Nw?@TUe{^a[ub}IkzElZEoF{??~~oBWvT{J[[zciwthllwf?N~~}???NCzFTZEtlcUlk^_vMi~o?B}?~_HtTklL}K]oLn@mjMUwo??@~~_NyvFwZRihliCxZTZWr^_??~_?F~}Z{JXuLlTN?LrnAujbZ^~w????^{ZY[Zij^Ak@Yup}B[yj~?^oF{??ZEyn`ZbfP~@m\\wUt[ZW@~??N~{@MildhnpbxJSxZTZWr^_@~~~o???lp}EsyiZklajbUeuva\\~??NwB}?plhpmil{ZBWpeuszpTU_??B~~?^r^`ZMplijU[FajMpjUpk??~_?F~~TUe{^a[uNWoLn@mjMUw~~{????N~a\\bilbYtVT?LrnAujbZ^oF{@~??DmNoufTR[]Nwiwthllwf?Nw?@~~_B^`ZMplinJclWrZY\\wijOF~~~???CyiuUe~EMrXZBZoZirdmN}??^oF{@TUe{^a[uuZBW{TXuLYuL_??B~~?^{ZY[Zij^BTjM@Yup}B[yi??^o?B~~{Rk\\TkZUfbuKCxZTZWr^b~~????B}uLt^AvFMTiygBZoZirdmN}?~_Nw??Z{JXuLlT{Pw~a[lilkXno?~_?F~}?ijR]NpMZJ]VHYUlk^_vMi_N~~}???KZY[Zij^BYrXZEKuuf]Iiv}??^oF{?uLt^AvFMLzL`kExv`ZTpl_??@~~_N~a\\bilbYu[tYr_iwthllwf??F{??~~tmNoufTR]K{]p_{TXuLYuL~~w????^xtTklL}K\\TUji_]IkzElZE~wB}?~_?Fa\\bilbYvpwbpwytlb{ExtS@~??N~{?lp}EsyiZUj]VJcZ]B\\U[lp_N~~}???EpmjwUwxrXlXkuOvM{JYmLl~??NwB}?L}DkzEuier]rXkCxZTZWr^_???^~wB~MildhnpbfRejTiEKuuf]Iis??~_?F~~bZRb\\TZwpwrpw{AjbUeuva\\~~_???@~ijR]NpMZTYilUj?fJYjZEZ{^oF{@~??KZY[Zij^FaNwb}G}Kuuf]Iis@~??N~{@wfWyjWulU{dnHZqExv`ZTpl_F~~~???DTYZp}HrXlXZUUtc{TXuLYuL~o?B}?~_DmNoufTRXnWZuE|_iwthllwf???B~~?^upmjwUwxsxjMYregLn@mjMUwo?B}??^~{yiuUe~ENE]pfkXwAtlb{ExtV~~????B}Z{JXuLlTiiyimij?EcxTRAwRQXKeRHcqYmLYZZ]Hv{@~?^o??fSohf?uTHcqXKeRHZ]B\\U[lp_Nw?@~~_CjAR[TCouRHcqXKeRwirkYtkZ?^~~{???DPKwdBQ]ERHcqXKeRMUtUuKvw~_?F{@~?BAwiBSsgfHcqXKeRHUlk^_vMi_??B~~?^o[BSpMT`iQXKeRHcqR[zoliwuo?@~??N~{AYSLocybaRHcqXKeRbLlhvail~~o????~_CyeDKwEqeJDapWkUMKuuf]Iiv}?~_Nw?@FiHfCgYRokUJDapWk^DU\\bUlbWB}??^~wBcomI_tLIHkUJDapWkYmLYZZ]HoB~~~_??AqHhOvARiMEJDapWkUItlb{ExtV}??^oF{@kB_YeHqkLPapWkUJDau{EykxZb???F~}?~lOEcxTRAwRKUJDapWkXquiupe~??@~??N~{{AT`HmIaWYpWkUJDapLrnAujbZ^~w????^tWCjAR[TCoudQhSiTIclZW~@m\\T~_NwB}??P~EDpSEhhPMdQhSiTIcZf]DlVEu?^o?B~~?[dgfSohf?uTQhSiTIdQfJYjZEZ{?N~~}???JJW[BSpMT`iSiTIdQhSimLYZZ]Hv{??~_NwBWZDPKwdBQ]EdQhSiTIdbLlhvail???F~}?~lXoHhOvARiMITIdQhSiVajMpjUpk??~_?F~}]p_EcxTRAwRSiTIdQhSev_vTfJ[^~}????F|VT?iHfCgYRofB`ow[MFB[zoliwuv{@~?^o?ANF{HhOvARiMB`ow[MFBdVElLlnCw@~??N~{@qxJR_YeHqkLOw[MFB`oxbLlhvail?^~~{???UZJWdWQZageEfB`ow[MFEv_vTfJ[^{??~_NwBXkL_YRdTKJ`K[MFB`ow[{TXuLYuL_??B~~?^ujU[@Mh`RM@kgw[MFB`owlZW~@m\\T??Nw?@~~fbuKEDpSEhhPKw[MFB`oxMUtUuKvw~~o????~it\\SBAwiBSsgfcqXKeRHcZ]B\\U[lp~oF{@~??NC]Nw[BSpMT`iXKeRHcqXHquiupe~?B}??^~w@ZqxJTPKwdBQ]FHcqXKeRGlZW~@m\\T?^~~{???LjLdkBQ[ih`[HkeRHcqXKeKuuf]Iiv}??^oF{?ZuZBWRQ`mCfS[XKeRHcqXB[zoliwuo???~~oF}[tYr_dWQZageExKeRHcqXImLYZZ]Ho?@~??N~~E]NWoCyeDKwEqkeRHcqXKfajMpjUpn~~????B~TTiygB_YeHqkLPSiTIdQhTwirkYtkZ~_NwB}??]NC]NFEcxTRAwRIdQhSiTIdjZFwLrigB}??^~w@Ylx[mPLIEwQ\\PoiTIdQhSiZ]B\\U[lp_N~~}???ErYrXk`Mh`RM@khSiTIdQhSZf]DlVEu~_?F{@~?Er]rXkCjAR[TCotSiTIdQhTMUtUuKvw???F~}?~rhrTitBAwiBSsgeiTIdQhSipeuszpTU_?F{??~~{]K{]N?iHfCgYRoidQhSiTIimLYZZ]Hv~}????F}jTTitWAYSLocyb_MFB`ow[NMUtUuKvw~_NwB}??]G~aNwbqkHLpSRBOw[MFB`o}Kuuf]Iis@~??N~{?lxJ]QvcEcxTRAwR@ow[MFB`r[zoliwuoB~~~_??@lXZUUtcomI_tLIH`ow[MFB`~DU\\bUlb^{??~_Nw?vkLzB]oCyeDKwEq_w[MFB`o|VElLlnCw???^~wB~MYrekxiDPKwdBQ]CMFB`ow[Mu{EykxZb??Nw?@~~wruK|bN?[BSpMT`i@ow[MFB`tjZFwLrin~}????F}ijiiyikBXXTfek^dMildhnpbk{brTVFuBQ[ih`[HimLYZZ]HqljXbfmUrEufEyivotuPrtfcjHtKIXoLdLn@mjMUwpzdFTzJJSvwUrkZYjqYi|c]q]dWQZageE}IkzElZEqq]Y{g}pVwfWyjWulNI}S\\jkktCraSLHwXquiupe~?bzMTdUtNTThnFwfLl`yqjxLW}DpSEhhPLYup}B[yiFHVkYuRs\\kZi}DmM[jblZMo|q[BSpMT`iExv`ZTpl_LWxzXqTuTmNoufTR[]rkxFdZTLIEwQ\\PpbLlhvail?kfenINkTtThnFwfLmRTVkbuRpMh`RM@kjEZZRnDTZFYprurcjklb\\Volprl`yqjxLW|PKwdBQ]FpTfWtjWvq[d]pjXNP~CzFTZEtjVXFNU]QnAwiBSsgfTpjRZZpMk`zdFTzJJU\\TZJR^bEjblZMo|qRQ`mCfS[JUuNoZfT\\_uUTXxjFxJ[^`lMierqndFYzJJ_YeHqkLPlwLtXqvEt@UtkprvJWZ{JXuLlTbu\\fG{jYbQ[ih`[Hhquiupe~@wC^XqkiuhzEufEyivpXxFeimNkdWQZageEexv`ZTpldWAljXbfmUpkZi}DmM[]T{gzVXXdWQZageEjUuNoZfTW~aq]Y{g}pVMildhnpbbu\\fG{jYwVDOYedCr[zoliwuvHYbzMTdUtNJ[^`lMiet[\\jXuFmPMh`RM@ki[lilkXnpXZBUM]u[d\\fEufEyivpqYi|c]q][BSpMT`iT[Ysuu{Rl`k[d]pjXNPr^`ZMplilfc]Yiw}qge[Q`hNBbLlhvailYr_uUTXxjFxTThnFwfLemqM]k{dYYSLocybbpTfWtjWu]p_N[gynXXY}HuMiuLj\\`yqjxLWwsfIiWVAXlwLtXqvEji_FmS\\VkklTmNoufTRZVXFNU]Qmge[Q`hNAZf]DlVEubp~C^XqkiuhwvwUrkZYi]T{gzVXXRQ`mCfS[T[Ysuu{RmVHYTlZK[|quRijXYZ{W|`yqjxLWz_YeHqkLREZZRnDTZXklbcjuLZHyNTUe{^a[ubu\\fG{jYqkHLpSRBUv_vTfJ[]rWZDc{txP|anEufEyivojblZMo|qEcxTRAwR]IkzElZEujU[BUM]u[d\\fpMptUplZXxFeimNkHtKIXoLdJUuNoZfTRpzEBXXTfek^cuLt^AvFMxLT]qNXNWVDOYedCxquiupe~AlVT?Yprurcjke~Au\\bZTT[\\jXuFmUDpSEhhPLlwLtXqvFwbp~@zdFTzJJUilLw~CxlXxFeimNk[BSpMT`iRdlTlbL}DnJclZJIk{tb{kZY[Zij^C]rkxFdZUge[Q`hNAlZW~@m\\TZUZJWbzMTdUtNLb\\VolpremqM]k{dWsfIiWVAZEZZRnDTYZuZBWTlZK[|qu]HuMiuLj]RTVkbuRqYSLocyb_vM{JYmLlMYlXoURrVdFuItmNoufTR]o|XT{ek]T`HmIaWZTpjRZZpMpfbuKFHVkYuRs]\\TZJR^bE]T{gzVXXHtKIXoLd]IkzElZEyilVT?bzMTdUtN]HuMiuLjW|fXqNIuj_YeHqkLRpTfWtjWvw{Pw{^cjuLZHyMlp}EsyiZxLT]qNXNBQ[ih`[HdjZFwLriitZqx[dc{txP|alkZi}DmM\\XxFeimNkRQ`mCfS[Ln@mjMUwurYrXkeqqjNLW~GvwUrkZYjkNUT^HjFHtKIXoLdExv`ZTplbXnXku@jFNZMQmrMildhnpbYzGxyrqTqkHLpSRBXquiupe~Cy[tYlON[gynXXYwuswvTU}BqndFYzJMDpSEhhPNEZZRnDTZbpfbpwAljXbfmUqilLw~CxkjblZMo|qiHfCgYRot[Ysuu{RilTUjT_[d]pjXNP{ZY[Zij^Eo|XT{ek\\LIEwQ\\PpMUtUuKvw{P~C^pFuUTXxjFx]HuMiuLjT[\\jXuFmSjAR[TCovEZZRnDTYlxJ]QvcYprurcjktThnFwfLbqndFYzJGsfIiWVAWvM{JYmLkukljJYqIuleM]xZDmNoufTR\\fc]Yiw}rAwiBSsgfwirkYtkZLzB]ovk@zdFTzJJTkZi}DmM\\FkzMPxUtHtKIXoLdT[Ysuu{RhrU[tfLObzMTdUtNRijXYZ{W}RTVkbuRtPKwdBQ]DlwLtXqvFbNWruK{Aq]Y{g}pUZ{JXuLlTYzGxyrqTm@iWfIotDjZFwLrilTVTTtTWCeRHcqXKerqNLT[^X~?^oF{??MK[cecFTZJIk{tb{`hMTSomCseRHcqXKdjkbfjNHU?~_?F~}?BfDRFHQciuleM]xZA\\RAe[BXQRHcqXKeRqYi|c]q]?^~~{???Ik`qcpc`rvIMjuUUkjAR[TCoscqXKeRHcfd^IMtuU^w?@~?^oDGNHMIkbEq]Y{g}pVSRMHOsf`CeRHcqXKfW]ki}RUM???N~{@~ci_}OwphP|fIqjYfkJagLRQaWQXKeRHcqT[\\jXuFmO?@~??N~|bHhI_xrHqTzElc|F[BSpMT`i?cqXKeRHcpzMrc]Tl^~{????N}QcpBqTPpjFNZMQmqedB[HMgw?WkUJDapW{einXFkfnwB}?~_?BERQT@reQq]Y{g}pURiWSr_ZIbkUJDapWk\\`yqjxLWwB}??^~w?wpqQYO\\StbflfHVXiHfCgYRo{bDapWkUJDjkbfjNHU?~~~w???qSeG]QiM[d]pjXNP{JagLRQa\\cWkUJDapWiwzUrkN[nw?@~?^o?[wiWxISc|qbi|ddiedB[HMgwu@apWkUJDa]T{gzVXX???F~}?~ik`qcpc`|ddU]Yp}R_YeHqkLPiBDapWkUJENXu[bqli??^o?B~~ci_}OwphIuleM]xZ@hMTSomCpwBDapWkUJErqNLT[^X~~_???@~h@xHpTcWp|fIqjYfhUCewiH`ikAdQhSiTIc]T{gzVXX~_NwB}??XIRCNHTFDZUrFN[lcjAR[TCouNwhSiTIdQhPzMrc]TlOF{??~~oAjG[hKXG]q]Y{g}pV`[T@iYSRxJTIdQhSiTHVFYu\\`zc?~~~w???MK[cecFTP|fIqjYfa\\RAe[BXTdkSiTIdQhSmRTVkbuRv{??~_NwAQiBxBbEctbflfHVX[BSpMT`iZBWhSiTIdQhU]Pxijbz???@~~_Nw[wiWxISfcjuLZHyNSRMHOsf`Yr_hSiTIdQhL\\c[|XxIo?B}??^~|GNHMIkbFXXTfek^cedB[HMgwNWoSiTIdQhSl`yqjxLW~~}????F|bHhI_xrG]xPt]qqtEcxTRAwRIyg@ow[MFB`pjkbfjNHV~?^oF{??ci_}OwphFmS\\VkklYaXpIEc{K]NwMFB`ow[MFd^IMtuUOF{??~~oBERQT@reQNkxUTZS{edB[HMgwx[dgw[MFB`oxkNUT^HjF?^~~{???S_{cwiqKTZUrFN[lb_YeHqkLQrXZ@ow[MFB`qNXu[bqlj~??NwB}?MK[cecFT[d]pjXNPxUCewiH`mrWZ@ow[MFB`pVFYu\\`zc???N~{@~qSeG]QiMURrVdFuIphMTSomCrTjM?w[MFB`oxXxFeimNk??Nw?@~~ik`qcpc`uk[|kxIzHMh`RM@kg{]p_MFB`ow[M[einXFkfn~{????Nw[wiWxISfXXTfek^d`[T@iYSRTiygERHcqXKePVFYu\\`zd~?^oF{??h@xHpTcWlWxzXqTu[JagLRQa^aNF{XKeRHcqXJNG{tTp|_B}??^~wBHQW`xIgw]xPt]qqt[BSpMT`iJ]VHYqXKeRHcqPzMrc]TlOF~~~???BERQT@reRXXTfek^dSRMHOsf`ZUZJWqXKeRHcqL\\c[|XxI~w?@~?^oAjG[hKXG]NkxUTZS{LHqieDoeLzL`kXKeRHcqXMRTVkbuRo???~~oF{wpqQYO\\SjYuWxzdkRQ`mCfS[RejU[ERHcqXKeRW]ki}RUM??^o?B~~BfDRFHQcuRrVdFuIxUCewiH`mK{]p_qXKeRHcqFd^IMtuU^~{????N{dSFqFELJcjuLZHyMRiWSr_ZIiit\\S@SiTIdQhTFkzMPxUt~_NwB}??@rahbchQW}rdXTlRr_YeHqkLRpwbpwyhSiTIdQjctTzG|c{?~_?F~}?h@xHpTcW{d]pjXNPphMTSomCqtZqx[ahSiTIdQirqNLT[^W?~~~w???ci_}OwphURrVdFuIssgZ`HtFBXlXkuPSiTIdQhTkNUT^HjF~_?F{@~?XIRCNHTFLddU]Yp}PMh`RM@kguZuZL_TIdQhSiTL\\c[|XxIo??@~~_NzERQT@rePjFNZMQmrIocvDPKLfRejTiAhSiTIdQg{jxPumqq??^o?B~~MK[cecFTFmS\\Vkkl[JagLRQa]NE]NF_IdQhSiTId[\\jXuFmV~}????F|TcMSeKcMjYuWxzdkiHfCgYRotYilUj?B`ow[MFBzBtdVqYp~wB}?~_?AjG[hKXG^cjuLZHyMedB[HMgw{P~C^pFB`ow[MFBiwzUrkN[_F{??~~oCdSFqFELJXXTfek^dIocvDPKLU{dnHZq@ow[MFB`rqndFYzJGB~~~_???M[TK[dIQtbflfHVXEcxTRAwRLjJYquk_[MFB`ow]rqNLT[^X~??NwB}?WqYQgM[qIuleM]xZKJagLRQaXnWZuE|_B`ow[MFBpzMrc]TlO??@~~_N|GNHMIkbC|qbi|ddiRiWSr_ZIfLXrU[t?MFB`ow[NqYi|c]q]??Nw?@~~xIRCNHTFG}rdXTlRtPKwdBQ]FE]pfkXw?[MFB`ow\\jkbfjNHV~~_???@~MK[cecFTURrVdFuIv?tKRdWYdTVTTtTWDfc]Yiw}oYRdTKJ`K[WxHLGMiiwthllwfRijXYZ{WxKeRHcqXMqqjNLW~HjkbfjNHURiWSr_ZIBfDRFHQcln@mjMUw{ZY[Zij^CeRHcqXKdUtkprvJWxLT]qNXNQkHLpSRBTUOxQWqO~ajMpjUpkvwUrkZYjHcqXKeRHN[gynXXY`xVqbl\\dege[Q`hNBQBqRajGpfJYjZEZ{]HuMiuLjXKeRHcqXLc{txP|akZBtdVqYp{JagLRQa[dSFqFELHYup}B[yjTUe{^a[ucqXKeRHcp|fIqjYf_TpulfW]xM@iWfIotEKeciBfK`m\\wUt[ZXkZi}DmM\\HcqXKeRHxI|bUq]b_bu\\fG{jYhhOvARiMKdHaFcibeKuuf]IitZb{LhtSvHcqXKeRHYprurcjk_[einXFkfa\\RAe[BXRERQT@reREZZRnDTZTUe{^a[uWkUJDapWuRrVdFuIw}o|XT{ek]ge[Q`hNA[WxHLGMi{TXuLYuLlb\\VolpreJDapWkUJUM]u[d\\fcYzGxyrqTwVDOYedC{dHaFcibdVElLlnCzpMptUplYpWkUJDapxI|bUq]buPVFYu\\`zcedB[HMgwBfDRFHQcjUuNoZfTXtTklL}KZDapWkUJC|qbi|ddjk@xVqbl\\ddoLRCxUEgiqFIREQFZ]B\\U[lpj[^`lMieuJDapWkUMqqjNLW~HiC]rkxFdZSYRdTKJ`LHT@{`pbQfJYjZEZ{E~Au\\bZTUJDapWkUIljXbfmUo{ArqNLT[^XIocvDPKLh@xHpTcWexv`ZTplkZY[Zij^BDapWkUJENkxUTZS{j?NI}S\\jkkqkHLpSRB[dHaFcibatlb{ExtTkZi}DmM\\QhSiTIdQTlZK[|quP~C]rkxFdZVAwiBSsgeiqFIREQFLrnAujbZRijXYZ{WyTIdQhSiTc{txP|anclIwzUrkN[a\\RAe[BXPpbccs_yi[lilkXnolp}EsyiZhSiTIdQhP|fIqjYfjJWxLT]qNXNM@iWfIotHIgNcMKYTVElLlnCzEufEyivpQhSiTIdQYprurcjkzBWk{brTVFuTCraSLHwOxpSpqShMKuuf]IisvwUrkZYjQhSiTIdQxI|bUq]blXoL\\c[|XxIssgZ`HtFDGNHMIkbFpTfWtjWvTUe{^a[uhSiTIdQhZJIk{tb{buKEo|XT{ek[YRdTKJ`KpcsdO[xcZ]B\\U[lp}HuMiuLjYTIdQhSiPzdFTzJJTVT?YzGxyrqTtCraSLHwXIgNcMKYPm\\wUt[ZXZb{LhtSu[MFB`ow[N[gynXXYpw~_{jxPumqqedB[HMgwWqYQgM[qT[Ysuu{Rb^`ZMplihow[MFB`qNkxUTZS|qxJUo|XT{ek\\oLRCxUEhQBqRajGppeuszpTUrijXYZ{Wr`ow[MFBaljXbfmUqrXZC]rkxFdZUT`HmIaWY[WxHLGMiZ]B\\U[lptThnFwfLb`ow[MFBfHVkYuRs^XkL`VFYu\\`zcLHqieDoeqSeG]QiM]IkzElZE{ZY[Zij^@ow[MFB`qq]Y{g}pUtYr_k{brTVFuCyeDKwEqdUOxQWqOytlb{ExtVpMptUplY[MFB`ow[YprurcjkfbuKFHijuPzHzAwiBSsgeFMIeMQdHfJYjZEZ{Lb\\Volprb`ow[MFBeqqjNLW~HUji_IwzUrkN[kJagLRQa\\GNHMIkbDlwLtXqvEZ{JXuLlTqXKeRHcqLWxzXqTu^C]Nwk{brTVFuM@iWfIotKdHaFcibcxZTZWr^ailLw~CxlcqXKeRHcN[gynXXYj]VHYbu\\fG{jYtCraSLHwUKeciBfKatlb{ExtVEufEyivpcqXKeRHcuUTXxjFxLjLdkL\\c[|XxIphMTSomCqjG[hKXG^EZZRnDTYuLt^AvFMqXKeRHcqP|fIqjYfb]rWZFHijuPzHxLIEwQ\\Po[WxHLGMiLrnAujbZ]HuMiuLj[eRHcqXKaljXbfmUq[tYr_uFjInctbqkHLpSRBOxpSpqShLVElLlnCxZb{LhtSvcqXKeRHckfenINkTwrpzE?{jxPumqqRiWSr_ZIci_}Owph]IkzElZExtTklL}K]RHcqXKeRcjuLZHyNTTiygC]rkxFdZToLRCxUEgFMIeMQdH{TXuLYuL}HuMiuLjTQhSiTIdS^Xqkiuhzpwbpw~HijuPzHwYRdTKJ`LQBqRajGpUlk^_vMij[^`lMietQhSiTIdVHVkYuRs\\Ylx[mQrqNLT[^WedB[HMgwci_}OwphLn@mjMUwupmjwUwxqhSiTIdQiq]Y{g}pUuZUZLcuFjInctbcyeDKwEqkdHaFcib`m\\wUt[ZWvwUrkZYiiTIdQhSiuUTXxjFxEr]rXkBVXFNU]QmT`HmIaWYpcsdO[xcfJYjZEZ{RijXYZ{WtQhSiTIdRUM]u[d\\e\\MYlUgFd^IMtuU[JagLRQaXpbccs_yjEZZRnDTZbZRb\\TZwTIdQhSiTFmS\\Vkkl[]K{]N?TpulfW]xTCraSLHwTUOxQWqO|VElLlnCyilLw~CxkiTIdQhSiTlZK[|quTYilUj?uFjInctbhhOvARiMDUOxQWqO{xZTZWr^bEufEyivoFB`ow[MFxI|bUq]b}G~aNwbiwzUrkN[hUCewiH`kdSFqFELJEZZRnDTZwfWyjWulB`ow[MFBzJIk{tb{dnHZqU{`xVqbl\\dcYRdTKJ`KFMIeMQdHLrnAujbZTThnFwfL_w[MFB`ozUM]u[d\\dlXZUUtck{brTVFuWVDOYedCuKeciBfKfajMpjUplZb{LhtSuFB`ow[MFTlZK[|quE|`nWZuANXu[bqliRiWSr_ZIh@xHpTcWt[Ysuu{RepmjwUwxo[MFB`ow[|qbi|ddjMYrekxiFHijuPzHyge[Q`hNBchKO{dS[Z]B\\U[lprijXYZ{Wow[MFB`o{^XqkiuhzE]pfkXwBVXFNU]QloLRCxUEg[WxHLGMiUlk^_vMie~Au\\bZTOw[MFB`o|c{txP|amijiiyik?wpqQYO\\TTpjRZZpMuUTXxjFxRijXYZ{WphMTSomCv{@~?^o?ArqNLT[^XHcqXKeRHBfDRFHQcln@mjMUwtZUrFN[leLlMLtTn_fSohf?uS?~_?F~}?YzGxyrqTqXKeRHcqQjG[hKXG^pTfWtjWu]xPt]qqtL}DkzEuiqkHLpSRBOF~~~???FHijuPzHyRHcqXKeQS_{cwiqKXquiupe~Dc{txP|anpMptUplZSRMHOsf`~_?F{@~?Fd^IMtuUXKeRHcqXGci_}OwphJUuNoZfTW}rdXTlRtTYZp}HrZAwiBSsge???N~{@~uFjInctbqXKeRHcqOWqYQgM[qExv`ZTplmQnWtkfgzWvT{J[[xoLRCxUEg??^o?B~~TpulfW]xQXKeRHcqOXIRCNHTFKXllM{TTjUM]u[d\\dZb{LhtSuedB[HMgw~~o????~pzMrc]TlXKeRHcqXGBERQT@reREZZRnDTZXNL]S^WjijR]NpMZCyeDKwEqnwB}?~_?FHijuPzHxapWkUJDbFMK[cecFT]IkzElZEuk[|kxIzJWvT{J[[yge[Q`hNA?~_?F~}?uFjInctbkUJDapWk]RHQW`xIgxTpjRZZpMxI|bUq]b}HuMiuLj[JagLRQaWB~~~_??@jkbfjNHUpWkUJDapk_[wiWxISdYup}B[yi]xPt]qqtfTUqsvwphhOvARiMNw?@~?^oAmMtkzBvHapWkUJDbkAjG[hKXG\\lwLtXqvFkkirrUNqUw~BY\\TLm@iWfIot???@~~_NxxVqbl\\ddapWkUJDatAQiBxBbEdMUtUuKvwTlZK[|quE~Au\\bZTPhMTSomCo?@~??N~}NXu[bqlipWkUJDapN?h@xHpTcWexv`ZTplg}rdXTlRuLlMLtTnaT`HmIaWZ~~_???@~k{brTVFuKUJDapWkTWEQcpBqTPpYup}B[yijYuWxzdkZEyn`ZbfQkHLpSRB^wB}?~_?@xVqbl\\dedQhSiTIdF{Ik`qcpc`r[zoliwutc{txP|am\\TZJR^bF`[T@iYSR?^o?B~~?PzMrc]TlYTIdQhSiVHYMK[cecFTRdlTlbL}G}rdXTlRqvFwZRihkfSohf?uS?~~~w???TpulfW]xSiTIdQhSjJWci_}OwphT[Ysuu{Rek[|kxIzMLlMLtTn`oLRCxUEh~??NwB}?xLT]qNXNSiTIdQhSl`k@rahbchQ[XllM{TTnHVkYuRs[vwUrkZYjSRMHOsf`???F~}?~u]PxijbzITIdQhSiRU[DGNHMIkbFpTfWtjWvkkirrUNqijR]NpMZHhOvARiM??B}??^~zVXFNU]QmdQhSiTIc]p_WqYQgM[qLn@mjMUwrvIMjuUUna\\bilbYsYRdTKJ`L~~_???@~uFjInctbsiTIdQhSd\\SAQiBxBbEcZf]DlVEuN[gynXXYj[^`lMieyaXpIEc{N{@~?^o?@jkbfjNHU[MFB`ow[bp~BERQT@reQjbUeuva\\Fu[jIli]L}DkzEuihhOvARiM?F{??~~o@xVqbl\\dcw[MFB`oxqxJTGNHMIkbFEZZRnDTYjYuWxzdkfTUqsvwpm@iWfIot?F~~~???Eo|XT{ek[w[MFB`oxXkl_wpqQYO\\Su{EykxZbxI|bUq]btThnFwfLhUCewiH`n{??~_NwANXu[bqli[MFB`ow[uZBWqSeG]QiM]IkzElZEzHxjqbzD]LlMLtTn_YRdTKJ`K???N~{@~TpulfW]xFB`ow[MFEjU[AjG[hKXG\\Yup}B[yitbflfHVX{Rk\\TkZUcyeDKwEq_?B}??^~|fc]Yiw}ow[MFB`ow]NWo@rahbchQXquiupe~EqqjNLW~HkZi}DmM\\`[T@iYSR~~o????~{einXFkfb`ow[MFBalVT?h@xHpTcWln@mjMUwuk[|kxIzHnolfWutVAwiBSsgf~?^oF{??TpulfW]xXKeRHcqXNC]NwqSeG]QiMRdlTlbL}BvIMjuUUlTYZp}HrXoLRCxUEg?~_?F~}?k{brTVFuXKeRHcqXDnJclKXLHSFMXDjZFwLrimqqjNLW~JEufEyivpSRMHOsf`?^~~{???PzMrc]Tl[eRHcqXKbYrXZAjG[hKXG^EZZRnDTZFu[jIli]ZEyn`ZbfBQ[ih`[Hnw?@~?^oBVXFNU]QnHcqXKeRGZuZBWMK[cecFTExv`ZTpldZUrFN[lfa\\bilbYtLIEwQ\\Po???N~{@~xLT]qNXNXKeRHcqXHrTjM?M[TK[dIRTpjRZZpMkfenINkTj[^`lMiexUCewiH`g?@~??N~~W]ki}RUNcqXKeRHcpfbuKCdSFqFELJpTfWtjWvqTzElc|FfTUqsvwpcyeDKwEqn~{????NxxVqbl\\dfHcqXKeRHTTiyg?[wiWxISfpTfWtjWvFu[jIli]{Rk\\TkZUm@iWfIotNwB}?~_?C]rkxFdZTSiTIdQhTw{Pw{]cFcfDUPalZW~@m\\TxI|bUq]bj[^`lMiephMTSomCoB}??^~wBctTzG|c{iTIdQhSiUj]VJcci_}OwphLn@mjMUwzHxjqbzDZWvT{J[[xLIEwQ\\Po?~~~w???k{brTVFuIdQhSiTIerYrXkeQcpBqTPovM{JYmLlkkirrUNqL}DkzEuicyeDKwEqnw?@~?^oEo|XT{ek\\SiTIdQhSZLzLeoKXLHSFMXHquiupe~BUM]u[d\\e\\TZJR^bFIocvDPKL???F~}?~l\\c[|XxItQhSiTIdSy[tYlOMK[cecFTWrZY\\wijRvIMjuUUmLlMLtTnbAwiBSsge??^o?B~~NI}S\\jkkidQhSiTIk]K{]N?TXBdHbHBt[Ysuu{RdZUrFN[ldTYZp}HrYge[Q`hNB~~_???@~TpulfW]xIdQhSiTIilTUjT_Ik`qcpc`xquiupe~FHVkYuRs^EufEyivoedB[HMgw~_NwB}??ZBtdVqYpow[MFB`o~aNwb}G{dSFqFELJEZZRnDTZkkirrUNq{Rk\\TkZUqkHLpSRBOF{??~~oAmMtkzBvGMFB`ow[MlxJ]QvcBfDRFHQcexv`ZTplek[|kxIzLTYZp}HrWYRdTKJ`K?~~~w???NI}S\\jkk`ow[MFB`utdlXZUPbHhI_xrHwirkYtkZTlZK[|quJ[^`lMie{JagLRQa^{??~_NwArqNLT[^WFB`ow[MFLzB]ovkDGNHMIkbEjbUeuva[]xPt]qqtZEyn`ZbfCyeDKwEq_??@~~_N{]rkxFdZSMFB`ow[NMYrekxiEQcpBqTPplwLtXqvFFu[jIli]fTUqsvwptCraSLHwO?B}??^~~HijuPzHwMFB`ow[NbNWruK{?wpqQYO\\SlZW~@m\\TkfenINkTe~Au\\bZTV?tKRdWYf~}????F|jkbfjNHUFB`ow[MFiiyimij?'

py3 without this patch but with canonical labeling

'~?ExH__gOWkwRGNvRBv?qFBBWHcsLb^sGQOUe_}rejchQkJC^GARlW\\@IpUAlDCFAplU[YI}QMYsqEBWr_TYx]AiIoZXcHzWyHuhVMTK{CGV^zVGGxICymlcuf^CGJ{KOTgBbVth?WeoQN??}\\rqZBx]rjaiX}qaqmeMTBkC{FA??hESePw@Am_lUhXedcAo\\wdGxugMiBQQ}kBF{Q}T_mI_Bp_~?tpWhMiXbQ^IjsWD\\loj|UQC@hi{YJrsyxinQ`ybF\\yJx{Bcyz|akU@yNlYU_fKt}xQ[nN}Y[C{aNoaRMedU~qDLSTMhJkXhxsEtiVYeqe^KGQIJy^lKVbHSyKolAdaKDevQTfLCA_^S^z]MWDSr}dMbMe{jECHU^MDG{QdL{dV|IDyH\\ZEbwkECO}uLOVIbOuoDYSpLHHTu]@zOxB`CPryhvD`hW}d|cUgJSNl}E^SK_FctfkvTNz|DpihjSUTM]k\\\\jl?NLbTXeNMAyUjWd\\{hcXo]XAEeByCZ]^~\\geTzqh@]^erkLYNtFEx[Rys|vCXGlFVBrmgukoYx`^e[J[EUyYFMbaartPyfreNrMqyEbDwErZXrKF|dskWbduZqOnDkifl}qnZndgqpLjOee|l?`ylvm{ZPUwRM]cInO{hCUMJ\\b|se_YVLAfvr_}JJNAajZgA}eKMlqkzbzwxvNrWtMT^YbAt^GzPO`[YX^}o^dCiyF^bxuI@GfnjIzpE_oW{\\mgM]]wDu{^er|IMrYEmj\\chjad|dQiTuBsm{{JHeiTY[ldZE^racrJGMEu^NKKTqsTV]iSLtXG^uYHMp\\ez`zX[yOLLtJt~MzXCxM??LjEBxzrBnrbDWxVGSxnqt_ylqvFkAzwQGWvT|wafzODSvK{|`}vqZcQztYtAzURcyliWm^Az[QZYqFwobOn[sVzNpdLuMNqE_fkLf~yP{T\\x@l_{nEhH[JHy\\I~`lq~rxKpmezvBWoDQnej`n|hLG^aBDMB_WtgFChuZtBwGpVSVDOXCbekEvJEbxfSu]Q_@aAG`AjvHzpvR`]yeJNAiGeVpH@?JWo_\\vxir@m@?aFMZafVCRV@{FqlY?rWF?MwyfW|Qv_FwM}\\SJAwat@GUiPjtcGVTPWp^QAKopzdJq}GVG_qaFCMNV?u}D]ZQGpY_WZs[Ey{Ma\\jWwRcBPVeZcqECWs|`Av_F}VBltyyHjgWIX^RJKapG?soPm?NuDl?p}uifgGtJcXN@}ni@xd`gJLMWm]CQeD]Z~QSC`}}XPPKIs`PNhFr_oO{\\XVrjBY?{`Gj@kvnCl~DYpWGltD\\{MsCP@JlzKySEjLkFESRxdVpQ{YKhb}`_ia_dVmzE{wPkmI[Dux\\cNVQ~N?ltLCgHKNEJhQieVI}Hx[tfTGdhb@i[jN?FZyB\\H?|BjZXhTdNpQoC|I?\\Kby@mIKrUjKWmMtN^SOD{zjYG~vRhk?`ZWrWuAxH\\AnvdmIG^\\o{vYrRc{Dca_WuWR{|eXXNQPx^ViGRDho_Ld`sRLdE`k?ZL{Qvwm]?ZtGnLSfx_fQgOXG~\\xhtMyhUgqS^qMS@mLZu\\vW]ts?IIHYiZ{@le{TFWxS|JDg|JRycQJKL~geszyGMKZX]^eoKGtkuFaJS{u_OvvsDN_\\y^CgoDAF]rD}|nic\\^aQ@BvT}Iwa\\s[BKqw|GrxMP^fz]NmIcAwkAsRhGUFtXOie~]SAoAwaxwMF\\TUHfzqj?RQ}@FwP}T@MC~}yM@kOkpm{xiJH}SQvd^iJHnPHKtDWdWaOcVv|EpjSk\\YJxcoVl?Niacz}WgLJU[RLy[SkOPQd]nMiRS`zqy{{uVDrKTeA~TyOWogL{sxBujXinx]uIUCyESv?EL|nbB`LtHiLpRn`ZddtKyKhFWIiCnbC}dRrPUZZ_KbEVjshSkkRHm@^\\lJvWE\\VLnk?hpV@f{zD}Qe_N@fPsQLFtMQHcl^aSqVQUbSbj]]SJxVonsHZj`QFDhvDUh}U?Z[VHafE[F[fOEI@]RxuFod[zlqQYzJ|_UfiuMpRKvzmOhr~hft_H?PWE@iM[ru^yvvn~RCe?nt[pWsGG?[X?Y|ZbJJS_}FPnLR}?}KskPPps~bk?G~t]skRMOdk{BhWluV_qqno_}hwm^s|no^s]OWeE\\io]bCAFiOBQT`|^kzOk}|?AbvfWcVwgOF}@iElc~z}~\\KkUJmLiDBY~nK_Bg`gVh[bP~hTNTQK|HpYpE}PgsZFkHWU@fF}NLWfoUN@RgrmpzUew`KTlysTvyBfFcnHxp@teK}q}bTHYAVBUxJTxrXYPSmRxdFm{ktkqJQYOQdd_w^FVfZSFl\\NaIsSfo`R|IZarXJkaRjmK]EWWn]?FjBqTgcc}ltxMSeXckcbOQqrUnN|@{t]OpQR]U`OOb]nIulLYs?\\txypDNnfHkgQv?_rm]eI\\Ks}Ahxk{SaUNJbjPVe]J`AvcerhVdd[]groGLSIqyv[][iueNiRM{@?zL`bZmhcllacHNF^S?[rFc~s`]`je~mmSWckNiIElH~}j~DJZHGxA?BjQQIGvJQbbo^R}[Y`bL{vnaGbLXAdXxYMa}\\TVgiqjeh@}u|_DbZU[FrSQmetmRw?}QlOikkLnzj_S@HeyTglFryMUTt~WNAMGc^E\\z\\xcaT@Pwr]pYU`yHy^GOKMJ]]_n[qhzZYv?cSFwVKxI{ykh~JqbklP_eIuQxFfNrDFKYiEzjnDcGjndhCUWLVH_rf?]{r?uRFCDf^~zl?TUZ\\qKYBhFpkVAizrusDqJ}AJvAakHxsNEfTOsuMOz@SKwLJwvBzk}RU@iR}IFxf[q]o~tcPs[{ldlIkSo\\KW|RBnByUZ[ZiSMA[gN|GPxbtxgHODzDlmYjPU]RD^k\\vBaKG]WLZ{zruGqFLmVTO_RyKdr{r`]WrL]C\\GHNMtT\\VABNex_idiQrgvnqk}VCsArE?bd@~iG`STZmQulnRO`j{^j\\idQENel]zCatnRSmCp@tAuUxZU\\bvCwQX@N?D~fsb\\eE@Iy}sf]X{J@uuTO[NtfdJOvyod@PUQKgy|n?[{ayTgVubtc]rzH~?_YKaR\\T\\}MeiRrMybnExEO]guG{bw]dPdUQIfxZS[TDjF~Le{JIA|WJuj@erX?vSs@dFW\\y]Zv[wpfSr]uAAXRudWSotGb}{iU?|capeu|kvSp[za]]hCCyHo~?zCpe`~EOU{fNzaUwnKjmBelmFs|yGRm?]ZrnRr?eoYcU`@@Sf?D_l{GpdM|z{X|ZsXe{JNhSshbN_JDtKp~x?BTlCVyw^ZTVCZaN}aJoZJZ?SM?nLyllVaQPwrEdFodE|{j{Sabu_HqVIdTDs@q^K\\\\dFzu`xXASUVUCWcz[j|eUYpC`dGYPUmiju{]FTyMXLcIafEShz]`uCATXzZUIALLZtxKrShmT{m`Kl`Mfrrpt?rBx`DxKoJmTu|EVUTwQbyJTZb_[V~SggRGljQAKOQNxvEzVamfYGQn@gW|}UE`y[W[hLamGJi@YzwxHfKW\\^_Yt}k@~RoqrLVDS[f]_kPKElJbpKPTL^YS~fVA?D^xlovbYzFTFeZEpSdTOM}vY`fVVhZOJl\\VPXqWqTX_dSyzknEgoafxRcemZxKq]dk[lzhtNs?K]_Re?F?C}b^XIeMzMLZq^qLB^KyUppeyE^AJPgvZzCUU@gWiBfN@|EeydUv]dJC^XfjQdRWWvzKSoTlmIrsEB?Zc?cT~fMuqQbuu~LLmQU|LCoJYTae]oeiAwGZLnCT~cdmjZBI_jtj[kjQjoCMYHUfnyZGFGBV{DAmzLTNX]M{IrU[trOKHfYpyHsLJ@T`Epb]Y~pB~bHg`kxZPVPvDtYLugANU^n?iAP}?NYBrxUZp~Bo^QBYZBWqTprU}FdNrMooAdQ?jp^]s^X|PsgpO`QjtZikThwb{GMRYqDrQg[VgHe[[xLJrNYxVovL{nC?N[]OEyRYQVS{FEwoSQ|~rxjXtXCT~fpkA_FBw|CsEoSiXOO]XtbxIG?????????????????B~~~~~~~~~~~~~~~~~~|HPb{uVf?o_BZQIGOSK~o]mg~v}T[Kl?XfY}iFEiww_MZhOLhGyeoK|}Kz^V@|~tbg\\GgrcHFAsbqmNArqDw~D@_\\_YBr^oHYyax~eP^`aW{dxFsjCfGctBOq_@NSrc]|~QFuAwMI]U{rVqXpLyOCUtaF]EjUUsWgM`WVll~rRawlU\\AuubKdTyWFGem|az\\Dy@EgTA[^W`SgtZJ\\eP|teh[j?dn{QbXXu[[XgaK{AK[u[koi]LD~egxXVQkpwI~TUQBaNW~SeWV{CFyNGikEIBjdyQD~RD}UPKmstI|`Ra|xesDEd[ZcHhp[PoFVJtYbrzUFX@O@^nsItYgvWVZ@dGS\\nANe?uVGF?Ne^cclx^Pzm[P|@CNzMi|yOTDh{bPyBLoHbhg\\SlWMilUS_C|mjt[zzPFslBPRUB@mHm}{IuL@kdryvMkaLegG~VZMFBdgF@NjrOSm_S\\Nm~KB`W_Bcd|`~UejqgPVefgqlFP[mNPArZsSIuBvLySI\\BHqjLfF[wGmC|RzqLjHKnkq{sJ\\ipAW\\FB|OUUSjJ[p}DM]eg\\VEh\\^UkHASML|HVNmwISPjSsSXXWOLzp?sVTwVTWY^LzcIjqI|_cX\\koEpdAx_Qf~SiUv]KMqzkg~vEXIY{SBdMITnglNgrOtl[EhMsxHorKR^Eo`|fbBhy{nq^?DE_zlb|mEjiD[C?Mq}dClTVbnHpfSfDpgFt?LbVeuVVFB~aJI`BqLBwCahvMlS|]Ju^~ek?Lw[[cAFGjmsHmwr|cE^mWBgcT_teW]cTlJXNBK|\\aH~zaTfTgO_]SyBi^BKdtYmSRHw`ZTyWFp|sZwr|N_d[wPFc`DhTI|v}]OHUKxig`z@}UOEc}}`PNN_kQyx{qmx`SSLmfsRAVMrF|GLWf\\C}IoSwZEopZNkGzzVeTIiTdu@WoxyxgLTdFFW|xNSdTBikANgNa`DTYtHcmD}uLubrT}zWIFEwVH{k}\\bSBL{lh@gxuvyUR\\N\\I?D{PhDZK`YAl]QZr\\f\\?A[L`ScpVI\\IZgVln?vdPaYqonX|IM}cCDUkiFdJHczStWVaDkpMbhYfWOs^YzFmEK^aXYRbVvCVEZShohgwCS^^vQ[atnhKvNiX}HG@H~abKrsLAm{LM[dWBMQ^jZ{htQgKOJnVbgsN{~KxV?BEUZ{?WOn\\s\\X_vWjoWuaPBTDniJ]pbi^DrynAP|aeWLF]r_Vw|FNH@^@qmYBvth}Ges@Xe{xVNWALQmKaiq}SvEnP}Zj`uxcdOG^XT}grJDxdvFOUEF]JX`ySlNaJEZER\\p|{ha_lPTmKQsuZ]lQDiB{KJInXANi[eG}ehZ`vOetJmUNV~IdmvOsb]EM^oPY[BIwuaRezi@XeJtKdpmRP\\x|ewWmvES]gYiqiLWHVrpZKBnuBoZDR]qbIleR|RqI`^zDSevdP`RUkc|@IVzlqejcKlX[}QX|OZv?fnbWEmCb^Dp]Gb^AsbYJjdwpGCrTiExkfjeLXuwt?AEJ[xph^YjfHj]gMjtgCw?ts_[\\xhy}JSolpxYTreC[Qh|fYoMLMXurHfEfFsVqBmCRCI^`qBvVTG\\wHJqRTFMqYxOUx|rcT||e~iYhsJFshtpR\\\\wgJePpHvXUlxbCQWioCusMzdenI@Tmtb\\UuBT?Jb]skzrSJNHOdQVhViEVOVbfH}^vEABi`Y[uVcXL\\gfbV[W^ac~O_cvastA\\y@_x`t`eq}hDln]}iREhXlXKtfA^cg]wRJfgUuPAaf}tbQqpD}nKdWlqM?pt}oAO^~]uBXfhhgTkDCELdaeqHVo^qQVGfif|s[NJ?ZvWBB{dR[~b|rpxX@uAHWkxOSg_s^eOu^BSX^}I\\gFqdRieDP[zXtwIzTH{WUpVUMDorLd@{kNFrEiM^Y{jsyOKBDsoxsQoi}MIwWLuI{vKQKkyr@rjnFdWmyttMbY@SiMbCkK\\oshdt\\XxQYNQf`TSB|]IMors\\Qivjk?X`zJivPLObwrkmrUVMrbH|LwB[epIrNz``CFUXIn~xGusM`UICXZpFDkdbspYzwZ^@zw[qPz]rK\\pOIsxGdwmI}_Xb{JVkCTyH{ohMxeI\\^?M@SdtijCavXqXHsNibkvnH@JsUxvRx?D}OyCwZL^RHADp\\r[HVBxnxz_XxlH{?WaF^Ts_I^Gk?{uZ@Pib~mAfRNTq]hHpmj_jH}~ruhPu?yOEIRmsxJjg{GCVp`gkmbjQ]DGa^`depwX@~VeYLFWNTM@~eDP{wiLv{FIBnZ}_?CygTDVAKH|qSiAQ^GWxvVs{YNBfFAwL[y^eFXqcAX`SZDq}oromw{Jy\\{EokwVRjtQT?]XrQpstbosmkWXlO}t^@audDzcwAorDCx`^WFDDiuey}_ldh|_xoHkemrcaHiEL`dUt]IZvpWWUt~HE?MzrRmrQd\\\\Ss[HDTBaKnbpJXZxH~PudILkSnsR`@gL?rlueCz}vDtm?kLXmYaUijELStU`HflmEnleVWc\\IBBYK[iIDB[yWwKjGFTMHTZkiD}eQk^lNrr]@FzKSeWlCAaJFzXXQn}^XbPAqwp{m{gHwaUfH`g`mzla@mucQ_{|\\VwPdiI}BhKi?eQIftnFq?TWNNUpxnxeKp_MNa~imQ\\@hCmeiqCHR]rUWbDvDBQHmnh]~Cj[QTqt_}SEYrJTERsctgVj?LhnTksdrYWH\\Wv?ep_TV}klgwPuj[VwY@TucWjVM~Y|xlEKMBKKPeXTMoENG~[GPHQfDHY`]pBnnlJ_QJhgmJ[z[xqxgYJpJrOYmPIaIxNg[LUdySj}JX\\un?_o~zqFbQCE~kBrT{`e\\?|iXHJCMrjClBElVWORNIkKk?qEvy~n]?UYdMG}IEziXf]hciLqR_MecHb}SUzAi}oqPnFpq~zGUdBWyh\\a?YxfO{p|ltCixKyjuTUdRcAq?YVjC_lg_o}H]mdGy]}GssgQf_nIxDakw~PQPE~dgNsx|goS_GR`\\PU~nN~VFdHnRrydY_Iais`zJeQJhTtjpyqYjHpNR]P?Th@l|S}EkhuwajZCgknOxU^LcfUIaxNNnkRPcYdT^TUFQ]J?KS|SH|WOkJ`_|URLTQOGyM{vRNKRyvgC\\_jLhV|pjK]duLI@sIsL|fuL_JVxGDN[SM@V~}KK~AiO}eEHL^KNoQYBXamJlbYPguh`kh`reCr]NbE_sbv^CGjxtma[?{]squM{}HUfDRm@GR}NBEBT~DKX_\\qTqfCVvEKpF?}w]AthKtY\\_m}kEkhgH|v`_nfTo_uQV{AtVCFFXbxuxlk^`i@un|MpF?IWpr[[j|pIE`@^`@q~aiNFaf{l^UAIWaImuGeNelbBho^\\Sqx`VasP{D{XIogn}StoRoxJHMP{eY\\csd@kDpF]QfdFcufil^OD[{]eWbASzWTXh]LrpYIhE~OIUZERgYLA[Ssvk{a|kBjM|SE`U~oAuMpT^@My}TkRHBRdQr]CaXRxv?\\?fFWAk~_N^LLLwtSzp_J}WKNcIYGKLCFVwhqy]psxs[Z@zVQQ}a]ODpYmmRm\\uVgZYj_s\\z\\WOAocqepoO^TSNxJFjLF[Krl]KME@nSPRqh^JaTq}LQzpN^i__]QhDsDvzRaJWcZRNFIy`fKPxTUuJgWPdSnPNkDVq\\^YthHRWDr{cbFXtL?~ybmPdJaiMv?aBf[@Zrlts@C_i]f~lQ]LxfLsaFSvkHm^CoH|fJDJJqVIPXSMhHuOzQZEfMMX~wWZUcFWffxad`vEUhBfxVLk_c_fyxKZexIFUBgl|HAfRUSPL[mUoTp{FB_yqjRd]CJBZVw]OlrtVu^eUG{g\\pXK?su_crXhaFKCCvhSRXu}DcmMs}}NYcc^_aMBL]N@CQMTZRnt\\yjEE@HdLPAEVzf?yVfj`kSaz[~avsWEt_q]KRIkMYfKq[|~KOkomoN_OnCsiARq~_}aTIb{?pvhBxz^NieVu`bsWLD_LxTP[`VM?V[KZ[E~EX_yde\\f?WHMdkefxr~mqzib^Sohz`QMrQ?iyGvQle_^fLxqhpBBL?rMBNn@GRcfeHGno~ITPRZTeALg{s~Ffxi`zL]yRdC\\Q`vbr@OG]RdW_JqLEo[WrvDTqlA[xmvMmPe@LLsJmx[{CdjMXp\\j}DIdWwTQYJ@LDBrFNSL[jKvfGeFrol\\n_Aq}i`M\\hyDfU?yyU[`|TYSwTkFB`FqF\\}@l]sWiDwPQOHNzl@TLiTjVchyDop`\\hiYmaMFd[awD@h`uvclTiVTxcnFfF_s@bUaelspYnOqVNlKlwWpJUxbUcjf?]OZNdgCcprjYn{Bx?qYRJl{O|?HumG^g@DzZPUm\\XhjP\\MNygZpciWK[lkILxI`aE}dkdheGQQVx_fXB@pfk\\kaSTwxtI[P|ZM}LiEHaJJYrJrC_LtmY@{\\CNO|bwZYBT]UpY[NFnzjhcaZWbGvPMkUky?GNSdZM{|VKvAHCrY`sz{V`}`DFSL@KNRvzFetRcff@tdZAO@zqXHgffJSaw_}uU`iKmFYzXSINSYow?P[Y]QqZmcLNK\\FXZsklkCItMQ]GxYvzG]UdVMeGdu?EzeWJLKeQnZ?otHItgzEb{qmgte^hXckmiiUEdb?JZmMAqsfBMlHNJEnTJBuFhUDMEDCxoQcyZvF_wo~w_wimfj^B\\mAwe]qE@UCMRbqrcUEhUxeawg}G{^`BaFAk]FT|VqPHLzRG~pLJkCsNWhOcmjZdbN_wUIokRWsjNmenBDMY]gk@Q?LlO~p`rM~Ta{}]UwEKgNtlbzgG{h_^KBslGBCCulZO_{~UDhSJ`W{s]Ix^erweOz~V{eO_hQHsZKejpqUOPhnaWiR`hX{xblzdHAC_xgFqc]ZNh`@^k\\|[YJ[qknANn?`^MZDnrDMQGoB_TGDOJEPfYfSe\\soDpz[DJ\\bqrISLT|B^OlTvuJDXVBBunSs_`\\QwcoPxUC}]oMEKVrdVFQ?qBThZe|{NF[nrASC^^P`YGQqTDGp}eX~AjqUa`qbFtC{bBUYkqrd?IaVI_^\\FmunUlDHxlThVIlV~ASIFrMAjGKwSJihOCfbWieNCBbXaG]a_OXLhEGAy?ytEiSW~Fr@YCU[}^oumDbCq`|^zNp`NeY`UMpqKRivzx~q{rko?DuOBaVu_?b}msY^oTHNWRUl[zr^R^zqKKZIlpO{|O[NE|zP^Rin~EE`]\\OQbGb}dONwAVBGfs~{rScDEBO|Xslyf|TsPE[vS{mQ`Bj[]ftn}x@QdyAsLLeUGiTqy_]Z{YokiaZkElzYseR\\iNu@xnItzAQr\\xulQBXfTObo|~@p_^kBwFA?{@|cSr_`x?^?~^m^_wNzs}fFB?|oBxz~oF}boNf\\@A^IA\\HcI}@mpJELcy]cn@\\VRQ`d\\TJQFeb^q}q`dTc]nXRBz[DS^Rfbe^CR`g@R@YjDvJbgMlMe[wRRp\\qenZZAeHSRZ}sF\\rvPGcKTnR`R`uj^WPgRhREddw[SRW]cBvrRFGRl~UOyxdhAeffv[FCPN\\CAnO]inzvcx|Q`XyIcBhLqLtr?Ag`x]|eaAj_uJKivbcgB~m]Zj^V^tGp\\ZGGZ~vkQ{GoX@OUNUSgUMb_RHcgd|{jXds^JEEiDItzsHlxY]baFacesZyUhxinK}ZC\\krfGVSxSmhUcGGLlDtMhdGsd_csJ{Kb[~eav|\\}u^kahk{LHWS[ygqv]ih\\aJEebak_d^JUt]XSy@hDz_OduluEnSK|]AnqvbjkdCsshqzKiec]C~xCmeMKMkAwt[dXS`?E^no_eAUrwTzmEWzwknvHVgV}MuoMFtoK[FFnvDxAypISuVNKAUBfSDtZMNCi^pUWInEjo_XKzbYZtVyYkjMVLqanhC[cqevwhXHBZ`erGKZvpd^^ia?AaC@SF{`v{zWFjzeWpVxP[YNOnsZfN@ZPLwuL`sPykMJS]CVfFKyEmkB?Rro{lg@OvV\\rdpPzrQNPkIkXbp}UwuVIrg\\qXWjXd@sW?|~RLOPhxPbtwByaHn~\\G[RAb`Hw]izNAy_[yWpSKpx~DzgVjqyEslDeITbBBQnHPU^K\\zWEw[BbF`WIVDkh]yr]Ut]VgjNQLExUyYRsNXuI_ufurPUHpdIjX^XSeYQDEinDl?}C}Rm{LFP|OtVp`]XF_]FSUnrNXgiD^L`yOnE}z[S]P`ZL?_wkba]Uq[dHUSIatE|`ugL{zLZup]C[`\\k\\s\\eQpRNm_vlQGXpaPHdB^Jpm}ew@Q?ZpS@zdVjZ}LDzCZswXeQHgYt_nr}C\\P{A]Ofr~VAHay?B~^CGecJMiZLZcS^|a`bal`WDRlj]mxi[KybJ?uICAN}~g{Jlu`m[wg^TD{\\KpEDvhNgYfTXaG[dOhQ|YUeqI~RBxI^IlbbZl@_f\\@}HP]iZKrvueKrrJq[gyTuL?XYachRBsT{bolYwMCM]WI`J~fxuJVMnnG@Y{pf`TouHTmXbPHx@n^GP[PLCJAUywZJukPrOnTm{IaR}Q_Wdz^tDx\\lNMM^?Ycgkl{WhtSv@ahdOMFaXyi}sW@Lp^LeKD|sBnP[XtqtAcvWXu{i^}c{MnaIeAWo}hWsG@BlgPavH{t?K^K\\snCClM^GS^^swUhiI}`QXJUBZv_GJTMn{uKflZsSk@k]TLerOtUslnEpAEOni|Aa}kJOPl\\?UyVmudrOnRkStiPGNDooaX~tF[p|Jh\\ky_x?aPdR`]iSldX\\KfrtQKZ^QhbJGDB^sfF}HYLRzC\\?dmLFx?m\\S|^@~`akHOAxDmDC|@V]@KRARl^FtPevL^kpMToe?io\\ZST~u]CaB\\{{C\\MSQXsyhtqJeLHP@G^c_ipxTvZOpNP\\rjxhXLUTBnHTa~tgLK?}B_cq~mdGA^nDTgXyv[LrFEBca?FplL\\MwY]A}|rIaNqyO`gKPnu[Qz|sqz@CL^UbPSReQh~N]R`gFLdS[gvN@PfH[`]@CSJYsm{xj~w?vyRG~BxQE{u@awfi}TSLbpBlISQwOt}Ny\\X_OFP_[XNcXaUuKNprDermoaEcAexlhEz}JCpJrfLk}O@Jzsm^[raG`hU[LVh\\ZpE{xZ@kd_mwAgnWTflT[`iUUC^vuirFhwQH\\Ecp[Sv}cbxjQErRUUFbJUQ[?_fWW?]gdtj}C]hfdEtQ[Skf}aj[EbfmcSW@reUR}Pm_HJJuU\\NVJd?jtE|ZebFGShzCOGEmd[N|heRIIlVjeBIW}^FeXt{dbu`@Yab@jGhX~[SZ]TMeDfQ^Na{AD[TDqsfqSBkVLucT_`[jlF}WPtb~@YYgzyPqGH]ucuw?CQyl^[hmkgdVmqJjT@yFEOfPXsfOWNrE|LpYDr[Iym{FKe[ZOjGNUlSiokW[FnZpVOlLrJGNF]dT]FVID}QSAdPWCnUAsf]|RZWfa^^WfmWbXEp\\aheMEKRDX]Rg}NYF]?\\IPNyt^gr?MEg[uTRZWv@jCUAeWHVvmB^_LPViSgVRph~^we_yJaIvySKiwX{gQMXZewV~A`dgipmLDfy@Cmy_T]mOUJ}Ur_w?vsVvx?spEFX}qFWxs|IzcsWnLKaoNRph_PXTMsWbLbDJVKKDT|fHu\\`t@[]cMQwutss|mUgW}@KCkJP^Am\\itCnZGfxPVHS\\NNzBaoDzMl{gIylfEB\\euCL{aF?M_FlPBnIUl~DftxXLlIuL?IuET^^FOkh`hm?PmuCMl{|cEt|b`aBiHXQLzHaSHFmYpBYc~U]XJFiohPQCFcfnMutlDgB}|Q|VOLL@~PwKKRMAXRXz|Eh]OduNOHtN?BmeVEYiRtnVog`ecm~dboMx[P]UsrqCK~SX^LYX|r^kCosiWBbOVA{byq`rnThNBqDgWlW`Hw}{LcXgjrGT~PeYW{QZjkiD[G}IGyEb^{OgsJXGqaJbNjYzibjNX^~t?[KGbCmtR?vQrJ?Qr_yB[^kYe^sgl[_@pYHD_XeXzMYuBujVddFSWAg_qpENyWdTQfUjEbnRrnmQLbTtCp{}bCJg\\EoXKGm_kMQ[McQRIMn\\cyV]WgNQokXkhgmxAgj~pCsDYVNJakQZQZqj\\FOSxqXtmpR`FpdKNXCOZ^|zTK`CB[BSuiYtls[V]RnXhOLU@rDvBd_o{?QgvDeKIdVD^M~XzTQtsmpsWDGE]cHs\\zSZmZWQx]cR@yBVoOT\\BdofVQ`Y}vn]~pkCKHHxCtV?G|rE|YVzFsARhP@kyasy`VBsPe}|TwM_MNfDowcTDE]qGLxr~[zcS`\\\\SxzD\\C|OueCdlp`eaoSnlR?tLPRTgnDvkqNFP\\sGblwJZgbEvktTTPJC^QjlmKmyVSTK?V{BzFGb@G{gJ\\dxwe|FA@\\je@DugWmz{FimRHL@qisHJ@ISvvMvycVzi|BACcfnVcbCEU|KWq\\heMW}eIzs\\mScfCdpRbJ\\s\\PAgTQwX[eyQe^bJOvlas\\`fykKilRyXbcPrDDJoonLu@KOqN`uSdq|rIx\\Ue@ctKUEHPgeOhpoUBWx\\}}qJyABV@SB@J~VNTmsn^T@Ja}LV_JxQ^JVJaF^Woex_rdcdmWdpTTHhpd?qz{cNXKP~g_^Af|R@@JW[H^uJsozoU|hYPKPANcM@cpptyP]JBe]qN{xM_Hf^\\gjbXMYYByTAS[NzTIOHTTSw@kJ\\iyhnbbBV]wbeyrk?~^yCKdcoJdOrk|K|Xo@nM@iomViE_^INuVTYFWcwvEU{KH|\\x@S`k^TiGkFAXh}XSOHkZ@m[CbuzpvTuSvWqJBLPv\\|Gabpyp_b_Ts~NEBSKLsEXZrkMd[xYS{\\@d[g~QU_ix`s[N@sSn]dzKYatd?CGy{Vd|lw\\\\MEEvoOejnYMUMhLJO`TrqGSA}cVfXK@d]@PIXAyBjy|xcEh~We`G|W[uMr\\Z\\Cub\\Hx?PtgXee[CzhOran~dSTAhpNU@\\?ZDnSXY_vTkxkbB]rjSicVP?W{TbbnK~ILOrEbUlkRyLcmSCElXyCD{xzQVRl]xR]cQ|@QDme|_`BWfvFwd`tbo}cIf[ftMCjpeatR?i|XhRbua_ZxN{bWCRqf[o^CPILra{kMvVTvPIu\\gAVBrH`uYelGPAiTvz@fP]dbnCKHY}Va|MYfQDrccHbTe]_tqV`KAu\\Tc|xIjiAwyQVxPpDYjT|GVxAImRlVOPDzwYanhka\\_\\{QGtS@YlAtz\\ettPkeFpVF|gRDR\\lsDth{@U@_p[T{Ef}j^XRbFHfm[?l~JA[_XF?gwEoV[ArpXxn~af_hCAsLPUe}YLEiKdQVA|f[[kSe|QupgpPELxPRoI~qgdi]MptMtvOflLWDLhSZbxRdE`I|yG{Wo\\sARcFhIIN|oxUkmuskWRXOEOx]{v[YLd`jGJB\\KtqrYFSshYH`l|[\\??i~g`Kg\\nAm^jBuUTwXZH\\kGmc]hPNRDnVy_t]cJYE`MWYxUyC\\NBex\\GLpwBbC]gcsg~fG_dLtf[HqlzQS\\{rIHG{BlGVYAn}}CNKTnkIM~pQzqMOd`oo[tS|PAKBad|WrTwgO||ERIoOmuu^PC`jsPOxhFhMhu|cFSkzPxEaOFhsZMjbQTCtjmksCeAGB|uRByFhhZyqVmVxClBhizyuCkd_ePGT}AU[s}ZZKn|JEUoNjX{mDGatEgwFT\\nOca~CQvfOKITyRMyE{}DkZL}YEtpM?DtooNRxEmwI[dw]ZdZhbHulbGWy^VW_UgF{LQwpv?|]}hQjWAISyZ`dKbLpqKeXwfhii@WyoNjnf{Ba|GX{CscwNaul?SwF{czDkkkVnHa]fP?|cfqxuhcJV_TQJoIEuWB|rTxpyTBRU\\qrfYrw{qAAm`SGrUwPRbPCN|QU{q\\jgBerSkZcWiJhzSj^DVB^BI[FpFHUYypdm[ozhkUCNIshoJ|dYXjtaLAfkel?i~bgIKX]RIq^ujPO}TX{?XjGbYhw?\\g|@b`NevYnnCKNLmVSEqxQQf@anCgme~xM?sZqlkkOicVKuFf_Ez?IHKvdxR{w|cAM@iqxavgTs\\Q{sQHchz}fDXKwrIiXFG`kMzQWJQFeinmneP`MwHlgwEbT}ak[mIkFYFYNx`@wFDIHNNDXW\\nwxCH\\pWRdtUeF\\Kgoq@zdWZW|DWhM\\RjbGQQg}OZfu`YOZ^tHIfGhIZCYBt|\\UMuvA]hGLWNUfeNLJ{OyXvnWKxDCkPGrE\\rEAVlfcBOYVlBpSeVae{cEn}M^hyIDSjNaqcYlvgw@MPdizLwqeOt}xQorraAERgY\\TIqxGTiv|dPSbTQH~@jSE~G|PZQimPhxklkj}cPYQnEkw@^dATc\\cHv{zV_WjUBO?I{~HcuUrfB^HygQs|BTsPWqUbPrStxZ_WjteZREZTZYnmmsXqcbuUAq]NWjgXRwLkO@QonyZLniKqv@lW_~AzhjDE}qCyP[cg|WKbXvSofI|SfIgUSTclSTSwM^~^s?ojcYwEj\\hM@ZGUCFDDtnydNsxpprHnS?LLLcDV]PtSf_p\\O{bzz@T|HbCkunIBAW|KEiNvV_yngZFeMRSYfEUsXoWl\\G|TIDnOtIxa@XuxG{jbQG{cLGdoTRlv|ioyDtHmMG{Bbpr^{zGM`@Kjtb}ocDgr@yYkdZQ\\mhqCrzRPUHkMIoXciNIwI|dIkAvDuPTexBjVDDbQZp~bDhNhX]LaIEXHlvyEG@|eNke[PkIJ`NnOMDkvVq?{@MFsbkP{sdXeaNVbv^RP`aVWkeiwdpXxe^bNsGpO]ZShIfGPewyzrkUuO~NVFc~AHDPyA@OH}t|PMLnnPB]]US@VBNxhIjcaIHM]]~p\\hIlAd}GFO\\\\JYf~LaIAKS]?MqwY~TMCbQ`E~wHJSy]]yTS@nKg{CX|BSQgBFRtzcrajVvtoljFJBgBq]SSYlCxOlDvvZktiT@UW|`gMnJ@_EikqzqNZ@q_Aom}t`{OdaXvw@xNQM|dZZSVfEJSXsW?KkbHy|ixHZZXsLL@x_}yXkGbt\\tCGEGSN]uVmivWeOcjE}dydM`kdrIJMdAHbm}SlAXBy?ecZEphZ}UsstoUE@ZIQ\\CfBnmViOnDKKl`zVrP}M{OR@B}GV[dHoBpz|nBNqPwqQZoMeOr\\k?[mZmCfjoCgiA}EWETjMCUXFQNu|L[p[s\\S]wthy\\sAx_\\[Ox{qu\\RUYoJplljZ?A@VYRfp`lw]q{_Ift~ALa|Vi?kPOzZEjq_QOFmHfHNHy\\gjvD[c~LsT_HMcEVIjbeqzNlQiknB[iJvhpGY_TThorbRO@}p[wixELAJgdro[oq^}OHidPFZy|Fh\\heQ_jfe^bIBz{vY`dDjh^KgQScEGvFzsXDQsFlFI`bF^ReG?WlF`YyAmkrGzv`nfaHdu`j{DJ@rIT{ttqRDTxP{{SZGPc~sx`HE~BMka@tYcs?SYtMztybXn@@IoLdGSVydr[dKhy^`uflaqauq\\QXJ`vx{WUveKD{C[guTpcEKPNUD^JvJBdqGnwGFm^FTiAHpGGDVywyBHlLepXutJg~FiMbsr?dlom}tnEIuRcKARTUIJJcGqE]Nvpw[|CSLc[E_vr`h\\DdKKJvipq}owGhY^lsy_`Fbz`xWutyiSfus[WzSsLJRTAt`a?XyFj\\B[fD_doqx[hMc@QuN{EXhFsRP]TLIwntorYt]zl_HhXv[t}GcLLqphv}gC\\lTYLJgW|PlWIncGchvRGC\\fob_JAvGUsS^}XAxcTNFbrdr?uZfshmwPtky?^ULWxbZl|PuLA^c?KlQiYiUxyBJPe_|JE]a}}BGEkKoDWkw?OUp^^bjc}\\@b[~u\\A[_{lQB~s`^W^a~mcfgGmM{MNKOR`PakOitjuI]BxwIM_GkCcJ^nFsiFg~]W~}n`wh`g]a[DVYAbcyqZzTntiUNuHHK{NMAMEm?SFqo_j^_LjrQIOwar_gsCtRJb|ydEXGayJ~zRh?JJPVs~][Ks~b^Rp`FjXNqPnBjLGvKiIxCxHhUe_NQHbVHBCVaKGbloHWS|cWr|]aRJHpoyDey^j[h{]nHcKpdi{eMhtkxvkftV[cs?}qsTCRKCfCEtwv\\SMExoGznQP_DbKLhKTO{a^[^FUn{{wcN`XYZ[v}xAu`_s{WXYp{}uKgPCEWNfBFbuBfGrkc\\k@XFMO[ywBowMCppxfPujy{]FBjYB`w}Ob}Uo^oBw~o^~b~w?xoB~rcRob_F??~~?]?^w?WR|c?F?Bo?Fw?N~}^o?^K~O]F{?^wFw?^~}Nf|bK????????????????????????????????????N~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'

py3 with this patch but no canonical labeling

'~?Ex???C^ckeoLON?T_P~FHYklbWZBU[@zE@VT?bp~FJclUZJWuZBWYlXoFbuKAlVT?{Pw~`ZqxJRYrXZ@nXkLa[tYr_pfbuKDTUji_]NC]NFUj]VJcZLjLeqEr]rXkCy[tYlOpwrpw{AjTTitWFaNwb}GyvclxJ]PlXZUUtcLzB]ovkCxjMYregWruK|bN?iiyimij?fTUqsvwpwuswvTU}@nolfWutS{Rk\\TkZUailLw~CxkBWvT{J[[wAvFwZRihkAilLw~CxlFZEyn`Zbf[fa\\bilbYuqRijXYZ{W|_Uw~BY\\TLlOL}DkzEuif_WuswvTU}DWBWvT{J[[yNwfTUqsvwp{dhZb{LhtSvXZELlMLtTnbWZ@nolfWutTjMAilLw~Cxk]p_{Rk\\TkZUiygAvFwZRihmNF{E~Au\\bZT]VHYfTUqsvwpuZJWijR]NpMZZL`kWuswvTU}EjU[Fa\\bilbYs{]p_ZEyn`ZbfIt\\S?vwUrkZYjwbp~DTYZp}HrXZqxJULlMLtTn`lXkl`kZi}DmM[ZuZBW{Rk\\TkZUrejU[AvFwZRihnE]NWoRijXYZ{WyilVT?{Rk\\TkZU}NC]NFUw~BY\\TLjTnJdqLb\\VolprerYrXk`nolfWutSuZuZL_fTUqsvwprhrTitBEufEyivpbpfbpwDTYZp}HrYjTTitWELlMLtTnbpF{P~C^pMptUplYlxJ]QvcijR]NpMZLjJYqukavFwZRihkvkLzB]oLb\\VolprhrU[tfLOfTUqsvwpwruK|bN?L}DkzEuitT\\TVTT_CstRBI[BUIiRQq@rdQSe[WPhKxHWxDTGMobVDOeedX?|Ha[ci`L`dBV@MgFWfDSfHQB_eLRTHUDTQqF?zEQ?ugRdHkJaRcT@yPpaASwocplPLQM@xJDTc?RWXOtoRiIiUOwFWqW{hp`HbYaYRcT@yPpbqBY`MSeom?zCwicxITcobVDOeedKTSedcBfL_HhieESwEsb_]QpTXEgTHQXp`Ec{_]cpMQTPwB_eLRTHUCxHWxDTGMj?iQcrbALHq[agNQMKW~`L`dBV@MgpTQYUOM[xJR_eLRTHUEc[BqUIjHXZChp`HbYaWxHWxDTGNkL_ZSHqcuDpcBseHqQiYr_HhieESwEiiUOwFWqRuKECYwiCssgMpMIhMQcji_WPjagRRQiPoNHWikc]Nw[CpiYhIox?|Ha[cimVHYiQcrbALHkTSedcBfJLdkBY`MSeomDTJG[BkXMrWZAZBIEmA\\OxHWxDTGMtYr_dMKHKZSR@uHpTHqSbpzE?eeiWXR_ZHqI_|GwpTiygChp`HbYaZGFhKRcdTwbp~ECYwiCsshTQqF?zEQlx[dgeeiWXR_Y[ck[aicFZUZJW[CpiYhIoq[agNQMKR]rWZDQSe[WPhKMpMIhMQdMYlXoHkKgYwHtIPoNHWikeK{]p_EtA[hL`[KTSedcBfIilVT?[CpiYhIo`uHpTHqSnFaNFbbY`MSeomIPoNHWikatZqx[aZBIEmA\\QRcT@yPpauZUZLcHhieESwEx?|Ha[cibXnXkuASwocplPKpTQYUOM[fRejTiECYwiCssgxHWxDTGNbpfbpwDQSe[WPhLTQqF?zERTiitYk?ZSHqcuDo[ck[aicF{P~C^pFHhieESwE`uHpTHqSdnHZqU{chp`HbYaXTQqF?zEQukljJYqTHQXp`EcyPoNHWik`nWZuE|_obVDOeedQ[agNQMKXrU[tfLO[CpiYhIokTSedcBfKXzE]pf_HkKgYwHtK_]cpMQTTTVTTtTWFJWtTfg|eRHcqXKeRXxFeimNkuIrteNqYqXKeRHcqUmqM]k{dXi]uPt\\fdHcqXKeRHxLT]qNXNAmrFY{l`yRHcqXKeQ]T{gzVXX@yMjxUUmqRHcqXKeRkNUT^HjFANqkzEhxVHcqXKeRHTpulfW]x?kl]PzWjbqXKeRHcqW|fXqNIugEpU]kp}RTapWkUJDbqYi|c]q]bizK\\jquFeJDapWkUMo|XT{ek^cNPt^IqtuKUJDapWkUmqM]k{d\\ckl]PzWjbkUJDapWkT[\\jXuFmUoP}TfWtNIuJDapWkUHxVqbl\\ddiFJWtTfg|dapWkUJDbFkzMPxUtN?Yflc\\VXxKUJDapWkZNG{tTp|ak@i]uPt\\fdQhSiTIdQNI}S\\jkkp~@yMjxUUmqdQhSiTIdFkzMPxUtxJUpU]kp}RUdQhSiTIcjblZMo|qklaNqkzEhxVQhSiTIdQxLT]qNXNZBWTuWzVdkNSiTIdQhSjNG{tTp|bU[DdjqNZD[]dQhSiTIctuPrtfcjNWo[lbTU]buYTIdQhSiUo|XT{ek\\VT?TuWzVdkNFB`ow[MFEmqM]k{d[]Nwkl]PzWjbfB`ow[MFBqndFYzJNJclP}TfWtNIr`ow[MFBeo|XT{ek]rXZBS|kbizNGw[MFB`oxFkzMPxUtuZBWxZEik|FkfB`ow[MFD[\\jXuFmRTjMBWjNUW~Hi[MFB`ow[k{brTVFuFbuK@yMjxUUmow[MFB`oxqYi|c]q]Tiyg@yMjxUUmrHcqXKeRGjblZMo|q{Pw~aNqkzEhxVcqXKeRHck{brTVFuJ]VHYTuWzVdkNXKeRHcqXG|fXqNIujYrXZFJWtTfg|fHcqXKeRGtuPrtfcjLzL`kUUnG|kTp{eRHcqXKfHijuPzHy[tYr_Yflc\\VXxXKeRHcqXL`yqjxLW}K{]p_uIrteNqYxKeRHcqXBqndFYzJLTUji_P}TfWtNItQhSiTIdS]rkxFdZVpwbpw~JWtTfg|dSiTIdQhTqYi|c]q]Uj]VJckl]PzWjbidQhSiTIjNG{tTp|bXlXkuRWjNUW~HiiTIdQhSiuFjInctber]rXkBS|kbizNHSiTIdQhStuPrtfcjfRejTi@yMjxUUmpSiTIdQhS]T{gzVXXpwrpw{@VXbl]Uo{iTIdQhSiTpulfW]xTYilUj?kl]PzWjb`ow[MFB`|`yqjxLW~aNwb}GzS|kbizNGMFB`ow[MjblZMo|qU{dnHZq[lbTU]buOw[MFB`oxxVqbl\\ddlXZUUtcNPt^Iqtu@ow[MFB`zNG{tTp|`nWZuE|_uIrteNqY`ow[MFB`w|fXqNIukxjMYregIzK\\jquF_w[MFB`o~HijuPzHzE]pfkXwC^dXuLRqkMFB`ow[MtuPrtfcjiiyimij?RB[KigwHbQ[ih`[HerXkuZLerDTHhX?xqSR[WSougRiWSr_ZIZLerXkuZFHJFGih@ouTSHmCuET`HmIaWYuZLerXkuq@yRCxHTEEgL[QaYYge[Q`hNAuZLerXkuBkRaiRch?f`RT@khp`[T@iYSRZLerXkuZIiUOwFWqOiMHQWf`Em@iWfIotErXkuZLesfGiBsbbCB`KREwYchLIEwQ\\PouZLerXkuhF?{daiq?BXTOewRWQ\\RAe[BXSy\\MfRhsxTQqF?zERFHwStOZI[TCraSLHwXsy\\MfRhsfGiBsbbFcdCvEDKLiWVDOYedCxsy\\MfRho\\a[TQ[dIqTFChKRobSsgZ`HtFCy\\MfRhsxaicsk_[xkEEgL[QaYXoLRCxUEhMfRhsy\\MhF?{daiqLO[HaWvBSdBQ[ih`[Hhsy\\MfRhuONQWfHIg{@KLoqib_fIocvDPKLfRhsy\\MfFHJFGih@tWEEgL[QaYYT`HmIaWYlUjTitYlcxDO]c[Wp~B`KREwYcjAwiBSsgelUjTitYlWihLJGFM[digwdHa]CYRiWSr_ZIUjTitYlUsb_]QpTXJJWEqi`Loeom@iWfIotDitYlUjThqQpqIiO^WZAWZ`dTF@Mge[Q`hNAlUjTitYlq@yRCxHTLXoQaZbAeEtCsgZ`HtFAtYlUjTitTQqF?zEQ]p_HwStOZI[BQ[ih`[HditYlUjTg\\a[TQ[dHVT?dCvEDKLiTCraSLHw[]NFbpw{\\GwFckTUQNF{WY_tpIHhcsgZ`HtFENFbpw{]NGFhKRcdTqxJPNAeiBXR`oLRCxUEhbpw{]NFbWihLJGFMUZJW[HaWvBSdQkHLpSRB[]NFbpw{YidcM@uKfXkLagwdHa]CYLHqieDoepw{]NFbpfHJFGih@ujU[AWZ`dTF@KfSohf?uTbpw{]NFbBkRaiRchFbuK?uTSHmCuFAwiBSsgfbpw{]NFbcxDO]c[Wit\\SAgwdHa]CZ`[T@iYSRLerXkuZLx?|Ha[cinC]NwRB[KigwHm@iWfIotBXkuZLerYidcM@uKdZqxJR`KREwYcige[Q`hNAZLerXkuZMQUMPTQBljLdkQaZbAeEt@hMTSomCpkuZLerXmRcT@yPpaZuZBWEqi`LoeohhOvARiMBXkuZLerW\\a[TQ[dI[tYr_HwStOZI[QkHLpSRBRXkuZLer\\GwFckTURE]NWoWY_tpIHha\\RAe[BXPkuZLerXlaicsk_[xTTiygB`KREwYchoLRCxUEhTitYlUjTBkRaiRch]NC]NFEqi`LoeobQ[ih`[HilUjTitYlGwFckTUPYlx[mPKLoqib_eedB[HMgwitYlUjTiq[agNQMKUrYrXk`NAeiBXR_fSohf?uTTitYlUjTq@yRCxHTEr]rXkCgewoh`lQT`HmIaWZTitYlUjTWihLJGFMRhrTitBBSEmHPLL`[T@iYSRitYlUjTifHJFGih@{]K{]N?iMHQWf`EtCraSLHwYlUjTitYiidcM@uKejTTitW@NAeiBXR`LIEwQ\\Ppw{]NFbpwMQUMPTQB}G~aNwbtFChKRobXUCewiH`nbpw{]NF_MpMIhMQclxJ]Qvcot@jaSRRBQ[ih`[HnFbpw{]NAidcM@uKdlXZUUtcRB[KigwHwVDOYedC~Fbpw{]NDGwFckTUOvkLzB]oMCpKZ`iQa\\RAe[BXVbpw{]NFaRcT@yPpbMYrekxi?uTSHmCuEge[Q`hNBw{]NFbpwWihLJGFMWruK|bN?dCvEDKLiM@iWfIotNFbpw{]NEONQWfHIiijiiyik@kuZLerXlXxFeimNkxZEik|FkcstRBI[BXtTklL}KZXkuZLerXjkbfjNHVkTfjK^ctiQcrbALHwuswvTU}BXkuZLerZctTzG|c{tNZGymrqobVDOeedE~Au\\bZTPkuZLerXk]T{gzVXXTuWzVdkNHkKgYwHtNCzFTZEtgZLerXkuZZBtdVqYprs\\Vqkl\\b_eLRTHUEilLw~CxkBXkuZLerXVFYu\\`zdFxU\\bS{jEtA[hL`[Lb\\Volpr_LerXkuZLg|fXqNIuldjqNZD[]SwocplPKlp}EsyiZ?fRhsy\\Mf[einXFkflak|Xb{eiZBIEmA\\QilLw~CxlFfRhsy\\MfZBtdVqYpt\\eMtxZBshp`HbYaXkZi}DmM\\qRhsy\\MfRemqM]k{dXyMjxUUmoZSHqcuDpwfWyjWulkcy\\MfRhsxVFYu\\`zdXY{bupVFobVDOeedRijXYZ{W|_fRhsy\\MfFd^IMtuUW~IrkYfdXLLSoqf?tZb{LhtSutA\\MfRhsy\\FkzMPxUtxZEik|FktHQXp`Ecr^`ZMplihwCy\\MfRhsyrqNLT[^WtNZGymrq[CpiYhIowuswvTU}DWAtYlUjTis{jxPumqqtNZGymrqiQcrbALHlb\\Volprg~`YlUjTitZFkzMPxUtNPt^IqtuHkKgYwHtHtTklL}K^HYUjTitYlUiwzUrkN[lak|Xb{ej_eLRTHUDZb{LhtSvXZAtYlUjTivctTzG|c|FxU\\bS{jdMKHKZSRWuswvTU}L`kJTitYlUjZNG{tTp|amrFY{l`wZSHqcuDoZ{JXuLlTYr_UjTitYlUl\\c[|XxIzJVc]uIwxLLSoqf?uilLw~Cxk]p_UjTitYlUzBtdVqYp}UpijNPzMCYwiCssjpMptUplYji_W{]NFbpwumqM]k{dYmrFY{l`zAL[TAYYSlp}EsyiZbp~ENFbpw{]K{jxPumqrXY{bupVF[CpiYhIoe~Au\\bZT]VHYpw{]NFbpzBtdVqYpw~IrkYfd\\QSe[WPhM\\TZJR^bFXklbFbpw{]NFFkzMPxUtYflc\\VXxBY`MSeomIisvb{ReurWZENFbpw{]LVFYu\\`zdquLTXyNXRWXOtoRiWuswvTU}EjU[ENFbpw{]MrqNLT[^XkTfjK^ctdMKHKZSR]HuMiuLjRpzEBFbpw{]NFqYi|c]q]NPt^IqtuCstRBI[BUpmjwUwxqlVT?LerXkuZLiwzUrkN[bs\\Vqkl\\chp`HbYaWvwUrkZYjwbp~@kuZLerXmrqNLT[^XFxU\\bS{jobVDOeedTThnFwfLdnJclErXkuZLew|fXqNIuimrFY{l`weeiWXR_ZbZRb\\TZwZUZJWLerXkuZLl\\c[|XxI}UpijNPzJ_eLRTHUDkZi}DmM[ZuZBWLerXkuZL{einXFkfjJVc]uIw|QSe[WPhNpMptUplZMYlXoErXkuZLe|`yqjxLWzS|kbizNHL`dBV@Mglp}EsyiZpfbuK@kuZLerXk{jxPumqrkTfjK^ctEtA[hL`[RijXYZ{WyilVT?itYlUjTipzMrc]TlW~IrkYfdZ_eLRTHUFpMptUplZw{Pw{]jTitYlUjqYi|c]q]xZEik|FkbY`MSeomDmNoufTRYtZqx[dUjTitYlUrqNLT[^XXY{bupVFRWXOtoRiLb\\VolprerYrXkdUjTitYlVW]ki}RUNkTfjK^ctHhieESwEe~Au\\bZTRXnXkuAjTitYlUituPrtfcjYflc\\VXxQfECeLiHhtTklL}K[y[tYlOitYlUjTifd^IMtuURs\\Vqkl\\eCYwiCssjEufEyivpbpfbpwDUjTitYlTVFYu\\`zcjkpunJW]iQcrbALHtThnFwfLilTUjT_]NFbpw{]L`yqjxLW|djqNZD[[ZSHqcuDpbZRb\\TZw{P~C^pF{]NFbpw{IwzUrkN[ehzXFTu]PLLSoqf?vpMptUplYlxJ]Qvc{]NFbpw{Fd^IMtuU]UpijNPzKhp`HbYaYilLw~CxkukljJYq]NFbpw{]JNG{tTp|`yMjxUUmqhIRMKGselp}EsyiZLzB]ovkFbpw{]NFaNXu[bqljkTfjK^ctobVDOeedLb\\VolprhrU[tfLO{]NFbpw{[einXFkfd\\eMtxZBr_eLRTHUE\\TZJR^bFbNWruK{Bpw{]NFbotuPrtfcjb{jMpi]ThkKgYwHtB^`ZMplilTVTTtTW@pbccs_yijbUeuva\\~?^oF{??EcxTRAwRLerXkuZLcovBIiMAW[wiWxISdlwLtXqvE?~_?F~}?HtKIXoLdLerXkuZLhPLp`RBY`TcMSeKcNwirkYtkZ?^~~{???QkHLpSRBUrXkuZLeouTSHmCuCh@xHpTcWrdlTlbL}Nw?@~?^oDPKwdBQ]DkuZLerXl`iBVCgeeCdSFqFELHYup}B[yi???N~{@~omI_tLIHlerXkuZLa]DLSEqf?KXLHSFMXB[zoliwuo?@~??N~|oLRCxUEguZLerXkuiMHQWf`E_qSeG]QiMWrZY\\wij^~{????NyYSLocyb`kuZLerXkwRCpmEhI?WqYQgM[qWrZY\\wij^wB}?~_?@Mh`RM@ki\\MfRhsy[LdTAZ`L`bfEMQRQBinDU\\bUlbWB}??^~wAge[Q`hNBMfRhsy\\MHwStOZI[[eQcpBqTPqjbUeuva[?~~~w???omI_tLIHrhsy\\MfRhPLp`RBYdcBfDRFHQcjUuNoZfT^w?@~?^oAYSLocyba\\MfRhsy\\S[QcpNALu@TcMSeKcMu{EykxZb???F~}?~m@iWfIotHsy\\MfRhuEgL[QaYXiCdSFqFELI[lilkXno??^o?B~~EcxTRAwRRhsy\\MfRfAWeLotHPwDGNHMIkbCvM{JYmLl~~_???@~dWQZageErhsy\\MfRcovBIiMAYkBHQW`xIgwlZW~@m\\T~_NwB}??QkHLpSRBTitYlUjTmEgL[QaYYNwTXBdHbHBexv`ZTpl_F{??~~oEDpSEhhPLYlUjTitYwRCpmEhIxJPpbccs_yi[lilkXno?~~~w???HtKIXoLdJTitYlUjYbaSeHwPldkQTO^G[WsimLYZZ]Hv{??~_Nw@oLRCxUEglUjTitYlEqi`LoeozBWBfDRFHQcwrZY\\wijO??@~~_N|PKwdBQ]DYlUjTitYeEwXTPoRYr_h@xHpTcW}IkzElZEo?B}??^~yYSLocyb`YlUjTitZIHmKIWZSNWoKXLHSFMXEv_vTfJ[^~}????F{YRdTKJ`KlUjTitYlHwStOZI[IygCdSFqFELGvM{JYmLl~?^oF{??iHfCgYRow{]NFbpwxPLp`RBYc]NwWqYQgM[qT[Ysuu{R_F{??~~oAYSLocybbFbpw{]NF`iBVCgeex[dicFcfDUPbbLlhvail?^~~{???M@iWfIotK]NFbpw{XNAeiBXRarXZ@pbccs_yhlwLtXqvF~??NwB}?dWQZageEw{]NFbpwvAWeLotHUrWZEQcpBqTPrpTfWtjWu???N~{@~EcxTRAwRW{]NFbpwybaSeHwPjTjM@TcMSeKcMlZW~@m\\T??Nw?@~~cyeDKwEqk]NFbpw{YWZ`dTF@K{]p_BfDRFHQcrdlTlbL}N~{????N}DpSEhhPNFbpw{]NELdTAZ`L`TiygDGNHMIkbDlwLtXqvF~?^oF{??omI_tLIHerXkuZLeybaSeHwPnaNF{XIRCNHTFHquiupe~?B}??^~w@oLRCxUEgZLerXkuZRB[KigwHj]VHYWqYQgM[qJUuNoZfTOF~~~???DPKwdBQ]CuZLerXkuwRCpmEhIZUZJWTXBdHbHBwrZY\\wij^w?@~?^o?sfIiWVAWuZLerXkvIHmKIWZSLzL`kFEMQRQBib[zoliwuo???~~oF|LIEwQ\\PoZLerXkuZEqi`LoeorejU[?[wiWxISejbUeuva[??^o?B~~dWQZageEerXkuZLeq]DLSEqfEK{]p_ci_}Owph]IkzElZE~~{????NxMh`RM@kguZLerXkv`iBVCgeeiit\\S?M[TK[dIRwirkYtkZ~_NwB}??M@iWfIotIlUjTitYj`KREwYcjpwbpw|GNHMIkbDYup}B[yi?~_?F~}?EcxTRAwRTYlUjTitPkigR[HkItZqx[cdSFqFELHlwLtXqvE?~~~w???RQ`mCfS[TYlUjTitSovBIiMAZXlXkuRHQW`xIgwZf]DlVEu~_?F{@~?CyeDKwEqilUjTitYhNAeiBXR_uZuZL_WqYQgM[qRdlTlbL}???@~~_N{jAR[TCoujTitYlUjIHmKIWZSfRejTi@pbccs_yjEZZRnDTY??^o?B~~omI_tLIHtYlUjTit[LOYwdCsuNE]NF_Ik`qcpc`ymLYZZ]Hv~}????F}ge[Q`hNBTitYlUjTiMHQWf`EtYilUj?TXBdHbHBrdlTlbL}NwB}?~_?AYSLocybbpw{]NFboRohi_uSw{P~C^pFci_}OwphWrZY\\wijOF{??~~oCjAR[TCovpw{]NFbpS[QcpNALU{dnHZq@rahbchQR[zoliwuoB~~~_???YRdTKJ`Lw{]NFbpwot@jaSRRLjJYqukbERQT@reRpTfWtjWv~??NwB}?omI_tLIH}NFbpw{]CovBIiMAXnWZuE|_h@xHpTcWt[Ysuu{R_??@~~_NxMh`RM@kjpw{]NFbowRCpmEhIfLXrU[tBHQW`xIgwu{EykxZb??Nw?@~~tCraSLHw^Fbpw{]N?uTSHmCuFE]pfkXw@pbccs_yhYup}B[yj~~_???@~[BSpMT`i]NFbpw{]HPLp`RBYdTVTTtTW?B}?~_N~{wpqQYO\\SiMSkccMpk{brTVFu[lbTU]buXKeRHcqXKyiuUe~EN}?~~o?B}FMIeMQdHc`{ahbQML\\c[|XxI|ak|Xb{ekeRHcqXKfEufEyivo~_??B~~~ik`qcpc`oyha[hQ[fHijuPzHxi]uPt\\fdHcqXKeRHL}DkzEui_B~~?^oF}cFcfDUPaphIhHrGFNI}S\\jkkizK\\jquFhKeRHcqXNa\\bilbYs^~~{??~_HIgNcMKYTIQ[BxEIjW]ki}RUM]bi}TdjkcqXKeRHctThnFwfL_~~oF~}??KXLHSFMXKbCNQTFHImMtkzBvINqkzEhxVHcqXKeRHZEyn`Zbf???N~~~~?XIRCNHTFBeQQpBiiS]rkxFdZUqtxFlamNHcqXKeRHUw~BY\\TL_?NwB}?~~uKeciBfK`rHHW`tTJctTzG|c|kTfjK^ctWkUJDapWtThnFwfLg~{@~~_?F{wpqQYO\\SFTKRdIRcuFjInctbizK\\jquFeJDapWkUJWvT{J[[zc~_??B~~~xIRCNHTFDPqdcc`uJVXFNU]Qk|FT{jJVWpWkUJDap{Rk\\TkZUuO@~~_NwB}FMIeMQdHhQR_^GpTIwzUrkN[jJVc]uIwzDapWkUJE\\TZJR^bFkF~~~??Nw@TcMSeKcNHBxDREc[NI}S\\jkkp}TfWtNIuJDapWkUIvFwZRihliF~}?~~o?AQiBxBbEcphIhHrGFbu\\fG{jY{lbTU]buUJDapWkUHnolfWutS{???~~~~{@QBqRajGpqKO|HS[cu]PxijbzEhzXFTu]RDapWkUJFEufEyivoj??^oF{@~~xIRCNHTFIScwFqKTPxVqbl\\ddi]uPt\\fdQhSiTIdQZEyn`ZbfP~F{@~~_?F|TcMSeKcNcW`yQgxHbu\\fG{jYfgyndXYzITIdQhSiSyiuUe~ENcl^o??@~~~rbFHHh@tREcicfK_\\VFYu\\`zdkTfjK^cthSiTIdQhJ[^`lMiezJW?^~wB}?~qTO^G[WsdPqdcc`uNHijuPzHyNqkzEhxVQhSiTIdQplhpmil{ZBW~~~w?@~?@rahbchQReQQpBiiTfc]Yiw}pVXbl]Uo|QhSiTIdQL}DkzEuilXo^~wB~~??IO]Q[TXEG\\SpMShMPjkbfjNHVXY{bupVFhSiTIdQhTThnFwfLbuK??@~~~~w@bHhI_xrHHBxDREc[uFjInctb{lbTU]buYTIdQhSiVa\\bilbYtVT??^oF{@~~qTO^G[WskbCNQTFHJVXFNU]QlVXbl]Uo{[MFB`ow[Uw~BY\\TLpw~b}?~~o?B}pcsdO[xcTFIUQQFWfd^IMtuUZJVc]uIwxow[MFB`ovwUrkZYjqxJV{???^~~}cFcfDUPa[qQUG\\TQuFjInctbp}TfWtNIr`ow[MFBcyiuUe~EMrXZ?B~~?^oF{wpqQYO\\THBxDREc[bu\\fG{jYlRuqMjk{b`ow[MFBdTYZp}HrZXkLb~~~_?F{@chKO{dS[BieHqdHqIwzUrkN[mUpijNPzHow[MFB`rEufEyivotYr_~~oF~}??Ik`qcpc`yScwFqKTTfc]Yiw}rWjNUW~Hi[MFB`ow[{Rk\\TkZUfbuK??@~~~~w?M[TK[dIQphIhHrGFxLT]qNXNFgyndXYzB`ow[MFBbWvT{J[[xUji_?NwB}?~~yO]Q[TXEKcNcTKYPpVFYu\\`zc]bi}TdjkqXKeRHcqE~Au\\bZT^C]Nw~_N~{??~xIRCNHTFELHTHMX?|fc]Yiw}qNqkzEhxVcqXKeRHcijR]NpMZJ]VHY~_??B~~~kXLHSFMXIScwFqKTS]rkxFdZTVXbl]Uo|cqXKeRHcplhpmil{LjLdk?N~{@~?^tUOxQWqOxrHHW`tTHjkbfjNHVquLTXyNXqXKeRHcqLb\\Volprb]rWZF~~~??Nw?wpqQYO\\TcW`yQgxHxLT]qNXNUUnG|kTp{eRHcqXKfa\\bilbYu[tYr_~~oF~}??@rahbchQTPqdcc`uMo|XT{ek\\i]uPt\\fdcqXKeRHcUw~BY\\TLwrpzE???~~~~{@HT@{`pbQBieHqdHqFd^IMtuU\\ak|Xb{emRHcqXKeQ\\TZJR^bFTTiyg?B}?~_N~{M[TK[dIQFTKRdIRcbu\\fG{jYp}TfWtNItQhSiTIdVa\\bilbYvpwbpw~{@~~_?F}cFcfDUPbQcf?}PaixLT]qNXN[lbTU]buTQhSiTIdQvFwZRihlYlx[mR}???N~~~HT@{`pbQc`{ahbQMU]PxijbzJJVc]uIwyhSiTIdQhkZi}DmM[uZUZLc?^~wB}?~xIRCNHTFKbCNQTFHMo|XT{ek^WjNUW~HiiTIdQhSiL}DkzEuier]rXkF~~~??Nw@bHhI_xrGphIhHrGFYzGxyrqTlRuqMjk{dQhSiTIdSyiuUe~EM\\MYlUg^~wB~~??BbFHHh@tPrHHW`tTG{jxPumqq]bi}TdjkTIdQhSiTWuswvTU}K]K{]N???N~~~~?Ik`qcpc`tPqdcc`uImMtkzBvHVXbl]Uo{iTIdQhSiijR]NpMZTYilUj??^oF{@~~ik`qcpc`uLHTHMX?}o|XT{ek]qtxFlamMFB`ow[MFplhpmil{]G~aNwb~oF~}??^xIgNcMKYPrHHW`tTHVFYu\\`zctNZGymrqB`ow[MFB}HuMiuLjTnHZqU{f{???^~~{M[TK[dIRcW`yQgxHNI}S\\jkk{lbTU]buOw[MFB`o|TYZp}HrXlXZUUtc?^~wB}?~kXLHSFMX?yha[hQ[dfc]Yiw}o|FT{jJVWFB`ow[MFUw~BY\\TLe|`nWZuB~~~_?F{@QBqRajGpTFIUQQFWpzMrc]Tl\\ak|Xb{eg[MFB`ow\\kZi}DmM\\MYrekxiF~}?~~o?BHQW`xIgxHBxDREc[xLT]qNXNIzK\\jquF_w[MFB`o{yiuUe~ENE]pfkXw??@~~~~w?wpqQYO\\TQcf?}PaiYzGxyrqTp}TfWtNIow[MFB`oxnolfWutUijiiyik@S[hXHG\\a?~_NwB~~prbZXZwilerXkuZLcovBIiMAWsfIiWVAZXXTfek^cpTQYUOM[c`{ahbQM^oF~}??^~EMjMLjUrXkuZLerYSR[WSougRiWSr_ZITlZK[|quFHJFGih@o\\SpMShMR}???N~~~TLwtkxlwZLerXkuZBXTOewRWXUCewiH`hzdFTzJJVGFhKRcdSKYQiQ[q@oF~}?~_NyvouptR[xkuZLerXl`iBVCgeeiHfCgYRouRrVdFuIozCwicxIOhQR_^GpT^~~{??~_EtVoZprdjXkuZLerWf`RT@khp`[T@iYSRbzMTdUtNIiUOwFWqOqKO|HS[c~~wB~~??HrXZT{WrZXkuZLerYgwdHa]CYwEha[jBSxI|bUq]bq[agNQMKOFKcdaFTS_?B~~~~o@lZM{LimLkuZLerXkwRCpmEhIRQ`mCfS[LWxzXqTuYPoNHWik_@rHHW`tTG@~?^oF~~MZJYnbEZfRhsy\\MfBXTOewRWQ\\RAe[BXTc{txP|alTQqF?zERFBieHqdHq^oF~}??^{[wuuU}Iky\\MfRhswf`RT@khpSRMHOsf`Yprurcjkq[agNQMK]PS[hXHG\\b~???F~~~LjXv`lTprhsy\\MfRhPLp`RBYeDpSEhhPNcjuLZHyMFWfDSfHQkdIQ[BxEIg@~~_NwB~wptXplYufRhsy\\MfTFChKRobSsgZ`HtF@zdFTzJJTaicsk_[xkCcNcTKYPr~~~_?F{@TLwtkxlwfRhsy\\MfWY_tpIHhf?tKRdWYeqqjNLW~Ic[BqUIjGt@bQTQReON~~_N~{??ZT^@nFMUrhsy\\MfRfAWeLotHOsfIiWVAXUtkprvJXcBseHqQiN?qKO|HS[c_?F~~~~_Dn`lbiexsy\\MfRhsxKLoqib_fIocvDPKLbzMTdUtNFHJFGih@tWDIQ[BxEIg@~?^oF~}ZUrnBYjbUjTitYlUwY_tpIHhhUCewiH`iljXbfmUqRcT@yPpbF{XEG]ciMQ^wB~~??N|SvbUrev`YlUjTitYwRCpmEhIomI_tLIHuRrVdFuIuIiRQq@rfHYWsdScxcB~o??@~~~{[wuuU}IitYlUjTiugwdHa]CYRiWSr_ZIbzMTdUtNSb_]QpTXJJWTFIUQQFW_N~{@~?^utVoZprditYlUjTisZIiCvAZAwEha[jBSYprurcjkfHJFGih@|`kFKcdaFTSn~~}??^oFbFTfEtjXYlUjTitYeEwXTPoRiHfCgYRo{d]pjXNP{_]cpMQTRU[?\\SpMShMR~~?^~w??l{Lk\\SvMUjTitYlUqaZbAeEtCsgZ`HtFEqqjNLW~HTQqF?zEQ]p_c`{ahbQM??F~~~~_HrXZT{WrYtYlUjTisf`RT@khoLHqieDoeN[gynXXY`uHpTHqSd\\SBGpBsdPqQ?~_NwB~~ZT^@nFMUw{]NFbpwxPLp`RBYdPKwdBQ]C|qbi|ddjQM@xJDTcbp~AgxQqQOzF}?~~o?B~MZJYnbEZpw{]NFbpwY_tpIHhcsgZ`HtFC^XqkiuhzGFhKRcdTqxJPrHHW`tTJ}???N~~}l{Lk\\SvMpw{]NFbpc{IYgLdMF?tKRdWYaljXbfmUpaicsk_[xXklaQFqIeLGw?~~oF{@~prbZXZwiw{]NFbpwvAWeLotHSjAR[TCovcjuLZHyMihXB_\\bHuZBWBieHqdHq^~~{??~_BYu\\wZT[]NFbpw{]MgwdHa]CYLHqieDoekfenINkTfHJFGih@ujU[DIQ[BxEIj~~?^~w?@TLwtkxlwpw{]NFbph`mETS[Cq\\RAe[BXRUM]u[d\\cMpMIhMQc]NWoKYQiQ[q@o?B~~~~oFbFTfEtjZFbpw{]NELdTAZ`L`omI_tLIHzJIk{tb{hMPSFhFEIlVT?c`{ahbQM?NwB}?~~tn`lbiexpkuZLerXmgwdHa]CZ`[T@iYSRYprurcjkx?|Ha[cinC]NwWsdScxcB~oF~}??^rYu\\wZT[XkuZLerXlKLoqib_ewEha[jBSN[gynXXYiiUOwFWqTnJclShHoNcWinw???~~~{xkli}KXkuZLerXkuwRCpmEhIiHfCgYRozJIk{tb{bcdbcTS_zYrXZ@rHHW`tTG@~~_NwB~TLwtkxlwLerXkuZLqaZbAeEt@hMTSomCs^XqkiuhyRcT@yPpaZuZBWqKO|HS[c~~~{??~_K[wuuU}IhkuZLerXkZIiCvAZAedB[HMgwTlZK[|qu@uHpTHqShrTjM@S[hXHG\\b~~_N~{??{WykwulZErXkuZLeq]DLSEqfCjAR[TCouq]Y{g}pVQM@xJDTcpfbuK?\\SpMShMO??~~~~{?ui}B]M[lLerXkuZLwY_tpIHha\\RAe[BXVHVkYuRs\\aicsk_[xTTiyg?\\SpMShMO@~?^oF~~wptXplYuitYlUjTimCpKZ`iQf?tKRdWYc^XqkiuhwMpMIhMQdw{Pw{]dHM@{bDT~?^~w?@~U}EuMiZfTYlUjTitPkigR[HkGsfIiWVAZcjuLZHyNQM@xJDTcUj]VJcc`{ahbQM^o??@~~~utVoZprdlUjTitYlTKLoqib_eedB[HMgwkfenINkTq[agNQMKUrYrXkePaFhIbcc@~~_NwB}ZUrnBYjbitYlUjTic{IYgLdMA\\RAe[BXUqqjNLW~JGFhKRcdSZLzLeoKYQiQ[q@~~~}??^oCxkli}KXmjTitYlUjIHmKIWZSdWQZageElWxzXqTuUIiRQq@rcy[tYlOMXHJCMih^~wB~~??K[wuuU}IlUjTitYlVBSEmHPLL`[T@iYSRN[gynXXYfHJFGih@{]K{]N?TFIUQQFW_?F~~~~_IhnElfLnDUjTitYlUgwdHa]CZSRMHOsf`TlZK[|quIiUOwFWqYlTUjT_KYQiQ[q@oF{@~?^~|SvbUrevbpw{]NFboRohi_uSwRQ`mCfS[[d]pjXNPrcdbcTS_~aNwb}GxrHHW`tTJ}?~~o?B}ui}B]M[l{]NFbpw{TFChKRobXUCewiH`mqqjNLW~GMpMIhMQclxJ]QvcqKO|HS[c~o??@~~~~EMjMLjUvbpw{]NFbBSEmHPLKLHqieDoeYprurcjkiiUOwFWqUtdlXZUOMiWfISfG?~~oF{@~fLdlVpbL}NFbpw{]CovBIiMA]DpSEhhPLUtkprvJXQM@xJDTcLzB]ovkAgxQqQOzF~~~_?F{?l{Lk\\SvM{]NFbpw{MCpKZ`iQa\\RAe[BXPzdFTzJJURcT@yPpbMYrekxiCcNcTKYPr~~?^~w??ZUrnBYjb{]NFbpw{BXTOewRWYaXpIEc{K^Xqkiuhxaicsk_[xbNWruK{AdHM@{bDS??^~~~}?prbZXZwi}NFbpw{]HPLp`RBYb_YeHqkLQq]Y{g}pVcBseHqQiiiyimij?'

py3 with this patch and canonical labeling

'~?ExUARQHGKPKjGqIKmOkor_UXECpKN[G~SPBGl|?WcQucoQyisantYloNegE@bLW?uRs[SNnO{EXODSRx~?tWZSYCSJEkhHQKKkyB\\^oGqJCwYSG?la~^bW``tv`UOlUpCashl`^{AhVqPhy@Jireh@xmWSjTs\\IqczNOk_OdF\\J[Zhlm[DbF@A]jbKRUR`Z@mh{@gJ{p{udc`A@KQ{]EQ|XnE{M@gF[eVY]HHlqcAzoN^glTtI`valzLbu[@IgFyOsNgDkCuypRvL`yRRUEy|wJSYwyldAavwBFcrvtDh@|VrgE~QPcwFrxgoV|H]}sm?ai]Hx|[HMPIYQv|eYKY^UNxiLhGBoVYYhIibGutrN@dqebaHJ]At~~HorapD\\DttX`fRcD@kFJYHyk^k}CM\\bONVRS?Oxk~|Grk~XulbGK@UIchLM_vdmnA~CCVzUcr?qu`LPx}tp?C~@qvrQ[GtBVe@qLxbOx|FeJ@veOmJc]GrDtiWWluOn}^zeVChH\\nIRBA[wH{IRIZB{cwgmGjhtuDrVAnoCkLGiednimR@drrfnTZBWW_Icu^EdsFID}]ZA@ITV~EUwYkvtfS{PwhS`}eh}FYqGjDIs~tAgUTzXk[LK}P}c@PtmeRkiE\\}r|ZOAa}K~F}TMfwuJ_PleruMN}fWTeOBmSsNwsTifJaWvakhx?yNex|eUXK{Hs@|tFZRqY\\ZbGD{dgOSvYtDQYzRokMznVogGy{}SMo}PVvtEv~cGxT~FsBMrD@pyaRZzodKd~iPl}Q[XXUxE@oHJid}}v}oRjtuzFERkNt_TY{nyR`s]EyNLE^toYj`\\XR}dgC|NqiIjrYRZQtSbEN}rd{I[odywVMyBH|iJYxJrxQlisNqwm`bP|EPmfVbmj~pcsyFWcp^y`lT~|Kje|OumqKRS\\JDyaWr|llrxC}fWN|B|ow{K{b~mEqKgjFllg~owli[j\\K~znLTIeOvn~[uIpa|V@QykugHAa{QO?^Nfr@PdJOcVm{?WtQxd`Sq_mgQqcFIlzcBoUo~EeATXfpL?zXeWEGgqyraTl_S?YumM^wCD?M~dtMeF?NF[ANl?T_}A^KvgGIy_x\\F[`UuxJL?wSUENEsJuWp{uBbaUDZh?qTWjYLdLssc?THE[dNmmRWcBnrErJOrkAijwWxAZDwaC}XEZ`aBqxv@aqNdov?kwV~m\\DKsOnEw^S{TkBIpCVdPDdYvGnuMglPZhGQZCNnb_wwmRQvOo{RkTdUFIj^a@`m^DE}BojK}@L]YsQErbaotL[RqYuzDyKqsPAJ~hQPLPAJtizGvFxtSJHF{osfHi||p?GqO{utBSNBTt@YRqfmOkaIlHmCf{tKm?`jdYs}ILnQiNIKEEoK[YeFbnZEzaCCYDEzlo\\u@MUY}V^[{lPqqk@IVI}\\hGfkCr\\qh}~gPedYmRHSRGeCy@ZmKUUoz}gAuJAvZUpXgO_VD|jl_ShwfZJX?^aMnkU?gku|vqJjHindxyu_FKQLuUSIDXjeh\\^JbIKDPBgsYICx]vxX\\urYNqHLzFh`HfIw]zDPeOGzcWQr@NeYYAJBE_y?vvxJy^lRpJhvTb\\kiwBkcaeZAcyQzVSIYmiQe~gsbPcwp_Q|uQehj]LJwu^wcTfn?u?eicYpOY}AAKnyM^lKBQeWssU|gdA^KQN?{VLR]oNvoRTQGZ`\\vJ`HDhOYcygpIVkRzXZcfK_Df|TsF`DqOstMIgfUCuscxrcpa]`rdq_F|V]iZS`Ca]H|ZHnEW`x\\[kYkiReCK^FEN\\{l}dTi_GYkn|HJaMYekekxzfnjG{aUGAaTXMq_HT|hUTf|D}bDnoE?OtcZT|o}YWRSeL[QxMcb]smdbZJwAZmppKJdJcxzrLjorQpiCD\\Lm`@Ntm^dypHBRtFb^]nK`tqdYCjA{?j{bax]nyquB_ByrQHLBGKj|p}Al\\QEZQ^Loi`RfkrJeVL[H?gUefJbqEQxrOqET`|PRxiTDtdUUdT?D~wrf}xYrACzwrMMEoj?sGUxx{oWj{f}@{HPjglQsOJVKj`vPf^dOG]@vqP?ah~Rj]wV?zRn_DLJZuNHLmDI\\@ss\\h]_l`xib}dfgchm]S^tHs}SWcq|PbzQYjBvDaKxjTeS@B``Y^kNo[fMorxf`@OndYt\\pXIVdkLyXZpyUvQBXcSpWgucoyEzo`xwiyNZ\\GIxjuAHDEfLvYPqlptvbwevCJENa]byYm[MFb^ABA[VGRHNZUMYA~BkHFJg|zmG`DXuJZzswmEmdklliToM~WeWZOFTbSq}IZeZZOFHXJ\\]lerBCrqJRKXbsUpq~OT{bm|a@lX@@lavbAkyXJft\\]d{XuJv@wj{|WVtsJeHwIEDozsTW|UThikKeCVtyOSbiUCNqqkztevW|?xzkBrT\\wG?dfpNQF]{~NkBbLVCCE@tzCpMdkAV~dcy_fwQh]fUlWgfL@z~kwq[G^eMRlljiuON~[C@LTFm_Sp}QSmbZrAXXd`QfthjaCRZF|[|eoq_SzZWoA~rAnP^SjkjWy^[EdbGEhTox]DwhLykTpimysyM[DoqY^xnae\\b@Bofamn@asANB|n[k_L\\aV]dlWfm?BBfR}L]i?_UWIs{{x@r|fdTIAliLvGESdz^qPmQlgGNjkNVAHFYh^td{LEaoDx_t[^hURYcxVRbhmNidhM@Dezy@PzA^VkCI~\\xH_Th~pNK[{|ySa`{Ok_jgafOwfRCWmm}[z`}_\\xOTGVLWN[rX[ej~dcc|BEfowSEvH[]QzSfRXqYwAFqj^~GopRUe?MDexzd^YE]KFvflC]pod?VInFRcIoaGaVNj\\|YPAIzPHEyEKwzfUvCg~~T[SpSljQtItaH~ty_it\\oO{Tg\\@jb@sV}MlGZTOSW|O}RKxwyXtPl_}jMUn}cSlglSA~hNLW_fTp{HNuLDUj|wDPoU^n_EJ^kcNG`|C}K|slaplzePEUIcpVdXRFIc^]QakoIngNYsy~r_dWwKPZKtUphEQZs\\VsbPvs[n@}{dJ`c\\p{SJpWZTRW`ukevSEXVYALwXNnsFZP@~ApLWJO}[XewfOT|}kQsZgn|naA}tVXI]CmaEFJOKsdbk]r|SJJDXPS}rfX]msHXEY`eiYDM|YVQpga@KEyppzkvsDlDt]hB[g}Z]Bc[hKdEX\\yUJF^ARsJJiaM~UL|iJDOjYZnCJreCnHYTLQxRDEHwrrY`{VkdcUjC^kBnBX^WH?FdeRPo}yRAM_Ht}ndwYUIQO~xxSVQoXDt`QxSXnMlpuI^cm}SMVaFQXMP|Mbi{BxH]taUgW?rxwk~gUsjAI[P}suCu^Xz@OqRRK}sMuQ_U}I^jwja~]fAaGqdQhlfCn[SHTc}NL]f{OQjRetht_mY|slAdR^DgQ{xcddBN]BWiy[sQVOojgJzzHR}Uloj}[tO?]PNwvoGXgf[ehTEwL\\jmxV?tlosuddBzAlOYYCyBuwJRaOV\\rUtQnp~kYI}H]RQmIBBYH@f~A^OrHo]J}E?kKhNJfF_SbyE~Q[\\}hLbhjcJyue_?Ece}gz`vw\\kmbstgDxTCOD~uBfmHDK}tAdhXalXE}ExRSyUeEnUgq@]Na}oZIAsaYZr}iHJaCitJ[xFVYoCH~lD[B~JbGxbAi^ELg^Pg]Asp[\\{j[\\MNBFB]Km~XD[ACeviqMxsn_beoGsSf~oEltZwhDLbtZrKWgQFcaDvTJWr[jShpoVVuVzQpN`vgjNl\\IJ?eGBy^L?Js{`jyD_OJVw\\Zvzh`MilTsELbQ{]WwFVdznC?EGo@xqGvToaJTS^~~zXCYQsQvKwtbWfPe\\{TrP^KC_h`UTNHDvkyKX~XynQyoqCkSbvRPh`sa|oMWY_d\\cqXI?iuE}VyzZZUw{eoj`R|IVvwgX?OT_Pewgmfh}lMVmPTFxaPjMo\\x\\J}c?J[`oIgARuJ}PA\\~@UNtGf}{DQq|NGJNkmdUOCg]NKZsMKGaYEVtWbf~xmiF]\\{cJvVH\\EaceWESZ_C~@gp_?????????????????B~~~~~~~~~~~~~~~~~~U^QKUv?NOWTDFW\\@SbZu}{`cU]~hYjeWJh\\_xqcX_IBVbLXpzF|A?lOLVU}m]X^HXPGTVzYBfnjCfHIJqe[iPbG`XcwdXz@bhuJfb{F~KqHmlJGlYuOf]ULB[{XB@d?mNo|fQmzsgp|MFTsPKslH]{Juw_JuFKa_CFEVwwPxq}~dsryhLFARwNWdEFRnsEjo[[BowsSkDcFmhLfRW|hqGPsUzZ{wZRtoT_w?QnL\\lqkjYOqa\\h~Zd~UGLEVlSs{eYCiJdbNmDADJhl@Bwlnzo@MJzNYua`hUpMV\\AWTzpRkcC\\W\\gO^vHiCu^@Tczqngi]|E}qj?Y~AzO@qvQNLBPlCLoF`RrmyOjD~FS`kOZnppZl]iN\\SaJyEGoByIQyefyDIeK}hjd[e|vvJnkvcA?sKInq`qtFHEaJTlcf\\GHxKN{RbaXwEm[bVMDy[vVBRYMVZ`IwXJhkbRZY~?`K]SewsTK\\vbHI`YR^TnfXKZQe\\MN{UWkcKKm?^\\{OEpXhtLhGxyNpxkS\\EdNeMa?L@Iqayx^cPzIO{ljXSqKzNqlkrpz?[fo[iTqJzHPhE?N{^\\xDVRbuHeCdSp]EPk^AzHzhKia{W~^hgP]iTzR[InQ]e_[\\@xDr\\CWGfsk^uDKnB^zRGJXwOpfJMOfzCyTcq]D[lI}uhXzIC~`nKtJMxAoAWqMKYbbpoDBlbbwy]UipoN~dW_y?~Yqgcy_~GmzW[macRe?vNmft_|_BOvDq}LamtAisZSNh[jK[yFRXyMhLgrP}xYUtNBUF@{KIQGjzUPYCp}txkDoJmWMzoZirqHzrtTvD]d]SI?Qog\\MjLExKL{i]WBsrGYqy[fFEEVy^VEma?{L_aUxQtdBry|TsSYiczkdVXAu_FzJPRlRZdOw@L~s\\Z_z?RaXuWgRiiHP]G~BF~Vn@DkSJSa|M|W]moDSofbT}P@YW|[hLhWFzDKaXj^a{Rv}vAiRPJUkmDiwuyc_WQzeq`ezbogZQ~pLvkvaIWMdj@^@{j\\mK_P~k`|SOm`_SwYkX^hTIzD\\HQqkVuMZafwpBbTvbOEK[j|Bv[EXcZHRUm[Tt^V|eUiq@_`e[Qs{lnYpvTTaaADdMDeHFRn[qJjB}X|wScsdNg[RXNwev_pT|CRFQA`U^jDcksfRs{A}nhoopwnx`lVqa@gwZwnyZklaQjijkOTLGuqBFvMZ^zfpYsrOdCTLcehaKDsN[oUiru{KvK|cmeJlGOG_iz@DSY]ru}ElAn[fDlub[@t~LzzAxB??h@AF|jkp\\zO`|ft|b_B}MrphGLJ@YWelxHDT|lwJbxqH\\qUMPo`tnhWD`Ji[QBapyrVx\\`\\][Ry{{@dU\\abEWP]]w\\rbSRBMtWxDqljiEVJTKmwg]Ta\\d}|]UyuFT?eRR}OREX?wSqI{ZfsVWX}gsqBWl\\YUQvaZZJDjy{oHW`mVv?FaXk|]KLGJttx{kPLJG{@NgnyYrLlYJXzJw}wIaaTqHltIAftq}PBo\\bRe~c|CXgOh]aOzVBqY[Q^xAflz?f@~_UHIseHJK~xbidnSCsSxm`ToMJfsIBzXFLTdrC|xq]_v?Gxe@tfeki|fWyFo_IsmVJKi\\p|mtMydFsYFAp_o~bjgwFrp^LYHGqYDG\\UPDNr~NZ~?ziS\\PaElvjVSEVRSzAdLKLta|\\\\OTUqM`\\EFetU?MUeQnQyK|qnWmWsrKHf{dO`eYmG`|S}^A}leS{SHiSMCMDjInmNxOo?U|Pilopm|Bl_tdvbIvgYYJiODcjU^fKLpgjSxyoccmIum\\PTGwJ^@tqdZU|wJDaFzKIq?qtF{qXyzaucEijEtwokAEEKZy}yNOJvs\\M}VUNUEzSa?[NBPO}YYKThlyUuRRAotaN]owWRnAZ^Wb~_K^y}J@bfxIJqDClC[]b`aF?dB|jyxuoDPZ]?QqCXR]^zSjZmB`cVFpL_Y`Yd[Carw^b}r}ob]{~HeEUOdCA\\WxLMdzZdpF@YUyS~E_WdqrhRe_tcMyhUxfr?YIJ_j`kEbuyyeNGtgpm^HJpPc_T}ygT^odFfZtPzQGZGfru}x`EO}?]rTvr]WTTrKE}sEMdaooXUN\\SDSunEfITyx|C]UrVAFb_OzWg{{ghh{kbCFwm`HJ}WLLHDlfjFnQirSxFeLKBrnKigsDpEdYoYiw_qu|h`\\ZtC_klmcdtYY\\]N?bqlQZT`uqL`DFmpijoAu~i`n{XeLQ?y{AEV{`vmDoMOWR|VHLDHCganh}^ur|i]xb[VbOsdV`iraQ?IPVZax~Pc}zU^fPYr{??EcnXFoeSmHViBEWrrvr?VZov@Wnwj?JCmCby{X`fbXiWKu_JVmRXeUjKbdhODmhlufk?If}OEG^pZrXQhaPqiL^sNY{onQdRtgWSlo|yul?aCLHrecP^Mw`JjZu~`Yi]JgcBDNxRTVYVUnOjEKXpNtdVqiWOqjleBeoo[iDIXfUShELilITQZRZ?Eqpebj|rFAQ\\bhNyUqZDDSjZeE[}V}HSDHrtU~GkLk_YQxYU{E[lLXp[vIfqBUI|h{x`q_fBOMVbm~OfYO~{zGHsKZCpkpsb}[EiUFtp[dnVme`\\hPAhFMQAQw}PxJVtFUIcChWnLvNeyK^h?tdfP|i[ZVwzbIwF?z[@WDYIEvktGMO]Envw|qc@jp`DKzAEqYcYTYsdyFBWiM\\esp`|TY`xFwbKoeKxnk?JdMlsbrR}Jcth@FbT^lx{aARLBmFx`u@_`iLO_gLnbB^A\\^[uJiSzuO_{fGfXpLffPD}CTJXUnX?xWyKrXrLT\\BK|OG}wfACLn]duIyRdYksPVqVtXqMRHyziKd?rRDPUduGfwgvPlNI?s~zwkZPD^yQaycEqRA}QYrgt@pzrczqHJeDC|xISpouMst{iZmoVrCfE[FPdEsxoyhEsDy^icl@XcNsngBZ}cZ\\CKT`]woZoZvjpkP~[{O?EJhRbCzW}A\\ER@UxdEt~IBhXfsIhilqvdQ[WodvQeY]`yutdnX?XdN^FsMeJRjaR_\\_qt_Uowla}L@dos\\HMMQhRwUNFlqWz{iXMA`pOq]t^WAzvNyEDISic]O{gpnw]{lG|Zpz`xFfdoROvaPXipiFfYia[zXPtR_|pT_xB`zR|aOeWKZ\\EUkhdmXIW?|sTSWzrmdVLNrvTrHro_SlmLqI``AsfqRdmOqkfrc{Gm@Cd|VaerQ{[vOr]^YAFv]|}Ta[eP[OV__XhY_jIeX]xbpmZ|O{dKVum}kqTeDSC@~hIP?sKP_PtpTjfvfuFj|QgjIH[`rjah[}Cfp^Syf{EedOseHZGBvDoNBttSYTsLUhlGnmoOpr]XUIQTJKjhlrzuEhOxsOqtRLJ}org_wUlmaTERHNqSh[?pfoENQdY{otY[Wqd^Tqi`sMl^GUrQK][ZelXtRtIo{EC_TZHmjdY@\\TacNc^A|}MwIFUHbqNeY`EreuZosgWryBuYtPKK[bnDrnMe_RTTcvVSfdJj\\WLjQ\\EimnIRIojU\\{tneg`SGIp]PYLjRBCin@ncahZraUKnrKyyVS{VtLaE??JnkwgsV`gJdFB_al{~e~@IJc@rRUVW~AHVivzj^zbcZDG[dqUlW@HA`u_jf[zX^ZIsKp@v_GG^D@`REBVrwlFqlgxdKz`Ktm|BAB^ZbaImuef^t]JW`_T@maBTWFxEeRW@ZMVNlTMA[{VFBxNevVr_jaaclSpAy@SxjRr[jNDnJ?XUzDvTwjT?rOg{ZR`GMNRxsttqEonKwdMUQ}wwEejdnGYchEUvQMKahfMhht[o{lBFdVjkpJJWe`{^BDrbR?X^eNOqXlMDOY~bAeoxEYzjppEC]XEqEfNv^MDWs[~SsW?oKJ|a[~vWddHoqW]biQRP{KJ@W^NtPpDXq|lH`][oXHvRNmcU|VvWafM?Pdj\\Adfi?AVrlGy{sZHBVRjw_arc}tR^M]H{VgNXsIIq\\RRhX^qX_Yo|RnPD[}NXsaI_pb~NAR[GdHxGhP[mCuut^fMf\\h]\\Sd`?WTE]LPFkAbWN}G[wZhS`{RoNFw]J|NP]KWBeQzHTcFvi}`ogvbqzVA@OPR\\EXRsskT\\mqwpiX~Zt[kwGX?[\\XWAeOn^w]FkVytVXLYoGYWGgLB~oy`HFkZQBE~`igdwlOR[^M_cf`GO~u}vVD]qb[hHTOtiH]B]aN?ufHPjEFGM`{szkINqfsg?qWBXD}NDat[[y~oyy`CA~qpQrMHOepeiX\\`X\\TqLCsms{PtEmwRWxtj?KbQhO]{BlVsUX}Ak[lUPZDXrXV\\r^{r`aGYw@LiGAkPtDPhqdA~p`QNmOvL\\Qv@qT]pIJgygt~ha|ZtKQQZOKvvkJBKE@fbsADTgFmWWCbgn|NTir^ThEDzYIhonfq\\L`^IIo_BGePb\\gdzNF\\wKupFrNKCo\\KXihJeKXim}Zny]Spu[RHHoarjbeCOOfsqe_|sDf\\ciDSh{aM]o]Ii[]saLAnO{ttaCZQv^pF[MUUqKKd}OiMdgtDMmYHViH^L_Ve_XvPFc?RwZbeUrLJnNBEnOrP~VdATozboL`VTDy_iz[jhC@KhnSqM@AT|~WA_a~@T~ICmtQYQVVOwz_^Nazd|DtaBERWB^Q~hhaCqBhSGIiD[vfxmw_AqaI}flp^PlE|gdxC]@JfWxNrCXAFeLPZbje^_CgADKz]__EiP}LYXAk}mdrugd^Eu{tvKWY@uIt`RmmscGg}zQyOxSgHCNeto?OmaUI^fI^AUbmZ{PAl{RS{E|xwybr`YJeM?lLIX_U|`[LjqX@oJCel|SYmIIj@K@ziNuZhv?]inGMAzmM{kwJOZWZSHcvAyWAq}TUHiCbYY|b^Blx]GaHDQSkXqYGt^TB{]{NDRZXmZhWSN|J|TO`PEkNCCuGxyt]EagjsyO_mSo?[bVm^bZpcYyBYz`k}g?mzXZWDrTG_WA}_xuouSFNKpWITVQTB_wvoJTXK{}pwSFLuZuba~~A[HCwTiTzMlWGM|^l?_MG?|o@VRLfeljXms@CG?iKF\\iGqkuByVir}ft}TZ{kXmWJIqp_Q`I]?JHc\\TDZXY|HOCDwLqZ_Ohs]jwQOYlcse@b?IQJ[kAB~{p^piaqBXF^zi~jB}\\kYI]P|Z[rtaY]v?bOER\\QXNu?_g}Pf{Pgl|vu[ZKP}nGPzII~PSl_fYXHT|eJ~Ngd}JPtZDFBkZwoBGUPqHTiZrGJqhedLfenvMTygwsXxQm{SqLW~BrbyBpMrlleDb|JLSHqgWa_Q}af{KAXVfGBiDwxvBhzUmfn\\ofLhhl~~CDcTZuOivdUH`JaeSLKrwHTDEwP^xd~s?f~GOHEk{ixun`^iwgzHWEYO~zh^mWsVuc~RIs@LNKOQgtZ@FJtiIVEtWVpljX\\ogBJuD~earaOzH{]a|SzbrmyO{tV[VVCcKYMSgoFtDxKWl`bK[JmkXbfDtd^xWb}d`TF{wXqO~QvazmiXJjC`dywVIDgw^GpDyMZ`pjaJZOft|INUjRMI|GuUfyh_AoVI}\\ydPHwN~cJi@\\oaKeL}HFzE?z_mfxbqOw_UVc\\rN~tJpQFPLsQNMGs`XcbY{tzr}_qoPWJmaHy`@fXOFyz}`O_ZX}]rOcunv[BWTNjaN^QyK_t\\^Ou|uxeGxFeM?hbgHouzQEl\\WM^@VDsXHr\\}i{zahc\\kODrkFz`[s{XO\\nT~\\Fw_ETcV}[`bdJsMOLXAPNeArSnws@PXyFepciEqT~\\}RCZJ~Y^GlAMPnvvG\\`_yCDSqVW{kFalvAPvd?mRQ{]kD?mtu[PyEX[Zyxd@VIy_~Jg~QJ^j_lTmMUEW?BpD\\ov\\BrkFkOs]XRC~UXzpqkSB@[Fze|UpV@l{PmhNkK\\wYP@^x|FLlq@Th`iKmpEHQFzhegYfUXKVZ}KsBZGMjND]rs]tomI{EYQB\\?}ult^cJwSJyWfP]IZB?oBQ|e^_dS[}KUXNIua[jKjm~NQ^^}C@c~mEONAs|JOuNYM~h?QP|@u|]hpIClYQAiYI@hHGmFxkPH^\\ZZ~tSEcolTu~{?dSdzuEfW\\OYD`HUJ{P`bPJPN]L|@}hGdFtXxWt^IIMPzvEFt_Q{Q__N{^|]hzfKaeC@sakgadEqRDCHlGx|{ZltLXhSk|dUptoNHjC^a]yn~FxLPB_OGbyWL|UxMKNyXssTBrNZ@CQlPYWeweZFtEAfTHiEdb}vECz~CY_\\SyFTrYreVXCti}DxLssqwJzwQHCw}RRBhWJcGV^@HFANreJ]MzYUjmywyJ]XpSuek_oe[{nSdFbC@AtiULw{tVdp{kSWDjwFGEpkqRtrnBcXy|oh`VhDJtZjAhvqNDgVjQZ_pn{ChKI`EinYqjAQyGx^kll\\Oa_~I[{Xky`zJgszPsvkUZwrgDOa\\DvNs_LhikRhcDdOfhQAdwlYT~hd_[B}e\\ETSdTnxbFtB|bBiABjJ}`vkD|}WwWMWhl_tfAzcOdSJ|jYe?wvBqVgnVHpYug{vdgOZDVWpBrBBMCkoZ|zVjfJmIQgqQODR^kyMbPD]UEzcRU@M?m~RVIM^f_@ugc{~SMpIt|a`o\\viHk{h@sry[xAF`BtccoXXMQosr]MjMI[oE~cjPt}P^jXaPBllGq\\MAdTxUl{^gtLbW[InBDqCHf@QyiQqsKYjd|PTWdwBVQ~SdOhHrtnNqkUXcj\\T\\]|E^K[Vw?dJeh`QKzGfSgVdRVWhiHUXscPVOsqEZjmR`OmbLduyNQuhlFpSVnSaOSmlD}[mQiwP}tLRCoutY_VbgmWlNUbFKeLGG^YL_~d`~}Wqm@I^JaS?Tvn]hBoMfcMtx\\Ps\\_EM}FBG`[seYDrITRwmFsIeHeuoekXNuBU^dDt\\VixDFIlhxpsYoU_NzP][A?|pGfLNMbNZA|_@JWrbpxCTXo^RanyGvyUTISNefH\\?XcsqExHwqyr^VbS|A^hOKYSEonMBWY`s~uTmqaqNYtNIeGZzKpWxTPJnurR]kGFDfX`cqztmWaQHHleBgqGShaHNjZetkpRiiUGTKqrS`UxivK}AzYzobNc}oWf\\GpTJ\\`PdmtqxJugL[ZgP_sy]@vjCcrsyClaiXZKjVQe\\xgZ~kWbOc@xHzqwmTrwrBbAPs~wqMEQ\\idDkZHSVHy}?ce|`motcoAbll`mIdFU|NiSJ]tthJj{l?yY_cpwD`vs}RsPKpfnApZcH?X|NYYI{DgZaExEwoxPQuH~bzFLqPMjx\\IEm{PHUbwRG]sxphYEOJCkEZuAFM@IKV`EY\\Y~Rs{VacjV]_LKbN[RirUs_skoVx~KrsQyQIthrUeqUY}\\IDJwQXHRPmgoMyNvxYpJuO\\zkBXTfhsASPpszPx_EapTdslORUr}NNakZhImg{afrOYAh~Q^xHyGEglddXarFFdGn\\aIvhtNOkLShIuiUZy|ZF?BF]doJSC{uN@RCICHOcYNzNgudBgN~}Zm[YE?OXL\\xWOrZxzklmXxpbW_NmgQroE|QbsVeZqlzRBvoosT{joAJ?Nh|kN[?uqL_nfmBwvwHSsRfZ[YcNbY?KZh~ACwfE]^bZV@L_wNzXKTMLDBwqDe}PM[auGGbcLtokAbyLbyyS~~tTweVU@TVQiH?^fYMegCILowNtSr?xmkWgaLnHKeN\\ZBMpPAVU{JoElf~onjAFHCqFN~I^hcgurSrQQBGAl_Rime@xKWrIHkPFrj{xJEvixn]@c[@hfCv??~c~Umgg`bB{NMo]|w\\hWvXo?wcfpYxyW@_DjXvZ_vB|ff`wbq`VpvCAUbZQsfPR_q^nmuFQAbmkMvi_XLyXcZOgnnEyDmABrczbUjNCYQdtZOFNr[_BL^Jlot{AKo[bxU|FLFS]|Ut?IjwVXl`j_YMchVSxqhMYWkFXMV[a^WYX\\ROpDjATVJue^srDgHDVm[uhUU[VHAkRsaQ@~i{xTKJ@jSVG\\A][X^wA@nzBlU?NjTsugsW|noDl]xbgiBgEgb}dOzHd[^[`HQYvee`ROGDU_}XIvstTwL?GZIntaLR^Fcp`P^h`U~Q`J]TEwrHgGncnBFk\\[euWnLDTLPFgGqVydkf|fAODsPTAs}J|kkwemwFReFDk~WrRCdTFOfwIeX}oNhA|UOZwzkMEXlXscSQsBBheeUBLffnPu@WLD~IPiM}H`uQmPrhyssT|_CeAEMDgF^uekkflkba|qVAMI@mkVg\\CyILJdObXvBMnNPIgPB{U_mgEwJ~vZ}APegBB{hUi\\J`~nl?]aJMRMAvO[JhkQmQU\\XXMEfOi`LLFb}Zt``Sqed{AEJuyaMsR}C^PaZrvDmSNEc\\MeAy{WmTWvd]rYl{IjZI|T?dCw}?[`~QOcSMry_qExftf@dzlutMOlgYKE}]RmyLo`^@TWRerkNJWMouCoyxqKzVNocgs}oB]hd|XgkEgPAwk|dLju`Wb`XCEy|\\IXXY|XD|fEiGTRPwWOX`taeDopmkmQoZmJ}lqsW^SEOnkRYU^CxO|IIRBuZtuL\\ah}rLgJo?_aCx}ox{hMl@tlJ{d@HqpjpjgCtc_XUzqlRxSku_]LXlJgc]AXuIH}Qo~MAqa]td|`O~tse@FQQce^P?f[g`qmLrHzZuxi_q@txKvH]?FbKunp[pekymdN`s\\OK]OVRjIUr`YgYBvy]bg{jCan|\\HypDWJ?zjWsYWdH|_tLMsWyjekBoxaQRcnaKa}|GJxEtFtINR}PIRDvj{NHWnC{Q?w~D[kdHVwkD_G|OZ^s_f\\D{FziLyu@Az`YWbAd~GeFj[jiMigdkh]tMbEsuwrFhAfqzgcZJClqAAK_}jGj}?p}hWbu]vdqZw[D?]hnVz[[TQgWcB\\\\`fbhgnEO[YSXo}KRX^ubidYdY{dYVP}\\?@wd?ZSmk~eWwnlNAg~uaW_u?FiNeWFnPRIEbGx^uWyuaHLbhtjqtA|@gsg`?LHhsCtVB|iJt@}}|RurDYVe`pdN\\qkQ?Yd{{CtPMQQ{ohUGn{{cthE|RPuKwh[G?dRwwMTHrRZYttdd@}p?R|yhn@Y|c@B\\|b`KuhEww~oSXusCwS{N^IlFz|Yau?PKpd_C~EZR}KW~JxPE_rTFzESgX`?Ikcqr^RJA}^_k?dTzKkF^YI{SRCTjFfAgtZ_zclzw^s`j{oVZfpAoTou?ycOdzsN\\MKKjHbUvGSHzHZ]J_w@]eaNaORDyKXzsSb|hWUjfLcskqTGjCj~W[Pf}YPkVxSnHTHhE]Pt[m_?~KwwreHQM`m@NlaGANyVygfYjLTCtYys~[KBz\\{GYArUYHWx`sVq?lLczyQIMYbTMTSY{t@apsvpQrYhPoInklSee`oZNmvJGZFfIN`D_L`XLJ]s}\\BQpkT|V?[eBFM_{dinGQtz_WMmacTbxXxooXPExM~WlBjRsDcfxtUPvDmopp]WKLp]VDTEetS\\`CMJBiZSHsVH}VBSZbWQkNyrhu_yhL{xcZRwWHxUkk]EsZbojkjz[wLECcO_\\nvq?o`NCEzAWgHmn^[v\\krUrGfj]ImSaHZu|SrROCIdjKutefTEVVIxKXp_J_|QaU^VdrQB~WU|JADWtQv}gL?gsariepQkZmLqJhta`T}sGkf]Z@fnGSFfxOrf\\YWf@wnZ@?qfbdQUadE~zWxCP?sV\\fj`dIWNyGENFi~S^E?rmrdmJoAvMfRca_lNa]CRmWJ{{hsERVKrF`v?uXqXxDtazGB{HzkATTWyfOR]r?ywmabKAnm{jIFM[dsE?JSPOvFzSkTJP|N|t_LVLeZb`TKWPUadZw]PuDNYFTYuecK`t_xu`K~gMfyJpISSw]pi_s}ojen_Svd?xtkUeSjWZHCVBYzOK@jzjxAZjNkF_hGPKwMI~HiV?q[zgxzSeQ@i[zdvhbH{J[?|Dx\\u?PreEmCtN\\XsXjcsT`rfRgFAhqY?XJz~FrTqIbyPLp\\riLHhlxTpd_FXjXMnR_n@JaBPKByDn[MUDVouscxUwOndlQvA?o{MGEMhvpD~[GDDfvpA]`|IF{RbnmQYXkpoMkb\\`]PJNf@xWLbdouXKICQ~ymLea\\TBawdkJBv[sOSAzgF?pJZfE[j|RnKLM~PBgqaLf\\Dp[AfWisnT_nzHgpHIzWE_^EuKwi\\FLAXJudp`@LmVnQxW@NbAkfVBMPs~f_^\\|hQb`lwJMLPAyqcL{QhVEe_BgsukQdF[bH~iuHJoYfIl}behXqHWzNR{wBgPtUYJ`Lrt`PUJxi^MYWzcE[dQcR[d{`^GKzKMRfoaH~?hun?`qqwlk~GyAi]?leY?UvOjDZ^}MLsR{LO~gAXTbCyFHfx}PcivhWHEmAuYqprIgw~WoqqvKit]pu_hz@PHHitGxsDt|weNGZ|Q`][\\@{cJ}CErPPhkYKtZq?YZ@z|DHnaqGkClmxid^]FpJhFRtsOhl^?hr{bfnMC{F`TN?S{UuLDITAIS@~^m@UNvchVA^HaowLC[sg{G^uV^ktwoIDLXTy?eix`_x|eTnfA~jMiP[[HHMokTbPeSicjAHrXxyUxdtAAbHqztAeeNKYezP^WdO{qpQXhT?EbZE]Eq}vcsZb[pPep[CaKRHuESvYQiijp[piJ]cCk?iVH|qrZi]gXmmAHvefMLbI[gR]eIlto[fj@rCPEygxV{km^S{PXtBQgWAALsNNug|xXO`^rcG_GmWVCzeE~ZyLVhu^iBAa{aToM_[[NyTqveCyMnrPBhQRAoZeSZqXwozCME\\]fU?`xrNqr[KFMSeDhseBD?~{x~xu`D_WXbXeBYl`?TTrV}JNMmyg{xpHS@sWplpV[kWUM`t@jfG_qhCvAJ{\\kz{i_HoeonR[|DQdxfnqWtBhU|_ot`eVU{ss{Vgn}E{FDOd]CRrWn?ZeFK_GMWoYBDOJ|UzTFJ~[bFbwU~VtC}m?P]ZO@wf?e}kd}h\\th^gQsl\\OgrQzLA_cnuOUw\\fSJY@H_zWDBXXltTS^wg~clyP|gfdttd?NgmlYHgzsK{`Be|P|NHyYp_rjO@PQPj\\XmpDk|w\\t?WEXnEtUma_@^jiSwNFJ^wAzrHP}FUCdtZ~XOQe]iJqXw\\Rl_@oV`gwtyXC[oOy|ch}SRG\\a]}hqbWuBD?~GK^A_vfkksJDfvdIjWsVHrAfIjtZuIV{UsBnHcSTuoxWmWoyGPLxLYZPaJPlMUpHpUV\\KaiUMhE}{eILygK_hljXlbK~`kKMxIq]wJxnbROSeAUQDpc~YUZfGvRThOopaW{|tfCa_EiKwqmZjridQfSGT_kfI^fL}tpEY^_jCWaL~]nHuoKUwpiz_qfAtaIbD`mqfajpUPl[AQzOGnUTKsx[]}?aJSfNdyDN{nYpRE_jG~hgb}h?ez|\\uY|vQ_G?_I}\\vlYF]OTBXgxoC@zMXKlJVS}S]COfKjjcuqbj[`a|PkmayLKHQCeu^MEsxNnxxjySFM@|deTKdiSByGlFg\\IpehxOHhOoPg}~AMhWCMtWfVxw[xz\\MRnxyabGomQJFnmgwihT~saBAKj@lfb_zVSxgHYu_LV?RJPoxSV}_WrEylp]wkCZeQtJMlFRF{Nd]nAZ`mA[KdVUHX^z?jk?S_FS@NsMZmrxwjZVoNk]T_[OrFRKm?]Q[Y[siSRqjwqTyEvdp`wRSr}KrcQnSaZ^UDffeavMxbWhOBmHB@ieWysplY`{aqBRFkOs[YDVagLGg^_XuGL^}~z|kJE^o[nh^IR~gb`AhWztsAiawuetSn@mCmINgBTW_BAgrPmFxUmIpwBfRGQn\\~}cExUY[UpVsiIjcG|GIIdr`{{}FxZnx[tgog`RBxBnMJOcDB}ZaQR|oWeUExDBYBI[Z]ndyOGvXsOzNVNv?{_wekeC\\ckzu\\?Z}vmmcQpPkQXLhnrEoWOFvuGyUXhRX?ocZpmxkYOJDS\\JM[z?fKNmrBeFn}CcA}YvzqVrymqQtTk@NBCAGawjN`WdZ{mYNOwTc]sY?PIOatg^?{MvO^ybMS~}HXuPBeJLnC\\qwS{^rqgHuFUD]cc~zy`SwzJQMEZAJwAtWeFOs_E^uiXOQIhOzEg\\_ydm\\Ed}`YDm[t}sy{K{Xf|o`{M]FBoBxwyMv^lPFN[H?{EFo{NwAFAKfowGFoG~o[?^@~EM{PBKhFF{pe@@~`}N}\\kEzo^{N_B}@~?N~wFx}Oz\\?N?{F?B}?N{?F}?}FmsEW?Nw?N{??~~@}Br?uc~?Bo]?~~_@~}Bb~zs????????????????????????????????????N~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'

comment:33 Changed 6 months ago by dimpase

OK, I checked these 4 graphs, and it appears that the 1st two are not isomorphic to the 2nd two (assuming we trust our py2 implementations of automorphism computations - the 1st two have groups of order 27, teh 2nd two of order 3). Quite unexpectedly to me, the 2nd two are strongly regular with the same parameters as the 1st two (this explains why it takes forever to try to compute isomorphisms).

So this invalidates my claim that the automorphism computation broke, it's the construction of this particular graph that broke (a bit).

comment:34 Changed 6 months ago by dcoudert

I can not help for checking the validity of MathonPseudocyclicStronglyRegularGraph...

comment:35 Changed 6 months ago by dimpase

The fact is that this doctest the latter produces different results in py2 and py3.

I understand that there is a way to skip a test for py3, so this can be done here, and another py3-specific ticket opened to deal with the discrepancy.

comment:36 Changed 6 months ago by dcoudert

You mean that we should hide the py3 failing doctest ? Is it really useful ?

Currently, this ticket align the behaviors of the 2 methods ('sage' and 'bliss'), do some cleaning and fix 1 doctest for py3. The other issues for which further work is needed are not touched.

comment:37 in reply to: ↑ 10 Changed 6 months ago by dimpase

Replying to dcoudert:

I tried to investigate further on the possible cause of the issues with automorphism_group and the Python3 failing doctests in src/sage/graphs/generators/families.py.

The good news is that we have the same result with 'bliss' and 'sage'

sage: G = graphs.PaleyGraph(9)
sage: a = G.automorphism_group(partition=[sorted(G)])
sage: it = (x for x in a.normal_subgroups() if x.order() == 9)
sage: subg = next(iter(it))
sage: r = [matrix(libgap.PermutationMat(libgap(z), 9).sage())
....:      for z in subg]
sage: ff = list(map(lambda y: (y[0]-1,y[1]-1),
....:          Permutation(map(lambda x: 1+r.index(x^-1), r)).cycle_tuples()[1:]))
sage: L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff))
sage: G.relabel()
sage: G3x3=graphs.MathonPseudocyclicStronglyRegularGraph(2,G=G,L=L)
sage: G3x3.is_strongly_regular(parameters=True)
(441, 220, 109, 110)
sage: G3x3.automorphism_group(algorithm="bliss").order() # optional - bliss
3  # <-- expect 27 in Python 2 
sage: G3x3.automorphism_group(algorithm="sage").order() # long time
3  # <-- expect 27 in Python 2 

The issue may come from PermutationGroup that is used in both case...

I'm checking this example in Py3, comparing with Py2, and I see that G.relabel() is the place where the first discrepancy occurs. Namely, the order of the new vertices in Py3 differs from the one in Py2, where the order is the same as in the output of G.vertices() before relabeling.

In Py2 the edge (0,1), where 0,1 are elements of the finite field GF(9), and they also come the 1st in G.vertices(), is mapped by relabeling to (0,1), but in Py3 this edge is gone.

Is there a way to force G.relabel() to keep the order of G.vertices()?

comment:38 Changed 6 months ago by dimpase

In fact, this looks like a Py3-bug to me.

sage: G = graphs.PaleyGraph(9); G.relabel() 
sage: graphs.PaleyGraph(9).adjacency_matrix()==G.adjacency_matrix() # Py3 -in Py2 it's True
False

It is really totally unexpected that G.relabel() breaks the ordering. Imagine G being in the canonical form, and then G.relabel() breaking it.

I think G.relabel() must leave the adjacency matrix of G intact.

comment:39 Changed 6 months ago by dcoudert

I disagree with that. The only way to preserve the ordering is to sort vertex labels, and we want to avoid sorting as much as possible in py3. If a user wants a specific ordering, it is possible to use G.relabel(perm=G.vertices()). Similarly for the adjacency matrix, we can now specify the ordering of the vertices.

Now, for the canonical labeling, the labeling is not unique. It depends on the algorithm used ('sage' and 'bliss' can give different answers), and also on vertex labels.

So we need to find another solution.

comment:40 Changed 6 months ago by git

  • Commit changed from 15790aa56f4c445a53f708b02c9759e15441ddf4 to ad9b46f7d3e00bca5ff399f78a54897b1366f1b7

Branch pushed to git repo; I updated commit sha1. New commits:

ad9b46frelabel with an identity perm

comment:41 Changed 6 months ago by dimpase

this commit should do the trick, at least this fixes the two failing doctest in src/sage/graphs/generators/families.py for this branch on Py3.

comment:42 Changed 6 months ago by dimpase

  • Reviewers set to Dima Pasechnik
  • Status changed from needs_review to positive_review

OK

comment:43 Changed 6 months ago by chapoton

failing patchbot is not compatible with positive review :

sage -t --long src/sage/geometry/polyhedron/ppl_lattice_polytope.py
**********************************************************************
File "src/sage/geometry/polyhedron/ppl_lattice_polytope.py", line 986, in sage.geometry.polyhedron.ppl_lattice_polytope.LatticePolytope_PPL_class.restricted_automorphism_group
Failed example:
    set(G.domain()) == set(Z3square.vertices())
Expected:
    True
Got:
    False

comment:44 Changed 6 months ago by dimpase

  • Status changed from positive_review to needs_work

indeed, None in the domain of the group G below, due to something wrong in this branch.

sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL
sage: Z3square = LatticePolytope_PPL((0,0), (1,2), (2,1), (3,3))
sage: Z3square.restricted_automorphism_group(vertex_labels=(1,2,3,4)) == PermutationGroup([[(2,3)],[(1,2),(3,4)]])
True
sage: G = Z3square.restricted_automorphism_group()
sage: G == PermutationGroup([[((1,2),(2,1))],[((0,0),(1,2)),((2,1),(3,3))],[((0,0),(3,3))]])
True
sage: G.domain()
{(0, 0), (1, 2), (2, 1), (3, 3), None, None, None, None}
sage: Z3square.vertices()
((0, 0), (1, 2), (2, 1), (3, 3))
sage: set(G.domain())
{None, (0, 0), (1, 2), (2, 1), (3, 3)}

comment:45 Changed 6 months ago by dimpase

to narrow this None nonsense down; in this branch one gets:

sage: G=Graph([(0, 1, 1/4), (0, 2, 1/4), (0, 3, -1/4), (1, 2, -1/4), (1, 3, 1/4), (2, 3, 1/4)])
sage: a=G.automorphism_group(edge_labels=True)
sage: a.domain()
{0, 1, 2, 3, None, None, None, None}

comment:46 Changed 6 months ago by dimpase

even more specifically, the problem is in bliss interface:

sage: a=G.automorphism_group(edge_labels=True, algorithm="sage")
sage: a.domain()
{0, 1, 2, 3}
sage: a=G.automorphism_group(edge_labels=True, algorithm="bliss")
sage: a.domain()
{0, 1, 2, 3, None, None, None, None}

comment:47 Changed 6 months ago by dimpase

OK, so the bug is here in src/sage/graphs/bliss.pyx:

     gens = automorphism_group_gens_from_edge_list(Vnr, Vout, Vin, Lnr, labels, int2vert, partition, directed)
 
     from sage.groups.perm_gps.permgroup import PermutationGroup
-    return PermutationGroup(gens, domain=list(G))
+    return PermutationGroup(gens, domain=int2vert)

this change does not take into account that automorphism_group_gens_from_edge_list modifies int2vert for edge-labelled graphs (bliss cannot do edge-labelled graphs directly, and so a bunch of axiliary vertices and edges is created to deal with them). (Specifically, adds stuff to the end of the list; so one can return the original slice of int2vert).

88bde074188 (David Coudert     2019-03-30 15:45:07 +0100 741)     return PermutationGroup(gens, domain=int2vert)

David, can you fix this?

comment:48 Changed 6 months ago by git

  • Commit changed from ad9b46f7d3e00bca5ff399f78a54897b1366f1b7 to 50a69e8454a4b77beaffc726c6babc472488641a

Branch pushed to git repo; I updated commit sha1. New commits:

a4fb23btrac #27571: Merged with 8.8.beta7
50a69e8trac #27571: give correct domain

comment:49 Changed 6 months ago by dcoudert

Thank you Dima for identifying this issue. Fixed.

comment:50 Changed 6 months ago by chapoton

green bot. back to needs review ?

comment:51 Changed 6 months ago by dcoudert

  • Status changed from needs_work to needs_review

Yes, forgot to set it back. Thanks.

comment:52 Changed 5 months ago by dcoudert

  • Description modified (diff)

I have updated the ticket description as this ticket fix all doctests in families.py.

comment:53 Changed 5 months ago by dimpase

Could you rather chop off the extra tail grown in automorphism_group_gens_from_edge_list rather than creating yet another list?

comment:54 Changed 5 months ago by git

  • Commit changed from 50a69e8454a4b77beaffc726c6babc472488641a to 2136e19817814b9466acb712bd15daa1ca2ca83b

Branch pushed to git repo; I updated commit sha1. New commits:

93a2a53trac #27571: Merged with 8.8.rc0
2136e19trac #27571: avoid creating an extra variable for the domain

comment:55 Changed 5 months ago by dcoudert

Done.

comment:56 Changed 5 months ago by dimpase

IMHO the latest commit creates a memory leak. These extra entries for the domain need to be explicitly deallocated in automorphism_group_gens_from_edge_list, no?

comment:57 Changed 5 months ago by dcoudert

Are you sure ? int2vert[:G.order()] gives a new sublist (a copy?) to PermutationGroup, no? and then variable int2vert is deallocated.

comment:58 Changed 5 months ago by dimpase

  • Status changed from needs_review to positive_review

OK. It's fine, I didn't pay attention to int2vert being a Python list.

comment:59 Changed 5 months ago by dcoudert

Thank you.

comment:60 Changed 5 months ago by vbraun

  • Branch changed from public/graphs/27571_automorphism to 2136e19817814b9466acb712bd15daa1ca2ca83b
  • Resolution set to fixed
  • Status changed from positive_review to closed

comment:61 Changed 5 months ago by embray

  • Milestone changed from sage-8.8 to sage-8.9

Not in Sage 8.8. Let's please to try keep tickets' milestones related to the release in which we actually intend to include them, and in particular the release in which they were actually included, especially when closing tickets.

Note: See TracTickets for help on using tickets.