From fe5c0be15bd45970284dc8bf4f1a72abd12d8e52 Mon Sep 17 00:00:00 2001 From: MP3Martin Date: Sat, 26 Nov 2022 12:06:52 +0000 Subject: [PATCH] build : Commit Pipeline --- jsRUNpy.js | 3 +++ jsRUNpy.min.extreme.js | Bin 949820 -> 949502 bytes src/4_jsRUNpy.js | 1 - 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/jsRUNpy.js b/jsRUNpy.js index 539c048..0ec413e 100644 --- a/jsRUNpy.js +++ b/jsRUNpy.js @@ -6,6 +6,7 @@ - The actual code is at the bottom */ + /* --- this comment applies to 2_brython.min.js --- - Original code is from https://github.com/brython-dev/brython @@ -27,6 +28,7 @@ --- brython.js ↓ --- */ !function(t,e){"use strict";function r(t,e,r,n){for(r=void 0!==r?r:0,n=void 0!==n?n:t.length;n>r;){var _=n+r>>1;t[_]>e?n=_:r=_+1}return r}function n(t){switch(t.charCodeAt(0)){case 9:case 10:case 11:case 12:case 13:case 28:case 29:case 30:case 31:case 32:case 133:case 160:case 5760:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:return!0}return!1}function _(t){var e;return t>=1114112?e=0:(e=function(t){if(35>t)return t;var e=r(F,t);return S[e]}(t>>N),e=function(t){var e=r(O,t);return T[e]}((e<n;n++)r+=String.fromCharCode(k[t+n]);return r}function a(t){return 0!=(_(t.charCodeAt(0))[A]&L)}function o(t){return 0!=(_(t.charCodeAt(0))[A]&V)}function s(t){return function(t){var e=_(t.charCodeAt(0));return e[A]&R?e[C]:-1}(t)<0?0:1}function u(t){return function(t){var e=_(t.charCodeAt(0));return e[A]&M?e[j]:-1}(t)<0?0:1}function l(t){return 0!=(_(t.charCodeAt(0))[A]&z)}function c(t){return 0!=(_(t.charCodeAt(0))[A]&U)}function f(t){return 0!=(_(t.charCodeAt(0))[A]&J)}function p(t){return 0!=(_(t.charCodeAt(0))[A]&q)}function h(t){var e=t.charCodeAt(0),r=_(e);return r[A]&H?i(65535&r[E],r[E]>>24):String.fromCharCode(e+r[E])}function $(t){var e=t.charCodeAt(0),r=_(e);return r[A]&H?i(65535&r[D],r[D]>>24):String.fromCharCode(e+r[D])}function d(t){var e=t.charCodeAt(0),r=_(e);return r[A]&H?i(65535&r[w],r[w]>>24):String.fromCharCode(e+r[w])}function g(t){var e=_(t.charCodeAt(0));return e[A]&H&&e[E]>>20&7?i((65535&e[E])+(e[E]>>24),e[E]>>20&7):h(t)}function m(t){return 0!=(_(t.charCodeAt(0))[A]&Y)}function b(t){return 0!=(_(t.charCodeAt(0))[A]&G)}function v(t){return 0!=(_(t.charCodeAt(0))[A]&I)}function y(t){return v(t)||s(t)||u(t)||l(t)}function B(t,e,r){return 931==t.charCodeAt(0)?function(t,e){var r,n;for(r=e-1;r>=0&&b(n=t.charAt(r));r--);var _=r>=0&&m(n);if(_){for(r=e+1;t.length>r&&b(n=t.charAt(r));r++);_=r==t.length||!m(n)}return String.fromCharCode(_?962:963)}(e,r):h(t)}e.unicode={};var x=[[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,32],[0,0,0,0,0,48],[0,0,0,0,0,1056],[0,0,0,0,0,1024],[0,0,0,0,0,5120],[0,0,0,0,0,3590],[0,0,0,1,1,3590],[0,0,0,2,2,3590],[0,0,0,3,3,3590],[0,0,0,4,4,3590],[0,0,0,5,5,3590],[0,0,0,6,6,3590],[0,0,0,7,7,3590],[0,0,0,8,8,3590],[0,0,0,9,9,3590],[0,32,0,0,0,10113],[0,0,0,0,0,1536],[-32,0,-32,0,0,9993],[0,0,0,0,0,9993],[0,0,0,0,0,4096],[0,0,0,0,2,3076],[0,0,0,0,3,3076],[16777218,17825792,16777218,0,0,26377],[0,0,0,0,0,5632],[0,0,0,0,1,3076],[0,0,0,0,0,3072],[33554438,18874371,33554440,0,0,26377],[121,0,121,0,0,9993],[0,1,0,0,0,10113],[-1,0,-1,0,0,9993],[16777228,33554442,16777228,0,0,26497],[-232,0,-232,0,0,9993],[33554448,18874381,33554448,0,0,26377],[0,-121,0,0,0,10113],[16777236,17825810,16777236,0,0,26377],[195,0,195,0,0,9993],[0,210,0,0,0,10113],[0,206,0,0,0,10113],[0,205,0,0,0,10113],[0,79,0,0,0,10113],[0,202,0,0,0,10113],[0,203,0,0,0,10113],[0,207,0,0,0,10113],[97,0,97,0,0,9993],[0,211,0,0,0,10113],[0,209,0,0,0,10113],[163,0,163,0,0,9993],[0,213,0,0,0,10113],[130,0,130,0,0,9993],[0,214,0,0,0,10113],[0,218,0,0,0,10113],[0,217,0,0,0,10113],[0,219,0,0,0,10113],[0,0,0,0,0,1793],[56,0,56,0,0,9993],[0,2,1,0,0,10113],[-1,1,0,0,0,10049],[-2,0,-1,0,0,9993],[-79,0,-79,0,0,9993],[33554456,18874389,33554456,0,0,26377],[0,-97,0,0,0,10113],[0,-56,0,0,0,10113],[0,-130,0,0,0,10113],[0,10795,0,0,0,10113],[0,-163,0,0,0,10113],[0,10792,0,0,0,10113],[10815,0,10815,0,0,9993],[0,-195,0,0,0,10113],[0,69,0,0,0,10113],[0,71,0,0,0,10113],[10783,0,10783,0,0,9993],[10780,0,10780,0,0,9993],[10782,0,10782,0,0,9993],[-210,0,-210,0,0,9993],[-206,0,-206,0,0,9993],[-205,0,-205,0,0,9993],[-202,0,-202,0,0,9993],[-203,0,-203,0,0,9993],[42319,0,42319,0,0,9993],[42315,0,42315,0,0,9993],[-207,0,-207,0,0,9993],[42280,0,42280,0,0,9993],[42308,0,42308,0,0,9993],[-209,0,-209,0,0,9993],[-211,0,-211,0,0,9993],[10743,0,10743,0,0,9993],[42305,0,42305,0,0,9993],[10749,0,10749,0,0,9993],[-213,0,-213,0,0,9993],[-214,0,-214,0,0,9993],[10727,0,10727,0,0,9993],[-218,0,-218,0,0,9993],[42282,0,42282,0,0,9993],[-69,0,-69,0,0,9993],[-217,0,-217,0,0,9993],[-71,0,-71,0,0,9993],[-219,0,-219,0,0,9993],[42261,0,42261,0,0,9993],[42258,0,42258,0,0,9993],[0,0,0,0,0,14089],[0,0,0,0,0,5889],[16777244,17825818,16777244,0,0,30216],[0,0,0,0,0,13321],[0,116,0,0,0,10113],[0,38,0,0,0,10113],[0,37,0,0,0,10113],[0,64,0,0,0,10113],[0,63,0,0,0,10113],[50331681,19922973,50331681,0,0,26377],[-38,0,-38,0,0,9993],[-37,0,-37,0,0,9993],[50331688,19922980,50331688,0,0,26377],[16777261,17825835,16777261,0,0,26377],[-64,0,-64,0,0,9993],[-63,0,-63,0,0,9993],[0,8,0,0,0,10113],[16777264,17825838,16777264,0,0,26377],[16777267,17825841,16777267,0,0,26377],[0,0,0,0,0,10113],[16777270,17825844,16777270,0,0,26377],[16777273,17825847,16777273,0,0,26377],[-8,0,-8,0,0,9993],[16777276,17825850,16777276,0,0,26377],[16777279,17825853,16777279,0,0,26377],[7,0,7,0,0,9993],[-116,0,-116,0,0,9993],[0,-60,0,0,0,10113],[16777282,17825856,16777282,0,0,26377],[0,-7,0,0,0,10113],[0,80,0,0,0,10113],[-80,0,-80,0,0,9993],[0,15,0,0,0,10113],[-15,0,-15,0,0,9993],[0,48,0,0,0,10113],[-48,0,-48,0,0,9993],[33554502,18874435,33554504,0,0,26377],[0,0,0,0,0,1537],[0,7264,0,0,0,10113],[0,0,0,0,1,3588],[0,0,0,0,2,3588],[0,0,0,0,3,3588],[0,0,0,0,4,3588],[0,0,0,0,5,3588],[0,0,0,0,6,3588],[0,0,0,0,7,3588],[0,0,0,0,8,3588],[0,0,0,0,9,3588],[16777292,17825866,16777292,0,0,26497],[16777295,17825869,16777295,0,0,26497],[16777298,17825872,16777298,0,0,26497],[16777301,17825875,16777301,0,0,26497],[16777304,17825878,16777304,0,0,26497],[16777307,17825881,16777307,0,0,26497],[16777310,17825884,16777310,0,0,26497],[16777313,17825887,16777313,0,0,26497],[16777316,17825890,16777316,0,0,26497],[16777319,17825893,16777319,0,0,26497],[16777322,17825896,16777322,0,0,26497],[16777325,17825899,16777325,0,0,26497],[16777328,17825902,16777328,0,0,26497],[16777331,17825905,16777331,0,0,26497],[16777334,17825908,16777334,0,0,26497],[16777337,17825911,16777337,0,0,26497],[16777340,17825914,16777340,0,0,26497],[16777343,17825917,16777343,0,0,26497],[16777346,17825920,16777346,0,0,26497],[16777349,17825923,16777349,0,0,26497],[16777352,17825926,16777352,0,0,26497],[16777355,17825929,16777355,0,0,26497],[16777358,17825932,16777358,0,0,26497],[16777361,17825935,16777361,0,0,26497],[16777364,17825938,16777364,0,0,26497],[16777367,17825941,16777367,0,0,26497],[16777370,17825944,16777370,0,0,26497],[16777373,17825947,16777373,0,0,26497],[16777376,17825950,16777376,0,0,26497],[16777379,17825953,16777379,0,0,26497],[16777382,17825956,16777382,0,0,26497],[16777385,17825959,16777385,0,0,26497],[16777388,17825962,16777388,0,0,26497],[16777391,17825965,16777391,0,0,26497],[16777394,17825968,16777394,0,0,26497],[16777397,17825971,16777397,0,0,26497],[16777400,17825974,16777400,0,0,26497],[16777403,17825977,16777403,0,0,26497],[16777406,17825980,16777406,0,0,26497],[16777409,17825983,16777409,0,0,26497],[16777412,17825986,16777412,0,0,26497],[16777415,17825989,16777415,0,0,26497],[16777418,17825992,16777418,0,0,26497],[16777421,17825995,16777421,0,0,26497],[16777424,17825998,16777424,0,0,26497],[16777427,17826001,16777427,0,0,26497],[16777430,17826004,16777430,0,0,26497],[16777433,17826007,16777433,0,0,26497],[16777436,17826010,16777436,0,0,26497],[16777439,17826013,16777439,0,0,26497],[16777442,17826016,16777442,0,0,26497],[16777445,17826019,16777445,0,0,26497],[16777448,17826022,16777448,0,0,26497],[16777451,17826025,16777451,0,0,26497],[16777454,17826028,16777454,0,0,26497],[16777457,17826031,16777457,0,0,26497],[16777460,17826034,16777460,0,0,26497],[16777463,17826037,16777463,0,0,26497],[16777466,17826040,16777466,0,0,26497],[16777469,17826043,16777469,0,0,26497],[16777472,17826046,16777472,0,0,26497],[16777475,17826049,16777475,0,0,26497],[16777478,17826052,16777478,0,0,26497],[16777481,17826055,16777481,0,0,26497],[16777484,17826058,16777484,0,0,26497],[16777487,17826061,16777487,0,0,26497],[16777490,17826064,16777490,0,0,26497],[16777493,17826067,16777493,0,0,26497],[16777496,17826070,16777496,0,0,26497],[16777499,17826073,16777499,0,0,26497],[16777502,17826076,16777502,0,0,26497],[16777505,17826079,16777505,0,0,26497],[16777508,17826082,16777508,0,0,26497],[16777511,17826085,16777511,0,0,26497],[16777514,17826088,16777514,0,0,26497],[16777517,17826091,16777517,0,0,26497],[16777520,17826094,16777520,0,0,26497],[16777523,17826097,16777523,0,0,26497],[16777526,17826100,16777526,0,0,26497],[16777529,17826103,16777529,0,0,26497],[16777532,17826106,16777532,0,0,26497],[16777535,17826109,16777535,0,0,26497],[16777538,17826112,16777538,0,0,26497],[16777541,17826115,16777541,0,0,26497],[16777544,17826118,16777544,0,0,26497],[16777547,17826121,16777547,0,0,26497],[16777550,17826124,16777550,0,0,26377],[16777553,17826127,16777553,0,0,26377],[16777556,17826130,16777556,0,0,26377],[16777559,17826133,16777559,0,0,26377],[16777562,17826136,16777562,0,0,26377],[16777565,17826139,16777565,0,0,26377],[0,0,0,0,0,3840],[35332,0,35332,0,0,9993],[3814,0,3814,0,0,9993],[33554785,18874718,33554785,0,0,26377],[33554790,18874723,33554790,0,0,26377],[33554795,18874728,33554795,0,0,26377],[33554800,18874733,33554800,0,0,26377],[33554805,18874738,33554805,0,0,26377],[16777593,17826167,16777593,0,0,26377],[16777597,18874746,16777597,0,0,26497],[8,0,8,0,0,9993],[0,-8,0,0,0,10113],[33554817,18874750,33554817,0,0,26377],[50332039,19923331,50332039,0,0,26377],[50332046,19923338,50332046,0,0,26377],[50332053,19923345,50332053,0,0,26377],[74,0,74,0,0,9993],[86,0,86,0,0,9993],[100,0,100,0,0,9993],[128,0,128,0,0,9993],[112,0,112,0,0,9993],[126,0,126,0,0,9993],[33554843,18874776,16777629,0,0,26377],[33554849,18874782,16777635,0,0,26377],[33554855,18874788,16777641,0,0,26377],[33554861,18874794,16777647,0,0,26377],[33554867,18874800,16777653,0,0,26377],[33554873,18874806,16777659,0,0,26377],[33554879,18874812,16777665,0,0,26377],[33554885,18874818,16777671,0,0,26377],[33554891,18874824,16777677,0,0,26433],[33554897,18874830,16777683,0,0,26433],[33554903,18874836,16777689,0,0,26433],[33554909,18874842,16777695,0,0,26433],[33554915,18874848,16777701,0,0,26433],[33554921,18874854,16777707,0,0,26433],[33554927,18874860,16777713,0,0,26433],[33554933,18874866,16777719,0,0,26433],[33554939,18874872,16777725,0,0,26377],[33554945,18874878,16777731,0,0,26377],[33554951,18874884,16777737,0,0,26377],[33554957,18874890,16777743,0,0,26377],[33554963,18874896,16777749,0,0,26377],[33554969,18874902,16777755,0,0,26377],[33554975,18874908,16777761,0,0,26377],[33554981,18874914,16777767,0,0,26377],[33554987,18874920,16777773,0,0,26433],[33554993,18874926,16777779,0,0,26433],[33554999,18874932,16777785,0,0,26433],[33555005,18874938,16777791,0,0,26433],[33555011,18874944,16777797,0,0,26433],[33555017,18874950,16777803,0,0,26433],[33555023,18874956,16777809,0,0,26433],[33555029,18874962,16777815,0,0,26433],[33555035,18874968,16777821,0,0,26377],[33555041,18874974,16777827,0,0,26377],[33555047,18874980,16777833,0,0,26377],[33555053,18874986,16777839,0,0,26377],[33555059,18874992,16777845,0,0,26377],[33555065,18874998,16777851,0,0,26377],[33555071,18875004,16777857,0,0,26377],[33555077,18875010,16777863,0,0,26377],[33555083,18875016,16777869,0,0,26433],[33555089,18875022,16777875,0,0,26433],[33555095,18875028,16777881,0,0,26433],[33555101,18875034,16777887,0,0,26433],[33555107,18875040,16777893,0,0,26433],[33555113,18875046,16777899,0,0,26433],[33555119,18875052,16777905,0,0,26433],[33555125,18875058,16777911,0,0,26433],[33555131,18875064,33555133,0,0,26377],[33555138,18875071,16777924,0,0,26377],[33555144,18875077,33555146,0,0,26377],[33555151,18875084,33555151,0,0,26377],[50332373,19923665,50332376,0,0,26377],[0,-74,0,0,0,10113],[33555166,18875099,16777952,0,0,26433],[16777955,17826529,16777955,0,0,26377],[33555175,18875108,33555177,0,0,26377],[33555182,18875115,16777968,0,0,26377],[33555188,18875121,33555190,0,0,26377],[33555195,18875128,33555195,0,0,26377],[50332417,19923709,50332420,0,0,26377],[0,-86,0,0,0,10113],[33555210,18875143,16777996,0,0,26433],[50332433,19923725,50332433,0,0,26377],[50332440,19923732,50332440,0,0,26377],[33555230,18875163,33555230,0,0,26377],[50332452,19923744,50332452,0,0,26377],[0,-100,0,0,0,10113],[50332459,19923751,50332459,0,0,26377],[50332466,19923758,50332466,0,0,26377],[33555256,18875189,33555256,0,0,26377],[33555261,18875194,33555261,0,0,26377],[50332483,19923775,50332483,0,0,26377],[0,-112,0,0,0,10113],[33555273,18875206,33555275,0,0,26377],[33555280,18875213,16778066,0,0,26377],[33555286,18875219,33555288,0,0,26377],[33555293,18875226,33555293,0,0,26377],[50332515,19923807,50332518,0,0,26377],[0,-128,0,0,0,10113],[0,-126,0,0,0,10113],[33555308,18875241,16778094,0,0,26433],[0,0,0,0,0,3076],[0,0,0,0,4,3076],[0,0,0,0,5,3076],[0,0,0,0,6,3076],[0,0,0,0,7,3076],[0,0,0,0,8,3076],[0,0,0,0,9,3076],[0,0,0,0,0,1792],[0,-7517,0,0,0,10113],[0,-8383,0,0,0,10113],[0,-8262,0,0,0,10113],[0,28,0,0,0,10113],[-28,0,-28,0,0,9993],[0,16,0,0,0,12160],[-16,0,-16,0,0,12040],[0,26,0,0,0,9344],[-26,0,-26,0,0,9224],[0,-10743,0,0,0,10113],[0,-3814,0,0,0,10113],[0,-10727,0,0,0,10113],[-10795,0,-10795,0,0,9993],[-10792,0,-10792,0,0,9993],[0,-10780,0,0,0,10113],[0,-10749,0,0,0,10113],[0,-10783,0,0,0,10113],[0,-10782,0,0,0,10113],[0,-10815,0,0,0,10113],[-7264,0,-7264,0,0,9993],[0,0,0,0,0,5121],[0,0,0,0,0,3841],[0,-35332,0,0,0,10113],[0,-42280,0,0,0,10113],[0,-42308,0,0,0,10113],[0,-42319,0,0,0,10113],[0,-42315,0,0,0,10113],[0,-42305,0,0,0,10113],[0,-42258,0,0,0,10113],[0,-42282,0,0,0,10113],[0,-42261,0,0,0,10113],[0,928,0,0,0,10113],[-928,0,-928,0,0,9993],[16778097,17826671,16778097,0,0,26377],[16778100,17826674,16778100,0,0,26377],[16778103,17826677,16778103,0,0,26377],[16778106,17826680,16778106,0,0,26377],[16778109,17826683,16778109,0,0,26377],[16778112,17826686,16778112,0,0,26377],[16778115,17826689,16778115,0,0,26377],[16778118,17826692,16778118,0,0,26377],[16778121,17826695,16778121,0,0,26377],[16778124,17826698,16778124,0,0,26377],[16778127,17826701,16778127,0,0,26377],[16778130,17826704,16778130,0,0,26377],[16778133,17826707,16778133,0,0,26377],[16778136,17826710,16778136,0,0,26377],[16778139,17826713,16778139,0,0,26377],[16778142,17826716,16778142,0,0,26377],[16778145,17826719,16778145,0,0,26377],[16778148,17826722,16778148,0,0,26377],[16778151,17826725,16778151,0,0,26377],[16778154,17826728,16778154,0,0,26377],[16778157,17826731,16778157,0,0,26377],[16778160,17826734,16778160,0,0,26377],[16778163,17826737,16778163,0,0,26377],[16778166,17826740,16778166,0,0,26377],[16778169,17826743,16778169,0,0,26377],[16778172,17826746,16778172,0,0,26377],[16778175,17826749,16778175,0,0,26377],[16778178,17826752,16778178,0,0,26377],[16778181,17826755,16778181,0,0,26377],[16778184,17826758,16778184,0,0,26377],[16778187,17826761,16778187,0,0,26377],[16778190,17826764,16778190,0,0,26377],[16778193,17826767,16778193,0,0,26377],[16778196,17826770,16778196,0,0,26377],[16778199,17826773,16778199,0,0,26377],[16778202,17826776,16778202,0,0,26377],[16778205,17826779,16778205,0,0,26377],[16778208,17826782,16778208,0,0,26377],[16778211,17826785,16778211,0,0,26377],[16778214,17826788,16778214,0,0,26377],[16778217,17826791,16778217,0,0,26377],[16778220,17826794,16778220,0,0,26377],[16778223,17826797,16778223,0,0,26377],[16778226,17826800,16778226,0,0,26377],[16778229,17826803,16778229,0,0,26377],[16778232,17826806,16778232,0,0,26377],[16778235,17826809,16778235,0,0,26377],[16778238,17826812,16778238,0,0,26377],[16778241,17826815,16778241,0,0,26377],[16778244,17826818,16778244,0,0,26377],[16778247,17826821,16778247,0,0,26377],[16778250,17826824,16778250,0,0,26377],[16778253,17826827,16778253,0,0,26377],[16778256,17826830,16778256,0,0,26377],[16778259,17826833,16778259,0,0,26377],[16778262,17826836,16778262,0,0,26377],[16778265,17826839,16778265,0,0,26377],[16778268,17826842,16778268,0,0,26377],[16778271,17826845,16778271,0,0,26377],[16778274,17826848,16778274,0,0,26377],[16778277,17826851,16778277,0,0,26377],[16778280,17826854,16778280,0,0,26377],[16778283,17826857,16778283,0,0,26377],[16778286,17826860,16778286,0,0,26377],[16778289,17826863,16778289,0,0,26377],[16778292,17826866,16778292,0,0,26377],[16778295,17826869,16778295,0,0,26377],[16778298,17826872,16778298,0,0,26377],[16778301,17826875,16778301,0,0,26377],[16778304,17826878,16778304,0,0,26377],[16778307,17826881,16778307,0,0,26377],[16778310,17826884,16778310,0,0,26377],[16778313,17826887,16778313,0,0,26377],[16778316,17826890,16778316,0,0,26377],[16778319,17826893,16778319,0,0,26377],[16778322,17826896,16778322,0,0,26377],[16778325,17826899,16778325,0,0,26377],[16778328,17826902,16778328,0,0,26377],[16778331,17826905,16778331,0,0,26377],[16778334,17826908,16778334,0,0,26377],[33555554,18875487,33555556,0,0,26377],[33555561,18875494,33555563,0,0,26377],[33555568,18875501,33555570,0,0,26377],[50332792,19924084,50332795,0,0,26377],[50332802,19924094,50332805,0,0,26377],[33555595,18875528,33555597,0,0,26377],[33555602,18875535,33555604,0,0,26377],[33555609,18875542,33555611,0,0,26377],[33555616,18875549,33555618,0,0,26377],[33555623,18875556,33555625,0,0,26377],[33555630,18875563,33555632,0,0,26377],[33555637,18875570,33555639,0,0,26377],[0,0,0,0,0,1025],[0,0,0,0,0,5633],[0,40,0,0,0,10113],[-40,0,-40,0,0,9993],[0,0,0,0,0,9344]],w=0,E=1,D=2,C=3,j=4,A=5,k=[181,956,924,223,115,115,83,83,83,115,105,775,304,329,700,110,700,78,383,115,83,496,106,780,74,780,837,953,921,912,953,776,769,921,776,769,944,965,776,769,933,776,769,962,963,931,976,946,914,977,952,920,981,966,934,982,960,928,1008,954,922,1009,961,929,1013,949,917,1415,1381,1410,1333,1362,1333,1410,43888,5024,5024,43889,5025,5025,43890,5026,5026,43891,5027,5027,43892,5028,5028,43893,5029,5029,43894,5030,5030,43895,5031,5031,43896,5032,5032,43897,5033,5033,43898,5034,5034,43899,5035,5035,43900,5036,5036,43901,5037,5037,43902,5038,5038,43903,5039,5039,43904,5040,5040,43905,5041,5041,43906,5042,5042,43907,5043,5043,43908,5044,5044,43909,5045,5045,43910,5046,5046,43911,5047,5047,43912,5048,5048,43913,5049,5049,43914,5050,5050,43915,5051,5051,43916,5052,5052,43917,5053,5053,43918,5054,5054,43919,5055,5055,43920,5056,5056,43921,5057,5057,43922,5058,5058,43923,5059,5059,43924,5060,5060,43925,5061,5061,43926,5062,5062,43927,5063,5063,43928,5064,5064,43929,5065,5065,43930,5066,5066,43931,5067,5067,43932,5068,5068,43933,5069,5069,43934,5070,5070,43935,5071,5071,43936,5072,5072,43937,5073,5073,43938,5074,5074,43939,5075,5075,43940,5076,5076,43941,5077,5077,43942,5078,5078,43943,5079,5079,43944,5080,5080,43945,5081,5081,43946,5082,5082,43947,5083,5083,43948,5084,5084,43949,5085,5085,43950,5086,5086,43951,5087,5087,43952,5088,5088,43953,5089,5089,43954,5090,5090,43955,5091,5091,43956,5092,5092,43957,5093,5093,43958,5094,5094,43959,5095,5095,43960,5096,5096,43961,5097,5097,43962,5098,5098,43963,5099,5099,43964,5100,5100,43965,5101,5101,43966,5102,5102,43967,5103,5103,5112,5104,5104,5113,5105,5105,5114,5106,5106,5115,5107,5107,5116,5108,5108,5117,5109,5109,5112,5104,5104,5113,5105,5105,5114,5106,5106,5115,5107,5107,5116,5108,5108,5117,5109,5109,7830,104,817,72,817,7831,116,776,84,776,7832,119,778,87,778,7833,121,778,89,778,7834,97,702,65,702,7835,7777,7776,223,115,115,7838,8016,965,787,933,787,8018,965,787,768,933,787,768,8020,965,787,769,933,787,769,8022,965,787,834,933,787,834,8064,7936,953,7944,921,8072,8065,7937,953,7945,921,8073,8066,7938,953,7946,921,8074,8067,7939,953,7947,921,8075,8068,7940,953,7948,921,8076,8069,7941,953,7949,921,8077,8070,7942,953,7950,921,8078,8071,7943,953,7951,921,8079,8064,7936,953,7944,921,8072,8065,7937,953,7945,921,8073,8066,7938,953,7946,921,8074,8067,7939,953,7947,921,8075,8068,7940,953,7948,921,8076,8069,7941,953,7949,921,8077,8070,7942,953,7950,921,8078,8071,7943,953,7951,921,8079,8080,7968,953,7976,921,8088,8081,7969,953,7977,921,8089,8082,7970,953,7978,921,8090,8083,7971,953,7979,921,8091,8084,7972,953,7980,921,8092,8085,7973,953,7981,921,8093,8086,7974,953,7982,921,8094,8087,7975,953,7983,921,8095,8080,7968,953,7976,921,8088,8081,7969,953,7977,921,8089,8082,7970,953,7978,921,8090,8083,7971,953,7979,921,8091,8084,7972,953,7980,921,8092,8085,7973,953,7981,921,8093,8086,7974,953,7982,921,8094,8087,7975,953,7983,921,8095,8096,8032,953,8040,921,8104,8097,8033,953,8041,921,8105,8098,8034,953,8042,921,8106,8099,8035,953,8043,921,8107,8100,8036,953,8044,921,8108,8101,8037,953,8045,921,8109,8102,8038,953,8046,921,8110,8103,8039,953,8047,921,8111,8096,8032,953,8040,921,8104,8097,8033,953,8041,921,8105,8098,8034,953,8042,921,8106,8099,8035,953,8043,921,8107,8100,8036,953,8044,921,8108,8101,8037,953,8045,921,8109,8102,8038,953,8046,921,8110,8103,8039,953,8047,921,8111,8114,8048,953,8122,921,8122,837,8115,945,953,913,921,8124,8116,940,953,902,921,902,837,8118,945,834,913,834,8119,945,834,953,913,834,921,913,834,837,8115,945,953,913,921,8124,8126,953,921,8130,8052,953,8138,921,8138,837,8131,951,953,919,921,8140,8132,942,953,905,921,905,837,8134,951,834,919,834,8135,951,834,953,919,834,921,919,834,837,8131,951,953,919,921,8140,8146,953,776,768,921,776,768,8147,953,776,769,921,776,769,8150,953,834,921,834,8151,953,776,834,921,776,834,8162,965,776,768,933,776,768,8163,965,776,769,933,776,769,8164,961,787,929,787,8166,965,834,933,834,8167,965,776,834,933,776,834,8178,8060,953,8186,921,8186,837,8179,969,953,937,921,8188,8180,974,953,911,921,911,837,8182,969,834,937,834,8183,969,834,953,937,834,921,937,834,837,8179,969,953,937,921,8188,43888,5024,5024,43889,5025,5025,43890,5026,5026,43891,5027,5027,43892,5028,5028,43893,5029,5029,43894,5030,5030,43895,5031,5031,43896,5032,5032,43897,5033,5033,43898,5034,5034,43899,5035,5035,43900,5036,5036,43901,5037,5037,43902,5038,5038,43903,5039,5039,43904,5040,5040,43905,5041,5041,43906,5042,5042,43907,5043,5043,43908,5044,5044,43909,5045,5045,43910,5046,5046,43911,5047,5047,43912,5048,5048,43913,5049,5049,43914,5050,5050,43915,5051,5051,43916,5052,5052,43917,5053,5053,43918,5054,5054,43919,5055,5055,43920,5056,5056,43921,5057,5057,43922,5058,5058,43923,5059,5059,43924,5060,5060,43925,5061,5061,43926,5062,5062,43927,5063,5063,43928,5064,5064,43929,5065,5065,43930,5066,5066,43931,5067,5067,43932,5068,5068,43933,5069,5069,43934,5070,5070,43935,5071,5071,43936,5072,5072,43937,5073,5073,43938,5074,5074,43939,5075,5075,43940,5076,5076,43941,5077,5077,43942,5078,5078,43943,5079,5079,43944,5080,5080,43945,5081,5081,43946,5082,5082,43947,5083,5083,43948,5084,5084,43949,5085,5085,43950,5086,5086,43951,5087,5087,43952,5088,5088,43953,5089,5089,43954,5090,5090,43955,5091,5091,43956,5092,5092,43957,5093,5093,43958,5094,5094,43959,5095,5095,43960,5096,5096,43961,5097,5097,43962,5098,5098,43963,5099,5099,43964,5100,5100,43965,5101,5101,43966,5102,5102,43967,5103,5103,64256,102,102,70,70,70,102,64257,102,105,70,73,70,105,64258,102,108,70,76,70,108,64259,102,102,105,70,70,73,70,102,105,64260,102,102,108,70,70,76,70,102,108,64261,115,116,83,84,83,116,64262,115,116,83,84,83,116,64275,1396,1398,1348,1350,1348,1398,64276,1396,1381,1348,1333,1348,1381,64277,1396,1387,1348,1339,1348,1387,64278,1406,1398,1358,1350,1358,1398,64279,1396,1389,1348,1341,1348,1389],N=7,F=[36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,71,72,73,74,78,79,80,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,104,105,106,112,113,118,119,155,156,157,158,159,162,163,166,167,168,173,174,177,178,188,189,190,191,197,198,199,207,208,222,223,231,232,236,237,257,258,264,265,281,282,283,300,301,302,319,320,321,329,330,332,333,334,335,336,337,338,339,340,341,342,343,344,431,432,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,526,527,528,529,530,531,532,533,534,535,536,537,538,540,541,544,545,546,547,548,549,550,551,553,554,555,556,557,558,559,561,562,565,566,576,583,584,585,586,587,608,616,617,648,652,653,720,724,725,726,727,728,734,735,736,864,865,888,889,890,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,948,949,950,976,977,978,988,989,990,992,993,994,995,996,997,998,999,1e3,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1024,1025,1026,1027,1042,1043,1044,1045,1046,1047,1095,1096,1107,1108,1142,1143,1220,1221,1357,1358,1390,1391,1392,1393,1437,1438,1520,1521,1522,1524,1525,7168,7169,7170,7171,7172,7680,8191,8192,8703,8704],S=[34,35,36,37,38,39,34,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,64,68,69,64,70,71,72,73,74,75,76,77,64,78,79,80,81,82,83,84,64,85,86,34,87,34,88,34,89,90,91,92,34,93,34,94,95,34,96,34,97,34,98,99,100,34,101,102,34,103,34,104,34,105,34,101,34,104,34,106,34,107,108,34,109,110,34,111,112,34,113,34,114,115,116,117,118,119,120,121,122,123,124,125,34,126,127,128,129,130,131,132,133,134,34,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,145,34,152,145,153,154,155,156,157,158,159,160,161,162,145,163,145,164,165,166,167,168,169,170,145,171,145,172,173,174,175,145,176,145,177,145,34,178,179,34,180,145,34,181,145,34,182,145,34,183,184,185,186,145,187,188,145,189,145,190,191,145,64,192,193,194,195,145,196,145,197,198,199,200,201,202,203,204,64,205,206,145,34,207,145,208,209,145,210,211,212,213,214,145,64,215,64,216,217,64,218,219,220,221,222,223,224,145,225,226,227,34,87,228,34,229,230,34,231,34,232,34,233,34,234,34,235,34,236,34,237,34,238,145,34,231,34,239,145,240,145,241,242,145,127,243,127,243],O=[9,10,14,28,31,32,33,39,40,46,47,48,49,50,51,52,53,54,55,56,57,58,59,65,91,94,95,96,97,123,127,133,134,160,161,168,169,170,171,173,174,175,176,178,179,180,181,182,183,184,185,186,187,188,191,192,215,216,223,224,247,248,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,428,429,430,431,432,433,435,436,437,438,439,440,441,442,443,444,445,446,447,448,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,570,571,572,573,574,575,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,600,601,602,603,604,605,608,609,610,611,612,613,614,615,616,617,618,619,620,621,623,624,625,626,627,629,630,637,638,640,641,643,644,647,648,649,650,652,653,658,659,660,661,669,670,671,688,697,704,706,710,722,736,741,748,749,750,751,768,837,838,880,881,882,883,884,885,886,887,888,890,891,894,895,896,900,902,903,904,907,908,909,910,912,913,930,931,940,941,944,945,962,963,972,973,975,976,977,978,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1e3,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1024,1040,1072,1104,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1160,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1367,1369,1370,1376,1377,1415,1416,1417,1419,1421,1424,1425,1470,1471,1472,1473,1475,1476,1478,1479,1480,1488,1515,1520,1523,1524,1525,1536,1542,1552,1563,1564,1565,1566,1568,1600,1601,1611,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1646,1648,1649,1748,1749,1750,1757,1758,1759,1765,1767,1769,1770,1774,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1789,1791,1792,1806,1807,1808,1809,1810,1840,1867,1869,1958,1969,1970,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,2027,2036,2038,2042,2043,2048,2070,2074,2075,2084,2085,2088,2089,2094,2096,2111,2112,2137,2140,2142,2143,2208,2229,2275,2307,2308,2362,2363,2364,2365,2366,2369,2377,2381,2382,2384,2385,2392,2402,2404,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2433,2434,2436,2437,2445,2447,2449,2451,2473,2474,2481,2482,2483,2486,2490,2492,2493,2494,2497,2501,2503,2505,2507,2509,2510,2511,2519,2520,2524,2526,2527,2530,2532,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2546,2548,2554,2556,2561,2563,2564,2565,2571,2575,2577,2579,2601,2602,2609,2610,2612,2613,2615,2616,2618,2620,2621,2622,2625,2627,2631,2633,2635,2638,2641,2642,2649,2653,2654,2655,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2674,2677,2678,2689,2691,2692,2693,2702,2703,2706,2707,2729,2730,2737,2738,2740,2741,2746,2748,2749,2750,2753,2758,2759,2761,2762,2763,2765,2766,2768,2769,2784,2786,2788,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2802,2809,2810,2817,2818,2820,2821,2829,2831,2833,2835,2857,2858,2865,2866,2868,2869,2874,2876,2877,2878,2879,2880,2881,2885,2887,2889,2891,2893,2894,2902,2903,2904,2908,2910,2911,2914,2916,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2936,2946,2947,2948,2949,2955,2958,2961,2962,2966,2969,2971,2972,2973,2974,2976,2979,2981,2984,2987,2990,3002,3006,3008,3009,3011,3014,3017,3018,3021,3022,3024,3025,3031,3032,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3059,3067,3072,3073,3076,3077,3085,3086,3089,3090,3113,3114,3130,3133,3134,3137,3141,3142,3145,3146,3150,3157,3159,3160,3163,3168,3170,3172,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3192,3199,3200,3201,3202,3204,3205,3213,3214,3217,3218,3241,3242,3252,3253,3258,3260,3261,3262,3263,3264,3269,3270,3271,3273,3274,3276,3278,3285,3287,3294,3295,3296,3298,3300,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3315,3329,3330,3332,3333,3341,3342,3345,3346,3387,3389,3390,3393,3397,3398,3401,3402,3405,3406,3407,3415,3416,3423,3426,3428,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3446,3449,3450,3456,3458,3460,3461,3479,3482,3506,3507,3516,3517,3518,3520,3527,3530,3531,3535,3538,3541,3542,3543,3544,3552,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3570,3572,3573,3585,3633,3634,3635,3636,3643,3647,3648,3654,3655,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3676,3713,3715,3716,3717,3719,3721,3722,3723,3725,3726,3732,3736,3737,3744,3745,3748,3749,3750,3751,3752,3754,3756,3757,3761,3762,3763,3764,3770,3771,3773,3774,3776,3781,3782,3783,3784,3790,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3804,3808,3840,3841,3864,3866,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3892,3893,3894,3895,3896,3897,3898,3902,3904,3912,3913,3949,3953,3967,3968,3973,3974,3976,3981,3992,3993,4029,4030,4038,4039,4045,4046,4059,4096,4139,4141,4145,4146,4152,4153,4155,4157,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4176,4182,4184,4186,4190,4193,4194,4197,4199,4206,4209,4213,4226,4227,4229,4231,4237,4238,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4253,4254,4256,4294,4295,4296,4301,4302,4304,4347,4348,4349,4553,4554,4558,4560,4567,4568,4569,4570,4574,4576,4617,4618,4622,4624,4657,4658,4662,4664,4671,4672,4673,4674,4678,4680,4695,4696,4753,4754,4758,4760,4827,4829,4832,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4861,4864,4880,4890,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4984,4985,4986,4987,4988,4989,4990,4992,4993,5229,5231,5248,5249,5275,5277,5280,5355,5358,5361,5369,5376,5389,5390,5394,5397,5408,5426,5429,5431,5440,5458,5460,5472,5485,5486,5489,5490,5492,5504,5556,5558,5559,5566,5574,5575,5577,5588,5591,5592,5596,5597,5598,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5616,5626,5632,5643,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5664,5699,5700,5752,5760,5801,5802,5803,5808,5878,5888,5919,5920,5923,5927,5929,5932,5936,5938,5939,5945,5948,5952,5953,5956,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5998,6e3,6005,6016,6060,6064,6090,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6110,6144,6167,6169,6171,6172,6174,6176,6229,6230,6231,6232,6239,6240,6241,6242,6243,6245,6253,6259,6269,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6304,6311,6312,6318,6320,6334,6335,6400,6404,6405,6452,6453,6454,6459,6460,6461,6466,6467,6469,6476,6480,6481,6482,6483,6484,6485,6486,6487,6488,6489,6490,6507,6516,6525,6528,6530,6531,6561,6562,6566,6568,6570,6571,6574,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6630,6631,6632,6634,6637,6638,6639,6642,6644,6652,6656,6692,6700,6708,6710,6712,6715,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6733,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6776,6782,6784,6848,6856,6864,6867,6868,6881,6882,6889,6893,6894,6898,6900,6901,6903,6904,6906,6912,6956,7019,7032,7033,7034,7037,7038,7067,7104,7158,7164,7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7432,7440,7446,7448,7454,7456,7464,7472,7480,7488,7494,7496,7502,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7528,7536,7538,7542,7544,7546,7548,7550,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7602,7603,7604,7605,7606,7607,7608,7610,7612,7613,7614,7615,7618,7619,7620,7621,7622,7623,7624,7628,7629,7632,7634,7635,7636,7638,7639,7640,7642,7644,7645,7648,7650,7651,7652,7653,7654,7655,7656,7658,7660,7661,7664,7666,7667,7668,7669,7670,7671,7672,7674,7676,7677,7679,7680,7691,7696,7704,7706,7716,7717,7719,7720,7722,7727,7728,7743,7745,7764,7765,7775,7776,7781,7782,7792,7793,7794,7796,7797,7798,7799,7800,7801,7802,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7823,7824,7837,7840,7871,7888,7901,7905,7906,7909,7921,7936,7938,7939,7943,7944,7946,7947,7950,7952,7955,7956,7957,7958,7960,7961,7966,7972,7973,7974,7975,7976,7977,7978,7979,7980,7982,7983,7984,7986,7987,7988,7989,7993,7994,7996,7998,8e3,8005,8006,8010,8014,8015,8016,8032,8048,8064,8067,8068,8069,8073,8074,8076,8080,8443,8448,8487,8512,8523,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8604,8630,8656,8682,8683,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,9076,9078,9110,9112,9146,9149,9161,9162,9170,9196,9200,9216,9263,9264,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9340,9342,9344,9345,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9451,9452,9453,9454,9455,9458,9459,9460,9465,9469,9470,9472,9510,9511,9512,9517,9518,9520,9576,9583,9584,9585,9599,9600,9623,9632,9639,9640,9647,9648,9655,9656,9663,9664,9671,9672,9679,9680,9687,9688,9695,9696,9728,9775,9776,9795,9856,9882,9883,9972,9984,10070,10096,10108,10112,10113,10117,10118,10119,10120,10145,10154,10158,10160,10161,10166,10168,10171,10172,10173,10176,10177,10263,10265,10267,10269,10271,10272,10273,10363,10364,10367,10368,10373,10414,10417,10511,10512,10514,10518,10528,10555,10560,10596,10608,10624,10655,10656,10666,10696,10704,10705,10720,10752,10762,10801,10816,10879,10880,10885,10886,11011,11012,11178,11179,11341,11342,11446,11456,11520,11521,11523,11524,11527,11528,11529,11530,11613,11614,11660,11661,11668,11669,11670,11671,11711,11713,11743,11744,11752,11753,11789,11790,11888,11889,11908,11909,11974,11975,12009,12010,12011,12012,12013,12014,12097,12098,12099,12102,12108,12109,12225,12229,12379,12380,12529,12530,12537,12538,12666,12667,12798,12800,12812,12815,12816,12817,13054,13055,13132,13133,13266,13267,13318,13319,13462,13463,13612,13613,13742,13743,13747,13748,13872,13873,13985,13986,14022,14023,14028,14029,14072,14073,14198,14199,14294,14336,14357,14358,14477,14480,14535,14544,14584,14590,14592,14604,14605,14608,14624,14625,14626,14627,14628,14629,14630,14631,14632,14633,14634,14636,14656,14657,14658,14659,14660,14661,14662,14663,14664,14665,14666,14667,14668,14669,14670,14671,14672,14673,14674,14675,14676,14677,14678,14679,14680,14681,14682,14683,14684,14685,14686,14687,14688,14689,14690,14691,14692,14693,14694,14695,14696,14697,14698,14699,14700,14701,14702,14703,14704,14707,14708,14718,14719,14720,14721,14722,14723,14724,14725,14726,14727,14728,14729,14730,14731,14732,14733,14734,14735,14736,14737,14738,14739,14740,14741,14742,14743,14744,14745,14746,14747,14748,14750,14752,14822,14832,14834,14840,14848,14871,14880,14882,14883,14884,14885,14886,14887,14888,14889,14890,14891,14892,14893,14894,14895,14896,14898,14899,14900,14901,14902,14903,14904,14905,14906,14907,14908,14909,14910,14911,14912,14913,14914,14915,14916,14917,14918,14919,14920,14921,14922,14923,14924,14925,14926,14927,14928,14929,14930,14931,14932,14933,14934,14935,14936,14937,14938,14939,14940,14941,14942,14943,14944,14945,14946,14947,14948,14949,14950,14951,14952,14953,14954,14955,14956,14957,14958,14959,14960,14961,14969,14970,14971,14972,14973,14974,14975,14976,14977,14978,14979,14980,14981,14982,14983,14984,14985,14987,14988,14989,14990,14991,14992,14993,14994,14995,14996,14998,14999,15e3,15001,15002,15003,15004,15005,15006,15007,15008,15009,15010,15011,15012,15013,15014,15015,15016,15017,15018,15019,15020,15021,15022,15024,15025,15026,15027,15028,15029,15030,15031,15032,15095,15096,15098,15099,15106,15107,15110,15111,15115,15116,15139,15141,15143,15144,15148,15152,15158,15162,15168,15220,15224,15232,15234,15284,15300,15301,15310,15312,15313,15314,15315,15316,15317,15318,15319,15320,15321,15322,15328,15346,15352,15355,15356,15357,15358,15360,15361,15362,15363,15364,15365,15366,15367,15368,15369,15370,15398,15406,15408,15431,15442,15444,15455,15456,15485,15488,15491,15492,15539,15540,15542,15546,15548,15549,15553,15566,15567,15568,15569,15570,15571,15572,15573,15574,15575,15576,15577,15578,15582,15584,15589,15590,15591,15600,15601,15602,15603,15604,15605,15606,15607,15608,15609,15610,15615,15616,15657,15663,15665,15667,15669,15671,15680,15683,15684,15692,15693,15694,15696,15697,15698,15699,15700,15701,15702,15703,15704,15705,15706,15708,15712,15728,15729,15735,15738,15739,15740,15741,15742,15792,15793,15794,15797,15799,15801,15806,15808,15809,15810,15811,15835,15837,15838,15840,15851,15852,15854,15856,15858,15859,15861,15862,15863,15873,15879,15881,15887,15889,15895,15904,15911,15912,15919,15920,15955,15956,15963,15964,15968,15974,15984,15985,15986,15987,15988,15989,15990,15991,15992,15993,15994,15995,15996,15997,15998,15999,16e3,16001,16002,16003,16004,16005,16006,16007,16008,16009,16010,16011,16012,16013,16014,16015,16016,16017,16018,16019,16020,16021,16022,16023,16024,16025,16026,16027,16028,16029,16030,16031,16032,16033,16034,16035,16036,16037,16038,16039,16040,16041,16042,16043,16044,16045,16046,16047,16048,16049,16050,16051,16052,16053,16054,16055,16056,16057,16058,16059,16060,16061,16062,16063,16064,16099,16101,16102,16104,16105,16107,16108,16109,16110,16112,16113,16114,16115,16116,16117,16118,16119,16120,16121,16122,16128,16164,16176,16199,16203,16252,16256,16384,16491,16492,16499,16500,16504,16505,16562,16563,16593,16594,16595,16596,16637,16638,16750,16752,16858,16896,16897,16898,16899,16900,16901,16902,16903,16915,16916,16917,16918,16919,16920,16925,16926,16927,16937,16938,16951,16952,16957,16958,16959,16960,16962,16963,16965,16966,17074,17090,17107,17246,17252,17342,17344,17360,17424,17426,17480,17520,17530,17532,17534,17536,17552,17555,17556,17562,17568,17584,17587,17589,17613,17616,17618,17619,17620,17621,17622,17639,17640,17644,17648,17649,17650,17651,17652,17653,17654,17655,17656,17657,17658,17659,17660,17661,17662,17663,17789,17791,17792,17793,17799,17800,17806,17807,17808,17809,17810,17811,17812,17813,17814,17815,17816,17817,17818,17819,17825,17851,17854,17855,17856,17857,17883,17894,17904,17905,17950,17952,17983,17986,17992,17994,18e3,18002,18008,18010,18013,18016,18019,18020,18023,18024,18031,18041,18044,18046,18048,18060,18061,18087,18088,18107,18108,18110,18111,18126,18128,18142,18176,18299,18304,18307,18311,18356,18359,18368,18421,18425,18442,18444,18445,18448,18460,18464,18465,18512,18557,18558,18688,18717,18720,18769,18784,18785,18812,18816,18848,18852,18864,18881,18882,18890,18891,18896,18934,18939,18944,18974,18975,18976,19012,19016,19024,19025,19030,19072,19112,19152,19230,19232,19233,19234,19235,19236,19237,19238,19239,19240,19241,19242,19328,19368,19376,19428,19439,19440,19456,19511,19520,19542,19552,19560,19584,19590,19592,19593,19594,19638,19639,19641,19644,19645,19647,19670,19671,19672,19680,19703,19705,19712,19743,19751,19760,19808,19827,19828,19830,19835,19840,19862,19868,19871,19872,19898,19903,19904,19968,20024,20028,20030,20032,20048,20050,20096,20097,20100,20101,20103,20108,20112,20116,20117,20120,20121,20148,20152,20155,20159,20160,20161,20162,20163,20164,20168,20176,20185,20192,20221,20223,20224,20253,20256,20288,20296,20297,20325,20327,20331,20336,20343,20352,20406,20409,20416,20438,20440,20448,20467,20472,20480,20498,20505,20509,20521,20528,20608,20681,20736,20787,20800,20851,20858,20864,20960,20961,20962,20963,20964,20965,20966,20967,20968,20969,20991,20992,20993,20994,20995,21048,21063,21070,21074,21075,21076,21077,21078,21079,21080,21081,21082,21083,21094,21095,21096,21097,21098,21099,21100,21101,21102,21103,21104,21119,21122,21123,21168,21171,21175,21177,21179,21181,21182,21186,21200,21225,21232,21233,21234,21235,21236,21237,21238,21239,21240,21241,21242,21248,21251,21287,21292,21293,21301,21302,21303,21304,21305,21306,21307,21308,21309,21310,21311,21312,21316,21328,21363,21364,21366,21367,21376,21378,21379,21427,21430,21439,21441,21445,21450,21453,21454,21456,21457,21458,21459,21460,21461,21462,21463,21464,21465,21466,21467,21468,21469,21472,21473,21493,21504,21522,21523,21548,21551,21554,21556,21557,21558,21560,21566,21632,21639,21640,21641,21642,21646,21647,21662,21663,21673,21674,21680,21727,21728,21731,21739,21744,21745,21746,21747,21748,21749,21750,21751,21752,21753,21754,21760,21762,21764,21765,21773,21775,21777,21779,21801,21802,21809,21810,21812,21813,21818,21820,21821,21822,21824,21825,21829,21831,21833,21835,21838,21840,21841,21847,21848,21853,21858,21860,21862,21869,21872,21877,21888,21936,21939,21945,21946,21947,21951,21953,21954,21956,21958,21959,21960,21968,21969,21970,21971,21972,21973,21974,21975,21976,21977,21978,22016,22063,22066,22070,22072,22076,22078,22079,22081,22104,22108,22110,22144,22192,22195,22203,22205,22206,22207,22209,22212,22213,22224,22225,22226,22227,22228,22229,22230,22231,22232,22233,22234,22272,22315,22316,22317,22318,22320,22326,22327,22328,22336,22337,22338,22339,22340,22341,22342,22343,22344,22345,22346,22400,22426,22429,22432,22434,22438,22439,22444,22448,22449,22450,22451,22452,22453,22454,22455,22456,22457,22458,22460,22464,22560,22592,22624,22625,22626,22627,22628,22629,22630,22631,22632,22633,22634,22643,22655,22656,22720,22777,22784,22810,22912,23023,23024,23029,23040,23108,23168,23215,23296,23367,23424,23481,23488,23519,23520,23521,23522,23523,23524,23525,23526,23527,23528,23529,23530,23534,23536,23632,23662,23664,23669,23670,23680,23728,23735,23744,23748,23750,23760,23761,23762,23763,23764,23765,23766,23767,23768,23769,23770,23771,23778,23779,23800,23805,23824,23936,24005,24016,24017,24063,24079,24083,24096,24192,24194,24320,24427,24432,24445,24448,24457,24464,24474,24476,24477,24479,24480,24484,24576,24694,24704,24743,24745,24805,24807,24810,24813,24819,24827,24835,24837,24844,24874,24878,24937,24960,25026,25029,25030,25088,25175,25184,25202,25216,25242,25268,25294,25301,25302,25320,25346,25372,25373,25374,25376,25378,25379,25381,25383,25385,25389,25390,25398,25402,25403,25404,25405,25412,25413,25424,25450,25476,25478,25479,25483,25485,25493,25494,25501,25502,25528,25530,25531,25535,25536,25541,25542,25543,25546,25553,25554,25580,25606,25632,25658,25684,25710,25736,25762,25788,25814,25840,25866,25894,25896,25921,25922,25947,25948,25954,25979,25980,26005,26006,26012,26037,26038,26063,26064,26070,26095,26096,26121,26122,26128,26153,26154,26179,26180,26186,26187,26188,26190,26191,26192,26193,26194,26195,26196,26197,26198,26199,26200,26201,26202,26203,26204,26205,26206,26207,26208,26209,26210,26211,26212,26213,26214,26215,26216,26217,26218,26219,26220,26221,26222,26223,26224,26225,26226,26227,26228,26229,26230,26231,26232,26233,26234,26235,26236,26237,26238,26239,26240,26295,26299,26349,26357,26358,26372,26373,26380,26395,26400,26401,26416,26496,26565,26567,26576,26583,26624,26628,26629,26656,26657,26659,26660,26661,26663,26664,26665,26675,26676,26680,26681,26682,26683,26684,26690,26691,26695,26696,26697,26698,26699,26700,26701,26704,26705,26707,26708,26709,26711,26712,26713,26714,26715,26716,26717,26718,26719,26720,26721,26723,26724,26725,26727,26731,26732,26739,26740,26744,26745,26749,26750,26751,26752,26762,26763,26780,26785,26788,26789,26794,26795,26812,26864,26866,26880,26924,26928,27028,27040,27055,27057,27072,27073,27088,27089,27126,27136,27138,27139,27140,27141,27142,27143,27144,27145,27146,27147,27149,27152,27183,27184,27210,27216,27242,27244,27248,27274,27291,27366,27395,27408,27451,27456,27465,27472,27474,27520,27643,27648,27770,27771,27812,27813,27985,28e3,28013,28016,28020,28032,28148,28160,28245,28288,28300,28304,28360,28368,28378,28384,28424,28432,28462,28560,28569,28672,28677,28736,28737,28800,28801,28802,28900,28901,29026,29027,29089,29090,29187,29188,29196,29197,29212,29213,29418,29419,29437,29438,29465,29466,29584,29585,29720,29721,29851,29852,30061,30062,30167,30208,30261,30272,30366,30368,30498,30592,30622,30721,30722,30752,30848,31088,31104,31230,31232],T=[1,2,3,1,3,2,4,5,6,5,6,5,7,8,9,10,11,12,13,14,15,16,6,5,17,5,6,18,6,19,5,1,3,1,2,5,6,5,20,5,21,5,6,5,22,23,6,24,5,25,6,26,20,5,27,5,17,5,17,28,19,5,19,29,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,32,33,30,31,30,31,30,31,20,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,34,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,35,30,31,30,31,30,31,36,37,38,30,31,30,31,39,30,31,40,30,31,20,41,42,43,30,31,40,44,45,46,47,30,31,48,20,46,49,50,51,30,31,30,31,30,31,52,30,31,52,20,30,31,52,30,31,53,30,31,30,31,54,30,31,20,55,30,31,20,56,55,57,58,59,57,58,59,57,58,59,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,60,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,61,57,58,59,30,31,62,63,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,64,20,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,20,65,30,31,66,67,68,30,31,69,70,71,30,31,30,31,30,31,30,31,30,31,72,73,74,75,76,20,77,20,78,20,79,80,20,77,81,20,82,20,83,84,20,85,86,20,87,88,20,86,20,89,90,20,91,20,92,20,93,20,93,20,94,93,95,96,97,20,98,20,55,20,99,100,20,101,102,101,6,102,6,101,6,102,6,102,6,25,103,25,30,31,30,31,102,6,30,31,0,104,50,5,105,0,6,106,25,107,0,108,0,109,110,17,0,17,111,112,113,19,114,19,115,116,117,118,119,120,121,122,123,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,124,125,126,127,128,129,5,30,31,130,30,31,20,64,131,17,19,132,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,5,25,6,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,133,30,31,30,31,30,31,30,31,30,31,30,31,30,31,134,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,0,135,0,102,5,0,136,137,0,5,0,5,0,25,5,25,5,25,5,25,5,25,0,55,0,55,5,6,0,21,5,25,5,21,0,5,55,102,55,25,7,8,9,10,11,12,13,14,15,16,5,55,25,55,5,55,25,21,5,25,102,25,5,25,55,7,8,9,10,11,12,13,14,15,16,55,5,55,5,0,21,55,25,55,25,0,55,25,55,0,7,8,9,10,11,12,13,14,15,16,55,25,102,5,102,0,55,25,102,25,102,25,102,25,0,5,0,55,25,0,5,0,55,0,25,18,55,25,18,25,55,18,25,18,25,18,55,25,55,25,5,7,8,9,10,11,12,13,14,15,16,5,102,55,25,18,0,55,0,55,0,55,0,55,0,55,0,55,0,25,55,18,25,0,18,0,18,25,55,0,18,0,55,0,55,25,0,7,8,9,10,11,12,13,14,15,16,55,5,27,5,0,25,18,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,25,0,18,25,0,25,0,25,0,25,0,55,0,55,0,7,8,9,10,11,12,13,14,15,16,25,55,25,0,25,18,0,55,0,55,0,55,0,55,0,55,0,55,0,25,55,18,25,0,25,18,0,18,25,0,55,0,55,25,0,7,8,9,10,11,12,13,14,15,16,5,0,55,0,25,18,0,55,0,55,0,55,0,55,0,55,0,55,0,25,55,18,25,18,25,0,18,0,18,25,0,25,18,0,55,0,55,25,0,7,8,9,10,11,12,13,14,15,16,5,55,27,0,25,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,18,25,18,0,18,0,18,25,0,55,0,18,0,7,8,9,10,11,12,13,14,15,16,27,5,0,25,18,0,55,0,55,0,55,0,55,0,55,25,18,0,25,0,25,0,25,0,55,0,55,25,0,7,8,9,10,11,12,13,14,15,16,0,27,5,0,25,18,0,55,0,55,0,55,0,55,0,55,0,25,55,18,25,18,0,25,18,0,18,25,0,18,0,55,0,55,25,0,7,8,9,10,11,12,13,14,15,16,0,55,0,25,18,0,55,0,55,0,55,0,55,18,25,0,18,0,18,25,55,0,18,0,55,25,0,7,8,9,10,11,12,13,14,15,16,27,0,5,55,0,18,0,55,0,55,0,55,0,55,0,55,0,25,0,18,25,0,25,0,18,0,7,8,9,10,11,12,13,14,15,16,0,18,5,0,55,25,55,138,25,0,5,55,102,25,5,7,8,9,10,11,12,13,14,15,16,5,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,25,55,138,25,0,25,55,0,55,0,102,0,25,0,7,8,9,10,11,12,13,14,15,16,0,55,0,55,5,25,5,7,8,9,10,11,12,13,14,15,16,27,5,25,5,25,5,25,5,18,55,0,55,0,25,18,25,5,25,55,25,0,25,0,5,25,5,0,5,0,55,18,25,18,25,18,25,18,25,55,7,8,9,10,11,12,13,14,15,16,5,55,18,25,55,25,55,18,55,18,55,25,55,25,18,25,18,25,55,18,7,8,9,10,11,12,13,14,15,16,18,25,5,139,0,139,0,139,0,55,5,102,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,25,5,140,141,142,143,144,145,146,147,148,27,0,55,5,0,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,0,235,236,237,238,239,240,0,5,55,5,55,2,55,5,0,55,5,241,55,0,55,0,55,25,0,55,25,5,0,55,25,0,55,0,55,0,25,0,55,25,18,25,18,25,18,25,5,102,5,55,25,0,7,8,9,10,11,12,13,14,15,16,0,27,0,5,25,21,0,7,8,9,10,11,12,13,14,15,16,0,55,102,55,0,55,25,55,0,55,0,55,0,25,18,25,18,0,18,25,18,25,0,5,0,5,7,8,9,10,11,12,13,14,15,16,55,0,55,0,55,0,55,0,7,8,9,10,11,12,13,14,15,16,140,0,5,55,25,18,25,0,5,55,18,25,18,25,0,25,18,25,18,25,18,25,0,25,7,8,9,10,11,12,13,14,15,16,0,7,8,9,10,11,12,13,14,15,16,0,5,102,5,0,25,6,0,25,18,55,25,18,25,18,25,18,25,18,55,0,7,8,9,10,11,12,13,14,15,16,5,25,5,0,25,18,55,18,25,18,25,18,25,55,7,8,9,10,11,12,13,14,15,16,55,25,18,25,18,25,18,25,18,0,5,55,18,25,18,25,0,5,7,8,9,10,11,12,13,14,15,16,0,55,7,8,9,10,11,12,13,14,15,16,55,102,5,0,5,0,25,5,25,18,25,55,25,55,18,25,55,0,25,0,20,101,20,101,242,20,243,20,101,25,0,25,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,244,245,246,247,248,249,20,250,20,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,251,252,251,0,252,0,251,252,251,252,251,0,252,0,253,251,254,251,255,251,256,251,0,252,0,252,0,252,0,252,251,252,257,258,259,260,261,262,0,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,251,311,312,313,0,314,315,252,316,317,6,318,6,319,320,321,0,322,323,324,325,6,251,326,327,0,328,329,252,330,0,6,251,331,332,333,126,334,335,252,336,130,6,0,337,338,339,0,340,341,342,343,344,6,0,2,21,5,6,5,6,5,6,3,21,2,5,18,5,18,5,2,21,0,21,345,101,0,346,347,348,349,350,351,5,101,345,26,22,23,346,347,348,349,350,351,5,0,101,0,5,0,25,6,25,6,25,0,5,120,5,120,5,20,120,20,120,20,5,120,5,352,120,5,120,5,353,5,120,5,354,355,120,352,20,120,356,120,20,55,20,5,20,120,5,120,20,5,357,5,27,358,359,241,30,31,241,27,5,0,5,0,5,0,5,0,26,22,23,346,347,348,349,350,351,27,26,22,23,346,347,348,349,350,351,27,26,22,23,346,347,348,349,350,351,27,5,360,361,345,27,26,22,23,346,347,348,349,350,351,27,345,5,26,22,23,346,347,348,349,350,351,27,26,22,23,346,347,348,349,350,351,27,26,22,23,346,347,348,349,350,351,27,5,0,5,0,5,0,5,0,5,0,5,0,135,0,136,0,30,31,362,363,364,365,366,30,31,30,31,30,31,367,368,369,370,20,30,31,20,30,31,20,101,371,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,20,5,30,31,30,31,25,30,31,0,5,27,5,372,0,372,0,372,0,55,0,102,5,0,25,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,25,5,373,5,0,5,0,5,0,5,0,5,0,2,5,102,55,241,5,241,25,18,5,102,5,241,102,55,5,0,55,0,25,6,102,55,5,55,5,102,55,0,55,0,55,0,5,27,5,55,0,5,0,55,5,0,27,5,27,5,27,5,27,5,27,5,0,55,374,55,374,55,374,55,374,55,0,5,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,0,55,102,55,0,5,0,55,102,5,55,102,5,55,7,8,9,10,11,12,13,14,15,16,55,0,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,55,25,6,5,25,5,102,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,101,25,55,241,25,5,0,6,102,6,30,31,30,31,30,31,30,31,30,31,30,31,30,31,20,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,101,20,30,31,30,31,375,30,31,30,31,30,31,30,31,30,31,102,6,30,31,376,20,55,30,31,30,31,20,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31,377,378,379,380,0,381,382,383,384,30,31,30,31,0,55,101,20,55,25,55,25,55,25,55,18,25,18,5,0,27,5,0,55,5,0,18,55,18,25,0,5,7,8,9,10,11,12,13,14,15,16,0,25,55,5,55,5,55,0,7,8,9,10,11,12,13,14,15,16,55,25,5,55,25,18,0,5,55,0,25,18,55,25,18,25,18,25,18,5,0,102,7,8,9,10,11,12,13,14,15,16,0,5,55,25,102,55,7,8,9,10,11,12,13,14,15,16,55,0,55,25,18,25,18,25,0,55,25,55,25,18,0,7,8,9,10,11,12,13,14,15,16,0,5,55,102,55,5,55,18,25,18,55,25,55,25,55,25,55,25,55,25,55,0,55,102,5,55,18,25,18,5,55,102,18,25,0,55,0,55,0,55,0,55,0,55,0,20,385,20,6,101,20,0,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,55,18,25,18,25,18,5,18,25,0,7,8,9,10,11,12,13,14,15,16,0,55,0,55,0,55,0,1,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,0,55,0,466,467,468,469,470,471,472,0,473,474,475,476,477,0,55,25,55,5,55,0,55,0,55,0,55,0,55,0,55,6,0,55,478,55,5,0,55,0,55,0,55,478,5,0,25,5,6,5,0,25,5,18,5,18,5,6,0,5,6,5,0,5,0,478,55,478,55,478,0,478,55,478,55,478,55,478,55,478,55,0,21,0,5,6,5,6,5,7,8,9,10,11,12,13,14,15,16,6,5,17,5,6,18,6,19,5,55,102,55,479,55,0,55,0,55,0,55,0,55,0,5,6,5,0,5,0,21,5,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,5,0,27,0,5,241,27,5,27,5,0,5,0,5,0,5,25,0,55,0,55,0,25,27,0,55,27,0,55,241,55,241,0,55,25,0,55,0,5,55,0,55,5,241,0,480,481,55,0,7,8,9,10,11,12,13,14,15,16,0,55,0,55,0,5,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,5,27,55,5,27,55,0,27,0,55,0,55,0,27,55,27,0,5,55,0,5,0,55,0,27,55,27,0,27,55,25,0,25,0,25,55,0,55,0,55,0,25,0,25,26,22,23,346,27,0,5,0,55,27,5,55,27,0,55,5,55,25,0,27,5,0,55,0,5,55,0,27,55,0,27,55,0,5,0,27,0,55,0,108,0,115,0,27,0,26,22,23,346,347,348,349,350,351,27,0,18,25,18,55,25,5,0,26,22,23,346,347,348,349,350,351,27,7,8,9,10,11,12,13,14,15,16,0,25,18,55,18,25,18,25,5,21,5,0,55,0,7,8,9,10,11,12,13,14,15,16,0,25,55,25,18,25,0,7,8,9,10,11,12,13,14,15,16,5,0,55,25,5,55,0,25,18,55,18,25,18,55,5,25,5,0,7,8,9,10,11,12,13,14,15,16,55,5,55,5,0,27,0,55,0,55,18,25,18,25,18,25,5,0,55,0,55,0,55,0,55,0,55,5,0,55,25,18,25,0,7,8,9,10,11,12,13,14,15,16,0,25,18,0,55,0,55,0,55,0,55,0,55,0,55,0,25,55,18,25,18,0,18,0,18,0,55,0,18,0,55,18,0,25,0,25,0,55,18,25,18,25,18,25,18,25,55,5,55,0,7,8,9,10,11,12,13,14,15,16,0,55,18,25,0,18,25,18,25,5,55,25,0,55,18,25,18,25,18,25,5,55,0,7,8,9,10,11,12,13,14,15,16,0,55,25,18,25,18,25,18,25,0,7,8,9,10,11,12,13,14,15,16,0,55,0,25,18,25,18,25,0,7,8,9,10,11,12,13,14,15,16,27,5,0,17,19,7,8,9,10,11,12,13,14,15,16,27,0,55,0,55,0,55,0,241,0,5,0,55,0,55,0,55,0,55,0,55,0,7,8,9,10,11,12,13,14,15,16,0,5,0,55,0,25,5,0,55,25,5,102,5,0,7,8,9,10,11,12,13,14,15,16,0,27,0,55,0,55,0,55,0,55,18,0,25,102,0,55,0,55,0,55,0,55,0,55,0,5,25,5,21,0,5,0,5,0,5,18,25,5,18,21,25,5,25,5,25,5,0,5,25,5,0,5,0,27,0,120,20,120,20,0,20,120,20,120,0,120,0,120,0,120,0,120,0,120,20,0,20,0,20,0,20,120,20,120,0,120,0,120,0,120,0,20,120,0,120,0,120,0,120,0,120,0,20,120,20,120,20,120,20,120,20,120,20,120,20,0,120,5,20,5,20,120,5,20,5,20,120,5,20,5,20,120,5,20,5,20,120,5,20,5,20,120,20,0,7,8,9,10,11,12,13,14,15,16,7,8,9,10,11,12,13,14,15,16,7,8,9,10,11,12,13,14,15,16,7,8,9,10,11,12,13,14,15,16,7,8,9,10,11,12,13,14,15,16,25,5,25,5,25,5,25,5,0,25,0,25,0,55,0,27,25,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,55,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,345,26,22,23,346,347,348,349,350,351,27,0,5,0,482,5,482,5,0,482,5,0,5,0,5,0,5,0,5,0,5,6,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,374,55,0,55,0,55,0,55,0,55,0,21,0,21,25,0,1,0],I=1,R=2,M=4,J=8,L=64,q=128,P=256,V=512,U=1024,z=2048,G=4096,Y=8192,H=16384;unicode=unicode||{},unicode.title=function(t){for(var e="",r=!1,n=0;t.length>n;n++){var _=t.charAt(n);e+=r?B(_,t,n):$(_),r=m(_)}return e},unicode.capitalize=function(t){var e="";e+=d(t.charAt(0));for(var r=1;t.length>r;r++)e+=B(t.charAt(r),t,r);return e},unicode.casefold=function(t){for(var e="",r=0;t.length>r;r++)e+=g(t.charAt(r));return e},unicode.islower=function(t){if(""==t)return!1;for(var e=!1,r=0;t.length>r;r++){var n=t.charAt(r);if(p(n)||a(n))return!1;e||(e=f(n))}return e},unicode.isupper=function(t){if(""==t)return!1;for(var e=!1,r=0;t.length>r;r++){var n=t.charAt(r);if(f(n)||a(n))return!1;e||(e=p(n))}return e},unicode.istitle=function(t){if(""==t)return!1;for(var e=!1,r=!1,n=0;t.length>n;n++){var _=t.charAt(n);if(p(_)||a(_)){if(r)return!1;r=!0,e=!0}else if(f(_)){if(!r)return!1;r=!0,e=!0}else r=!1}return e},unicode.isspace=function(t){if(""==t)return!1;for(var e=0;t.length>e;e++){if(!n(t.charAt(e)))return!1}return!0},unicode.isalpha=function(t){if(""==t)return!1;for(var e=0;t.length>e;e++){if(!v(t.charAt(e)))return!1}return!0},unicode.isalnum=function(t){if(""==t)return!1;for(var e=0;t.length>e;e++){if(!y(t.charAt(e)))return!1}return!0},unicode.isdecimal=function(t){if(""==t)return!1;for(var e=0;t.length>e;e++){if(!s(t.charAt(e)))return!1}return!0},unicode.isdigit=function(t){if(""==t)return!1;for(var e=0;t.length>e;e++){if(!u(t.charAt(e)))return!1}return!0},unicode.isnumeric=function(t){if(""==t)return!1;for(var e=0;t.length>e;e++){if(!l(t.charAt(e)))return!1}return!0},unicode.isidentifier=function(t){if(""==t)return!1;if("_"!=t.charAt(0)&&!function(t){return 0!=(_(t.charCodeAt(0))[A]&P)}(t.charAt(0)))return!1;for(var e=1;t.length>e;e++)if(!o(t.charAt(e)))return!1;return!0},unicode.isprintable=function(t){for(var e=0;t.length>e;e++)if(!c(t.charAt(e)))return!1;return!0},unicode.lower=function(t){for(var e="",r=0;t.length>r;r++){e+=B(t.charAt(r),t,r)}return e},unicode.swapcase=function(t){for(var e="",r=0;t.length>r;r++){var n=t.charAt(r);e+=p(n)?B(n,t,r):f(n)?d(n):n}return e},unicode.upper=function(t){for(var e="",r=0;t.length>r;r++){e+=d(t.charAt(r))}return e}}(0,function(){return this}());var __BRYTHON__=__BRYTHON__||{};!function(t){var e,r="undefined"!=typeof WorkerGlobalScope&&"function"==typeof importScripts&&navigator instanceof WorkerNavigator,n=self;if(void 0===t.brython_path){var _;if(r)_=n.location.href;else{var i=document.getElementsByTagName("script");_=i[i.length-1].src}var a=_.split("/");a.pop(),e=t.brython_path=a.join("/")+"/"}else e=t.brython_path;var o=(n.location.origin+n.location.pathname).split("/");o.pop();var s=t.script_dir=o.join("/");if(t.__ARGV=[],t.$py_module_path={},t.$py_src={},t.path=[e+"Lib",e+"libs",s,e+"Lib/site-packages"],t.async_enabled=!1,t.async_enabled&&(t.block={}),t.imported={},t.precompiled={},t._globals={},t.frames_stack=[],t.builtins={__repr__:function(){return"'"},__str__:function(){return""}},t.builtins_scope={id:"__builtins__",module:"__builtins__",binding:{}},t.builtin_funcs={},t.__getattr__=function(t){return this[t]},t.__setattr__=function(e,r){if(!(["debug","stdout","stderr"].indexOf(e)>-1))throw t.builtins.AttributeError.$factory("__BRYTHON__ object has no attribute "+e);t[e]=r},t.language=n.navigator.userLanguage||n.navigator.language,t.charset=r?"utf-8":document.characterSet||document.inputEncoding||"utf-8",t.max_int=Math.pow(2,53)-1,t.min_int=-t.max_int,t.$py_next_hash=Math.pow(2,53)-1,t.$py_UUID=0,t.lambda_magic=Math.random().toString(36).substr(2,8),t.set_func_names=function(e,r){var n=e.__name__;for(var _ in e.__module__=r,e)"function"==typeof e[_]&&(e[_].$infos={__doc__:e[_].__doc__||"",__module__:r,__qualname__:n+"."+_,__name__:_},"classmethod"==e[_].$type&&(e[_].__class__=t.method))},"undefined"!=typeof Storage){t.has_local_storage=!1;try{localStorage&&(t.local_storage=localStorage,t.has_local_storage=!0)}catch(t){}t.has_session_storage=!1;try{sessionStorage&&(t.session_storage=sessionStorage,t.has_session_storage=!0)}catch(t){}}else t.has_local_storage=!1,t.has_session_storage=!1;t.globals=function(){return t.frames_stack[t.frames_stack.length-1][3]},t.regexIdentifier=/^(?:[\$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D])(?:[\$0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF])*$/}(__BRYTHON__),__BRYTHON__.implementation=[3,6,3,"dev",0],__BRYTHON__.__MAGIC__="3.6.3",__BRYTHON__.version_info=[3,3,0,"alpha",0],__BRYTHON__.compiled_date="2018-07-13 18:38:46.514047",__BRYTHON__.timestamp=1531499926514,__BRYTHON__.builtin_module_names=["posix","sys","errno","time","_ajax","_base64","_jsre","_multiprocessing","_posixsubprocess","_profile","_svg","_sys","builtins","dis","hashlib","json","long_int","math","modulefinder","random","_abcoll","_codecs","_collections","_csv","_functools","_imp","_io","_py_abc","_random","_socket","_sre","_string","_struct","_sysconfigdata","_testcapi","_thread","_warnings","_weakref"],function($B){var js,$pos,res,$op;Number.isInteger=Number.isInteger||function(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t},Number.isSafeInteger=Number.isSafeInteger||function(t){return Number.isInteger(t)&&Math.abs(t)<=Number.MAX_SAFE_INTEGER};var _b_=$B.builtins,_window=self,isWebWorker=$B.isa_web_worker="undefined"!=typeof WorkerGlobalScope&&"function"==typeof importScripts&&navigator instanceof WorkerNavigator;$B.parser={};var keys=$B.keys=function(t){var e=[];for(var r in t)e.push(r);return e.sort(),e},clone=$B.clone=function(t){var e={};for(var r in t)e[r]=t[r];return e};$B.last=function(t){return t[t.length-1]},$B.list2obj=function(t,e){var r={},n=t.length;for(void 0===e&&(e=!0);n-- >0;)r[t[n]]=e;return r};var $operators={"//=":"ifloordiv",">>=":"irshift","<<=":"ilshift","**=":"ipow","**":"pow","//":"floordiv","<<":"lshift",">>":"rshift","+=":"iadd","-=":"isub","*=":"imul","/=":"itruediv","%=":"imod","&=":"iand","|=":"ior","^=":"ixor","+":"add","-":"sub","*":"mul","/":"truediv","%":"mod","&":"and","|":"or","~":"invert","^":"xor","<":"lt",">":"gt","<=":"le",">=":"ge","==":"eq","!=":"ne",or:"or",and:"and",in:"in",not:"not",is:"is",not_in:"not_in",is_not:"is_not","@":"matmul","@=":"imatmul"},$augmented_assigns=$B.augmented_assigns={"//=":"ifloordiv",">>=":"irshift","<<=":"ilshift","**=":"ipow","+=":"iadd","-=":"isub","*=":"imul","/=":"itruediv","%=":"imod","&=":"iand","|=":"ior","^=":"ixor","@=":"imatmul"},noassign=$B.list2obj(["True","False","None","__debug__"]),$op_order=[["or"],["and"],["not"],["in","not_in"],["<","<=",">",">=","!=","==","is","is_not"],["|"],["^"],["&"],[">>","<<"],["+"],["-"],["*","@","/","//","%"],["unary_neg","unary_inv","unary_pos"],["**"]],$op_weight={},$weight=1;$op_order.forEach((function(t){t.forEach((function(t){$op_weight[t]=$weight})),$weight++}));var $loop_num=0,create_temp_name=$B.parser.create_temp_name=function(t){return(t||"$temp")+$loop_num++},replace_node=$B.parser.replace_node=function(t,e){var r=t.parent,n=get_rank_in_parent(t);r.children[n]=e,e.parent=r,e.bindings=t.bindings},get_rank_in_parent=$B.parser.get_rank_in_parent=function(t){return t.parent.children.indexOf(t)},add_jscode=$B.parser.add_jscode=function(t,e,r){var n=new $NodeJS(r);return-1===e?t.add(n):t.insert(e,n),n},add_identnode=$B.parser.add_identnode=function(t,e,r,n){var _=new $Node;_.parent=t,_.locals=t.locals,_.module=t.module;var i=new $NodeCtx(_),a=new $ExprCtx(i,"id",!0),o=(new $IdCtx(a,r),new $AssignCtx(a));return-1===e?t.add(_):t.insert(e,_),o.tree[1]=n,_},$get_closest_ancestor_node=$B.parser.$get_closest_ancestor_node=function(t){for(;t.parent;)t=t.parent;return t.node},$add_yield_from_code=$B.parser.$add_yield_from_code=function(t){var e=$get_closest_ancestor_node(t),r=$get_scope(t).C.tree[0];e.yield_atoms.splice(e.yield_atoms.indexOf(this),1),r.yields.splice(r.yields.indexOf(this),1);var n=" ".repeat(e.indent),_=n+"import sys\n"+n+"try:\n"+n+" _y = next(_i)\n"+n+"except StopIteration as _e:\n"+n+" _r = _e.value\n"+n+"else:\n"+n+" while 1:\n"+n+" try:\n"+n+" _s = yield _y\n"+n+" except GeneratorExit as _e:\n"+n+" try:\n"+n+" _m = _i.close\n"+n+" except AttributeError:\n"+n+" pass\n"+n+" else:\n"+n+" _m()\n"+n+" raise _e\n"+n+" except BaseException as _e:\n"+n+" _x = sys.exc_info()\n"+n+" try:\n"+n+" _m = _i.throw\n"+n+" except AttributeError:\n"+n+" raise _e\n"+n+" else:\n"+n+" try:\n"+n+" _y = _m(*_x)\n"+n+" except StopIteration as _e:\n"+n+" _r = _e.value\n"+n+" break\n"+n+" else:\n"+n+" try:\n"+n+" if _s is None:\n"+n+" _y = next(_i)\n"+n+" else:\n"+n+" _y = _i.send(_s)\n"+n+" except StopIteration as _e:\n"+n+" _r = _e.value\n"+n+" break\n",i={_i:create_temp_name("__i"),_y:create_temp_name("__y"),_r:create_temp_name("__r"),_e:create_temp_name("__e"),_s:create_temp_name("__s"),_m:create_temp_name("__m")};for(attr in e.bindings=e.bindings||{},i)_=_.replace(new RegExp(attr,"g"),i[attr]),e.bindings[i[attr]]=!0;$tokenize(e,_);var a={iter_name:i._i,result_var_name:i._r,yield_expr:t};"assign"===t.parent.type&&(a.save_result=!0,a.assign_ctx=t.parent,a.save_result_rank=e.parent.children.length-e.parent.children.indexOf(e)),replace_node(e,new $YieldFromMarkerNode(a))},chained_comp_num=0,$_SyntaxError=$B.parser.$_SyntaxError=function(t,e,r){for(var n=t;"node"!==n.type;)n=n.parent;for(var _=n.node,i=_;void 0!==i.parent;)i=i.parent;var a=_.module,o=_.line_num;if(i.line_info&&(o=i.line_info),void 0!==r&&o++,void 0!==r)throw $B.$IndentationError(a,e,$pos);Array.isArray(e)&&$B.$SyntaxError(a,e[0],$pos,o),"Triple string end not found"===e&&$B.$SyntaxError(a,"invalid syntax : triple string end not found",$pos,o,i),$B.$SyntaxError(a,"invalid syntax",$pos,o,i)},$Node=$B.parser.$Node=function(t){this.type=t,this.children=[],this.yield_atoms=[],this.add=function(t){this.children[this.children.length]=t,t.parent=this,t.module=this.module},this.insert=function(t,e){this.children.splice(t,0,e),e.parent=this,e.module=this.module},this.toString=function(){return""},this.show=function(t){var e="";return"module"===this.type?(this.children.forEach((function(r){e+=r.show(t)})),e):(e+=" ".repeat(t=t||0),e+=this.C,this.children.length>0&&(e+="{"),e+="\n",this.children.forEach((function(r){e+="["+i+"] "+r.show(t+4)})),this.children.length>0&&(e+=" ".repeat(t),e+="}\n"),e)},this.to_js=function(t){if(void 0!==this.js)return this.js;if(this.res=[],this.unbound=[],"module"===this.type)return this.children.forEach((function(t){this.res.push(t.to_js())}),this),this.js=this.res.join(""),this.js;t=t||0;var e=this.C.to_js();return e&&(this.res.push(" ".repeat(t)),this.res.push(e),this.children.length>0&&this.res.push("{"),this.res.push("\n"),this.children.forEach((function(e){this.res.push(e.to_js(t+4))}),this),this.children.length>0&&(this.res.push(" ".repeat(t)),this.res.push("}\n"))),this.js=this.res.join(""),this.js},this.transform=function(t){if(this.yield_atoms.length>0){this.parent.children.splice(t,1);var e=0;return this.yield_atoms.forEach((function(r){var n=new $Node,_="var $yield_value"+$loop_num;_+=" = "+(r.to_js()||"None"),new $NodeJSCtx(n,_),this.parent.insert(t+e,n);var i=new $Node;this.parent.insert(t+e+1,i);var a=new $YieldCtx(new $NodeCtx(i));new $StringCtx(a,"$yield_value"+$loop_num);var o,s=new $Node;s.is_set_yield_value=!0,new $NodeJSCtx(s,_=$loop_num),this.parent.insert(t+e+2,s),r.to_js=(o=$loop_num,function(){return"$yield_value"+o}),$loop_num++,e+=3}),this),this.parent.insert(t+e,this),this.yield_atoms=[],e+1}if("module"!==this.type){var r,n=this.C.tree[0];void 0!==n.transform&&(r=n.transform(this,t));for(d=0;d-1&&$_SyntaxError(t,["can't assign to literal"])}this.guess_type=function(){},this.toString=function(){return"(assign) "+this.tree[0]+"="+this.tree[1]},this.transform=function(t,e){for(var r=$get_scope(this),n=this.tree[0],_=this.tree[1],i=[];"assign"==n.type;)i.push(n.tree[1]),n=n.tree[0];if(i.length>0){i.push(n);var a=t.C;a.tree=[];var o=new $RawJSCtx(a,"var $temp"+$loop_num);return o.tree=a.tree,new $AssignCtx(o).tree[1]=_,i.forEach((function(r){var n=new $Node,_=new $NodeCtx(n);n.locals=t.locals,n.line_num=t.line_num,t.parent.insert(e+1,n),r.parent=_;var i=new $AssignCtx(r);new $RawJSCtx(i,"$temp"+$loop_num)})),$loop_num++,i.length-1}var s=null;switch(n.type){case"expr":if(n.tree.length>1)s=n.tree;else if("list_or_tuple"==n.tree[0].type||"target_list"==n.tree[0].type)s=n.tree[0].tree;else if("id"==n.tree[0].type){var u=n.tree[0].value;$B._globals&&$B._globals[r.id]&&$B._globals[r.id][u]||(n.tree[0].bound=!0)}break;case"target_list":case"list_or_tuple":s=n.tree}if(null!==s){var l=null;if(("list"==(_=this.tree[1]).type||"tuple"==_.type||"expr"==_.type&&_.tree.length>1)&&(l=_.tree),null!==l){if(l.length>s.length)throw Error("ValueError : too many values to unpack (expected "+s.length+")");if(l.length=0;d--)t.parent.insert(e,c[d]);$loop_num++}else{t.parent.children.splice(e,1);var g=create_temp_name("$right"),m=create_temp_name("$rlist");add_jscode(t.parent,e++,"var "+g+" = $B.$getattr($B.$iter("+_.to_js()+'), "__next__");').line_num=t.line_num,add_jscode(t.parent,e++,"var "+m+"=[], $pos=0;while(1){try{"+m+"[$pos++] = "+g+"()}catch(err){break}}");var b=null,v=s.length;for(d=0;d 1 ? "s" : "") + " to unpack")}'),null==b&&add_jscode(t.parent,e++,"if("+m+".length>"+v+'){throw ValueError.$factory("too many values to unpack (expected '+s.length+')")}'),s.forEach((function(n,_){var i=new $Node;i.id=r.id,i.line_num=t.line_num,t.parent.insert(e++,i);var a=new $NodeCtx(i);n.parent=a;var o=new $AssignCtx(n,!1),u=m;u+=null==b||_-1&&$_SyntaxError(t,["can't assign to literal"])}$get_node(this).bound_before=$B.keys(r.binding),this.module=r.module,this.toString=function(){return"(augm assign) "+this.tree},this.transform=function(r,n){var _="__"+$operators[e]+"__",i=0,a=r.parent,o=r.line_num,s=!1;a.children.splice(n,1);var u="expr"==this.tree[0].type&&"id"==this.tree[0].tree[0].type;if(u){if(this.tree[0].tree[0].augm_assign=!0,$B.debug>0){var l=$NodeJS("if("+this.tree[0].to_js()+" === undefined){throw NameError.$factory(\"name '"+this.tree[0].tree[0].value+"' is not defined\")}");l.forced_line_num=r.line_num,r.parent.insert(n,l),i++}var c=this.tree[0].tree[0].value,f=void 0!==this.scope.binding[c],p=this.tree[0].tree[0].unbound}var h="expr"==this.tree[1].type&&"int"==this.tree[1].tree[0].type,$=h?this.tree[1].tree[0].to_js():"$temp";if(!h){(w=new $Node).line_num=o,s=!0,new $NodeJSCtx(w,"var $temp,$left;"),a.insert(n,w),i++,(w=new $Node).id=this.scope.id;var d=new $NodeCtx(w),g=new $ExprCtx(d,"js",!1),m=new $RawJSCtx(g,"$temp"),b=new $AssignCtx(g);b.tree[1]=this.tree[1],m.parent=b,a.insert(n+i,w),i++}var v="",y=!1;switch(e){case"+=":case"-=":case"*=":case"/=":if(u){var B=this.scope,x="$local_"+B.module.replace(/\./g,"_");switch(B.ntype){case"module":v=x;break;case"def":case"generator":v=B.globals&&B.globals.indexOf(t.tree[0].value)>-1?x:"$locals";break;case"class":var w=new $Node;s||(w.line_num=o,s=!0),new $NodeJSCtx(w,"var $left = "+t.to_js()),a.insert(n+i,w),y=!0,i++}}}var E=t.tree[0].to_js();v=v&&!t.tree[0].unknown_binding&&!p;var D=e.charAt(0);if(v){var C=y?"$left":E;w=new $Node;s||(w.line_num=o,s=!0),A=h?"if(":'if(typeof $temp.valueOf() == "number" && ',A+=C+".constructor === Number",A+=" && Number.isSafeInteger("+E+D+$+")){"+(h?"(":'(typeof $temp == "number" && ')+"typeof "+C+' == "number") ? ',A+=E+e+$,new $NodeJSCtx(w,A+=" : "+E+" = new Number("+E+D+(h?$:$+".valueOf()")+")}"),a.insert(n+i,w),i++}if("sub"==t.tree[0].type&&("+="==e||"-="==e||"*="==e)&&1==t.tree[0].tree.length){var j="$B.augm_item_"+{"+=":"add","-=":"sub","*=":"mul"}[e]+"("+t.tree[0].value.to_js()+","+t.tree[0].tree[0].to_js()+","+$+");None;";w=new $Node;return s||(w.line_num=o,s=!0),new $NodeJSCtx(w,j),a.insert(n+i,w),void i++}w=new $Node;s||(w.line_num=o,s=!0);var A="";v&&(A+="else "),A+="if(!hasattr("+t.to_js()+',"'+_+'"))',new $NodeJSCtx(w,A),a.insert(n+i,w),i++;var k=new $Node;k.id=this.scope.id,k.line_num=r.line_num,w.add(k);var N=new $NodeCtx(k),F=new $ExprCtx(N,"clone",!1);p?new $RawJSCtx(F,'$locals["'+c+'"]'):(F.tree=t.tree,F.tree.forEach((function(t){t.parent=F})));var S=new $AssignCtx(F),O=new $OpCtx(F,e.substr(0,e.length-1));O.parent=S,new $RawJSCtx(O,$),S.tree.push(O),F.parent.tree.pop(),F.parent.tree.push(S);var T=$NodeJS("else");a.insert(n+i,T);var I=new $Node;I.line_num=r.line_num,T.add(I);var R=new $NodeCtx(I),M=new $ExprCtx(R,"clone",!1);p?new $RawJSCtx(M,'$locals["'+c+'"]'):(M.tree=t.tree,M.tree.forEach((function(t){t.parent=M})));var J=new $AssignCtx(M);return J.tree.push($NodeJS("$B.$getattr("+t.to_js()+',"'+_+'")('+$+")")),M.parent.tree.pop(),M.parent.tree.push(J),!u||f||this.scope.blurred||(this.scope.binding[c]=void 0),i},this.to_js=function(){return""}},$AwaitCtx=$B.parser.$AwaitCtx=function(t){this.type="await",this.parent=t,this.tree=[],t.tree.push(this),this.to_js=function(){return $to_js(this.tree)}},$BodyCtx=$B.parser.$BodyCtx=function(t){for(var e=t.parent;"node"!==e.type;)e=e.parent;var r=e.node,n=new $Node;return n.line_num=r.line_num,r.insert(0,n),new $NodeCtx(n)},set_loop_C=$B.parser.set_loop_C=function(t,e){for(var r=t;"node"!==r.type;)r=r.parent;for(var n=r.node.parent,_=!1;;)if("module"==n.type)$_SyntaxError(t,e+" outside of a loop");else{var i=n.C.tree[0];if("condition"==i.type&&"while"==i.token){this.loop_ctx=i,i["has_"+e]=!0;break}switch(i.type){case"for":this.loop_ctx=i,i["has_"+e]=!0,_=!0;break;case"def":case"generator":case"class":$_SyntaxError(t,e+" outside of a loop");default:n=n.parent}if(_)break}},$BreakCtx=$B.parser.$BreakCtx=function(t){this.type="break",this.parent=t,t.tree[t.tree.length]=this,set_loop_C.apply(this,[t,"break"]),this.toString=function(){return"break "},this.to_js=function(){this.js_processed=!0;var t=";$locals_"+$get_scope(this).id.replace(/\./g,"_")+'["$no_break'+this.loop_ctx.loop_num+'"] = false';return"asyncfor"!=this.loop_ctx.type?t+=";break":t+=";throw StopIteration.$factory("+this.loop_ctx.loop_num+")",t}},$CallArgCtx=$B.parser.$CallArgCtx=function(t){this.type="call_arg",this.parent=t,this.start=$pos,this.tree=[],t.tree[t.tree.length]=this,this.expect="id",this.toString=function(){return"call_arg "+this.tree},this.to_js=function(){return this.js_processed=!0,$to_js(this.tree)}},$CallCtx=$B.parser.$CallCtx=function(t){this.type="call",this.func=t.tree[0],void 0!==this.func&&(this.func.parent=this),this.parent=t,"class"!=t.type?(t.tree.pop(),t.tree[t.tree.length]=this):t.args=this,this.expect="id",this.tree=[],this.start=$pos,this.toString=function(){return"(call) "+this.func+"("+this.tree+")"},this.func&&"attribute"==this.func.type&&"wait"==this.func.name&&"id"==this.func.value.type&&"time"==this.func.value.value&&(console.log("call",this.func),$get_node(this).blocking={type:"wait",call:this}),this.func&&"input"==this.func.value&&($get_node(this).blocking={type:"input"}),this.to_js=function(){this.js_processed=!0,this.tree.length>0&&0==this.tree[this.tree.length-1].tree.length&&this.tree.pop();var t=this.func.to_js();if(void 0!==this.func){switch(this.func.value){case"classmethod":return"classmethod.$factory("+$to_js(this.tree)+")";case"$$super":var e;if(0==this.tree.length)if("def"==(e=$get_scope(this)).ntype||"generator"==e.ntype){var r=$get_scope(e.C.tree[0]);"class"==r.ntype&&new $IdCtx(this,r.C.tree[0].name)}if(1==this.tree.length)if("def"==(e=$get_scope(this)).ntype||"generator"==e.ntype){var n=e.C.tree[0].args;if(n.length>0)new $IdCtx(this,n[0]).to_js=function(){return"[$locals['"+n[0]+"']]"}}break;default:if("unary"==this.func.type){var _="$B.$getattr("+$to_js(this.tree);switch(this.func.op){case"+":return _+',"__pos__")()';case"-":return _+',"__neg__")()';case"~":return _+',"__invert__")()'}}}var i,a=[],o=[],s=!1,u=[];if(this.tree.forEach((function(t){switch(t.type){case"star_arg":s=!0,a.push([t.tree[0].tree[0].to_js(),"*"]);break;case"double_star_arg":u.push(t.tree[0].tree[0].to_js());break;case"id":a.push([t.to_js(),"s"]);break;default:switch(t.tree[0].type){case"expr":case"list_or_tuple":case"op":default:a.push([t.to_js(),"s"]);break;case"kwarg":o.push(t.tree[0].tree[0].value+":"+t.tree[0].tree[1].to_js());break;case"star_arg":s=!0,a.push([t.tree[0].tree[0].to_js(),"*"]);break;case"double_star_arg":u.push(t.tree[0].tree[0].to_js())}}})),s){for(var l=[],c=0,f=a.length;c-1){if("id"==this.func.type){if(this.func.is_builtin){if(void 0!==$B.builtin_funcs[this.func.value])return-1==["complex","bytes","bytearray","object","memoryview","int","float","str","list","tuple","dict","set","frozenset","range","slice","zip","bool","type","classmethod","staticmethod","enumerate","reversed","property","$$super","zip","map","filter"].indexOf(this.func.value)?t+i:t+".$factory"+i}_=$}else _=$;return _}return $}}},$ClassCtx=$B.parser.$ClassCtx=function(t){this.type="class",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.expect="id";var e=this.scope=$get_scope(this);this.parent.node.parent_block=e,this.parent.node.bound={},this.parent.node.binding={__annotations__:!0},this.toString=function(){return"(class) "+this.name+" "+this.tree+" args "+this.args},this.set_name=function(r){this.random=$B.UUID(),this.name=r,this.id=t.node.module+"_"+r+"_"+this.random,this.binding={},this.parent.node.id=this.id;for(var n=e;n.C&&"class"==n.C.tree[0].type;)n=n.parent;for(;n.C&&"def"!=n.C.tree[0].type&&"generator"!=n.C.tree[0].type;)n=n.parent;this.parent.node.parent_block=n,$bind(r,this.scope,this),e.is_function&&-1==e.C.tree[0].locals.indexOf(r)&&e.C.tree[0].locals.push(r)},this.transform=function(t,e){this.doc_string=$get_docstring(t);var r=new $Node,n="$locals_"+this.id.replace(/\./g,"_");new $NodeJSCtx(r,a=";var "+n+' = {$type: "class", __annotations__: _b_.dict.$factory()}, $locals = '+n+', $local_name = "'+n+'";'),t.insert(0,r);for(var _=this.scope;"__builtins__"!==_.parent_block.id;)_=_.parent_block;var i="$locals_"+_.id.replace(/\./g,"_"),a=';var $top_frame = [$local_name, $locals,"'+_.id+'", '+i+"]; $B.frames_stack.push($top_frame);";t.insert(1,$NodeJS(a)),t.add($NodeJS("$B.leave_frame()"));var o=new $Node;new $NodeJSCtx(o,"return "+n+";"),t.insert(t.children.length,o);var s=new $Node;new $NodeJSCtx(s,")();"),t.parent.insert(e+1,s);var u="$locals_"+$get_module(this).module.replace(/\./g,"_")+".__name__";e++,t.parent.insert(e+1,$NodeJS("$"+this.name+"_"+this.random+".__module__ = "+u));var l=$get_scope(this),c=";$locals_"+l.id.replace(/\./g,"_"),f=1;if((a=[(c+='["'+this.name+'"]')+' = $B.$class_constructor("'+this.name])[f++]='", $'+this.name+"_"+this.random,void 0!==this.args){var p=this.args.tree,h=[],$=[];p.forEach((function(t){"kwarg"==t.tree[0].type?$.push(t.tree[0]):h.push(t.to_js())})),a[f++]=",tuple.$factory(["+h.join(",")+"]),[";var d=new RegExp('"',"g"),g=[],m=0;h.forEach((function(t){g[m++]='"'+t.replace(d,'\\"')+'"'})),a[f++]=g.join(",")+"]",g=[],m=0,$.forEach((function(t){g[m++]='["'+t.tree[0].value+'",'+t.tree[1].to_js()+"]"})),a[f++]=",["+g.join(",")+"]"}else a[f++]=",tuple.$factory([]),[],[]";a[f++]=")";var b=new $Node;new $NodeJSCtx(b,a.join("")),e++,t.parent.insert(e+1,b),e++;var v=new $Node;if(a=c+".__doc__ = "+(this.doc_string||"None")+";",new $NodeJSCtx(v,a),t.parent.insert(e+1,v),"module"==l.ntype){var y=new $Node;new $NodeJSCtx(y,'$locals["'+this.name+'"] = '+this.name)}t.parent.insert(e+2,$NodeJS("None;")),this.transformed=!0},this.to_js=function(){return this.js_processed=!0,"var $"+this.name+"_"+this.random+" = (function()"}},$CompIfCtx=$B.parser.$CompIfCtx=function(t){this.type="comp_if",t.parent.intervals.push($pos),this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"(comp if) "+this.tree},this.to_js=function(){return this.js_processed=!0,$to_js(this.tree)}},$ComprehensionCtx=$B.parser.$ComprehensionCtx=function(t){this.type="comprehension",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"(comprehension) "+this.tree},this.to_js=function(){this.js_processed=!0;var t=[];return this.tree.forEach((function(e){t.push(e.start)})),t}},$CompForCtx=$B.parser.$CompForCtx=function(t){this.type="comp_for",t.parent.intervals.push($pos),this.parent=t,this.tree=[],this.expect="in",t.tree[t.tree.length]=this,this.toString=function(){return"(comp for) "+this.tree},this.to_js=function(){return this.js_processed=!0,$to_js(this.tree)}},$CompIterableCtx=$B.parser.$CompIterableCtx=function(t){this.type="comp_iterable",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"(comp iter) "+this.tree},this.to_js=function(){return this.js_processed=!0,$to_js(this.tree)}},$ConditionCtx=$B.parser.$ConditionCtx=function(t,e){this.type="condition",this.token=e,this.parent=t,this.tree=[],"while"==e&&(this.loop_num=$loop_num++),t.tree[t.tree.length]=this,this.toString=function(){return this.token+" "+this.tree},this.transform=function(t,e){var r=$get_scope(this);if("while"==this.token)return"generator"==r.ntype&&(this.parent.node.loop_start=this.loop_num),t.parent.insert(e,$NodeJS('$locals["$no_break'+this.loop_num+'"] = true')),2},this.to_js=function(){this.js_processed=!0;var t=this.token;"elif"==t&&(t="else if");var e=[t+"($B.$bool("];if("while"==t)e.push('$locals["$no_break'+this.loop_num+'"] && ');else if("else if"==t){var r=$get_node(this).line_num+","+$get_scope(this).id;e.push('($locals.$line_info = "'+r+'") && ')}return 1==this.tree.length?e.push($to_js(this.tree)+"))"):(e.push(this.tree[0].to_js()+"))"),this.tree[1].tree.length>0&&e.push("{"+this.tree[1].to_js()+"}")),e.join("")}},$ContinueCtx=$B.parser.$ContinueCtx=function(t){this.type="continue",this.parent=t,$get_node(this).is_continue=!0,t.tree[t.tree.length]=this,set_loop_C.apply(this,[t,"continue"]),this.toString=function(){return"(continue)"},this.to_js=function(){return this.js_processed=!0,"continue"}},$DebuggerCtx=$B.parser.$DebuggerCtx=function(t){this.type="continue",this.parent=t,t.tree[t.tree.length]=this,this.toString=function(){return"(debugger)"},this.to_js=function(){return this.js_processed=!0,"debugger"}},$DecoratorCtx=$B.parser.$DecoratorCtx=function(t){this.type="decorator",this.parent=t,t.tree[t.tree.length]=this,this.tree=[],this.toString=function(){return"(decorator) "+this.tree},this.transform=function(e,r){for(var n=r+1,_=e.parent.children,i=[this.tree];;)if(n>=_.length)$_SyntaxError(t,["decorator expects function"]);else if("node_js"==_[n].C.type)n++;else{if("decorator"!=_[n].C.tree[0].type)break;i.push(_[n].C.tree[0].tree),_.splice(n,1)}this.dec_ids=[];i.forEach((function(){this.dec_ids.push("$id"+$B.UUID())}),this);var a=_[n].C.tree[0];"def"==a.type&&(a.decorated=!0,a.alias="$dec"+$B.UUID());var o="",s=$get_scope(this),u='$locals["';$B._globals[s.id]&&$B._globals[s.id][a.name]&&(u="$locals_"+$get_module(this).id+'["');var l=(u+=a.name+'"]')+" = ";i.forEach((function(t,e){l+="$B.$call("+this.dec_ids[e]+")(",o+=")"}),this),l+=(a.decorated?a.alias:u)+o+";",$bind(a.name,s,this),e.parent.insert(n+1,$NodeJS(l)),this.decorators=i},this.to_js=function(){this.js_processed=!0;var t=[];return this.decorators.forEach((function(e,r){t.push("var "+this.dec_ids[r]+" = "+$to_js(e)+";")}),this),t.join("")}},$DecoratorExprCtx=$B.parser.$DecoratorExprCtx=function(t){this.type="decorator_expression",this.parent=t,t.tree[t.tree.length]=this,this.names=[],this.tree=[],this.is_call=!1,this.toString=function(){return"(decorator expression)"},this.to_js=function(){this.js_processed=!0;var t=new $IdCtx(this,this.names[0]).to_js();return this.names.slice(1).forEach((function(e){t="_b_.getattr("+t+", '"+e+"')"})),this.tree.length>1?(this.tree[0].func={to_js:function(){return t}},this.tree[0].to_js()):t}},$DefCtx=$B.parser.$DefCtx=function(t){this.type="def",this.name=null,this.parent=t,this.tree=[],this.async=t.async,this.locals=[],this.yields=[],t.tree[t.tree.length]=this,this.enclosing=[];var e=this.scope=$get_scope(this);e.C&&"class"==e.C.tree[0].type&&(this.class_name=e.C.tree[0].name),t.node.binding={};for(var r=e;r.C&&"class"==r.C.tree[0].type;)r=r.parent;for(;r.C&&"def"!=r.C.tree[0].type&&"generator"!=r.C.tree[0].type;)r=r.parent;this.parent.node.parent_block=r;for(var n=r;n&&n.C;){if("def"==n.C.tree[0].type){this.inside_function=!0;break}n=n.parent_block}this.module=e.module,this.root=$get_module(this),this.num=$loop_num,$loop_num++,this.positional_list=[],this.default_list=[],this.other_args=null,this.other_kw=null,this.after_star=[],this.set_name=function(t){try{t=$mangle(t,this.parent.tree[0])}catch(t){throw console.log(t),console.log("parent",this.parent),t}var r=new $IdCtx(this,t);this.name=t,this.id=this.scope.id+"_"+t,this.id=this.id.replace(/\./g,"_"),this.id+="_"+$B.UUID(),this.parent.node.id=this.id,this.parent.node.module=this.module,this.binding={},void 0!==$B._globals[this.scope.id]&&void 0!==$B._globals[this.scope.id][t]?$bind(t,this.root,this):$bind(t,this.scope,this),r.bound=!0,e.is_function&&-1==e.C.tree[0].locals.indexOf(t)&&e.C.tree[0].locals.push(t)},this.toString=function(){return"def "+this.name+"("+this.tree+")"},this.transform=function(t,e){if(void 0===this.transformed){var r=this.scope;this.doc_string=$get_docstring(t),this.rank=e;var n=t.indent;if(this.name.substr(0,15)=="lambda_"+$B.lambda_magic){var _=r.parent_block;_.C&&"def"==_.C.tree[0].type&&this.enclosing.push(_)}for(var i=this.parent.node;i.parent&&i.parent.is_def_func;)this.enclosing.push(i.parent.parent),i=i.parent.parent;var a=[],o=[];this.argcount=0,this.kwonlyargcount=0,this.kwonlyargsdefaults=[],this.otherdefaults=[],this.varnames={},this.args=[],this.__defaults__=[],this.slots=[];var s=[],u=[];this.annotation&&u.push('"return":'+this.annotation.to_js()),this.tree[1].tree.forEach((function(t){this.args.push(t.name),this.varnames[t.name]=!0,"func_arg_id"==t.type?(this.star_arg?(this.kwonlyargcount++,t.has_default&&this.kwonlyargsdefaults.push(t.name)):(this.argcount++,t.has_default&&this.otherdefaults.push(t.name)),this.slots.push(t.name+":null"),s.push('"'+t.name+'"'),t.tree.length>0&&(a.push('"'+t.name+'"'),o.push(t.name+":"+$to_js(t.tree)),this.__defaults__.push($to_js(t.tree)))):"func_star_arg"==t.type&&("*"==t.op?this.star_arg=t.name:"**"==t.op&&(this.kw_arg=t.name)),t.annotation&&u.push(t.name+": "+t.annotation.to_js())}),this);var l=67;this.star_arg&&(l|=4),this.kw_arg&&(l|=8),"generator"==this.type&&(l|=32),this.async&&(l|=128);var c=[],f=[],p=0;this.positional_list.forEach((function(t){c.push('"'+t+'"'),f.push(t+":null")}),this),c=c.join(","),f="{"+f.join(",")+"}";var h=[];this.default_list.forEach((function(t){h.push(t+":null")})),h="{"+h.join(",")+"}";for(var $=[],d=r;d.parent_block&&"__builtins__"!==d.parent_block.id;)d=d.parent_block;var g="$locals_"+d.id.replace(/\./g,"_"),m=this.tree[0].to_js();this.decorated&&(m=this.alias);var b=this.name+this.num,v="$locals_"+this.id;x="var "+v+' = {}, $local_name = "'+this.id+'",$locals = '+v+";",(w=new $Node).locals_def=!0,w.func_node=t,new $NodeJSCtx(w,x),$.push(w);var y=[$NodeJS('var $top_frame = [$local_name, $locals,"'+d.id+'", '+g+", "+b+"]"),$NodeJS("$B.frames_stack.push($top_frame)"),$NodeJS("var $stack_length = $B.frames_stack.length")];$B.profile>1&&("class"==this.scope.ntype?fname=this.scope.C.tree[0].name+"."+this.name:fname=this.name,i&&i.id?fmod=i.id.slice(0,i.id.indexOf("_")):fmod="",x=";var _parent_line_info = {}; if($B.frames_stack[$B.frames_stack.length - 1]){ _parent_line_info = $B.frames_stack[$B.frames_stack.length-1][1].$line_info}else{_parent_line_info = "+g+".$line_info};;$B.$profile.call('"+fmod+"','"+fname+"',"+t.line_num+",_parent_line_info);",y.splice(0,0,$NodeJS(x))),y.forEach((function(t){t.enter_frame=!0})),$=$.concat(y),this.env=[];var B=[],x="def"==this.type?v+" = $locals":"var $ns";x+=' = $B.args("'+this.name+'", '+this.argcount+", {"+this.slots.join(", ")+"}, ["+s.join(", ")+"], arguments, ",o.length?x+="$defaults, ":x+="{}, ",x+=this.other_args+", "+this.other_kw+");";var w=new $Node;new $NodeJSCtx(w,x),B.push(w),"generator"==this.type&&(x="for(var $var in $ns){$locals[$var] = $ns[$var]};",B.push($NodeJS(x)));var E=!1;if(null===this.other_args&&null===this.other_kw&&0==this.after_star.length&&0==a.length){if(E=!0,$B.debug>0||this.positional_list.length>0){$.push($NodeJS("var $len = arguments.length;"));w=new $Node;new $NodeJSCtx(w,x="if($len > 0 && arguments[$len - 1].$nat !== undefined)"),$.push(w),w.add(B[0]),B.length>1&&w.add(B[1]);var D=new $Node;new $NodeJSCtx(D,"else"),$.push(D)}var C=this.positional_list.length;if($B.debug>0&&(x="if($len !="+C+'){$B.wrong_nb_args("'+this.name+'", $len, '+C,c.length>0&&(x+=", ["+c+"]"),x+=")}",D.add($NodeJS(x))),this.positional_list.length>0)if("generator"==this.type)this.positional_list.forEach((function(t){D.add($NodeJS('$locals["'+t+'"] = '+t))}));else{var j=[];this.positional_list.forEach((function(t){j.push(t+":"+t)})),$B.debug<1&&(x="if($len !="+C+'){$B.wrong_nb_args("'+this.name+'", $len, '+C,c.length>0&&(x+=", ["+c+"]"),x+=")}",D.add($NodeJS(x))),D.add($NodeJS(v+" = $locals = {"+j.join(", ")+"}"))}}else $.push(B[0]),B.length>1&&$.push(B[1]);$.push($NodeJS("$top_frame[1] = $locals;")),$.push($NodeJS("$B.js_this = this;"));for(var A=$.length-1;A>=0;A--)t.children.splice(0,0,$[A]);var k=new $Node;if(this.params="",E&&(this.params=Object.keys(this.varnames).join(", ")),new $NodeJSCtx(k,""),k.is_def_func=!0,k.module=this.module,"return"!=t.children[t.children.length-1].C.tree[0].type&&"generator"!=this.type){x="$B.leave_frame";"$exec"==this.id.substr(0,5)&&(x+="_exec"),t.add($NodeJS(x+"();return None"))}t.add(k);var N=1;n=t.indent;t.parent.insert(e+N++,$NodeJS(b+".$is_func = true")),t.parent.insert(e+N++,$NodeJS(b+".$infos = {"));var F=this.name;"$$"==this.name.substr(0,2)&&(F=F.substr(2)),F.substr(0,15)=="lambda_"+$B.lambda_magic&&(F=""),x=' __name__:"'+F+'",',t.parent.insert(e+N++,$NodeJS(x));var S=F;if(this.class_name&&(S=this.class_name+"."+F),x=' __qualname__:"'+S+'",',t.parent.insert(e+N++,$NodeJS(x)),"generator"!=this.type){if(this.otherdefaults.length>0){var O=[];this.otherdefaults.forEach((function(t){O.push("$defaults."+t)})),t.parent.insert(e+N++,$NodeJS(" __defaults__ : _b_.tuple.$factory(["+O.join(", ")+"]),"))}else t.parent.insert(e+N++,$NodeJS(" __defaults__ : _b_.None,"));if(this.kwonlyargsdefaults.lengh>0){O=[];this.kwonlyargsdefaults.forEach((function(t){O.push("$defaults."+t)})),t.parent.insert(e+N++,$NodeJS(" __kwdefaults__ : _b_.tuple.$factory(["+O.join(", ")+"]),"))}else t.parent.insert(e+N++,$NodeJS(" __kwdefaults__ : _b_.None,"))}var T=$get_module(this);for(var I in t.parent.insert(e+N++,$NodeJS(' __module__ : "'+T.module+'",')),t.parent.insert(e+N++,$NodeJS(" __doc__: "+(this.doc_string||"None")+",")),t.parent.insert(e+N++,$NodeJS(" __annotations__: {"+u.join(",")+"},")),this.binding)this.varnames[I]=!0;var R=[];for(var I in this.varnames)R.push('"'+I+'"');var M="___%%%-CODE-%%%___"+this.name+this.num,J="\n"+" ".repeat(n+8);x=" __code__:{"+J+" co_argcount:"+this.argcount;var L=","+J+" ".repeat(4);if(x+=L+"co_filename:$locals_"+$get_module(this).module.replace(/\./g,"_")+'["__file__"]'+L+"co_firstlineno:"+t.line_num+L+"co_flags:"+l+L+"co_kwonlyargcount:"+this.kwonlyargcount+L+'co_name: "'+this.name+'"'+L+"co_nlocals: "+R.length+L+"co_varnames: ["+R.join(", ")+"]"+J+"}\n };",x+="None;",t.parent.insert(e+N++,$NodeJS(x)),this.default_str="{"+o.join(", ")+"}","def"==this.type&&(t.parent.insert(e+N++,new $MarkerNode("func_end:"+M)),t.parent.insert(e+N++,$NodeJS("return "+b+"})("+this.default_str+")")),this.async&&t.parent.insert(e+N++,$NodeJS(m+" = $B.make_async("+m+")"))),"def"==this.type){var q=t;for(p=0;p-1?"_b_.list.$factory("+n.to_js()+")":"["+n.to_js()+"]",_>0&&(e=".concat("+e+")"),r+=e})),r},this.to_js=function(){switch(this.js_processed=!0,this.real){case"dict":if((r=this.packed_indices()).length>0)return"dict.$factory("+this.unpack_dict(r)+")"+$to_js(this.tree);for(var t=[],e=0;e0?"set.$factory("+this.unpack_set(r)+")":"set.$factory(["+$to_js(this.items)+"])"+$to_js(this.tree)}},$DoubleStarArgCtx=$B.parser.$DoubleStarArgCtx=function(t){this.type="double_star_arg",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"**"+this.tree},this.to_js=function(){return this.js_processed=!0,'{$nat:"pdict",arg:'+$to_js(this.tree)+"}"}},$EllipsisCtx=$B.parser.$EllipsisCtx=function(t){this.type="ellipsis",this.parent=t,this.nbdots=1,t.tree[t.tree.length]=this,this.toString=function(){return"ellipsis"},this.to_js=function(){return this.js_processed=!0,'$B.builtins["Ellipsis"]'}},$ExceptCtx=$B.parser.$ExceptCtx=function(t){this.type="except",this.parent=t,t.tree[t.tree.length]=this,this.tree=[],this.expect="id",this.scope=$get_scope(this),this.toString=function(){return"(except) "},this.set_alias=function(t){this.tree[0].alias=$mangle(t,this),$bind(t,this.scope,this)},this.to_js=function(){switch(this.js_processed=!0,this.tree.length){case 0:return"else";case 1:if("Exception"==this.tree[0].name)return"else if(1)"}var t=[];this.tree.forEach((function(e){t.push(e.to_js())}));var e="";if($B.debug>0){var r=$get_module(this);e='($locals.$line_info = "'+$get_node(this).line_num+","+r.id+'") && '}return"else if("+e+"$B.is_exc("+this.error_name+",["+t.join(",")+"]))"}},$ExprCtx=$B.parser.$ExprCtx=function(t,e,r){this.type="expr",this.name=e,this.with_commas=r,this.expect=",",this.parent=t,this.packed=t.packed,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"(expr "+r+") "+this.tree},this.to_js=function(t){return this.js_processed=!0,"list"==this.type?"["+$to_js(this.tree)+"]":1==this.tree.length?this.tree[0].to_js(t):"tuple.$factory(["+$to_js(this.tree)+"])"}},$ExprNot=$B.parser.$ExprNot=function(t){this.type="expr_not",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"(expr_not)"}},$FloatCtx=$B.parser.$FloatCtx=function(t,e){this.type="float",this.value=e,this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"float "+this.value},this.to_js=function(){return this.js_processed=!0,/^\d+$/.exec(this.value)||/^\d+\.\d*$/.exec(this.value)?"(new Number("+this.value+"))":"float.$factory("+this.value+")"}},$ForExpr=$B.parser.$ForExpr=function(t){this.type="for",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.loop_num=$loop_num,this.module=$get_scope(this).module,$loop_num++,this.toString=function(){return"(for) "+this.tree},this.transform=function(t,e){var r=$get_scope(this),n=this.tree[0],_=1==n.tree.length&&"id"==n.expect,i=this.tree[1],a=this.loop_num,o="$locals_"+r.id.replace(/\./g,"_"),s="\n"+" ".repeat(t.indent+4),u=!1;if(1==n.tree.length&&"id"!=n.expct&&"expr"==i.type&&"expr"==i.tree[0].type&&"call"==i.tree[0].tree[0].type){var l=i.tree[0].tree[0];if("id"==l.func.type)"range"==l.func.value&&l.tree.length<3&&(u=l)}var c=[],f=0,p=t.children;if(u&&"generator"!=r.ntype){this.has_break&&(A=new $Node,new $NodeJSCtx(A,o+'["$no_break'+a+'"] = true'),c[f++]=A);var h=!1;if(!r.blurred){for(var $=$get_scope(this),d=[];$.binding.range&&d.push($.id),$.parent_block;)$=$.parent_block;h=1==d.length&&"__builtins__"==d[0]}var g=new $Node;new $NodeJSCtx(g,h?"if(1)":"if("+l.func.to_js()+" === $B.builtins.range)"),c[f++]=g;var m=n.to_js();if(1==u.tree.length)var b=0,v=u.tree[0].to_js();else b=u.tree[0].to_js(),v=u.tree[1].to_js();var y="var $stop_"+a+" = $B.int_or_bool("+v+");"+s+m+" = "+b+";"+s+" var $next"+a+" = "+m+","+s+" $safe"+a+" = typeof $next"+a+' == "number" && typeof $stop_'+a+' == "number";'+s+"while(true)",B=new $Node;new $NodeJSCtx(B,y),B.add($NodeJS("if($safe"+a+" && $next"+a+">= $stop_"+a+"){break}")),B.add($NodeJS("else if(!$safe"+a+" && $B.ge($next"+a+", $stop_"+a+")){break}")),B.add($NodeJS(m+" = $next"+a)),B.add($NodeJS("if($safe"+a+"){$next"+a+" += 1}")),B.add($NodeJS("else{$next"+a+" = $B.add($next"+a+",1)}")),p.forEach((function(t){B.add(t)})),B.add($NodeJS('$locals.$line_info = "'+t.line_num+","+r.id+'"; None;'));var x=!1;if("module"==r.ntype)for(var w=t.parent;w;){if(w.for_wrapper){x=!0;break}w=w.parent}if("module"!=r.ntype||x)g.add(B);else{var E=new $Node;E.for_wrapper=!0,y="function $f"+a+"(",this.has_break&&(y+="$no_break"+a),new $NodeJSCtx(E,y+=")"),g.add(E),E.add(B),this.has_break&&E.add($NodeJS("return $no_break"+a)),g.add($NodeJS("var $res"+a+" = $f"+a+"();")),this.has_break&&g.add($NodeJS("var $no_break"+a+" = $res"+a))}if(h){t.parent.children.splice(e,1);var D=0;return this.has_break&&(t.parent.insert(e,c[0]),D++),c[D].children.forEach((function(r){t.parent.insert(e+D,r)})),t.parent.children[e].line_num=t.line_num,t.parent.children[e].bindings=t.bindings,t.children=[],0}var C=$NodeJS("else");c[f++]=C;for(var j=c.length-1;j>=0;j--)t.parent.insert(e+1,c[j]);this.test_range=!0,c=[],f=0}var A=new $Node;A.line_num=$get_node(this).line_num;var k=i.to_js(),N="$iter"+a;new $NodeJSCtx(A,y="var "+N+" = "+k+';$locals["$next'+a+'"] = $B.$getattr($B.$iter('+N+'),"__next__")'),c[f++]=A;y="if(isinstance("+N+", dict)){$locals.$len_func"+a+" = $B.$getattr("+N+', "__len__"); $locals.$len'+a+" = $locals.$len_func"+a+"()}else{$locals.$len"+a+" = null}";c[f++]=$NodeJS(y),this.has_break&&(c[f++]=$NodeJS(o+'["$no_break'+a+'"] = true;'));var F=new $Node;if(y=this.has_break?"while("+o+'["$no_break'+a+'"])':"while(1)",new $NodeJSCtx(F,y),F.C.loop_num=a,F.C.type="for",F.line_num=t.line_num,"generator"==r.ntype&&(F.loop_start=a),c[f++]=F,t.parent.children.splice(e,1),this.test_range)for(j=c.length-1;j>=0;j--)C.insert(0,c[j]);else for(j=c.length-1;j>=0;j--)t.parent.insert(e,c[j]),c.length;F.add($NodeJS("if($locals.$len"+a+"!==null && $locals.$len"+a+"!=$locals.$len_func"+a+'()){throw RuntimeError.$factory("dictionary changed size during iteration")}'));var S=$NodeJS("try");S.bindings=t.bindings,F.add(S),S.add($NodeJS("var ce = $B.current_exception"));var O=new $Node;O.id=this.module;var T=new $NodeCtx(O),I=new $ExprCtx(T,"left",!0);if(_){var R=new $ListOrTupleCtx(I);R.real="tuple",R.tree=n.tree}else I.tree=n.tree;return new $AssignCtx(I).tree[1]=new $JSCode('$locals["$next'+a+'"]()'),S.add(O),F.add($NodeJS("catch($err){if($B.is_exc($err, [StopIteration])){$B.current_exception = ce;break;}else{throw($err)}}")),p.forEach((function(t){F.add(t)})),t.children=[],0},this.to_js=function(){this.js_processed=!0;var t=this.tree.pop();return"for "+$to_js(this.tree)+" in "+t.to_js()}},$FromCtx=$B.parser.$FromCtx=function(t){this.type="from",this.parent=t,this.module="",this.names=[],this.aliases={},t.tree[t.tree.length]=this,this.expect="module",this.scope=$get_scope(this),this.add_name=function(t){this.names[this.names.length]=t,"*"==t&&(this.scope.blurred=!0)},this.bind_names=function(){var t=$get_scope(this);this.names.forEach((function(e){e=this.aliases[e]||e,$bind(e,t,this)}),this)},this.toString=function(){return"(from) "+this.module+" (import) "+this.names+"(as)"+this.aliases},this.to_js=function(){this.js_processed=!0;for(var t=$get_scope(this),e=$get_module(this),r=e.module,n=[],_=0,i=$get_node(this).indent,a=" ".repeat(i),o=this.module.split("."),s=0;s0&&"."==l.charAt(0);){if(void 0===u?void 0!==$B.imported[r]&&(c=(u=$B.imported[r].__package__).split(".")):(u=$B.imported[u],c.pop()),void 0===u)return console.log("throw system error",this.module,u),"throw SystemError.$factory(\"Parent module '' not loaded, cannot perform relative import\")";"None"==u&&console.log("package is None !"),l=l.substr(1)}l&&c.push(l),this.module=c.join(".");var f=this.module.replace(/\$/g,"");n[_++]='$B.$import("',n[_++]=f+'",["',n[_++]=this.names.join('","')+'"], {';var p="";for(var h in this.aliases)n[_++]=p+'"'+h+'": "'+this.aliases[h]+'"',p=",";return n[_++]="}, {}, true);","*"==this.names[0]?(t.blurred=!0,n[_++]="\n"+a+'for(var $attr in $B.imported["'+f+'"]){if($attr.charAt(0) !== "_"){$locals[$attr] = $B.imported["'+f+'"][$attr]}};'):this.names.forEach((function(t){e.imports[this.module+"."+t]=!0,n[_++]="\n"+a+'$locals["'+(this.aliases[t]||t)+'"] = $B.imported["'+f+'"]["'+t+'"];'}),this),n[_++]="\n"+a+"None;",n.join("")}},$FuncArgs=$B.parser.$FuncArgs=function(t){this.type="func_args",this.parent=t,this.tree=[],this.names=[],t.tree[t.tree.length]=this,this.expect="id",this.has_default=!1,this.has_star_arg=!1,this.has_kw_arg=!1,this.toString=function(){return"func args "+this.tree},this.to_js=function(){return this.js_processed=!0,$to_js(this.tree)}},$FuncArgIdCtx=$B.parser.$FuncArgIdCtx=function(t,e){this.type="func_arg_id",this.name=e,this.parent=t,t.has_star_arg?t.parent.after_star.push(e):t.parent.positional_list.push(e);var r=$get_node(this);r.binding[e]&&$_SyntaxError(t,["duplicate argument '"+e+"' in function definition"]),$bind(e,r,this),this.tree=[],t.tree[t.tree.length]=this;for(var n=t;void 0!==n.parent;){if("def"==n.type){n.locals.push(e);break}n=n.parent}this.expect="=",this.toString=function(){return"func arg id "+this.name+"="+this.tree},this.to_js=function(){return this.js_processed=!0,this.name+$to_js(this.tree)}},$FuncStarArgCtx=$B.parser.$FuncStarArgCtx=function(t,e){this.type="func_star_arg",this.op=e,this.parent=t,this.node=$get_node(this),t.has_star_arg="*"==e,t.has_kw_arg="**"==e,t.tree[t.tree.length]=this,this.toString=function(){return"(func star arg "+this.op+") "+this.name},this.set_name=function(r){if(this.name=r,"$dummy"!=r){this.node.binding[r]&&$_SyntaxError(t,["duplicate argument '"+r+"' in function definition"]),$bind(r,this.node,this);for(var n=t;void 0!==n.parent;){if("def"==n.type){n.locals.push(r);break}n=n.parent}"*"==e?n.other_args='"'+r+'"':n.other_kw='"'+r+'"'}}},$GlobalCtx=$B.parser.$GlobalCtx=function(t){this.type="global",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.expect="id",this.scope=$get_scope(this),$B._globals[this.scope.id]=$B._globals[this.scope.id]||{},this.toString=function(){return"global "+this.tree},this.add=function(t){$B._globals[this.scope.id][t]=!0},this.to_js=function(){return this.js_processed=!0,""}},$IdCtx=$B.parser.$IdCtx=function(t,e){this.type="id",this.value=$mangle(e,t),this.parent=t,this.tree=[],t.tree[t.tree.length]=this;var r=this.scope=$get_scope(this);this.blurred_scope=this.scope.blurred,this.env=clone(this.scope.binding),"call_arg"==t.parent.type&&(this.call_arg=!0);for(var n=t;void 0!==n.parent;){switch(n.type){case"ctx_manager_alias":$bind(e,r,this);break;case"list_or_tuple":case"dict_or_set":case"call_arg":case"def":case"lambda":void 0===n.vars?n.vars=[e]:-1==n.vars.indexOf(e)&&n.vars.push(e),this.call_arg&&"lambda"==n.type&&(void 0===n.locals?n.locals=[e]:n.locals.push(e))}n=n.parent}if(("target_list"==t.type||"expr"==t.type&&"target_list"==t.parent.type)&&($bind(e,r,this),this.bound=!0),"def"==r.ntype||"generator"==r.ntype){for(var _=this.parent;_;){if("list_or_tuple"==_.type&&_.is_comp())return void(this.in_comp=!0);_=_.parent}if("expr"==t.type&&"comp_if"==t.parent.type)return;"global"==t.type&&(void 0===r.globals?r.globals=[e]:-1==r.globals.indexOf(e)&&r.globals.push(e))}this.toString=function(){return"(id) "+this.value+":"+(this.tree||"")},this.firstBindingScopeId=function(){for(var t=this.scope,e=0;t&&e++<20;){if(t.binding&&t.binding[this.value])return t.id;t=t.parent}},this.boundBefore=function(t){for(var e=0,r=$get_node(this);r.parent&&e++<100;){var n=r.parent;if(n.bindings&&n.bindings[this.value])return!0;for(var _=0;_-1||u.C&&"def"==u.C.tree[0].type&&u.C.tree[0].env.indexOf(r)>-1)&&l.push(u):u.binding[r]&&(void 0===a.locals[r]&&(u.is_comp||u.parent_block&&u.parent_block.is_comp)||l.push(u)):(void 0===u.binding&&console.log("scope",u,r,"no binding",s),u.binding[r]&&l.push(u)),!u.parent_block)break;u=u.parent_block}if(this.found=l,this.nonlocal&&l[0]===s&&l.shift(),l.length>0){if(l[0].C&&l[0]===s&&"$"!=r.charAt(0)){var $=$get_node(this).locals||{},d=s.nonlocals;if(!(void 0!==$[r]||"def"==s.type&&"generator"==s.type||"class"==s.ntype||-1!=s.C.tree[0].args.indexOf(r)||void 0!==d&&void 0!==d[r]))return this.result='$B.$local_search("'+r+'")',n+this.result}if(l.length>1&&l[0].C&&"class"==l[0].C.tree[0].type){var g="$locals_"+l[0].id.replace(/\./g,"_"),m="$locals_"+l[1].id.replace(/\./g,"_");if(o)return o.indexOf(r)>-1?(this.found=l[0].binding[r],b=g):(this.found=l[1].binding[r],b=m),this.result=b+'["'+r+'"]',n+this.result;this.found=!1;var b=g+'["'+r+'"] !== undefined ? ';return b+=g+'["'+r+'"] : ',this.result="("+b+m+'["'+r+'"])',n+this.result}u=l[0];this.found=u.binding[r];var v="$locals_"+u.id.replace(/\./g,"_");if(void 0===u.C)if("__builtins__"==u.id)f.blurred?r="("+h+'["'+r+'"] || '+r+")":("__builtins__"!==r&&(r="$B.builtins."+r),this.is_builtin=!0);else if(u.id==u.module)if(this.bound||this.augm_assign)r=v+'["'+r+'"]';else{if(u===s&&void 0===this.env[r])return void 0===($=a.locals||{})[r]&&l.length>1&&"__builtins__"==l[1].id?(this.is_builtin=!0,this.result="$B.builtins."+r+$to_js(this.tree,""),n+this.result):(this.result='$B.$search("'+r+'")',n+this.result);r=this.boundBefore(u)?v+'["'+r+'"]':'$B.$check_def("'+r+'",'+v+'["'+r+'"])'}else r=v+'["'+r+'"]';else if(u===s)r=$B._globals[u.id]&&$B._globals[u.id][r]?h+'["'+r+'"]':this.bound||this.augm_assign||this.boundBefore()?'$locals["'+r+'"]':'$B.$check_def_local("'+r+'",$locals["'+r+'"])';else if(this.augm_assign)r=v+'["'+r+'"]';else if("generator"==u.ntype){for(var y=s;y!==u;)y=y.parent_block;r='$B.$check_def_free1("'+r+'", "'+u.id.replace(/\./g,"_")+'")'}else r='$B.$check_def_free("'+r+'",'+v+'["'+r+'"])';return this.result=r+$to_js(this.tree,""),n+this.result}return this.unknown_binding=!0,this.result='$B.$global_search("'+r+'", '+c+")",n+this.result}},$ImaginaryCtx=$B.parser.$ImaginaryCtx=function(t,e){this.type="imaginary",this.value=e,this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"imaginary "+this.value},this.to_js=function(){return this.js_processed=!0,"$B.make_complex(0,"+this.value+")"}},$ImportCtx=$B.parser.$ImportCtx=function(t){this.type="import",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.expect="id",this.toString=function(){return"import "+this.tree},this.bind_names=function(){var t=$get_scope(this);this.tree.forEach((function(e){if(e.name==e.alias){var r=e.name,n=r.split("."),_=r;n.length>1&&(_=n[0])}else _=e.alias;$bind(_,t,this)}),this)},this.to_js=function(){this.js_processed=!0;var t=$get_scope(this),e=[],r=$get_module(this);return this.tree.forEach((function(n){for(var _=n.name,i=n.name==n.alias?"{}":'{"'+_+'" : "'+n.alias+'"}',a="$locals_"+t.id.replace(/\./g,"_"),o=n.name.split("."),s=0;s$B.min_int&&t<$B.max_int?t:'$B.long_int.$factory("'+e[1]+'", '+e[0]+")"}},$JSCode=$B.parser.$JSCode=function(t){this.js=t,this.toString=function(){return this.js},this.to_js=function(){return this.js_processed=!0,this.js}},$KwArgCtx=$B.parser.$KwArgCtx=function(t){this.type="kwarg",this.parent=t.parent,this.tree=[t.tree[0]],t.parent.tree.pop(),t.parent.tree.push(this),t.parent.parent.has_kw=!0;var e=this.tree[0].value,r=t.parent.parent;void 0===r.kwargs?r.kwargs=[e]:-1==r.kwargs.indexOf(e)?r.kwargs.push(e):$_SyntaxError(t,["keyword argument repeated"]),this.toString=function(){return"kwarg "+this.tree[0]+"="+this.tree[1]},this.to_js=function(){this.js_processed=!0;var t=this.tree[0].value;return"$$"==t.substr(0,2)&&(t=t.substr(2)),'{$nat:"kw",name:"'+t+'",'+"value:"+$to_js(this.tree.slice(1,this.tree.length))+"}"}},$LambdaCtx=$B.parser.$LambdaCtx=function(t){this.type="lambda",this.parent=t,t.tree[t.tree.length]=this,this.tree=[],this.args_start=$pos+6,this.vars=[],this.locals=[],this.toString=function(){return"(lambda) "+this.args_start+" "+this.body_start},this.to_js=function(){this.js_processed=!0;var e=$get_node(this),r=$get_module(this),n=$get_src(t),_=n.substring(this.args_start,this.body_start),i=n.substring(this.body_start+1,this.body_end);i=(i=i.replace(/\\\n/g," ")).replace(/\n/g," ");var a=$get_scope(this),o=$B.UUID(),s="lambda_"+$B.lambda_magic+"_"+o,u="def "+s+"("+_+"):\n";u+=" return "+i;var l="lambda"+o,c=r.id.replace(/\./g,"_"),f=$B.py2js(u,c,l,a,e.line_num).to_js();return f="(function(){\n"+f+"\nreturn $locals."+s+"\n})()",$B.clear_ns(l),$B.$py_src[l]=null,delete $B.$py_src[l],f}},$ListOrTupleCtx=$B.parser.$ListOrTupleCtx=function(t,e){this.type="list_or_tuple",this.start=$pos,this.real=e,this.expect="id",this.closed=!1,this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){switch(this.real){case"list":return"(list) ["+this.tree+"]";case"list_comp":case"gen_expr":return"("+this.real+") ["+this.intervals+"-"+this.tree+"]";default:return"(tuple) ("+this.tree+")"}},this.is_comp=function(){switch(this.real){case"list_comp":case"gen_expr":case"dict_or_set_comp":return!0}return!1},this.get_src=function(){var t=$get_module(this).src,e=$get_scope(this);return void 0===e.comments||e.comments.forEach((function(e){var r=e[0],n=e[1];t=t.substr(0,r)+" ".repeat(n+1)+t.substr(r+n+1)})),t},this.bind_ids=function(t){this.tree.forEach((function(e){"id"==e.type?($bind(e.value,t,this),e.bound=!0):"expr"==e.type&&"id"==e.tree[0].type?($bind(e.tree[0].value,t,this),e.tree[0].bound=!0):"expr"==e.type&&"packed"==e.tree[0].type?"id"==e.tree[0].tree[0].type&&($bind(e.tree[0].tree[0].value,t,this),e.tree[0].tree[0].bound=!0):("list_or_tuple"==e.type||"expr"==e.type&&"list_or_tuple"==e.tree[0].type)&&("expr"==e.type&&(e=e.tree[0]),e.bind_ids(t))}),this)},this.packed_indices=function(){for(var t=[],e=0;e-1?"_b_.list.$factory("+this.tree[n].to_js()+")":"["+this.tree[n].to_js()+"]",n>0&&(e=".concat("+e+")"),r+=e;return r},this.to_js=function(){this.js_processed=!0;var t=$get_scope(this),e=(t.id.replace(/\//g,"_"),(b=$get_module(this)).module);switch(this.real){case"list":return(y=this.packed_indices()).length>0?"$B.$list("+this.unpack(y)+")":"$B.$list(["+$to_js(this.tree)+"])";case"list_comp":case"gen_expr":case"dict_or_set_comp":for(var r=this.get_src(),n=[],_=[],i=new RegExp('"',"g"),a=b.comments,o=1;os&&t[0]0?"tuple.$factory("+this.unpack(y)+")":1==this.tree.length&&void 0===this.has_comma?this.tree[0].to_js():"tuple.$factory(["+$to_js(this.tree)+"])"}}},$NodeCtx=$B.parser.$NodeCtx=function(t){this.node=t,t.C=this,this.tree=[],this.type="node";for(var e=null,r=t;r.parent&&"module"!=r.parent.type;){var n=!1;switch(r.parent.C.tree[0].type){case"def":case"class":case"generator":e=r.parent,n=!0}if(n)break;r=r.parent}null===e&&(e=r.parent||r),this.node.locals=clone(e.binding),this.toString=function(){return"node "+this.tree},this.to_js=function(){if(void 0!==this.js)return this.js;if(this.js_processed=!0,this.tree.length>1){var e=new $Node;new $NodeCtx(e).tree=[this.tree[1]],e.indent=t.indent+4,this.tree.pop(),t.add(e)}return 0==t.children.length?this.js=$to_js(this.tree)+";":this.js=$to_js(this.tree),this.js}},$NodeJS=$B.parser.$NodeJS=function(t){var e=new $Node;return new $NodeJSCtx(e,t),e},$NodeJSCtx=$B.parser.$NodeJSCtx=function(t,e){this.node=t,t.C=this,this.type="node_js",this.tree=[e],this.toString=function(){return"js "+e},this.to_js=function(){return this.js_processed=!0,e}},$NonlocalCtx=$B.parser.$NonlocalCtx=function(t){this.type="global",this.parent=t,this.tree=[],this.names={},t.tree[t.tree.length]=this,this.expect="id",this.scope=$get_scope(this),this.scope.nonlocals=this.scope.nonlocals||{},void 0===this.scope.C&&$_SyntaxError(t,["nonlocal declaration not allowed at module level"]),this.toString=function(){return"global "+this.tree},this.add=function(e){"arg"==this.scope.binding[e]&&$_SyntaxError(t,["name '"+e+"' is parameter and nonlocal"]),this.names[e]=[!1,$pos],this.scope.nonlocals[e]=!0},this.transform=function(e,r){var n=this.scope.parent_block;if(void 0===n.C)$_SyntaxError(t,["no binding for nonlocal '"+$B.last(Object.keys(this.names))+"' found"]);else{for(;void 0!==n&&void 0!==n.C;){for(var _ in this.names)void 0!==n.binding[_]&&(this.names[_]=[!0]);n=n.parent_block}for(var _ in this.names)this.names[_][0]||(console.log("nonlocal error, C "+t),$pos=this.names[_][1],$_SyntaxError(t,["no binding for nonlocal '"+_+"' found"]))}},this.to_js=function(){return this.js_processed=!0,""}},$NotCtx=$B.parser.$NotCtx=function(t){this.type="not",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"not ("+this.tree+")"},this.to_js=function(){return this.js_processed=!0,"!$B.$bool("+$to_js(this.tree)+")"}},$OpCtx=$B.parser.$OpCtx=function(t,e){if(this.type="op",this.op=e,this.parent=t.parent,this.tree=[t],this.scope=$get_scope(this),"expr"==t.type)if(["int","float","str"].indexOf(t.tree[0].type)>-1)this.left_type=t.tree[0].type;else if("id"==t.tree[0].type){var r=this.scope.binding[t.tree[0].value];r&&(this.left_type=r.type)}t.parent.tree.pop(),t.parent.tree.push(this),this.toString=function(){return"(op "+this.op+") ["+this.tree+"]"},this.to_js=function(){this.js_processed=!0;var t={"==":"eq","!=":"ne",">=":"ge","<=":"le","<":"lt",">":"gt"};if(void 0!==t[this.op]){var e=t[this.op];if("expr"==this.tree[0].type&&"expr"==this.tree[1].type){var r=this.tree[0].tree[0],n=this.tree[1].tree[0],_=r.to_js(),i=n.to_js();switch(n.type){case"int":switch(r.type){case"int":return Number.isSafeInteger(r.value)&&Number.isSafeInteger(n.value)?_+this.op+i:"$B.$getattr("+this.tree[0].to_js()+',"__'+e+'__")('+this.tree[1].to_js()+")";case"str":return'$B.$TypeError("unorderable types: int() < str()")';case"id":return"typeof "+_+' == "number" ? '+_+this.op+i+' : $B.rich_comp("__'+e+'__",'+this.tree[0].to_js()+","+this.tree[1].to_js()+")"}break;case"str":switch(r.type){case"str":return _+this.op+i;case"int":return'$B.$TypeError("unorderable types: str() < int()")';case"id":return"typeof "+_+' == "string" ? '+_+this.op+i+' : $B.rich_comp("__'+e+'__",'+this.tree[0].to_js()+","+this.tree[1].to_js()+")"}break;case"id":if("id"==r.type)return"typeof "+_+'!="object" && typeof '+_+'!="function" && typeof '+_+" == typeof "+i+" ? "+_+this.op+i+' : $B.rich_comp("__'+e+'__",'+this.tree[0].to_js()+","+this.tree[1].to_js()+")"}}}switch(this.op){case"and":var a=this.tree[0].to_js(),o=this.tree[1].to_js();return void 0!==this.wrap?"(function(){var "+this.wrap.name+" = "+this.wrap.js+";return $B.$test_expr($B.$test_item("+a+") && $B.$test_item("+o+"))})()":"$B.$test_expr($B.$test_item("+a+")&&$B.$test_item("+o+"))";case"or":return(v="$B.$test_expr($B.$test_item("+this.tree[0].to_js()+")||")+"$B.$test_item("+this.tree[1].to_js()+"))";case"in":return"$B.$is_member("+$to_js(this.tree)+")";case"not_in":return"!$B.$is_member("+$to_js(this.tree)+")";case"unary_neg":case"unary_pos":case"unary_inv":if("unary_neg"==this.op?(l="-",e="__neg__"):"unary_pos"==this.op?(l="+",e="__pos__"):(l="~",e="__invert__"),"expr"==this.tree[1].type){var s=this.tree[1].tree[0];switch(s.type){case"int":var u=parseInt(s.value[1],s.value[0]);return Number.isSafeInteger(u)?l+u:"$B.$getattr("+s.to_js()+', "'+e+'")()';case"float":return"float.$factory("+l+s.value+")";case"imaginary":return"$B.make_complex(0,"+l+s.value+")"}}return"$B.$getattr("+this.tree[1].to_js()+',"'+e+'")()';case"is":return"$B.$is("+this.tree[0].to_js()+", "+this.tree[1].to_js()+")";case"is_not":return this.tree[0].to_js()+"!=="+this.tree[1].to_js();case"*":case"+":case"-":var l=this.op,c=[],f=!1,p=$get_scope(this);function h(t,e){var r;return["int","float","str"].indexOf(e.type)>-1?r=e.type:"id"==e.type&&t[e.value]&&(r=t[e.value].type),r}var $=this.tree[0],d=this.tree[1];if(function t(e){if("expr"==e.type&&"int"==e.tree[0].type)return!0;if("expr"==e.type&&"float"==e.tree[0].type)return f=!0,!0;if("expr"==e.type&&"list_or_tuple"==e.tree[0].type&&"tuple"==e.tree[0].real&&1==e.tree[0].tree.length&&"expr"==e.tree[0].tree[0].type)return t(e.tree[0].tree[0].tree[0]);if("expr"==e.type&&"id"==e.tree[0].type){var r=e.tree[0].to_js();return-1==c.indexOf(r)&&c.push(r),!0}if("op"==e.type&&["*","+","-"].indexOf(e.op)>-1){for(var n=0;n-1&&["int","float"].indexOf(n)>-1)switch(this.result_type="int"==r&&"int"==n?"int":"float",this.op){case"+":return"$B.add("+g.to_js()+","+m.to_js()+")";case"-":return"$B.sub("+g.to_js()+","+m.to_js()+")";case"*":return"$B.mul("+g.to_js()+","+m.to_js()+")"}var v,y=[],B=[];c.forEach((function(t){y.push("typeof "+t+'.valueOf() == "number"'),B.push("typeof "+t+' == "number"')})),(v=[y.join(" && ")+" ? "]).push("("+B.join(" && ")+" ? "),v.push(this.simple_js()),v.push(" : new Number("+this.simple_js()+")"),v.push(")");r=this.tree[0].to_js(),n=this.tree[1].to_js();return"+"==this.op&&v.push(" : (typeof "+r+' == "string" && typeof '+n+' == "string") ? '+r+"+"+n),v.push(": $B.$getattr("+r+',"__'),v.push($operators[this.op]+'__")('+n+")"),"("+v.join("")+")"}return this.simple_js()}return void 0!==t[this.op]?'$B.rich_comp("__'+$operators[this.op]+'__",'+$.to_js()+","+d.to_js()+")":"$B.$getattr("+$.to_js()+', "__'+$operators[this.op]+'__")('+d.to_js()+")";default:return void 0!==t[this.op]?'$B.rich_comp("__'+$operators[this.op]+'__",'+this.tree[0].to_js()+","+this.tree[1].to_js()+")":"$B.$getattr("+this.tree[0].to_js()+', "__'+$operators[this.op]+'__")('+this.tree[1].to_js()+")"}},this.simple_js=function(){function t(t){return"op"==t.type?t.simple_js():"expr"==t.type&&"list_or_tuple"==t.tree[0].type&&"tuple"==t.tree[0].real&&1==t.tree[0].tree.length&&"expr"==t.tree[0].tree[0].type?"("+t.tree[0].tree[0].tree[0].simple_js()+")":t.tree[0].to_js()}return"+"==e?"$B.add("+t(this.tree[0])+","+t(this.tree[1])+")":"-"==e?"$B.sub("+t(this.tree[0])+","+t(this.tree[1])+")":"*"==e?"$B.mul("+t(this.tree[0])+","+t(this.tree[1])+")":"/"==e?"$B.div("+t(this.tree[0])+","+t(this.tree[1])+")":t(this.tree[0])+e+t(this.tree[1])}},$PackedCtx=$B.parser.$PackedCtx=function(t){if(this.type="packed","list_or_tuple"==t.parent.type&&"node"==t.parent.parent.type)for(var e=0;e0&&"packed"==r.tree[0].type&&$_SyntaxError(t,["two starred expressions in assignment"])}this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"(packed) "+this.tree},this.to_js=function(){return this.js_processed=!0,$to_js(this.tree)}},$PassCtx=$B.parser.$PassCtx=function(t){this.type="pass",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return"(pass)"},this.to_js=function(){return this.js_processed=!0,"void(0)"}},$RaiseCtx=$B.parser.$RaiseCtx=function(t){this.type="raise",this.parent=t,this.tree=[],t.tree[t.tree.length]=this,this.toString=function(){return" (raise) "+this.tree},this.to_js=function(){this.js_processed=!0;return 0==this.tree.length?"$B.$raise()":"$B.$raise("+this.tree[0].to_js()+")"}},$RawJSCtx=$B.parser.$RawJSCtx=function(t,e){this.type="raw_js",t.tree[t.tree.length]=this,this.parent=t,this.toString=function(){return"(js) "+e},this.to_js=function(){return this.js_processed=!0,e}},$ReturnCtx=$B.parser.$ReturnCtx=function(t){this.type="return",this.parent=t,this.tree=[],t.tree[t.tree.length]=this;for(var e=$get_node(this);e.parent;){if(e.parent.C){var r=e.parent.C.tree[0];if("for"==r.type){r.has_return=!0;break}("try"==r.type||"single_kw"==r.type&&"finally"==r.token)&&(r.has_return=!0)}e=e.parent}this.toString=function(){return"return "+this.tree},this.to_js=function(){this.js_processed=!0,1==this.tree.length&&"abstract_expr"==this.tree[0].type&&(this.tree.pop(),new $IdCtx(new $ExprCtx(this,"rvalue",!1),"None"));var t=$get_scope(this);if("generator"==t.ntype)return"return [$B.generator_return("+$to_js(this.tree)+")]";var e="var $res = "+$to_js(this.tree)+";$B.leave_frame";return"$exec_"==t.id.substr(0,6)&&(e+="_exec"),e+"();return $res"}},$SingleKwCtx=$B.parser.$SingleKwCtx=function(t,e){if(this.type="single_kw",this.token=e,this.parent=t,this.tree=[],t.tree[t.tree.length]=this,"else"==e){for(var r=t.node,n=r.parent,_=0;_0){var a=i.tree[0];("for"==a.type||"asyncfor"==a.type||"condition"==a.type&&"while"==a.token)&&(a.has_break=!0,a.else_node=$get_node(this),this.loop_num=a.loop_num)}}this.toString=function(){return this.token},this.transform=function(t,e){if("finally"==this.token){var r=$get_scope(this);if("generator"!=r.ntype){add_jscode(t,0,"var $exit;if($B.frames_stack.length<$stack_length){$exit = true;$B.frames_stack.push($top_frame)}");r.id.replace(/\./g,"_");"return"!=t.children[t.children.length-1].C.tree[0].type&&add_jscode(t,-1,"if($exit){$B.leave_frame()}")}}},this.to_js=function(){return this.js_processed=!0,"finally"==this.token?this.token:void 0!==this.loop_num?"if($locals_"+$get_scope(this).id.replace(/\./g,"_")+'["$no_break'+this.loop_num+'"])':this.token}},$SliceCtx=$B.parser.$SliceCtx=function(t){this.type="slice",this.parent=t,this.tree=t.tree.length>0?[t.tree.pop()]:[],t.tree.push(this),this.to_js=function(){for(var t=0;t-1?o.push(u):")]}".indexOf(u)>-1&&o.pop(),a++}i=s[0];var l=$pos,c="temp"+$B.UUID(),f=$B.py2js(i,r.module,c,r);f.to_js(),delete $B.$py_src[c],$pos=l;for(var p=0;p-1;)d=d.substr(0,d.length-1);break}break}}switch(t[_].conversion){case"a":d="$B.builtins.ascii("+d+")";break;case"r":d="$B.builtins.repr("+d+")";break;case"s":d="$B.builtins.str.$factory("+d+")"}var g=s[1];if(void 0!==g){var m=$B.parse_fstring(g),b="$B.builtins.str.format('{0:' + "+(g=m.length>1?n(m):"'"+g+"'")+" + '}', "+d+")";e.push(b)}else null===t[_].conversion&&(d="$B.builtins.str.$factory("+d+")"),e.push(d)}else{var v=new RegExp("'","g");e.push("'"+t[_].replace(v,"\\'")+"'")}return e.join(" + ")}for(var _=0;_0&&null!==d.tree[0].alias&&void 0!==d.tree[0].alias){var f=d.tree[0].alias;add_jscode(e.parent.children[s],0,'$locals["'+f+'"] = $B.exception('+_+")")}o.insert(o.children.length,e.parent.children[s]),0==d.tree.length&&(u&&$_SyntaxError(t,"more than one except: line"),u=!0),e.parent.children.splice(s,1)}else if("single_kw"==d.type&&"finally"==d.token){c=!0;var p=e.parent.children[s];s++}else{if("single_kw"!=d.type||"else"!=d.token)break;l&&$_SyntaxError(t,"more than one 'else'"),c&&$_SyntaxError(t,"'else' after 'finally'"),l=!0;var h=e.parent.children[s];e.parent.children.splice(s,1)}}if(!u){var $=new $Node,d=new $NodeCtx($);o.insert(o.children.length,$),new $SingleKwCtx(d,"else"),$.add($NodeJS("throw "+_))}if(l){var g=new $Node;g.module=n.module,new $NodeJSCtx(g,"if(!"+i+")"),h.children.forEach((function(t){g.add(t)})),c?p.insert(0,g):e.parent.insert(s,g),s++}$loop_num++},this.to_js=function(){return this.js_processed=!0,"try"}},$UnaryCtx=$B.parser.$UnaryCtx=function(t,e){this.type="unary",this.op=e,this.parent=t,t.tree[t.tree.length]=this,this.toString=function(){return"(unary) "+this.op},this.to_js=function(){return this.js_processed=!0,this.op}},$WithCtx=$B.parser.$WithCtx=function(t){this.type="with",this.parent=t,t.tree[t.tree.length]=this,this.tree=[],this.expect="as",this.scope=$get_scope(this),this.toString=function(){return"(with) "+this.tree},this.set_alias=function(t){this.tree[this.tree.length-1].alias=t,$bind(t,this.scope,this),"module"!==this.scope.ntype&&this.scope.C.tree[0].locals.push(t)},this.transform=function(e,r){for(;this.tree.length>1;){var n=e.children,_=this.tree.pop(),i=new $Node,a=new $NodeCtx(i),o=new $WithCtx(a);_.parent=o,o.tree=[_],n.forEach((function(t){i.add(t)})),e.children=[i]}if(e.is_try=!0,!this.transformed){if(this.tree.length>1){var s=new $Node;a=new $NodeCtx(s);return s.parent=e,s.module=e.module,s.indent=e.indent+4,new $WithCtx(a).tree=this.tree.slice(1),e.children.forEach((function(t){s.add(t)})),e.children=[s],void(this.transformed=!0)}var u=this.num=$loop_num++,l="$ctx_manager_exit"+u,c="$exc"+u,f="$err"+u,p="$value"+u;if(null===this.tree[0].alias&&(this.tree[0].alias="$temp"),"expr"==this.tree[0].type&&"list_or_tuple"==this.tree[0].tree[0].type){"expr"==this.tree[1].type&&"list_or_tuple"==this.tree[1].tree[0].type||$_SyntaxError(t),this.tree[0].tree[0].tree.length!=this.tree[1].tree[0].tree.length&&$_SyntaxError(t,["wrong number of alias"]);var h=this.tree[0].tree[0].tree,$=this.tree[1].tree[0].tree;this.tree.shift(),this.tree.shift();for(var d=h.length-1;d>=0;d--)h[d].alias=$[d].value,this.tree.splice(0,0,h[d])}var g=e.children;e.children=[];var m=new $Node;if(m.is_try=!0,new $NodeJSCtx(m,"try"),e.add(m),this.tree[0].alias){$=this.tree[0].alias.tree[0].tree[0].value;add_jscode(m,-1,'$locals["'+$+'"] = '+p)}g.forEach((function(t){m.add(t)}));var b=new $Node;b.is_catch=!0,new $NodeJSCtx(b,"catch("+f+")"),add_jscode(b,-1,c+" = false;"+f+" = $B.exception("+f+")\n"+" ".repeat(e.indent+4)+"if(!$B.$bool("+l+"("+f+".__class__,"+f+",$B.$getattr("+f+', "traceback")))){throw '+f+"}"),e.add(b);var v=new $Node;new $NodeJSCtx(v,"finally"),v.C.type="single_kw",v.C.token="finally",v.C.in_ctx_manager=!0,v.is_except=!0,v.in_ctx_manager=!0,add_jscode(v,-1,"if("+c+")"+l+"(None,None,None);"),e.parent.insert(r+1,v),this.transformed=!0}},this.to_js=function(){this.js_processed=!0;var t=$get_node(this).indent,e=" ".repeat(t+4),r=this.num,n="$ctx_manager"+r,_="$ctx_manager_exit"+r,i="$exc"+r,a="$value"+r;return"var "+n+" = "+this.tree[0].to_js()+"\n"+e+"var "+_+" = $B.$getattr("+n+',"__exit__")\n'+e+"var "+a+" = $B.$getattr("+n+',"__enter__")()\n'+e+"var "+i+" = true\n"+e+"try"}},$YieldCtx=$B.parser.$YieldCtx=function(t,e){this.type="yield",this.toString=function(){return"(yield) "+this.tree},this.parent=t,this.tree=[],t.tree[t.tree.length]=this;for(var r=!1,n=t;n;){if("lambda"==n.type){r=!0;break}n=n.parent}if(!r)switch(t.type){case"node":break;case"assign":case"tuple":case"list_or_tuple":$get_node(t).yield_atoms.push(this);break;default:$_SyntaxError(t,"yield atom must be inside ()")}var _=this.scope=$get_scope(this);if(_.is_function||r||$_SyntaxError(t,["'yield' outside function"]),!r){var i=_.C.tree[0];e||(i.type="generator"),i.yields.push(this)}this.toString=function(){return"(yield) "+(this.from?"(from) ":"")+this.tree},this.transform=function(t,e){add_jscode(t.parent,e+1,"// placeholder for generator sent value").set_yield_value=!0},this.to_js=function(){return this.js_processed=!0,void 0===this.from?$to_js(this.tree)||"None":$to_js(this.tree)}},$add_profile=$B.parser.$add_profile=function(t,e){if("module"!=t.type){for(var r=t.C.tree[0],n=1,_=!0,i=t;void 0!==i.parent;)i=i.parent;var a=i.id;if(void 0===t.line_num&&(_=!1),("condition"==r.type&&"elif"==r.token||"except"==r.type||"single_kw"==r.type)&&(_=!1),_){var o=new $Node;new $NodeJSCtx(o,';$B.$profile.count("'+a+'",'+t.line_num+");"),t.parent.insert(e,o),n=2}for(s=0;s-1){$get_module(r).binding[t]=!0}else{var n=$get_node(r);n.bindings=n.bindings||{},n.bindings[t]=!0,void 0===e.binding[t]&&(e.binding[t]=!0)}},$previous=$B.parser.$previous=function(t){var e=t.node.parent.children[t.node.parent.children.length-2];return e&&e.C||$_SyntaxError(t,"keyword not following correct keyword"),e.C.tree[0]},$get_docstring=$B.parser.$get_docstring=function(t){var e="";if(t.children.length>0){var r=t.children[0];if(r.C.tree&&r.C.tree.length>0&&"expr"==r.C.tree[0].type){var n=r.C.tree[0].tree[0];"str"!=n.type||Array.isArray(n.tree[0])||(e=r.C.tree[0].tree[0].to_js())}}return e},$get_scope=$B.parser.$get_scope=function(t){for(var e=t.parent;"node"!==e.type;)e=e.parent;for(var r=e.node,n=null;r.parent&&"module"!==r.parent.type;){var _=r.parent.C.tree[0].type;switch(_){case"def":case"class":case"generator":return(n=r.parent).ntype=_,n.is_function="class"!=_,n}r=r.parent}return(n=r.parent||r).ntype="module",n},$get_line_num=$B.parser.$get_line_num=function(t){var e=$get_node(t),r=e.line_num;if(void 0===e.line_num){for(e=e.parent;e&&void 0===e.line_num;)e=e.parent;e&&e.line_num&&(r=e.line_num)}return r},$get_module=$B.parser.$get_module=function(t){for(var e=t.parent;"node"!==e.type;)e=e.parent;var r=e.node;if("module"==r.ntype)return r;for(var n=null;"module"!=r.parent.type;)r=r.parent;return(n=r.parent).ntype="module",n},$get_src=$B.parser.$get_src=function(t){for(var e=$get_node(t);void 0!==e.parent;)e=e.parent;return e.src},$get_node=$B.parser.$get_node=function(t){for(var e=t;e.parent;)e=e.parent;return e.node},$to_js_map=$B.parser.$to_js_map=function(t){if(void 0!==t.to_js)return t.to_js();throw Error("no to_js() for "+t)},$to_js=$B.parser.$to_js=function(t,e){return void 0===e&&(e=","),t.map($to_js_map).join(e)},$mangle=$B.parser.$mangle=function(t,e){if("__"!=t.substr(0,2)||"__"===t.substr(t.length-2))return t;for(var r=$get_scope(e);;){if("module"==r.ntype)return t;if("class"==r.ntype){for(var n=r.C.tree[0].name;"_"==n.charAt(0);)n=n.substr(1);return"_"+n+t}if(!r.parent||!r.parent.C)return t;r=$get_scope(r.C.tree[0])}},$transition=$B.parser.$transition=function(t,e,r){switch(t.type){case"abstract_expr":var n=t.packed;switch(e){case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case".":case"not":case"lambda":case"yield":t.parent.tree.pop();var _=t.with_commas;(t=t.parent).packed=n}switch(e){case"await":return new $AwaitCtx(t);case"id":return new $IdCtx(new $ExprCtx(t,"id",_),r);case"str":return new $StringCtx(new $ExprCtx(t,"str",_),r);case"bytes":return new $StringCtx(new $ExprCtx(t,"bytes",_),r);case"int":return new $IntCtx(new $ExprCtx(t,"int",_),r);case"float":return new $FloatCtx(new $ExprCtx(t,"float",_),r);case"imaginary":return new $ImaginaryCtx(new $ExprCtx(t,"imaginary",_),r);case"(":return new $ListOrTupleCtx(new $ExprCtx(t,"tuple",_),"tuple");case"[":return new $ListOrTupleCtx(new $ExprCtx(t,"list",_),"list");case"{":return new $DictOrSetCtx(new $ExprCtx(t,"dict_or_set",_));case".":return new $EllipsisCtx(new $ExprCtx(t,"ellipsis",_));case"not":return"op"==t.type&&"is"==t.op?(t.op="is_not",t):new $NotCtx(new $ExprCtx(t,"not",_));case"lambda":return new $LambdaCtx(new $ExprCtx(t,"lambda",_));case"op":var i=r;switch(i){case"*":t.parent.tree.pop();_=t.with_commas;return t=t.parent,new $PackedCtx(new $ExprCtx(t,"expr",_));case"-":case"~":case"+":t.parent.tree.pop();var a=new $UnaryCtx(t.parent,i);if("-"==i)var o=new $OpCtx(a,"unary_neg");else if("+"==i)o=new $OpCtx(a,"unary_pos");else o=new $OpCtx(a,"unary_inv");return new $AbstractExprCtx(o,!1);case"not":t.parent.tree.pop();_=t.with_commas;return t=t.parent,new $NotCtx(new $ExprCtx(t,"not",_))}$_SyntaxError(t,"token "+e+" after "+t);case"=":$_SyntaxError(t,e);case"yield":return new $AbstractExprCtx(new $YieldCtx(t),!0);case":":return"sub"==t.parent.type||"list_or_tuple"==t.parent.type&&"sub"==t.parent.parent.type?new $AbstractExprCtx(new $SliceCtx(t.parent),!1):$transition(t.parent,e,r);case")":case",":switch(t.parent.type){case"list_or_tuple":case"call_arg":case"op":case"yield":break;default:$_SyntaxError(t,e)}}return $transition(t.parent,e,r);case"annotation":return $transition(t.parent,e);case"assert":if("eol"==e)return $transition(t.parent,e);$_SyntaxError(t,e);case"assign":if("eol"==e)return"abstract_expr"==t.tree[1].type&&$_SyntaxError(t,"token "+e+" after "+t),t.guess_type(),$transition(t.parent,"eol");$_SyntaxError(t,"token "+e+" after "+t);case"async":if("def"==e)return $transition(t.parent,e,r);$_SyntaxError(t,"token "+e+" after "+t);case"attribute":if("id"===e){var s=r;return!0===noassign[s]&&$_SyntaxError(t,["cannot assign to "+s]),s=$mangle(s,t),t.name=s,t.parent}$_SyntaxError(t,e);case"augm_assign":if("eol"==e)return"abstract_expr"==t.tree[1].type&&$_SyntaxError(t,"token "+e+" after "+t),$transition(t.parent,"eol");$_SyntaxError(t,"token "+e+" after "+t);case"await":return $transition(t.parent,e,r);case"break":if("eol"==e)return $transition(t.parent,"eol");$_SyntaxError(t,e);case"call":switch(e){case",":return"id"==t.expect&&$_SyntaxError(t,e),t.expect="id",t;case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case".":case"not":case"lambda":return t.expect=",",$transition(new $CallArgCtx(t),e,r);case")":return t.end=$pos,t.parent;case"op":switch(t.expect=",",r){case"-":case"~":case"+":return t.expect=",",$transition(new $CallArgCtx(t),e,r);case"*":return t.has_star=!0,new $StarArgCtx(t);case"**":return t.has_dstar=!0,new $DoubleStarArgCtx(t)}$_SyntaxError(t,e)}return $transition(t.parent,e,r);case"call_arg":switch(e){case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case".":case"not":case"lambda":if("id"==t.expect){t.expect=",";var u=new $AbstractExprCtx(t,!1);return $transition(u,e,r)}break;case"=":if(","==t.expect)return new $ExprCtx(new $KwArgCtx(t),"kw_value",!1);break;case"for":(p=new $ListOrTupleCtx(t,"gen_expr")).vars=t.vars,p.locals=t.locals,p.intervals=[t.start],t.tree.pop(),p.expression=t.tree,t.tree=[p],p.tree=[];var l=new $ComprehensionCtx(p);return new $TargetListCtx(new $CompForCtx(l));case"op":if("id"==t.expect){var c=r;switch(t.expect=",",c){case"+":case"-":case"~":return $transition(new $AbstractExprCtx(t,!1),e,c);case"*":return new $StarArgCtx(t);case"**":return new $DoubleStarArgCtx(t)}}$_SyntaxError(t,"token "+e+" after "+t);case")":if(t.parent.kwargs&&$B.last(t.parent.tree).tree[0]&&-1==["kwarg","star_arg","double_star_arg"].indexOf($B.last(t.parent.tree).tree[0].type)&&$_SyntaxError(t,["non-keyword arg after keyword arg"]),t.tree.length>0){var f=t.tree[t.tree.length-1];"list_or_tuple"==f.type&&"gen_expr"==f.real&&f.intervals.push($pos)}return $transition(t.parent,e);case":":if(","==t.expect&&"lambda"==t.parent.parent.type)return $transition(t.parent.parent,e);break;case",":if(","==t.expect)return t.parent.kwargs&&-1==["kwarg","star_arg","double_star_arg"].indexOf($B.last(t.parent.tree).tree[0].type)&&$_SyntaxError(t,["non-keyword arg after keyword arg"]),$transition(t.parent,e,r)}$_SyntaxError(t,"token "+e+" after "+t);case"class":switch(e){case"id":if("id"==t.expect)return t.set_name(r),t.expect="(:",t;break;case"(":return new $CallCtx(t);case":":return $BodyCtx(t)}$_SyntaxError(t,"token "+e+" after "+t);case"comp_if":return $transition(t.parent,e,r);case"comp_for":if("in"==e&&"in"==t.expect)return t.expect=null,new $AbstractExprCtx(new $CompIterableCtx(t),!0);if(null===t.expect)return $transition(t.parent,e,r);$_SyntaxError(t,"token "+e+" after "+t);case"comp_iterable":return $transition(t.parent,e,r);case"comprehension":switch(e){case"if":return new $AbstractExprCtx(new $CompIfCtx(t),!1);case"for":return new $TargetListCtx(new $CompForCtx(t))}return $transition(t.parent,e,r);case"condition":if(":"==e)return $BodyCtx(t);$_SyntaxError(t,"token "+e+" after "+t);case"continue":if("eol"==e)return t.parent;$_SyntaxError(t,"token "+e+" after "+t);case"ctx_manager_alias":switch(e){case",":case":":return $transition(t.parent,e,r)}$_SyntaxError(t,"token "+e+" after "+t);case"decorator":if("id"==e&&0==t.tree.length)return $transition(new $DecoratorExprCtx(t),e,r);if("eol"==e)return $transition(t.parent,e);$_SyntaxError(t,"token "+e+" after "+t);case"decorator_expression":if(void 0===t.expects){if("id"==e)return t.names.push(r),t.expects=".",t;$_SyntaxError(t,"token "+e+" after "+t)}else if(t.is_call&&"eol"!==e)$_SyntaxError(t,"token "+e+" after "+t);else{if("id"==e&&"id"==t.expects)return t.names.push(r),t.expects=".",t;if("."==e&&"."==t.expects)return t.expects="id",t;if("("==e&&"."==t.expects){if(!t.is_call)return t.is_call=!0,new $CallCtx(t)}else if("eol"==e)return $transition(t.parent,e)}$_SyntaxError(t,"token "+e+" after "+t);case"def":switch(e){case"id":return t.name&&$_SyntaxError(t,"token "+e+" after "+t),t.set_name(r),t;case"(":return null==t.name&&$_SyntaxError(t,"token "+e+" after "+t),t.has_args=!0,new $FuncArgs(t);case"annotation":return new $AbstractExprCtx(new $AnnotationCtx(t),!0);case":":if(t.has_args)return $BodyCtx(t)}$_SyntaxError(t,"token "+e+" after "+t);case"del":if("eol"==e)return $transition(t.parent,e);$_SyntaxError(t,"token "+e+" after "+t);case"dict_or_set":if(t.closed){switch(e){case"[":return new $AbstractExprCtx(new $SubCtx(t.parent),!1);case"(":return new $CallArgCtx(new $CallCtx(t.parent))}return $transition(t.parent,e,r)}if(","==t.expect){switch(e){case"}":switch(t.real){case"dict_or_set":if(1!=t.tree.length)break;t.real="set";case"set":case"set_comp":case"dict_comp":return t.items=t.tree,t.tree=[],t.closed=!0,t;case"dict":if(t.nb_dict_items()%2==0)return t.items=t.tree,t.tree=[],t.closed=!0,t}$_SyntaxError(t,"token "+e+" after "+t);case",":return"dict_or_set"==t.real&&(t.real="set"),"dict"==t.real&&t.nb_dict_items()%2&&$_SyntaxError(t,"token "+e+" after "+t),t.expect="id",t;case":":if("dict_or_set"==t.real&&(t.real="dict"),"dict"==t.real)return t.expect=",",new $AbstractExprCtx(t,!1);$_SyntaxError(t,"token "+e+" after "+t);case"for":var p;"dict_or_set"==t.real?t.real="set_comp":t.real="dict_comp",(p=new $ListOrTupleCtx(t,"dict_or_set_comp")).intervals=[t.start+1],p.vars=t.vars,t.tree.pop(),p.expression=t.tree,t.tree=[p],p.tree=[];l=new $ComprehensionCtx(p);return new $TargetListCtx(new $CompForCtx(l))}$_SyntaxError(t,"token "+e+" after "+t)}else if("id"==t.expect){switch(e){case"}":return 0==t.tree.length?(t.items=[],t.real="dict"):t.items=t.tree,t.tree=[],t.closed=!0,t;case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case".":case"not":case"lambda":t.expect=",";u=new $AbstractExprCtx(t,!1);return $transition(u,e,r);case"op":switch(r){case"*":case"**":return t.expect=",",(u=new $AbstractExprCtx(t,!1)).packed=r.length,"dict_or_set"==t.real?t.real="*"==r?"set":"dict":("set"==t.real&&"**"==r||"dict"==t.real&&"*"==r)&&$_SyntaxError(t,"token "+e+" after "+t),u;case"+":return t;case"-":case"~":t.expect=",";a=new $UnaryCtx(t,r);if("-"==r)o=new $OpCtx(a,"unary_neg");else if("+"==r)o=new $OpCtx(a,"unary_pos");else o=new $OpCtx(a,"unary_inv");return new $AbstractExprCtx(o,!1)}$_SyntaxError(t,"token "+e+" after "+t)}$_SyntaxError(t,"token "+e+" after "+t)}return $transition(t.parent,e,r);case"double_star_arg":switch(e){case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case".":case"not":case"lambda":return $transition(new $AbstractExprCtx(t,!1),e,r);case",":case")":return $transition(t.parent,e);case":":if("lambda"==t.parent.parent.type)return $transition(t.parent.parent,e)}$_SyntaxError(t,"token "+e+" after "+t);case"ellipsis":if("."==e)return t.nbdots++,t;if(3==t.nbdots)return $transition(t.parent,e,r);$pos--,$_SyntaxError(t,"token "+e+" after "+t);case"except":switch(e){case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case"not":case"lamdba":if("id"==t.expect)return t.expect="as",$transition(new $AbstractExprCtx(t,!1),e,r);case"as":if("as"==t.expect&&void 0===t.has_alias)return t.expect="alias",t.has_alias=!0,t;case"id":if("alias"==t.expect)return t.expect=":",t.set_alias(r),t;break;case":":var h=t.expect;if("id"==h||"as"==h||":"==h)return $BodyCtx(t);break;case"(":if("id"==t.expect&&0==t.tree.length)return t.parenth=!0,t;break;case")":if(","==t.expect||"as"==t.expect)return t.expect="as",t;case",":if(void 0!==t.parenth&&void 0===t.has_alias&&("as"==t.expect||","==t.expect))return t.expect="id",t}$_SyntaxError(t,"token "+e+" after "+t.expect);case"expr":switch(e){case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"lamdba":$_SyntaxError(t,"token "+e+" after "+t);break;case"[":case"(":case"{":case".":case"not":if("expr"==t.expect)return t.expect=",",$transition(new $AbstractExprCtx(t,!1),e,r)}switch(e){case"not":if(","==t.expect)return new $ExprNot(t);break;case"in":if("target_list"==t.parent.type)return $transition(t.parent,e);if(","==t.expect)return $transition(t,"op","in");break;case",":if(","==t.expect&&t.with_commas){t.parent.tree.pop();var $=new $ListOrTupleCtx(t.parent,"tuple");return $.implicit=!0,$.has_comma=!0,$.tree=[t],t.parent=$,$}return $transition(t.parent,e);case".":return new $AttrCtx(t);case"[":return new $AbstractExprCtx(new $SubCtx(t),!0);case"(":return new $CallCtx(t);case"op":var d=t.parent;c=r;if("ternary"==d.type&&d.in_else){var g=new $OpCtx(t,c);return new $AbstractExprCtx(g,!1)}for(var m=t.parent,b=null;;)if("expr"==m.type)m=m.parent;else if("op"==m.type&&$op_weight[m.op]>=$op_weight[c]&&("**"!=m.op||"**"!=c))b=m,m=m.parent;else{if(!("not"==m.type&&$op_weight.not>$op_weight[c]))break;b=m,m=m.parent}if(null===b){for(;t.parent!==m;)d=(t=t.parent).parent;t.parent.tree.pop(),(u=new $ExprCtx(d,"operand",t.with_commas)).expect=",",t.parent=u;g=new $OpCtx(t,c);return new $AbstractExprCtx(g,!1)}if("and"===c||"or"===c)for(;"not"==b.parent.type||"expr"==b.parent.type&&"not"==b.parent.parent.type;)d=(b=b.parent).parent;if("op"==b.type){var v=!1;switch(b.op){case"<":case"<=":case"==":case"!=":case"is":case">=":case">":v=!0}if(v)switch(c){case"<":case"<=":case"==":case"!=":case"is":case">=":case">":var y=b.tree[1],B=y.to_js(),x=new Object;for(var w in y)x[w]=y[w];var E="$c"+chained_comp_num;for(y.to_js=function(){return E},x.to_js=function(){return E},chained_comp_num++;b.parent&&"op"==b.parent.type&&$op_weight[b.parent.op]<$op_weight[b.op];)b=b.parent;b.parent.tree.pop();var D=new $OpCtx(b,"and");D.wrap={name:E,js:B},x.parent=D,D.tree.push("xxx");g=new $OpCtx(x,c);return new $AbstractExprCtx(g,!1)}}b.parent.tree.pop(),(u=new $ExprCtx(b.parent,"operand",!1)).tree=[m],b.parent=u;g=new $OpCtx(b,c);return new $AbstractExprCtx(g,!1);case"augm_assign":if(","==t.expect)return new $AbstractExprCtx(new $AugmentedAssignCtx(t,r),!0);break;case":":if("sub"==t.parent.type||"list_or_tuple"==t.parent.type&&"sub"==t.parent.parent.type)return new $AbstractExprCtx(new $SliceCtx(t.parent),!1);if("slice"==t.parent.type)return $transition(t.parent,e,r);if("node"==t.parent.type)return new $AbstractExprCtx(new $AnnotationCtx(t),!1);break;case"=":if(","==t.expect){if("call_arg"==t.parent.type)return"id"!=t.tree[0].type&&$_SyntaxError(t,["keyword can't be an expression"]),new $AbstractExprCtx(new $KwArgCtx(t),!0);if("annotation"==t.parent.type)return $transition(t.parent.parent,e,r);for("op"==t.parent.type&&$_SyntaxError(t,["can't assign to operator"]);void 0!==t.parent;)"condition"==(t=t.parent).type&&$_SyntaxError(t,"token "+e+" after "+t);return t=t.tree[0],new $AbstractExprCtx(new $AssignCtx(t),!0)}break;case"if":for(var C=!1,j=t.parent;;){if("comp_iterable"==j.type){C=!0;break}if(void 0===j.parent)break;j=j.parent}if(C)break;for(j=t;j.parent&&"op"==j.parent.type;)"expr"==(j=j.parent).type&&j.parent&&"op"==j.parent.type&&(j=j.parent);return new $AbstractExprCtx(new $TernaryCtx(j),!1);case"eol":if(-1==["dict_or_set","list_or_tuple"].indexOf(t.parent.type))("packed"==(F=t.tree[0]).type||"call"==F.type&&"packed"==F.func.type)&&$_SyntaxError(t,["can't use starred expression here"])}return $transition(t.parent,e);case"expr_not":if("in"==e)return t.parent.tree.pop(),new $AbstractExprCtx(new $OpCtx(t.parent,"not_in"),!1);$_SyntaxError(t,"token "+e+" after "+t);case"for":switch(e){case"in":return new $AbstractExprCtx(new $ExprCtx(t,"target list",!0),!1);case":":return t.tree.length<2&&$_SyntaxError(t,"token "+e+" after "+t),$BodyCtx(t)}$_SyntaxError(t,"token "+e+" after "+t);case"from":switch(e){case"id":if("id"==t.expect)return t.add_name(r),t.expect=",",t;if("alias"==t.expect)return t.aliases[t.names[t.names.length-1]]=r,t.expect=",",t;case".":if("module"==t.expect)return t.module+="id"==e?r:".",t;case"import":if("module"==t.expect)return t.expect="id",t;case"op":if("*"==r&&"id"==t.expect&&0==t.names.length)return"module"!==$get_scope(t).ntype&&$_SyntaxError(t,["import * only allowed at module level"]),t.add_name("*"),t.expect="eol",t;case",":if(","==t.expect)return t.expect="id",t;case"eol":switch(t.expect){case",":case"eol":return t.bind_names(),$transition(t.parent,e);case"id":$_SyntaxError(t,["trailing comma not allowed without surrounding parentheses"]);default:$_SyntaxError(t,["invalid syntax"])}case"as":if(","==t.expect||"eol"==t.expect)return t.expect="alias",t;case"(":if("id"==t.expect)return t.expect="id",t;case")":if(","==t.expect||"id"==t.expect)return t.expect="eol",t}$_SyntaxError(t,"token "+e+" after "+t);case"func_arg_id":switch(e){case"=":if("="==t.expect){t.has_default=!0;var A=t.parent.parent;return t.parent.has_star_arg?A.default_list.push(A.after_star.pop()):A.default_list.push(A.positional_list.pop()),new $AbstractExprCtx(t,!1)}break;case",":case")":if(!t.parent.has_default||0!=t.tree.length||void 0!==t.parent.has_star_arg)return $transition(t.parent,e);$pos-=t.name.length,$_SyntaxError(t,["non-default argument follows default argument"]);case":":return t.has_default&&$_SyntaxError(t,"token "+e+" after "+t),new $AbstractExprCtx(new $AnnotationCtx(t),!1)}$_SyntaxError(t,"token "+e+" after "+t);case"func_args":switch(e){case"id":return"id"==t.expect&&(t.expect=",",t.names.indexOf(r)>-1&&$_SyntaxError(t,["duplicate argument "+r+" in function definition"])),new $FuncArgIdCtx(t,r);case",":if(t.has_kw_arg&&$_SyntaxError(t,"duplicate kw arg"),","==t.expect)return t.expect="id",t;$_SyntaxError(t,"token "+e+" after "+t);case")":return t.parent;case"op":c=r;if(t.expect=",","*"==c)return t.has_star_arg&&$_SyntaxError(t,"duplicate star arg"),new $FuncStarArgCtx(t,"*");if("**"==c)return new $FuncStarArgCtx(t,"**");$_SyntaxError(t,"token "+c+" after "+t)}$_SyntaxError(t,"token "+e+" after "+t);case"func_star_arg":switch(e){case"id":return void 0===t.name&&t.parent.names.indexOf(r)>-1&&$_SyntaxError(t,["duplicate argument "+r+" in function definition"]),t.set_name(r),t.parent.names.push(r),t;case",":case")":return void 0===t.name&&(t.set_name("$dummy"),t.parent.names.push("$dummy")),$transition(t.parent,e);case":":return void 0===t.name&&$_SyntaxError(t,"annotation on an unnamed parameter"),new $AbstractExprCtx(new $AnnotationCtx(t),!1)}$_SyntaxError(t,"token "+e+" after "+t);case"global":switch(e){case"id":if("id"==t.expect)return new $IdCtx(t,r),t.add(r),t.expect=",",t;break;case",":if(","==t.expect)return t.expect="id",t;break;case"eol":if(","==t.expect)return $transition(t.parent,e)}$_SyntaxError(t,"token "+e+" after "+t);case"id":switch(e){case"=":return"expr"==t.parent.type&&void 0!==t.parent.parent&&"call_arg"==t.parent.parent.type?new $AbstractExprCtx(new $KwArgCtx(t.parent),!1):$transition(t.parent,e,r);case"op":return $transition(t.parent,e,r);case"id":case"str":case"int":case"float":case"imaginary":"print"==t.value&&$_SyntaxError(t,["missing parenthesis in call to 'print'"]),$_SyntaxError(t,"token "+e+" after "+t)}if("async"==t.value)if("def"==e)return t.parent.parent.tree=[],(j=$transition(t.parent.parent,e,r)).async=!0,j;return $transition(t.parent,e,r);case"import":switch(e){case"id":if("id"==t.expect)return new $ImportedModuleCtx(t,r),t.expect=",",t;if("qual"==t.expect)return t.expect=",",t.tree[t.tree.length-1].name+="."+r,t.tree[t.tree.length-1].alias+="."+r,t;if("alias"==t.expect)return t.expect=",",t.tree[t.tree.length-1].alias=r,t;break;case".":if(","==t.expect)return t.expect="qual",t;break;case",":if(","==t.expect)return t.expect="id",t;break;case"as":if(","==t.expect)return t.expect="alias",t;break;case"eol":if(","==t.expect)return t.bind_names(),$transition(t.parent,e)}$_SyntaxError(t,"token "+e+" after "+t);case"imaginary":case"int":case"float":switch(e){case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case"not":case"lamdba":$_SyntaxError(t,"token "+e+" after "+t)}return $transition(t.parent,e,r);case"kwarg":return","==e?new $CallArgCtx(t.parent.parent):$transition(t.parent,e);case"lambda":if(":"==e&&void 0===t.args)return t.args=t.tree,t.tree=[],t.body_start=$pos,new $AbstractExprCtx(t,!1);if(void 0!==t.args)return t.body_end=$pos,$transition(t.parent,e);if(void 0===t.args)return $transition(new $CallCtx(t),e,r);$_SyntaxError(t,"token "+e+" after "+t);case"list_or_tuple":if(t.closed)return"["==e?new $AbstractExprCtx(new $SubCtx(t.parent),!1):"("==e?new $CallCtx(t.parent):$transition(t.parent,e,r);if(","==t.expect){switch(t.real){case"tuple":case"gen_expr":if(")"==e)return t.closed=!0,"gen_expr"==t.real&&t.intervals.push($pos),t.parent;break;case"list":case"list_comp":if("]"==e)return t.closed=!0,"list_comp"==t.real&&t.intervals.push($pos),t;break;case"dict_or_set_comp":if("}"==e)return t.intervals.push($pos),$transition(t.parent,e)}switch(e){case",":return"tuple"==t.real&&(t.has_comma=!0),t.expect="id",t;case"for":"list"==t.real?t.real="list_comp":t.real="gen_expr",t.intervals=[t.start+1],t.expression=t.tree,t.tree=[];l=new $ComprehensionCtx(t);return new $TargetListCtx(new $CompForCtx(l))}return $transition(t.parent,e,r)}if("id"!=t.expect)return $transition(t.parent,e,r);switch(t.real){case"tuple":if(")"==e)return t.closed=!0,t.parent;if("eol"==e&&!0===t.implicit)return t.closed=!0,$transition(t.parent,e);break;case"gen_expr":if(")"==e)return t.closed=!0,$transition(t.parent,e);break;case"list":if("]"==e)return t.closed=!0,t}switch(e){case"=":if("tuple"==t.real&&!0===t.implicit)return t.closed=!0,t.parent.tree.pop(),(u=new $ExprCtx(t.parent,"tuple",!1)).tree=[t],t.parent=u,$transition(t.parent,e);break;case")":break;case"]":if("tuple"==t.real&&!0===t.implicit)return $transition(t.parent,e,r);break;case",":$_SyntaxError(t,"unexpected comma inside list");default:t.expect=",";u=new $AbstractExprCtx(t,!1);return $transition(u,e,r)}case"list_comp":switch(e){case"]":return t.parent;case"in":return new $ExprCtx(t,"iterable",!0);case"if":return new $ExprCtx(t,"condition",!0)}$_SyntaxError(t,"token "+e+" after "+t);case"node":switch(e){case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case"not":case"lamdba":case".":u=new $AbstractExprCtx(t,!0);return $transition(u,e,r);case"op":switch(r){case"*":case"+":case"-":case"~":u=new $AbstractExprCtx(t,!0);return $transition(u,e,r)}break;case"async":return new $AsyncCtx(t);case"await":var k=new $AbstractExprCtx(new $YieldCtx(t,!0),!0);return $transition(k,"from");case"class":return new $ClassCtx(t);case"continue":return new $ContinueCtx(t);case"__debugger__":return new $DebuggerCtx(t);case"break":return new $BreakCtx(t);case"def":return new $DefCtx(t);case"for":return new $TargetListCtx(new $ForExpr(t));case"if":case"while":return new $AbstractExprCtx(new $ConditionCtx(t,e),!1);case"elif":var N=$previous(t);return-1!=["condition"].indexOf(N.type)&&"while"!=N.token||$_SyntaxError(t,"elif after "+N.type),new $AbstractExprCtx(new $ConditionCtx(t,e),!1);case"else":N=$previous(t);return-1==["condition","except","for"].indexOf(N.type)&&$_SyntaxError(t,"else after "+N.type),new $SingleKwCtx(t,e);case"finally":N=$previous(t);return-1!=["try","except"].indexOf(N.type)||"single_kw"==N.type&&"else"==N.token||$_SyntaxError(t,"finally after "+N.type),new $SingleKwCtx(t,e);case"try":return new $TryCtx(t);case"except":N=$previous(t);return-1==["try","except"].indexOf(N.type)&&$_SyntaxError(t,"except after "+N.type),new $ExceptCtx(t);case"assert":return new $AbstractExprCtx(new $AssertCtx(t),"assert",!0);case"from":return new $FromCtx(t);case"import":return new $ImportCtx(t);case"global":return new $GlobalCtx(t);case"nonlocal":return new $NonlocalCtx(t);case"lambda":return new $LambdaCtx(t);case"pass":return new $PassCtx(t);case"raise":return new $AbstractExprCtx(new $RaiseCtx(t),!0);case"return":return new $AbstractExprCtx(new $ReturnCtx(t),!0);case"with":return new $AbstractExprCtx(new $WithCtx(t),!1);case"yield":return new $AbstractExprCtx(new $YieldCtx(t),!0);case"del":return new $AbstractExprCtx(new $DelCtx(t),!0);case"@":return new $DecoratorCtx(t);case"eol":return 0==t.tree.length?(t.node.parent.children.pop(),t.node.parent.C):t}console.log("syntax error","token",e,"after",t),$_SyntaxError(t,"token "+e+" after "+t);case"not":switch(e){case"in":return t.parent.parent.tree.pop(),new $ExprCtx(new $OpCtx(t.parent,"not_in"),"op",!1);case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case".":case"not":case"lamdba":u=new $AbstractExprCtx(t,!1);return $transition(u,e,r);case"op":if("+"==r||"-"==r||"~"==r){u=new $AbstractExprCtx(t,!1);return $transition(u,e,r)}}return $transition(t.parent,e);case"op":var F;if(void 0===t.op&&$_SyntaxError(t,["C op undefined "+t]),"unary"==t.op.substr(0,5)&&"eol"!=e)if("assign"==t.parent.type||"return"==t.parent.type)return t.parent.tree.pop(),(F=new $ListOrTupleCtx(t.parent,"tuple")).tree.push(t),t.parent=F,F;switch(e){case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case".":case"not":case"lamdba":return $transition(new $AbstractExprCtx(t,!1),e,r);case"op":switch(r){case"+":case"-":case"~":return new $UnaryCtx(t,r)}default:"abstract_expr"==t.tree[t.tree.length-1].type&&$_SyntaxError(t,"token "+e+" after "+t)}return $transition(t.parent,e);case"packed":if("id"==e)return new $IdCtx(t,r),t.parent.expect=",",t.parent;if("["==e)return t.parent.expect=",",new $ListOrTupleCtx(t,r);console.log("syntax error",t,e),$_SyntaxError(t,"token "+e+" after "+t);case"pass":if("eol"==e)return t.parent;$_SyntaxError(t,"token "+e+" after "+t);case"raise":switch(e){case"id":if(0==t.tree.length)return new $IdCtx(new $ExprCtx(t,"exc",!1),r);break;case"from":if(t.tree.length>0)return new $AbstractExprCtx(t,!1);break;case"eol":return $transition(t.parent,e)}$_SyntaxError(t,"token "+e+" after "+t);case"return":return $transition(t.parent,e);case"single_kw":if(":"==e)return $BodyCtx(t);$_SyntaxError(t,"token "+e+" after "+t);case"slice":return":"==e?new $AbstractExprCtx(t,!1):$transition(t.parent,e,r);case"star_arg":switch(e){case"id":return"target_list"==t.parent.type?(t.tree.push(r),t.parent.expect=",",t.parent):$transition(new $AbstractExprCtx(t,!1),e,r);case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case"not":case"lamdba":return $transition(new $AbstractExprCtx(t,!1),e,r);case",":case")":return $transition(t.parent,e);case":":if("lambda"==t.parent.parent.type)return $transition(t.parent.parent,e)}$_SyntaxError(t,"token "+e+" after "+t);case"str":switch(e){case"[":return new $AbstractExprCtx(new $SubCtx(t.parent),!1);case"(":return t.parent.tree[0]=t,new $CallCtx(t.parent);case"str":return t.tree.push(r),t}return $transition(t.parent,e,r);case"sub":switch(e){case"id":case"imaginary":case"int":case"float":case"str":case"bytes":case"[":case"(":case"{":case".":case"not":case"lamdba":u=new $AbstractExprCtx(t,!1);return $transition(u,e,r);case"]":return t.parent;case":":return new $AbstractExprCtx(new $SliceCtx(t),!1);case",":return new $AbstractExprCtx(t,!1)}console.log("syntax error",t,e),$_SyntaxError(t,"token "+e+" after "+t);case"target_list":switch(e){case"id":if("id"==t.expect)return t.expect=",",new $IdCtx(new $ExprCtx(t,"target",!1),r);case"op":if("id"==t.expect&&"*"==r)return new $PackedCtx(t);case"(":case"[":if("id"==t.expect)return t.expect=",",new $TargetListCtx(t);case")":case"]":if(","==t.expect)return t.parent;case",":if(","==t.expect)return t.expect="id",t}if(","==t.expect)return $transition(t.parent,e,r);if("in"==e)return $transition(t.parent,e,r);$_SyntaxError(t,"token "+e+" after "+t);case"ternary":return"else"==e?(t.in_else=!0,new $AbstractExprCtx(t,!1)):$transition(t.parent,e,r);case"try":if(":"==e)return $BodyCtx(t);$_SyntaxError(t,"token "+e+" after "+t);case"unary":switch(e){case"int":case"float":case"imaginary":u=t.parent;return t.parent.parent.tree.pop(),"-"==t.op?r="-"+r:"~"==t.op&&(r=~r),$transition(t.parent.parent,e,r);case"id":t.parent.parent.tree.pop();u=new $ExprCtx(t.parent.parent,"call",!1);var S=new $ExprCtx(u,"id",!1);new $IdCtx(S,r);b=new $AttrCtx(u);return"+"==t.op?b.name="__pos__":"-"==t.op?b.name="__neg__":b.name="__invert__",S;case"op":if("+"==r||"-"==r)return t.op===r?t.op="+":t.op="-",t}return $transition(t.parent,e,r);case"with":switch(e){case"id":if("id"==t.expect)return t.expect="as",$transition(new $AbstractExprCtx(t,!1),e,r);if("alias"==t.expect)return void 0!==t.parenth?t.expect=",":t.expect=":",t.set_alias(r),t;break;case"as":return new $AbstractExprCtx(new $AliasCtx(t));case":":switch(t.expect){case"id":case"as":case":":return $BodyCtx(t)}break;case"(":if("id"==t.expect&&0==t.tree.length)return t.parenth=!0,t;if("alias"==t.expect)return t.expect=":",new $TargetListCtx(t,!1);break;case")":if(","==t.expect||"as"==t.expect)return t.expect=":",t;break;case",":if(void 0!==t.parenth&&void 0===t.has_alias&&(","==t.expect||"as"==t.expect))return t.expect="id",t;if("as"==t.expect)return t.expect="id",t;if(":"==t.expect)return t.expect="id",t}$_SyntaxError(t,"token "+e+" after "+t.expect);case"yield":return"from"==e?("abstract_expr"!=t.tree[0].type&&$_SyntaxError(t,"'from' must follow 'yield'"),t.from=!0,$add_yield_from_code(t),t.tree[0]):$transition(t.parent,e)}};$B.forbidden=["alert","arguments","case","catch","constructor","Date","delete","default","document","enum","eval","extends","Error","history","function","length","location","Math","new","null","Number","RegExp","super","this","throw","var","window","toLocaleString","toString","message"],$B.aliased_names=$B.list2obj($B.forbidden);for(var s_escaped="abfnrtvxuU\"0123456789'\\",is_escaped={},i=0;i-1)$pos=b-g.length,a.indexOf(g)>-1&&$_SyntaxError(h,"Unsupported Python keyword '"+g+"'"),h=$transition(h,g);else if("string"==typeof $operators[g]){if("is"==g)null!==(C=(H=/^\s+not\s+/).exec(e.substr(b)))?(b+=C[0].length,$pos=b-g.length,h=$transition(h,"op","is_not")):($pos=b-g.length,h=$transition(h,"op",g));else if("not"==g){null!==(C=(H=/^\s+in\s+/).exec(e.substr(b)))?(b+=C[0].length,$pos=b-g.length,h=$transition(h,"op","not_in")):($pos=b-g.length,h=$transition(h,g))}else $pos=b-g.length,h=$transition(h,"op",g)}else{if(('"'==e.charAt(b)||"'"==e.charAt(b))&&-1!==["r","b","u","rb","br","f","fr","rf"].indexOf(g.toLowerCase())){y=g.toLowerCase(),g="";continue}$B.forbidden.indexOf(g)>-1&&(g="$$"+g),$pos=b-g.length,h=$transition(h,"id",g)}g="";continue}}switch(w){case" ":case"\t":b++;break;case".":if(b-1;)D++;h=$transition(h,"float","0"+e.substr(b,D-b)),b=D;break}$pos=b,h=$transition(h,"."),b++;break;case"0":if(C=c.exec(e.substr(b))){h=$transition(h,"int",[16,Q(C[1])]),b+=C[0].length;break}if(C=f.exec(e.substr(b))){h=$transition(h,"int",[8,Q(C[1])]),b+=C[0].length;break}if(C=p.exec(e.substr(b))){h=$transition(h,"int",[2,Q(C[1])]),b+=C[0].length;break}if(e.charAt(b+1).search(/\d/)>-1){if(0===parseInt(e.substr(b))){C=s.exec(e.substr(b)),$pos=b,h=$transition(h,"int",[10,Q(C[0])]),b+=C[0].length;break}$_SyntaxError(h,"invalid literal starting with 0")}case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":var C;(C=u.exec(e.substr(b)))||(C=l.exec(e.substr(b)))?($pos=b,h=void 0!==C[2]?$transition(h,"imaginary",Q(C[0].substr(0,C[0].length-1))):$transition(h,"float",Q(C[0]))):(C=s.exec(e.substr(b)),$pos=b,h=void 0!==C[1]?$transition(h,"imaginary",Q(C[0].substr(0,C[0].length-1))):$transition(h,"int",[10,Q(C[0])])),b+=C[0].length;break;case"\n":x++,n.length>0||(d.C.tree.length>0?($pos=b,h=$transition(h,"eol"),v=null,$=new $Node):$.line_num=x),b++;break;case"(":case"[":case"{":_[(n+=w).length-1]=[h,b],$pos=b,h=$transition(h,w),b++;break;case")":case"]":case"}":""==n?$_SyntaxError(h,"Unexpected closing bracket"):r[w]!=n.charAt(n.length-1)?$_SyntaxError(h,"Unbalanced bracket"):(n=n.substr(0,n.length-1),$pos=b,h=$transition(h,w),b++);break;case"=":"="!=e.charAt(b+1)?($pos=b,h=$transition(h,"="),b++):($pos=b,h=$transition(h,"op","=="),b+=2);break;case",":case":":$pos=b,h=$transition(h,w),b++;break;case";":$transition(h,"eol"),0==d.C.tree.length&&($pos=b,$_SyntaxError(h,"invalid syntax"));for(var j=b+1,A=!1;j":case"<":case"-":case"+":case"*":case"@":case"/":case"^":case"=":case"|":case"~":case"!":if("-"==w&&">"==e.charAt(b+1)){h=$transition(h,"annotation"),b+=2;continue}if("@"==w&&"node"==h.type){$pos=b,h=$transition(h,w),b++;break}var k="";for(var N in $operators)N==e.substr(b,N.length)&&N.length>k.length&&(k=N);$pos=b,k.length>0?(h=$transition(h,k in $augmented_assigns?"augm_assign":"op",k),b+=k.length):$_SyntaxError(h,"invalid character: "+w);break;case"\\":if("\n"==e.charAt(b+1)){x++,b+=2;break}default:$pos=b,$_SyntaxError(h,"unknown token ["+w+"]")}}else{var F,S="str"==h.type&&h.raw,O=!1,T=!1,I=null;if(y){switch(y){case"r":S=!0;break;case"u":break;case"b":O=!0;break;case"rb":case"br":O=!0,S=!0;break;case"f":T=!0,F=1;break;case"rf":T=!0,F=2,S=!0}y=!1}e.substr(b,3)==w+w+w?(m="triple_string",I=b+3):(m="string",I=b+1);for(var R=!1,M=w,J=!1;I0&&(v+=8-v%8)}}var X;if("\n"==(X=e.charAt(b))){b++,x++,v=null;continue}if("#"==X){var Z=e.substr(b).search(/\n/);if(-1==Z)break;b+=Z+1,x++,v=null;continue}if($.indent=v,$.line_num=x,$.module=B,v>d.indent)null!==h&&-1==o.indexOf(h.tree[0].type)&&($pos=b,$_SyntaxError(h,"unexpected indent",b)),d.add($);else if(v<=d.indent&&h&&h.tree[0]&&o.indexOf(h.tree[0].type)>-1&&h.tree.length<2)$pos=b,$_SyntaxError(h,"expected an indented block",b);else{for(;v!==d.indent;)(void 0===(d=d.parent)||v>d.indent)&&($pos=b,$_SyntaxError(h,"unexpected indent",b));d.parent.add($)}d=$,h=new $NodeCtx($)}function Q(t){return t.replace(/_/g,"")}}if(0!=n.length){var tt=_[0];$pos=tt[1],$_SyntaxError(tt[0],["Unbalanced bracket "+n.charAt(n.length-1)])}null!==h&&h.tree[0]&&o.indexOf(h.tree[0].type)>-1&&($pos=b-1,$_SyntaxError(h,"expected an indented block",b))},$create_root_node=$B.parser.$create_root_node=function(t,e,r,n,_){var i=new $Node("module");return i.module=e,i.id=r,i.binding={__doc__:!0,__name__:!0,__file__:!0,__package__:!0,__annotations__:!0},i.parent_block=n,i.line_info=_,i.indent=-1,i.comments=[],i.imports={},"object"==typeof t&&(i.is_comp=t.is_comp,t=t.src),i.src=t,i};$B.py2js=function(t,e,r,n,_){if("object"==typeof e){var i=e.__package__;e=e.__name__}else i="";n=n||$B.builtins_scope;var a=(new Date).getTime(),o=!1;"object"==typeof t&&(o=t.is_comp,t=t.src),"\n"!=(t=t.replace(/\r\n/gm,"\n")).charAt(t.length-1)&&(t+="\n");var s=Array.isArray(r);s&&(r=r[0]);var u="$"==r.charAt(0),l="$locals_"+r.replace(/\./g,"_"),c="$locals_"+e.replace(/\./g,"_");$B.$py_src[r]=t;var f=$create_root_node({src:t,is_comp:o},e,r,n,_);$tokenize(f,t),f.is_comp=o,f.transform();var p=1;(d=["var $B = __BRYTHON__;\n"])[p++]="var $bltns = __BRYTHON__.InjectBuiltins();eval($bltns);\n\n",d[2]="var ",s?d[2]+=l+" = $locals_"+e+", ":u||(d[2]+=l+' = $B.imported["'+r+'"] || {}, '),d[2]+="$locals = "+l+";";var h=0;f.insert(0,$NodeJS(d.join(""))),h++,f.insert(h++,$NodeJS(c+".$src = "+c+".$src || $B.$py_src['"+e+"']; delete $B.$py_src['"+e+"'];")),f.insert(h++,$NodeJS(l+'["__doc__"] = '+(f.doc_string||"None")+";")),f.insert(h++,$NodeJS(l+'["__name__"] = '+l+'["__name__"] || "'+r+'";')),f.insert(h++,$NodeJS(l+'["__package__"] = "'+i+'"')),f.insert(h++,$NodeJS("$locals.__annotations__ = _b_.dict.$factory()")),f.insert(h++,$NodeJS(l+'["__file__"] = "'+$B.$py_module_path[e]+'";None;\n')),void 0!==_&&f.insert(h++,$NodeJS(l+'.$line = "'+_+'";None;\n'));var $=h,d='var $top_frame = ["'+r.replace(/\./g,"_")+'", '+l+', "'+e.replace(/\./g,"_")+'", '+c+"]; $B.frames_stack.push($top_frame); var $stack_length = $B.frames_stack.length;";f.insert(h++,$NodeJS(d));var g=new $NodeJS("try"),m=f.children.slice($+1,f.children.length);f.insert($+1,g),0==m.length&&(m=[$NodeJS("")]),m.forEach((function(t){g.add(t)})),g.add($NodeJS("$B.leave_frame()")),f.children.splice($+2,f.children.length);var b=new $NodeJS("catch(err)");b.add($NodeJS("$B.leave_frame()")),b.add($NodeJS("throw err")),f.add(b),$B.profile>0&&$add_profile(f,null,e),$B.debug>0&&$add_line_num(f,null,e);var v=(new Date).getTime();return $B.debug>=2&&e==r&&console.log("module "+e+" translated in "+(v-a)+" ms"),$B.compile_time+=v-a,f};var brython=$B.parser.brython=function(t){void 0===$B.meta_path&&($B.meta_path=[]),$B.$options={},void 0===t&&(t={debug:0}),"number"==typeof t&&(t={debug:t}),void 0===t.debug&&(t.debug=0),$B.debug=t.debug,_b_.__debug__=$B.debug>0,$B.compile_time=0,void 0===t.profile&&(t.profile=0),$B.profile=t.profile,void 0===t.static_stdlib_import&&(t.static_stdlib_import=!0),$B.static_stdlib_import=t.static_stdlib_import,void 0!==t.open&&(_b_.open=t.open,console.log("DeprecationWarning: 'open' option of 'brython' function will be deprecated in future versions of Brython.")),$B.$options=t;var e=[],r=[];$B.use_VFS&&(e.push($B.$meta_path[0]),r.push($B.$path_hooks[0])),!1!==t.static_stdlib_import&&(e.push($B.$meta_path[1]),$B.path.length>3&&($B.path.shift(),$B.path.shift())),e.push($B.$meta_path[2]),$B.meta_path=e,r.push($B.$path_hooks[1]),$B.path_hooks=r;var n=($B.script_path=_window.location.href).split("/");if(n.pop(),isWebWorker&&n.pop(),$B.curdir=n.join("/"),void 0!==t.pythonpath&&($B.path=t.pythonpath,$B.$options.static_stdlib_import=!1),t.python_paths&&t.python_paths.forEach((function(t){var e,r;"string"!=typeof t&&(e=t.lang,r=t.prefetch,t=t.path),$B.path.push(t),".vfs.js"!=t.slice(-7).toLowerCase()||void 0!==r&&!0!==r||($B.path_importer_cache[t+"/"]=$B.imported._importlib.VFSPathFinder(t)),e&&a.optimize_import_for_path(t,e)})),!isWebWorker)for(var _,i=document.querySelectorAll("head link[rel~=pythonpath]"),a=$B.imported._importlib,o=0;_=i[o];++o){var s=_.href;-1!=(" "+_.rel+" ").indexOf(" prepend ")?$B.path.unshift(s):$B.path.push(s),".vfs.js"==s.slice(-7).toLowerCase()&&-1!=(" "+_.rel+" ").indexOf(" prefetch ")&&($B.path_importer_cache[s+"/"]=$B.imported._importlib.VFSPathFinder.$factory(s));var u=_.hreflang;u&&("x-"==u.slice(0,2)&&(u=u.slice(2)),a.optimize_import_for_path(_.href,u))}void 0!==t.re_module&&("pyre"!=t.re_module&&"jsre"!=t.re_module||($B.$options.re=t.re),console.log("DeprecationWarning: 're_module' option of 'brython' function will be deprecated in future versions of Brython.")),$B.$options.args?$B.__ARGV=$B.$options.args:$B.__ARGV=_b_.list.$factory([]),isWebWorker||_run_scripts(t)},idb_cx;function idb_load(t,e){var r=t.target.result;$B.timestamp;if($B.VFS_timestamp&&$B.VFS_timestamp>$B.timestamp&&($B.timestamp=$B.VFS_timestamp),void 0===r||r.timestamp!=$B.timestamp){if(void 0!==$B.VFS[e]){var n,_=($=$B.VFS[e])[0],i=$[1],a=4==$.length;if(".py"==_){if(a)n=e;else{var o=e.split(".");o.pop(),n=o.join(".")}$B.imported[e]=$B.module.$factory(e,"",n);try{var s=$B.py2js(i,e,e).to_js()}catch(t){throw handle_error(t),t}delete $B.imported[e];var u=$[2];u=u.join(","),$B.tasks.splice(0,0,[store_precompiled,e,s,u,a])}else console.log("bizarre",e,_)}}else if(r.is_package?$B.precompiled[e]=[r.content]:$B.precompiled[e]=r.content,r.imports.length>0)for(var l=r.imports.split(","),c=0;c1)for(var i in console.log(t),t)console.log(i+" : ",t[i]);void 0===t.$py_error&&(console.log("Javascript error",t),t=_b_.RuntimeError.$factory(t+"")),handle_error(t)}loop()}else e.apply(null,r)}else idb_cx&&idb_cx.result.close()};function handle_error(t){if(void 0!==t.__class__){var e=t.__class__.__name__,r=_b_.getattr(t,"info");if("SyntaxError"==e||"IndentationError"==e){var n=t.args[3];r+="\n "+" ".repeat(n)+"^\n"+e+": "+t.args[0]}else r+="\n"+e+": "+t.args}else console.log(t),r=t+"";try{_b_.getattr($B.stderr,"write")(r)}catch(t){console.log(r)}throw t}function required_stdlib_imports(t,e){for(var r=0,n=e=e||0;n1&&$log(n)}catch(t){handle_error(t)}if($B.hasOwnProperty("VFS")&&$B.has_indexedDB){var i=Object.keys(r.imports).slice().filter((function(t){return $B.VFS.hasOwnProperty(t)}));Object.keys(i).forEach((function(t){if($B.VFS.hasOwnProperty(t)){var e=$B.VFS[t],r=e[0];if(".py"==r){e[1];var n=e[2];e.length;".py"==r&&required_stdlib_imports(n),n.forEach((function(t){-1==i.indexOf(t)&&i.push(t)}))}}}));for(var a=0;a1&&$log(js),eval(js),$B.clear_ns(module_name),root=null,js=null}catch(t){if(root=null,js=null,console.log(t),$B.debug>1)for(var attr in console.log(t),t)console.log(attr+" : ",t[attr]);void 0===t.$py_error&&(console.log("Javascript error",t),t=_b_.RuntimeError.$factory(t+""));var $trace=_b_.getattr(t,"info")+"\n"+t.__name__+": "+t.args;try{_b_.getattr($B.stderr,"write")($trace)}catch(t){console.log($trace)}throw t}}else{$elts.length>0&&$B.has_indexedDB&&$B.hasOwnProperty("VFS")&&$B.tasks.push([$B.idb_open]);for(var defined_ids={},i=0;i<$elts.length;i++){var elt=$elts[i];if(elt.id){if(defined_ids[elt.id])throw Error("Brython error : Found 2 scripts with the same id '"+elt.id+"'");defined_ids[elt.id]=!0}}for(var scripts=[],i=0;i<$elts.length;i++){var elt=$elts[i];if("text/python"==elt.type||"text/python3"==elt.type){if(elt.id)module_name=elt.id;else for(first_script?(module_name="__main__",first_script=!1):module_name="__main__"+$B.UUID();void 0!==defined_ids[module_name];)module_name="__main__"+$B.UUID();var $src=null;if(elt.src)$B.tasks.push([ajax_load_script,{name:module_name,url:elt.src}]);else{var src=elt.innerHTML||elt.textContent;src=src.replace(/^\n/,""),$B.run_script(src,module_name)}}}}void 0===options.ipy_id&&$B.loop()};$B.$operators=$operators,$B.$Node=$Node,$B.$NodeJSCtx=$NodeJSCtx,$B.brython=brython}(__BRYTHON__);var brython=__BRYTHON__.brython;__BRYTHON__.builtins.object=function(t){var e=t.builtins,r={__name__:"object",$is_class:!0,$native:!0},n=["add","sub","mul","truediv","floordiv","mod","pow","lshift","rshift","and","xor","or"],_=["+","-","*","/","//","%","**","<<",">>","&","^","|"];return r.__delattr__=function(t,r){return e.getattr(t,r),delete t[r],e.None},r.__dir__=function(r){var n;if(r.$is_class)n=[r].concat(r.__mro__);else{var _=r.__class__||t.get_class(r);n=[r,_].concat(_.__mro__)}for(var i=[],a=0,o=n.length;a-1){var y="__r"+n[v]+"__",B=function(){try{if(t.get_class(arguments[0])===a)throw Error("");return e.getattr(arguments[0],y)(r)}catch(r){var n="unsupported operand types for "+_[v]+": '"+a.__name__+"' and '"+t.get_class(arguments[0]).__name__+"'";throw e.TypeError.$factory(n)}};return B.$infos={__name__:a.__name__+"."+i},B}}},r.__gt__=function(){return e.NotImplemented},r.__hash__=function(e){var r=e.__hashvalue__;return void 0!==r?r:e.__hashvalue__=t.$py_next_hash--},r.__init__=function(){if(0==arguments.length)throw e.TypeError.$factory("descriptor '__init__' of 'object' object needs an argument");return e.None},r.__le__=function(){return e.NotImplemented},r.__lt__=function(){return e.NotImplemented},r.__mro__=[],r.__new__=function(n,..._){if(void 0===n)throw e.TypeError.$factory("object.__new__(): not enough arguments");if(t.$getattr(n,"__init__")===r.__init__&&_.length>0)throw e.TypeError.$factory("object() takes no parameters");return{__class__:n}},r.__ne__=function(e,r){return!t.rich_comp("__eq__",e,r)},r.__reduce__=function(r){var n=[function(){console.log("reconstructor args",arguments),args=[];var e=arguments[0],r=t.$call(e).apply(null,args);return r}];n.push(e.tuple.$factory([r.__class__].concat(r.__class__.__mro__)));var _=e.dict.$factory();for(var i in r)_.$string_dict[i]=r[i];return n.push(_),console.log("reduce",n),e.tuple.$factory(n)},r.__repr__=function(t){return t===r?"":t.__class__===e.type?"":void 0!==t.__class__.__module__&&"builtins"!==t.__class__.__module__?"<"+t.__class__.__module__+"."+t.__class__.__name__+" object>":"<"+t.__class__.__name__+" object>"},r.__setattr__=function(n,_,i){if(void 0===i)throw e.TypeError.$factory("can't set attributes of built-in/extension type 'object'");if(n.__class__===r)throw void 0===r[_]?e.AttributeError.$factory("'object' object has no attribute '"+_+"'"):e.AttributeError.$factory("'object' object attribute '"+_+"' is read-only");return t.aliased_names[_]&&(_="$$"+_),n[_]=i,e.None},r.__setattr__.__get__=function(t){return function(e,n){r.__setattr__(t,e,n)}},r.__setattr__.__str__=function(){return"method object.setattr"},r.__str__=function(e){var r=t.$getattr(e,"__repr__");return t.$call(r)()},r.__subclasshook__=function(){return e.NotImplemented},r.$factory=function(){var t={__class__:r},e=[t].concat(Array.prototype.slice.call(arguments));return r.__init__.apply(null,e),t},t.set_func_names(r,"builtins"),t.make_class=function(t,n){var _={__class__:e.type,__mro__:[r],__name__:t,$is_class:!0};return _.$factory=n,_},r}(__BRYTHON__),function(t){var e=t.builtins;t.$class_constructor=function(r,n,_,i,a){var o;_=_||[];var s=n.__module__;void 0===s&&(s=t.last(t.frames_stack)[2]);for(var u=0;u<_.length;u++)if(void 0===_[u])throw t.line_info=n.$def_line,e.NameError.$factory("name '"+i[u]+"' is not defined");var l={},c={};if(a)for(u=0;u0&&_[0].__class__!==t.JSObject){o=_[0].__class__;for(u=1;u<_.length;u++){var b=_[u].__class__;if(b===o);else if(b.__bases__&&b.__bases__.indexOf(o)>-1)o=b;else if(o.__bases__&&-1==o.__bases__.indexOf(b))throw e.TypeError.$factory("metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases")}}else o=e.type;var v=t.$getattr(o,"__prepare__",e.None)(r,_),y=t.$getattr(v,"__getitem__"),B=t.$getattr(v,"__setitem__");for(var x in n)"$"==x.charAt(0)&&"$$"!=x.substr(0,2)||B(x,n[x]);d&&B("__orig_bases__",e.tuple.$factory($));for(var w={__name__:r.replace("$$",""),__bases__:_,__class__:o,__dict__:v},E=e.iter(v);;)try{w[f=e.next(E)]=y(f)}catch(t){break}w.__mro__=e.type.mro(w);var D=!0,C={},j={},A=[w].concat(w.__mro__);for(u=0;u0&&(h[s++]=_[a]);if(0==h.length)break;for(a=0;a-1&&(d[s++]=m)}if(!(d.length>0))break;$=null}if(null===$)throw e.TypeError.$factory("inconsistent hierarchy, no C3 MRO is possible");f[p++]=$;for(a=0;a<_.length;a++){_[a][0]===$&&_[a].shift()}}return f[f.length-1]!==e.object&&(f[p++]=e.object),f},r.__new__=function(e,n,_,i){for(var a={__class__:e,__name__:n.replace("$$",""),__bases__:_,__dict__:i,$is_class:!0,$has_setattr:i.$has_setattr},o=t.$dict_items(i),s=0;s"},r.__repr__=r.__str__=function(t){var e=t.__name__;return"builtins"!=t.__module__&&(e=t.__module__+"."+e),""},r.__getattribute__=function(r,_){switch(_){case"__class__":return r.__class__;case"__doc__":return r.__doc__||e.None;case"__setattr__":if(void 0!==r.__setattr__)var o=r.__setattr__;else o=function(t,e,r){t[e]=r};return n.$factory(_,r,o);case"__delattr__":return void 0!==r.__delattr__?r.__delattr__:n.$factory(_,r,(function(t){delete r[t]}))}if(void 0===(f=r[_])&&r.__slots__&&r.__slots__.indexOf(_)>-1)return i.$factory(_,r);if(void 0===f){if(void 0===(h=r[_]))for(var s=r.__mro__,u=0;u0))throw e.TypeError.$factory("__init_subclass__() takes no keyword arguments");return e.None},r.__instancecheck__=function(e,r){var n=r.__class__||t.get_class(r);if(n===e)return!0;for(var _=0;_0)throw e.TypeError.$factory("object() takes no parameters");return{__class__:r}};return i.__class__=t.Function,i.$infos={__name__:r.__name__,__module__:r.__module__},i};var i=t.make_class("member_descriptor",(function(t,e){return{__class__:i,cls:e,attr:t}}));i.__str__=i.__repr__=function(t){return""},t.set_func_names(i,"builtins");var a=t.make_class("method");a.__eq__=function(t,e){return void 0!==t.$infos&&void 0!==e.$infos&&t.$infos.__func__===e.$infos.__func__&&t.$infos.__self__===e.$infos.__self__},a.__ne__=function(e,r){return!t.method.__eq__(e,r)},a.__get__=function(e){var r=function(){return e(arguments)};return r.__class__=t.method_wrapper,r.$infos=a.$infos,r},a.__getattribute__=function(r,n){var _=r.$infos;if(_&&_[n]){if("__code__"==n){var i={__class__:t.Code};for(var n in _.__code__)i[n]=_.__code__[n];return i}return _[n]}return _&&_.__func__&&_.__func__.$infos&&_.__func__.$infos[n]?_.__func__.$infos[n]:e.object.__getattribute__(r,n)},a.__repr__=a.__str__=function(t){return""},t.method=a,t.set_func_names(a,"builtins"),e.object.__class__=r}(__BRYTHON__),function($B){var _b_=$B.builtins,_window=self,isWebWorker="undefined"!=typeof WorkerGlobalScope&&"function"==typeof importScripts&&navigator instanceof WorkerNavigator;function index_error(t){var e="string"==typeof t?"string":"list";throw _b_.IndexError.$factory(e+" index out of range")}$B.args=function(t,e,r,n,_,i,a,o){var s=!1,u=_.length;if(u>0&&_[u-1]&&_[u-1].$nat&&(u--,Object.keys(_[u].kw).length>0)){s=!0;var l=_[u].kw}if(a&&(r[a]=[],r[a].__class__=_b_.tuple),o&&(r[o]={__class__:_b_.dict,$numeric_dict:{},$object_dict:{},$string_dict:{},$str_hash:{},length:0}),u>e){if(null===a)throw d=t+"() takes "+e+" positional argument"+(e>1?"":"s")+" but more were given",_b_.TypeError.$factory(d);for(var c=e;c0){if(1==h.length)throw _b_.TypeError.$factory(t+" missing 1 positional argument: "+h[0]);var d=t+" missing "+h.length+" positional arguments: ";throw d+=h.join(" and "),_b_.TypeError.$factory(d)}return r},$B.wrong_nb_args=function(t,e,r,n){if(e1?"s":"")+": "+n.slice(e))}throw _b_.TypeError.$factory(t+"() takes "+r+" positional argument"+(r>1?"s":"")+" but more were given")},$B.get_class=function(t){if(null===t)return $B.$NoneDict;var e=t.__class__;if(void 0===e)switch(typeof t){case"number":return t%1==0?(t.__class__=_b_.int,_b_.int):(t.__class__=_b_.float,_b_.float);case"string":return t.__class__=_b_.str,_b_.str;case"boolean":return t.__class__=_b_.bool,_b_.bool;case"function":return t.__class__=$B.Function,$B.Function;case"object":if(Array.isArray(t)){if(Object.getPrototypeOf(t)===Array.prototype)return t.__class__=_b_.list,_b_.list}else if(t.constructor===Number)return _b_.float}return e},$B.$mkdict=function(t,e){var r={};for(var n in t)r[n]=t[n];for(var n in e)r[n]=e[n];return r},$B.$list_comp=function(t){for(var e=$B.UUID(),r="x"+e+"=[]\n",n=0,_=1,i=t.length;_-1&&void 0!==n[1][t])return n[1][t];if(e.indexOf(n[2])>-1&&void 0!==n[3][t])return n[3][t]}for(r=0;r=0;n--){if(void 0!==(r=$B.frames_stack[n][1][t]))return r;if(void 0!==(r=$B.frames_stack[n][3][t]))return r}throw _b_.NameError.$factory("free variable '"+t+"' referenced before assignment in enclosing scope")},$B.$check_def_free1=function(t,e){for(var r,n=$B.frames_stack.length-1;n>=0;n--){var _=$B.frames_stack[n];if(void 0!==(r=_[1][t]))return r;if(_[1].$parent&&void 0!==(r=_[1].$parent[t]))return r;if(_[2]==e&&void 0!==(r=_[3][t]))return r}throw _b_.NameError.$factory("free variable '"+t+"' referenced before assignment in enclosing scope")},$B.$JS2Py=function(t){if("number"==typeof t)return t%1==0?t:_b_.float.$factory(t);if(null==t)return _b_.None;var e=$B.get_class(t);if(void 0!==e)if(e===_b_.list)for(var r=0,n=t.length;r=0?0:t.length-1:(e=$B.$GetInt(e))<0&&(e=Math.min(0,e+t.length)),null===r?r=n>=0?t.length:-1:(r=$B.$GetInt(r))<0&&(r=Math.max(0,r+t.length));var _=[];if(n>0)for(var i=e;ir;i+=n)_.push(t[i]);return _},$B.$getitem=function(t,e){if("number"==typeof e&&(Array.isArray(t)||"string"==typeof t)){if(void 0!==t[e=e>=0?e:t.length+e])return t[e];index_error(t)}var r=$B.current_exception;try{e=$B.$GetInt(e)}catch(t){$B.current_exception=r}if((Array.isArray(t)||"string"==typeof t)&&"number"==typeof e){if(void 0!==t[e=e>=0?e:t.length+e])return t[e];index_error(t)}if(t.$is_class){var n=$B.$getattr(t,"__class_getitem__",_b_.None);if(n!==_b_.None)return n(e);if(t.__class__&&(n=$B.$getattr(t.__class__,"__getitem__",_b_.None))!==_b_.None)return n(t,e)}var _=$B.$getattr(t,"__getitem__",_b_.None);if(_!==_b_.None)return _(e);throw _b_.TypeError.$factory("'"+$B.get_class(t).__name__+"' object is not subscriptable")},$B.set_list_key=function(t,e,r){try{e=$B.$GetInt(e)}catch(_){if(_b_.isinstance(e,_b_.slice)){var n=_b_.slice.$conv_for_seq(e,t.length);return $B.set_list_slice_step(t,n.start,n.stop,n.step,r)}}if(e<0&&(e+=t.length),void 0===t[e])throw console.log(t,e),_b_.IndexError.$factory("list assignment index out of range");t[e]=r},$B.set_list_slice=function(t,e,r,n){null===e?e=0:(e=$B.$GetInt(e))<0&&(e=Math.max(0,e+t.length)),null===r&&(r=t.length),(r=$B.$GetInt(r))<0&&(r=Math.max(0,r+t.length));var _=_b_.list.$factory(n);t.splice.apply(t,[e,r-e].concat(_))},$B.set_list_slice_step=function(t,e,r,n,_){if(null===n||1==n)return $B.set_list_slice(t,e,r,_);if(0==n)throw _b_.ValueError.$factory("slice step cannot be zero");n=$B.$GetInt(n),null===e?e=n>0?0:t.length-1:(e=$B.$GetInt(e))<0&&(e=Math.min(0,e+t.length)),null===r?r=n>0?t.length:-1:(r=$B.$GetInt(r))<0&&(r=Math.max(0,r+t.length));var i,a=_b_.list.$factory(_),o=0,s=0;i=n>0?function(t){return tr};for(var u=e;i(u);u+=n)s++;if(s!=a.length)throw _b_.ValueError.$factory("attempt to assign sequence of size "+a.length+" to extended slice of size "+s);for(u=e;i(u);u+=n)t[u]=a[o],o++},$B.$setitem=function(t,e,r){if(!Array.isArray(t)||"number"!=typeof e||_b_.isinstance(t,_b_.tuple))t.__class__!==_b_.dict?_b_.getattr(t,"__setitem__")(e,r):_b_.dict.$setitem(t,e,r);else{if(e<0&&(e+=t.length),void 0===t[e])throw _b_.IndexError.$factory("list assignment index out of range");t[e]=r}},$B.augm_item_add=function(t,e,r){if(Array.isArray(t)&&"number"==typeof e&&void 0!==t[e]){if(Array.isArray(t[e])&&Array.isArray(r)){for(var n=0,_=r.length;n<_;n++)t[e].push(r[n]);return}if("string"==typeof t[e]&&"string"==typeof r)return void(t[e]+=r)}var i=_b_.getattr;try{var a=i(i(t,"__getitem__")(e),"__iadd__")}catch(n){return void i(t,"__setitem__")(e,i(i(t,"__getitem__")(e),"__add__")(r))}a(r)};for(var augm_item_src=""+$B.augm_item_add,augm_ops=[["-=","sub"],["*=","mul"]],i=0,len=augm_ops.length;i"},counter:-1};return r.__str__=r.toString=r.__repr__,r},$B.$iterator_class=function(name){var res={__class__:_b_.type,__name__:name,__module__:"builtins",__mro__:[_b_.object],$is_class:!0};function as_array(t){for(var e=[],r=0,n=_b_.iter(t),_=$B.current_exception;;)try{e[r++]=_b_.next(n)}catch(t){if(t.__class__===_b_.StopIteration){$B.current_exception=_;break}}return e}function as_list(t){return _b_.list.$factory(as_array(t))}function as_set(t){return _b_.set.$factory(as_array(t))}res.__eq__=function(t,e){return _b_.isinstance(e,[_b_.tuple,_b_.set,_b_.list])?_b_.getattr(as_list(t),"__eq__")(e):_b_.hasattr(e,"__iter__")?_b_.getattr(as_list(t),"__eq__")(as_list(e)):void _b_.NotImplementedError.$factory("__eq__ not implemented yet for list and "+_b_.type(e))};for(var _ops=["eq","ne"],_f=res.__eq__+"",i=0;i<_ops.length;i++){var _op="__"+_ops[i]+"__";eval("res."+_op+"="+_f.replace(new RegExp("__eq__","g"),_op))}res.__or__=function(t,e){return _b_.isinstance(e,[_b_.tuple,_b_.set,_b_.list])?_b_.getattr(as_set(t),"__or__")(e):_b_.hasattr(e,"__iter__")?_b_.getattr(as_set(t),"__or__")(as_set(e)):void _b_.NotImplementedError.$factory("__or__ not implemented yet for set and "+_b_.type(e))};for(var _ops=["sub","and","xor","gt","ge","lt","le"],_f=res.__or__+"",i=0;i<_ops.length;i++){var _op="__"+_ops[i]+"__";eval("res."+_op+"="+_f.replace(new RegExp("__or__","g"),_op))}return res};var ropnames=["add","sub","mul","truediv","floordiv","mod","pow","lshift","rshift","and","xor","or"],ropsigns=["+","-","*","/","//","%","**","<<",">>","&","^","|"];$B.make_rmethods=function(t){for(var e=0,r=ropnames.length;e0&&$B.$profile.return(),0!=$B.frames_stack.length?$B.frames_stack.pop():console.log("empty stack")},$B.leave_frame_exec=function(t){if($B.profile>0&&$B.$profile.return(),0!=$B.frames_stack.length)for(var e=$B.frames_stack.pop(),r=$B.frames_stack.length-1;r>=0;r--)$B.frames_stack[r][2]==e[2]&&($B.frames_stack[r][3]=e[3]);else console.log("empty stack")},$B.memory=function(){var t=[];for(var e in __BRYTHON__){var r=__BRYTHON__[e];null!==r&&(Array.isArray(r)?t.push([r.length,e]):"object"==typeof r&&t.push([Object.keys(r).length,e]))}t.sort((function(t,e){return t[0]-e[0]}));for(var n=0,_=t.length;n<_;n++)console.log(t[n][0],t[n][1],__BRYTHON__[t[n][1]])};var Profile=$B.make_class("profile",(function(){return{__class__:Profile}})),profile,call_times,call_stack,profile_start,active,paused,cumulated,$profile;Profile.__dir__=function(t){return Object.keys(t)},Profile.__getattribute__=function(t,e){return"__str__"==e?function(){var e=""}:$B.jsobj2pyobj(t[e])},$B.$profile_data=Profile.$factory(),$B.$profile=(profile=$B.$profile_data,call_times={},call_stack=[],profile_start=null,active=!1,paused=!1,cumulated=0,$profile={call:function(t,e,r,n){if($B.profile>1&&active){var _=new Date,i=function(t,e,r){return t+"."+e+":"+r}(t,e,r);i in call_times||(call_times[i]=[]),call_stack.length>0&&(in_func=call_stack[call_stack.length-1],func_stack=call_times[in_func],inner_most_call=func_stack[func_stack.length-1],inner_most_call[2]+=_-inner_most_call[3],n=n+":"+in_func),call_times[i].push([_,n,0,_]),call_stack.push(i)}},return:function(){if($B.profile>1&&active){var t=call_stack.pop();if(t in call_times){var e=new Date,r=call_times[t].pop();t_start=r[0],caller=r[1],t_duration=e-t_start,t_in_func=r[2]+e-r[3],t in profile.call_times||(profile.call_times[t]=0,profile.call_times_proper[t]=0,profile.call_counts[t]=0,profile.call_counts_norec[t]=0,profile.callers[t]={}),profile.call_times[t]+=t_duration,profile.call_times_proper[t]+=t_in_func,profile.call_counts[t]+=1,caller in profile.callers[t]||(profile.callers[t][caller]=[0,0,0,0]),function(t){for(var e=0;e0&&(in_func=call_stack[call_stack.length-1],func_stack=call_times[in_func],inner_most_call=func_stack[func_stack.length-1],inner_most_call[3]=new Date)}}},count:function(t,e){if(active){var r=function(t,e){return t+":"+e}(t,e);r in profile.line_counts||(profile.line_counts[r]=0),profile.line_counts[r]++}},pause:function(){active&&(elapsed=new Date-profile_start,cumulated+=elapsed,active=!1,paused=!0)},start:function(){$B.profile>0&&(paused?paused=!1:$B.$profile.clear(),active=!0,profile_start=new Date)},elapsed:function(){return active?cumulated+new Date-profile_start:cumulated},stop:function(){(active||paused)&&(profile.profile_duration=new Date-profile_start+cumulated,active=!1,paused=!1)},clear:function(){cumulated=0,profile.line_counts={},profile.call_times={},profile.call_times_proper={},profile.call_counts={},profile.call_counts_norec={},profile.callers={},active=!1,paused=!1},status:function(){return $B.profile<=0?"Disabled":active?"Collecting data: active":paused?"Collecting data: paused":"Stopped"}},$profile);var min_int=Math.pow(-2,53),max_int=Math.pow(2,53)-1;$B.is_safe_int=function(){for(var t=0;tmax_int)return!1}return!0},$B.add=function(t,e){var r="number"!=typeof t||"number"!=typeof e?new Number(t+e):t+e;return t>min_int&&tmin_int&&emin_int&&rmin_int&&tmin_int&&emin_int&&rmin_int&&tmin_int&&emin_int&&tmin_int&&emin_int&&rmin_int&&tmin_int&&emin_int&&rmin_int&&tmin_int&&emin_int&&r=e:"number"==typeof t&&"number"!=typeof e?!e.pos:"number"!=typeof t&&"number"==typeof e?!0===t.pos:$B.long_int.__ge__(t,e)},$B.gt=function(t,e){return"number"==typeof t&&"number"==typeof e?t>e:"number"==typeof t&&"number"!=typeof e?!e.pos:"number"!=typeof t&&"number"==typeof e?!0===t.pos:$B.long_int.__gt__(t,e)};var reversed_op={__lt__:"__gt__",__le__:"__ge__",__gt__:"__lt__",__ge__:"__le__"},method2comp={__lt__:"<",__le__:"<=",__gt__:">",__ge__:">="};$B.rich_comp=function(t,e,r){var n=e.valueOf(),_=r.valueOf();if("number"==typeof n&&"number"==typeof _&&void 0===e.__class__&&void 0===r.__class__)switch(t){case"__eq__":return n==_;case"__ne__":return n!=_;case"__le__":return n<=_;case"__lt__":return n<_;case"__ge__":return n>=_;case"__gt__":return n>_}var i,a,o=!1;if(e.$is_class||e.$factory){if("__eq__"==t)return e===r;if("__ne__"==t)return!(e===r);throw _b_.TypeError.$factory("'"+t+"' not supported between types")}if(e.__class__&&r.__class__&&r.__class__.__mro__.indexOf(e.__class__)>-1){if(a=reversed_op[t]||t,(i=_b_.getattr(r,a)(e))!==_b_.NotImplemented)return i;o=!0}if((i=$B.$call(_b_.getattr(e,t))(r))!==_b_.NotImplemented)return i;if(o)return!1;if(a=reversed_op[t]||t,(i=_b_.getattr(r,a)(e))!==_b_.NotImplemented)return i;if("__eq__"==t)return _b_.False;if("__ne__"==t)return _b_.True;throw _b_.TypeError.$factory("'"+method2comp[t]+"' not supported between instances of '"+$B.get_class(e).__name__+"' and '"+$B.get_class(r).__name__+"'")},$B.is_none=function(t){return null==t||t==_b_.None}}(__BRYTHON__),Array.indexOf||(Array.prototype.indexOf=function(t){for(var e=0,r=this.length;e1;)1&t&&(e+=r),t>>=1,r+=r;return e+r}),function($B){var bltns=$B.InjectBuiltins();eval(bltns),_b_.__debug__=!1;var object=_b_.object,odga=object.__getattribute__;function check_nb_args(t,e,r){if(r!=e)throw 0==e?_b_.TypeError.$factory(t+"() takes no argument ("+r+" given)"):_b_.TypeError.$factory(t+"() takes exactly "+e+" argument"+(e<2?"":"s")+" ("+r+" given)")}function check_no_kw(t,e,r){if(e.$nat||void 0!==r&&r.$nat)throw _b_.TypeError.$factory(t+"() takes no keyword arguments")}$B.$comps={">":"gt",">=":"ge","<":"lt","<=":"le"},$B.$inv_comps={">":"lt",">=":"le","<":"gt","<=":"ge"};var NoneType={__class__:_b_.type,__name__:"NoneType",__module__:"builtins",__mro__:[object],$is_class:!0,__setattr__:function(t,e){return no_set_attr(NoneType,e)}},None={__bool__:function(){return False},__class__:NoneType,__hash__:function(){return 0},__repr__:function(){return"None"},__str__:function(){return"None"},toString:function(){return"None"}};for(var $op in NoneType.$factory=function(){return None},$B.set_func_names(NoneType,"builtins"),$B.$comps){var key=$B.$comps[$op];switch(key){case"ge":case"gt":case"le":case"lt":NoneType["__"+key+"__"]=function(t){return function(e){throw _b_.TypeError.$factory("unorderable types: NoneType() "+t+" "+$B.get_class(e).__name__+"()")}}($op)}}for(var $func in None)"function"==typeof None[$func]&&(None[$func].__str__=function(t){return function(){return""}}($func));function abs(t){if(check_nb_args("abs",1,arguments.length),check_no_kw("abs",t),isinstance(t,_b_.int))return _b_.int.$factory(Math.abs(t));if(isinstance(t,_b_.float))return _b_.float.$factory(Math.abs(t));if(hasattr(t,"__abs__"))return getattr(t,"__abs__")();throw _b_.TypeError.$factory("Bad operand type for abs(): '"+$B.get_class(t)+"'")}function all(t){check_nb_args("all",1,arguments.length),check_no_kw("all",t);for(var e=iter(t),r=$B.current_exception;;)try{var n=next(e);if(!$B.$bool(n))return!1}catch(t){return $B.current_exception=r,!0}}function any(t){check_nb_args("any",1,arguments.length),check_no_kw("any",t);for(var e=iter(t),r=$B.current_exception;;)try{var n=next(e);if($B.$bool(n))return!0}catch(t){return $B.current_exception=r,!1}}function ascii(t){check_nb_args("ascii",1,arguments.length),check_no_kw("ascii",t);for(var e,r=repr(t),n="",_=0;_=0?r+n.toString(e):"-"+r+(-n).toString(e)}function bin(t){return check_nb_args("bin",1,arguments.length),check_no_kw("bin",t),isinstance(t,_b_.int)?$builtin_base_convert_helper(t,2):getattr(t,"__index__")()}function callable(t){return check_nb_args("callable",1,arguments.length),check_no_kw("callable",t),hasattr(t,"__call__")}function chr(t){if(check_nb_args("chr",1,arguments.length),check_no_kw("chr",t),t<0||t>1114111)throw _b_.ValueError.$factory("Outside valid range");return String.fromCharCode(t)}var classmethod=$B.make_class("classmethod",(function(t){check_nb_args("classmethod",1,arguments.length),check_no_kw("classmethod",t);var e=function(){return t.apply(null,arguments)};return e.__class__=$B.method,e.$infos={__func__:t,__name__:t.$infos.__name__},e.__get__=function(r,n){var _=function(){return e(n,...arguments)};return _.__class__=$B.method,_.$infos={__self__:n,__func__:e,__name__:t.$infos.__name__,__qualname__:n.__name__+"."+t.$infos.__name__},_},e.__get__.__class__=$B.method_wrapper,e.__get__.$infos=t.$infos,e}));$B.set_func_names(classmethod,"builtins");var code=$B.code=$B.make_class("code");function compile(){var t=$B.args("compile",6,{source:null,filename:null,mode:null,flags:null,dont_inherit:null,optimize:null},["source","filename","mode","flags","dont_inherit","optimize"],arguments,{flags:0,dont_inherit:!1,optimize:-1},null,null),e="$exec_"+$B.UUID();return $B.clear_ns(e),t.__class__=code,t.co_flags=t.flags,t}code.__repr__=code.__str__=function(t){return""},code.__getattr__=function(t,e){return"co_code"==e?"co_code":t[e]};var __debug__=$B.debug>0;function delattr(t,e){if(check_no_kw("delattr",t,e),check_nb_args("delattr",2,arguments.length),"string"!=typeof e)throw _b_.TypeError.$factory("attribute name must be string, not '"+$B.get_class(e).__name__+"'");var r=$B.get_class(t);if(void 0===(i=t[e])&&void 0===(i=r[e]))for(var n=r.__mro__,_=0;_"},__str__:function(){return""},counter:r-1};for(var _ in n)"function"==typeof n[_]&&"__class__"!==_&&(n[_].__str__=function(t){return function(){return""}}(_));return n}));function $$eval(src,_globals,_locals){void 0===_globals&&(_globals=_b_.None),void 0===_locals&&(_locals=_b_.None);var current_frame=$B.frames_stack[$B.frames_stack.length-1];if(void 0!==current_frame)var current_locals_id=current_frame[0].replace(/\./,"_"),current_globals_id=current_frame[2].replace(/\./,"_");var stack_len=$B.frames_stack.length,is_exec="exec"==arguments[3],leave=!1;if(src.__class__===code)is_exec="exec"==src.mode,src=src.source;else if("string"!=typeof src)throw _b_.TypeError.$factory("eval() arg 1 must be a string, bytes or code object");var globals_id="$exec_"+$B.UUID(),locals_id="$exec_"+$B.UUID(),parent_scope,ce=$B.current_exception;if(_globals===_b_.None){current_locals_id==current_globals_id&&(locals_id=globals_id);var local_scope={module:globals_id,id:current_locals_id,binding:{},bindings:{}};for(var attr in current_frame[1])local_scope.binding[attr]=!0,local_scope.bindings[attr]=!0;var global_scope={module:globals_id,id:current_globals_id,binding:{},bindings:{}};for(var attr in current_frame[3])global_scope.binding[attr]=!0,global_scope.bindings[attr]=!0;local_scope.parent_block=global_scope,global_scope.parent_block=$B.builtins_scope,parent_scope=local_scope,eval("$locals_"+parent_scope.id+" = current_frame[1]")}else{if(_globals.__class__!=_b_.dict)throw _b_.TypeError.$factory("exec() globals must be a dict, not "+_globals.__class__.__name__);if(_globals.globals_id=_globals.globals_id||globals_id,globals_id=_globals.globals_id,_locals===_globals||_locals===_b_.None)locals_id=globals_id,parent_scope=$B.builtins_scope;else{var grandparent_scope={id:globals_id,parent_block:$B.builtins_scope,binding:{}};for(var attr in parent_scope={id:locals_id,parent_block:grandparent_scope,binding:{}},_globals.$string_dict)grandparent_scope.binding[attr]=!0;for(var attr in _locals.$string_dict)parent_scope.binding[attr]=!0}}if($B.$py_module_path[globals_id]=$B.$py_module_path[current_globals_id],eval("var $locals_"+globals_id+" = {}\nvar $locals_"+locals_id+" = {}"),_globals===_b_.None){var gobj=current_frame[3],ex="";ex+="var $locals_"+current_globals_id+"=gobj;",ex+="var $locals_"+globals_id+"=gobj;",eval(ex)}else{if(_globals.$jsobj)var items=_globals.$jsobj;else var items=_globals.$string_dict;for(var item in items){var item1=$B.to_alias(item);try{eval("$locals_"+globals_id+'["'+item1+'"] = items[item]')}catch(t){console.log(t),console.log("error setting",item);break}}}if(_locals===_b_.None)if(_globals!==_b_.None)eval("var $locals_"+locals_id+" = $locals_"+globals_id);else{var lobj=current_frame[1],ex="";for(var attr in current_frame[1])ex+="$locals_"+locals_id+'["'+attr+'"] = current_frame[1]["'+attr+'"];';eval(ex)}else{if(_locals.$jsobj)var items=_locals.$jsobj;else var items=_locals.$string_dict;for(var item in items){var item1=$B.to_alias(item);try{eval("$locals_"+locals_id+'["'+item+'"] = items.'+item)}catch(t){console.log(t),console.log("error setting",item);break}}}$B.current_exception=ce;var root=$B.py2js(src,globals_id,locals_id,parent_scope),js,gns,lns;try{var try_node=root.children[root.children.length-2],instr=try_node.children[try_node.children.length-2],type=instr.C.tree[0].type;switch(type){case"expr":case"list_or_tuple":case"op":case"ternary":var children=try_node.children;root.children.splice(root.children.length-2,2);for(var i=0;i",1,1,src)}if(js=root.to_js(),is_exec){var locals_obj=eval("$locals_"+locals_id),globals_obj=eval("$locals_"+globals_id);if(_globals===_b_.None)var res=new Function("$locals_"+globals_id,"$locals_"+locals_id,js)(globals_obj,locals_obj);else{current_globals_obj=current_frame[3],current_locals_obj=current_frame[1];var res=new Function("$locals_"+globals_id,"$locals_"+locals_id,"$locals_"+current_globals_id,"$locals_"+current_locals_id,js)(globals_obj,locals_obj,current_globals_obj,current_locals_obj)}}else var res=eval(js);if(gns=eval("$locals_"+globals_id),$B.frames_stack[$B.frames_stack.length-1][2]==globals_id&&(gns=$B.frames_stack[$B.frames_stack.length-1][3]),_locals!==_b_.None)for(var attr in lns=eval("$locals_"+locals_id),lns){var attr1=$B.from_alias(attr);"$"!=attr1.charAt(0)&&(_locals.$jsobj?_locals.$jsobj[attr]=lns[attr]:_locals.$string_dict[attr1]=lns[attr])}else for(var attr in lns)current_frame[1][attr]=lns[attr];if(_globals!==_b_.None)for(var attr in gns)attr1=$B.from_alias(attr),"$"!=attr1.charAt(0)&&(_globals.$jsobj?_globals.$jsobj[attr]=gns[attr]:_globals.$string_dict[attr1]=gns[attr]);else for(var attr in gns)current_frame[3][attr]=gns[attr];return void 0===res?_b_.None:res}catch(t){if(t.src=src,t.module=globals_id,void 0===t.$py_error)throw $B.exception(t);throw t}finally{$B.frames_stack.length==stack_len+1&&$B.frames_stack.pop(),root=null,js=null,gns=null,lns=null,$B.clear_ns(globals_id),$B.clear_ns(locals_id)}}function exec(t,e,r){var n=$B.args("exec",3,{src:null,globals:null,locals:null},["src","globals","locals"],arguments,{globals:_b_.None,locals:_b_.None},null,null);return $$eval(t=n.src,e=n.globals,r=n.locals,"exec")||_b_.None}function exit(){throw _b_.SystemExit}$B.set_func_names(enumerate,"builtins"),$B.from_alias=function(t){return"$$"==t.substr(0,2)&&$B.aliased_names[t.substr(2)]?t.substr(2):t},$B.to_alias=function(t){return $B.aliased_names[t]?"$$"+t:t},$$eval.$is_func=!0,exec.$is_func=!0,exit.__repr__=exit.__str__=function(){return"Use exit() or Ctrl-Z plus Return to exit"};var filter=$B.make_class("filter",(function(t,e){return check_no_kw("filter",t,e),check_nb_args("filter",2,arguments.length),e=iter(e),t===_b_.None&&(t=$B.$bool),{__class__:filter,func:t,iterable:e}}));function format(t,e){var r=$B.args("format",2,{value:null,format_spec:null},["value","format_spec"],arguments,{format_spec:""},null,null),n=getattr(r.value,"__format__",null);if(null!==n)return n(r.format_spec);throw _b_.NotImplementedError("__format__ is not implemented for object '"+_b_.str.$factory(r.value)+"'")}function attr_error(t,e){var r="bad operand type for unary #: '"+e+"'";switch(t){case"__neg__":throw _b_.TypeError.$factory(r.replace("#","-"));case"__pos__":throw _b_.TypeError.$factory(r.replace("#","+"));case"__invert__":throw _b_.TypeError.$factory(r.replace("#","~"));case"__call__":throw _b_.TypeError.$factory("'"+e+"' object is not callable");default:for(;"$"==t.charAt(0);)t=t.substr(1);throw _b_.AttributeError.$factory("'"+e+"' object has no attribute '"+t+"'")}}function getattr(){var t={},e=$B.args("getattr",3,{obj:null,attr:null,_default:null},["obj","attr","_default"],arguments,{_default:t},null,null);return $B.$getattr(e.obj,e.attr,e._default===t?void 0:e._default)}function globals(){return check_nb_args("globals",0,arguments.length),$B.obj_dict($B.last($B.frames_stack)[3])}function hasattr(t,e){check_no_kw("hasattr",t,e),check_nb_args("hasattr",2,arguments.length);var r=$B.current_exception;try{return getattr(t,e),!0}catch(t){return $B.current_exception=r,!1}}function hash(t){if(check_no_kw("hash",t),check_nb_args("hash",1,arguments.length),void 0!==t.__hashvalue__)return t.__hashvalue__;if(isinstance(t,_b_.int))return t.valueOf();if(isinstance(t,_b_.bool))return _b_.int.$factory(t);if(t.$is_class||t.__class__===_b_.type||t.__class__===$B.Function)return t.__hashvalue__=$B.$py_next_hash--;if(void 0!==t.__hash__)return t.__hashvalue__=t.__hash__();var e=getattr(t,"__hash__",_b_.None);if(e==_b_.None)throw _b_.TypeError.$factory("unhashable type: '"+$B.get_class(t).__name__+"'","hash");if(void 0===e.$infos)return t.__hashvalue__=e();if(e.$infos.__func__===_b_.object.__hash__){if(getattr(t,"__eq__").$infos.__func__!==_b_.object.__eq__)throw _b_.TypeError.$factory("unhashable type: '"+$B.get_class(t).__name__+"'","hash");return _b_.object.__hash__(t)}return t.__hashvalue__=e()}function _get_builtins_doc(){if(void 0===$B.builtins_doc){var url=$B.brython_path;"/"==url.charAt(url.length-1)&&(url=url.substr(0,url.length-1)),url+="/builtins_docstrings.js";var f=_b_.open(url);eval(f.$content),$B.builtins_doc=docs}}function help(t){if(void 0===t&&(t="help"),"string"==typeof t&&void 0!==_b_[t]){_get_builtins_doc();var e=$B.builtins_doc[t];if(void 0!==e&&""!=e)return void _b_.print(e)}for(var r=0;r-1))return!0;var n=getattr(e,"__subclasscheck__",_b_.None);return n!=_b_.None&&n(t)}filter.__iter__=function(t){return t},filter.__next__=function(t){for(;;){var e=next(t.iterable);if(t.func(e))return e}},$B.set_func_names(filter,"builtins"),$B.$getattr=function(t,e,r){var n=e;$B.aliased_names[e]&&(e="$$"+e),void 0===t&&console.log("attr",e,"of obj undefined",$B.last($B.frames_stack));var _,i=t.$is_class||t.$factory,a=t.__class__,o=!1;if(void 0!==a&&a.__bases__&&0==a.__bases__.length){if(t.hasOwnProperty(e))return t[e];if(a.hasOwnProperty(e)&&"function"!=typeof a[e]&&"__dict__"!=e&&void 0===a[e].__get__)return a[e]}if(void 0===a&&(a="string"==typeof t?_b_.str:"number"==typeof t?t%1==0?_b_.int:_b_.float:t instanceof Number?_b_.float:$B.get_class(t)),void 0===a){if(t.hasOwnProperty(e))return"function"==typeof t[e]?function(){return t[e].apply(t,arguments)}:$B.$JS2Py(t[e]);if(void 0!==r)return r;throw _b_.AttributeError.$factory("object has no attribute "+n)}switch(e){case"__call__":if("function"==typeof t){var s=function(){return t.apply(null,arguments)};return s.__class__=method_wrapper,s.$infos={__name__:"__call__"},s}break;case"__class__":return a;case"__dict__":return $B.obj_dict(t);case"__doc__":for(var u=0;u";return void 0!==t.__self_class__?e+=", <"+t.__self_class__.__class__.__name__+" object>":e+=", NULL",e+">"},$B.set_func_names($$super,"builtins");var $Reader={__class__:_b_.type,__name__:"reader",__enter__:function(t){return t},__exit__:function(t){return!1},__iter__:function(t){return iter(t.$lines)},__len__:function(t){return t.lines.length}};$Reader.__mro__=[object],$Reader.close=function(t){t.closed=!0},$Reader.read=function(t,e){if(!0===t.closed)throw _b_.ValueError.$factory("I/O operation on closed file");return void 0===e?t.$content:(t.$counter+=e,t.$content.substr(t.$counter-e,e))},$Reader.readable=function(t){return!0},$Reader.readline=function(t,e){if(t.$lc=void 0===t.$lc?-1:t.$lc,!0===t.closed)throw _b_.ValueError.$factory("I/O operation on closed file");if(t.$lc==t.$lines.length-1)return t.$bin?_b_.bytes.$factory():"";t.$lc++;var r=t.$lines[t.$lc];return t.$counter+=t.$bin?r.source.length:r.length,r},$Reader.readlines=function(t,e){if(!0===t.closed)throw _b_.ValueError.$factory("I/O operation on closed file");return t.$lc=void 0===t.$lc?-1:t.$lc,t.$lines.slice(t.$lc+1)},$Reader.seek=function(t,e,r){if(t.closed===True)throw _b_.ValueError.$factory("I/O operation on closed file");void 0===r&&(r=0),0===r?t.$counter=e:1===r?t.$counter+=e:2===r&&(t.$counter=t.$content.length+e)},$Reader.seekable=function(t){return!0},$Reader.tell=function(t){return t.$counter},$Reader.writable=function(t){return!1};var $BufferedReader={__class__:_b_.type,__name__:"_io.BufferedReader"};$BufferedReader.__mro__=[$Reader,object];var $TextIOWrapper={__class__:_b_.type,__name__:"_io.TextIOWrapper"};function $url_open(){var $ns=$B.args("open",3,{file:null,mode:null,encoding:null},["file","mode","encoding"],arguments,{mode:"r",encoding:"utf-8"},"args","kw"),$res;for(var attr in $ns)eval("var "+attr+'=$ns["'+attr+'"]');if(args.length>0)var mode=args[0];if(args.length>1)var encoding=args[1];var is_binary=mode.search("b")>-1;if(is_binary)throw _b_.IOError.$factory("open() in binary mode is not supported");if(isinstance(file,$B.JSObject))return $B.OpenFile.$factory(file.js,mode,encoding);if(isinstance(file,_b_.str)){var req=new XMLHttpRequest;req.onreadystatechange=function(){try{var t=this.status;$res=404==t?_b_.IOError.$factory("File "+file+" not found"):200!=t?_b_.IOError.$factory("Could not open file "+file+" : status "+t):this.responseText}catch(t){$res=_b_.IOError.$factory("Could not open file "+file+" : error "+t)}};var fake_qs="?foo="+(new Date).getTime();if(req.open("GET",file+fake_qs,!1),req.overrideMimeType("text/plain; charset=utf-8"),req.send(),$res.constructor===Error)throw $res;for(var lines=$res.split("\n"),i=0;i"}}($func));$B.set_func_names(ellipsis);var FunctionCode=$B.make_class("function code"),FunctionGlobals=$B.make_class("function globals");$B.Function={__class__:_b_.type,__code__:{__class__:FunctionCode,__name__:"function code"},__globals__:{__class__:FunctionGlobals,__name__:"function globals"},__module__:"builtins",__mro__:[object],__name__:"function",$is_class:!0},$B.Function.__dir__=function(t){var e=t.$infos||{},r=t.$attrs||{};return Object.keys(e).concat(Object.keys(r))},$B.Function.__eq__=function(t,e){return t===e},$B.Function.__get__=function(t,e){if(e===_b_.None)return t;var r=function(){return t(e,...arguments)};return r.__class__=$B.method,r.$infos={__name__:t.$infos.__name__,__qualname__:e.__class__.__name__+"."+t.$infos.__name__,__self__:e,__func__:t},r},$B.Function.__getattribute__=function(t,e){if(t.$infos&&void 0!==t.$infos[e]){if("__code__"==e){var r={__class__:code};for(var e in t.$infos.__code__)r[e]=t.$infos.__code__[e];return r.name=t.$infos.__name__,r.filename=t.$infos.__code__.co_filename,r.co_code=t+"",r}return"__annotations__"==e?$B.obj_dict(t.$infos[e]):t.$infos[e]}return t.$attrs&&void 0!==t.$attrs[e]?t.$attrs[e]:_b_.object.__getattribute__(t,e)},$B.Function.__repr__=$B.Function.__str__=function(t){return""},$B.Function.__mro__=[object],$B.Function.__setattr__=function(t,e,r){void 0!==t.$infos[e]?t.$infos[e]=r:(t.$attrs=t.$attrs||{},t.$attrs[e]=r)},$B.Function.$factory=function(){},$B.set_func_names($B.Function,"builtins"),_b_.__BRYTHON__=__BRYTHON__,$B.builtin_funcs=["abs","all","any","ascii","bin","callable","chr","compile","delattr","dir","divmod","eval","exec","exit","format","getattr","globals","hasattr","hash","help","hex","id","input","isinstance","issubclass","iter","len","locals","max","min","next","oct","open","ord","pow","print","quit","repr","round","setattr","sorted","sum","vars"];var builtin_function=$B.builtin_function=$B.make_class("builtin_function_or_method");builtin_function.__repr__=builtin_function.__str__=function(t){return""},$B.set_func_names(builtin_function,"builtins");var method_wrapper=$B.make_class("method_wrapper");method_wrapper.__repr__=method_wrapper.__str__=function(t){return""},$B.set_func_names(method_wrapper,"builtins");var wrapper_descriptor=$B.make_class("wrapper_descriptor");wrapper_descriptor.__repr__=wrapper_descriptor.__str__=function(t){return""},$B.set_func_names(wrapper_descriptor,"builtins"),$B.builtin_classes=["bool","bytearray","bytes","classmethod","complex","dict","enumerate","filter","float","frozenset","int","list","map","memoryview","object","property","range","reversed","set","slice","staticmethod","str","super","tuple","type","zip"];for(var other_builtins=["Ellipsis","False","None","True","__debug__","__import__","copyright","credits","license","NotImplemented"],builtin_names=$B.builtin_funcs.concat($B.builtin_classes).concat(other_builtins),i=0;i-1&&(_b_[name].__class__=builtin_function,_b_[name].$infos={__module__:"builtins",__name__:orig_name})}catch(t){}}_b_.open=$url_open,_b_.print=$print,_b_.$$super=$$super,_b_.object.__init__.__class__=wrapper_descriptor,_b_.object.__new__.__class__=builtin_function}(__BRYTHON__),function($B){var bltns=$B.InjectBuiltins();eval(bltns),$B.$raise=function(t){if(void 0===t){var e=$B.current_exception;if(void 0!==e)throw e;throw _b_.RuntimeError.$factory("No active exception to reraise")}throw isinstance(t,BaseException)?t:t.$is_class&&issubclass(t,BaseException)?$B.$call(t)():_b_.TypeError.$factory("exceptions must derive from BaseException")},$B.$syntax_err_line=function(t,e,r,n){var _={},i=1,a=$B.$py_src[e];e="$"==e.charAt(0)?"":e;if(void 0===a)console.log("no src for",e),t.$line_info=n+","+e,t.args=_b_.tuple.$factory([$B.$getitem(t.args,0),e,n,0,0]);else{for(var o={1:0},s=0,u=a.length;s";var _=n.split(","),i=$B.$py_src[_[1]];return void 0!==i?i.split("\n")[parseInt(_[0]-1)].trim():"";case"tb_next":return t.$stack.length<=2?None:traceback.$factory(t.exc,t.$stack.slice(0,t.$stack.length-2));default:return _b_.object.__getattribute__(traceback,e)}},$B.set_func_names(traceback,"builtins");var frame=$B.make_class("frame",(function(t,e){var r=t,n={__class__:frame,f_builtins:{},$stack:t};if(void 0===e&&(e=r.length-1),n.$pos=e,r.length){var _=r[e],i=_[0];try{n.f_locals=$B.obj_dict(_[1])}catch(t){throw console.log("err "+t),t}n.f_globals=$B.obj_dict(_[3]),void 0===_[1].$line_info?n.f_lineno=-1:n.f_lineno=parseInt(_[1].$line_info.split(",")[0]),n.f_code={__class__:$B.code,co_code:None,co_name:i,co_filename:_[3].__name__},void 0===n.f_code.co_filename&&(console.log(_[0],_[1],_[2],_[3]),alert("no cofilename"))}return n}));frame.__getattr__=function(t,e){if("f_back"==e&&t.$pos>0)return frame.$factory(t.$stack,t.$pos-1)},$B.set_func_names(frame,"builtins"),$B._frame=frame;var BaseException=_b_.BaseException={__class__:_b_.type,__bases__:[_b_.object],__module__:"builtins",__mro__:[_b_.object],__name__:"BaseException",args:[],$is_class:!0};BaseException.__init__=function(t){var e=void 0===arguments[1]?[]:[arguments[1]];t.args=_b_.tuple.$factory(e)},BaseException.__repr__=function(t){return t.__class__.__name__+repr(t.args)},BaseException.__str__=function(t){return t.args.length>0?_b_.str.$factory(t.args[0]):t.__class__.__name__},BaseException.__new__=function(t){var e=_b_.BaseException.$factory();return e.__class__=t,e};var getExceptionTrace=function(t,e){if(void 0===t.__class__)return console.log("no class",t),t+"";var r=t.__class__.__name__;if("SyntaxError"==r||"IndentationError"==r)return'File "'+t.args[1]+'", line '+t.args[2]+"\n "+t.args[4];var n="";void 0!==t.$js_exc&&e&&(n+="\nJS stack:\n"+t.$js_exc.stack+"\n"),n+="Traceback (most recent call last):";for(var _=t.$line_info,i=0;i"),n+="\n module "+u+" line "+_[0],a.length>4&&a[4].$infos&&(n+=", in "+a[4].$infos.__name__),void 0!==s){var l=s.split("\n")[parseInt(_[0])-1];l&&(l=l.replace(/^[ ]+/g,"")),n+="\n "+l}else console.log("src undefined for",a[3])}}return n};function $make_exc(names,parent){for(var _str=[],pos=0,i=0;i";e.args=_b_.tuple.$factory([r]),e.$py_error=!0,e.$stack=$B.frames_stack.slice()}return $B.current_exception=e,e},$B.is_exc=function(t,e){void 0===t.__class__&&(t=$B.exception(t));for(var r=t.__class__,n=0;n_?e.stop:t.add(e.start,t.mul(e.step,r))}n.__contains__=function(e,r){if(0==n.__len__(e))return!1;try{r=t.int_or_bool(r)}catch(t){try{return n.index(e,r),!0}catch(t){return!1}}var _=t.sub(r,e.start),i=t.floordiv(_,e.step),a=t.mul(e.step,i);return!!t.eq(a,_)&&(t.gt(e.stop,e.start)?t.ge(r,e.start)&&t.gt(e.stop,r):t.ge(e.start,r)&&t.gt(r,e.stop))},n.__delattr__=function(t,r,n){throw e.AttributeError.$factory("readonly attribute")},n.__eq__=function(r,_){if(e.isinstance(_,n)){var i=n.__len__(r);return!!t.eq(i,n.__len__(_))&&(0==i||!!t.eq(r.start,_.start)&&(1==i||t.eq(r.step,_.step)))}return!1},n.__getitem__=function(r,i){if(e.isinstance(i,e.slice)){var a=e.slice.$conv_for_seq(i,n.__len__(r)),o=t.mul(r.step,a.step),s=_(r,a.start),u=_(r,a.stop);return n.$factory(s,u,o)}"number"!=typeof i&&(i=t.$GetInt(i)),t.gt(0,i)&&(i=t.add(i,n.__len__(r)));var l=t.add(r.start,t.mul(i,r.step));if(t.gt(r.step,0)&&(t.ge(l,r.stop)||t.gt(r.start,l))||t.gt(0,r.step)&&(t.ge(r.stop,l)||t.gt(l,r.start)))throw e.IndexError.$factory("range object index out of range");return l},n.__hash__=function(t){var _=n.__len__(t);return 0==_?e.hash(e.tuple.$factory([0,r,r])):1==_?e.hash(e.tuple.$factory([1,t.start,r])):e.hash(e.tuple.$factory([_,t.start,t.step]))};var i={__class__:e.type,__mro__:[e.object],__name__:"range_iterator",__iter__:function(t){return t},__next__:function(t){return e.next(t.obj)},$factory:function(t){return{__class__:i,obj:t}}};t.set_func_names(i,"builtins"),n.__iter__=function(e){var r={__class__:n,start:e.start,stop:e.stop,step:e.step};return e.$safe?r.$counter=e.start-e.step:r.$counter=t.sub(e.start,e.step),i.$factory(r)},n.__len__=function(e){var r;if(t.gt(e.step,0)){if(t.ge(e.start,e.stop))return 0;var n=t.sub(e.stop,t.add(1,e.start)),_=t.floordiv(n,e.step);r=t.add(1,_)}else{if(t.ge(e.stop,e.start))return 0;n=t.sub(e.start,t.add(1,e.stop)),_=t.floordiv(n,t.mul(-1,e.step));r=t.add(1,_)}return void 0===t.maxsize&&(t.maxsize=t.long_int.__pow__(t.long_int.$factory(2),63),t.maxsize=t.long_int.__sub__(t.maxsize,1)),r},n.__next__=function(r){if(r.$safe){if(r.$counter+=r.step,r.step>0&&r.$counter>=r.stop||r.step<0&&r.$counter<=r.stop)throw e.StopIteration.$factory("")}else if(r.$counter=t.add(r.$counter,r.step),t.gt(r.step,0)&&t.ge(r.$counter,r.stop)||t.gt(0,r.step)&&t.ge(r.stop,r.$counter))throw e.StopIteration.$factory("");return r.$counter},n.__reversed__=function(e){var r=t.sub(n.__len__(e),1);return n.$factory(t.add(e.start,t.mul(r,e.step)),t.sub(e.start,e.step),t.mul(-1,e.step))},n.__repr__=n.__str__=function(t){var r="range("+e.str.$factory(t.start)+", "+e.str.$factory(t.stop);return 1!=t.step&&(r+=", "+e.str.$factory(t.step)),r+")"},n.__setattr__=function(t,r,n){throw e.AttributeError.$factory("readonly attribute")},n.start=function(t){return t.start},n.step=function(t){return t.step},n.stop=function(t){return t.stop},n.count=function(r,_){if(e.isinstance(_,[e.int,e.float,e.bool]))return e.int.$factory(n.__contains__(r,_));for(var a=n.__iter__(r),o=i.__next__,s=0,u=t.current_exception;;)try{l=o(a),t.rich_comp("__eq__",_,l)&&s++}catch(r){if(e.isinstance(r,e.StopIteration))return t.current_exception=u,s;throw r}var l},n.index=function(r,_){var a=t.args("index",2,{self:null,other:null},["self","other"],arguments,{},null,null);r=a.self,_=a.other;try{_=t.int_or_bool(_)}catch(a){for(var o=function(e){return t.rich_comp("__eq__",_,e)},s=n.__iter__(r),u=i.__next__,l=0;;)try{if(o(u(s)))return l;l++}catch(t){if(e.isinstance(t,e.StopIteration))throw e.ValueError.$factory(e.str.$factory(_)+" not in range");throw t}}var c=t.sub(_,r.start),f=t.floordiv(c,r.step),p=t.mul(r.step,f);if(t.eq(p,c)){if(t.gt(r.stop,r.start)&&t.ge(_,r.start)&&t.gt(r.stop,_)||t.ge(r.start,r.stop)&&t.ge(r.start,_)&&t.gt(_,r.stop))return f;throw e.ValueError.$factory(e.str.$factory(_)+" not in range")}throw e.ValueError.$factory(e.str.$factory(_)+" not in range")},n.$factory=function(){var r=t.args("range",3,{start:null,stop:null,step:null},["start","stop","step"],arguments,{stop:null,step:null},null,null),_=r.start,i=r.stop,a=r.step;if(null===i&&null===a)return i=t.PyNumber_Index(_),{__class__:n,start:0,stop:i,step:1,$is_range:!0,$safe:"number"==typeof i};if(null===a&&(a=1),_=t.PyNumber_Index(_),i=t.PyNumber_Index(i),0==(a=t.PyNumber_Index(a)))throw e.ValueError.$factory("range.$factory() arg 3 must not be zero");return{__class__:n,start:_,stop:i,step:a,$is_range:!0,$safe:"number"==typeof _&&"number"==typeof i&&"number"==typeof a}},t.set_func_names(n,"builtins");var a={__class__:e.type,__module__:"builtins",__mro__:[e.object],__name__:"slice",$is_class:!0,$native:!0,$descriptors:{start:!0,step:!0,stop:!0}};function o(r){for(var n=["start","stop","step"],_=[],i=0;i0){var i=e.min(_,r.stop);return e.tuple.$factory([r.start,i,r.step])}if(r.step==e.None){i=e.min(_,r.stop);var a=r.start;return a==e.None&&(a=0),e.tuple.$factory([a,i,1])}e.NotImplementedError.$factory("Error! negative step indices not implemented yet")},a.$factory=function(){var r,n,_,i=t.args("slice",3,{start:null,stop:null,step:null},["start","stop","step"],arguments,{stop:null,step:null},null,null);null===i.stop&&null===i.step?(r=e.None,n=i.start,_=e.None):(r=i.start,n=i.stop,_=null===i.step?e.None:i.step);var s={__class__:a,start:r,stop:n,step:_};return o(s),s},t.set_func_names(a,"builtins"),e.range=n,e.slice=a}(__BRYTHON__),function(t){var e=t.builtins,r=e.object,n=e.isinstance,_=e.getattr,i=e.None,a={},o={},s={__class__:e.type,__mro__:[r],__name__:"bytearray",$buffer_protocol:!0,$is_class:!0};["__delitem__","clear","copy","count","index","pop","remove","reverse","sort"].forEach((function(t){var r;s[t]=(r=t,function(t){for(var n=[t.source],_=1,i=1,a=arguments.length;i255)throw e.ValueError.$factory("byte must be in range(0, 256)");var o=_;if(_<0&&(o=r.source.length+o),!(o>=0&&o=0;c--){if(!n(l[c],e.int))throw e.TypeError.$factory("an integer is required");if(l[c]>255)throw ValueError.$factory("byte must be in range(0, 256)");r.source.splice(s,0,l[c])}}},s.append=function(t,r){if(2!=arguments.length)throw e.TypeError.$factory("append takes exactly one argument ("+(arguments.length-1)+" given)");if(!n(r,e.int))throw e.TypeError.$factory("an integer is required");if(r>255)throw ValueError.$factory("byte must be in range(0, 256)");t.source[t.source.length]=r},s.insert=function(t,r,_){if(3!=arguments.length)throw e.TypeError.$factory("insert takes exactly 2 arguments ("+(arguments.length-1)+" given)");if(!n(_,e.int))throw e.TypeError.$factory("an integer is required");if(_>255)throw ValueError.$factory("byte must be in range(0, 256)");e.list.insert(t.source,r,_)},s.$factory=function(t,e,r){return s.__new__(s,t,e,r)};var l={__class__:e.type,__mro__:[r],__name__:"bytes",$buffer_protocol:!0,$is_class:!0,__add__:function(t,r){if(n(r,l))return t.source=t.source.concat(r.source),t;if(n(r,s))return t.__class__.$factory(l.__add__(t,l.$factory(r)));if(n(r,e.memoryview))return t.__class__.$factory(l.__add__(t,e.memoryview.tobytes(r)));throw e.TypeError.$factory("can't concat bytes to "+e.str.$factory(r))}},c=t.$iterator_class("bytes_iterator");function f(t,r,_){if(void 0===r){r=[];for(var i="\r\n \t",a=0,o=i.length;a=0&&-1!=r.indexOf(t.source[a]);a--);return l.$factory(t.source.slice(0,a+1))}l.__iter__=function(e){return t.$iterator(e.source,c)},l.__eq__=function(t,e){return _(t.source,"__eq__")(e.source)},l.__ge__=function(t,r){return e.list.__ge__(t.source,r.source)},l.__getitem__=function(t,r){if(n(r,e.int)){var a=r;if(r<0&&(a=t.source.length+a),a>=0&&a0)var s=r.start===i?0:r.start,u=r.stop===i?_(t.source,"__len__")():r.stop;else s=r.start===i?_(t.source,"__len__")()-1:r.start,u=r.stop===i?0:r.stop;s<0&&(s=t.source.length+s),u<0&&(u=t.source.length+u);var c=[],f=null;a=0;if(o>0){if((u=Math.min(u,t.source.length))<=s)return l.$factory([]);for(f=s;f=s)return l.$factory([]);u=Math.max(0,u);for(f=s;f>=u;f+=o)c[a++]=t.source[f]}return l.$factory(c)}if(n(r,bool))return t.source.__getitem__(e.int.$factory(r))},l.__gt__=function(t,r){return e.list.__gt__(t.source,r.source)},l.__hash__=function(e){if(void 0===e)return l.__hashvalue__||t.$py_next_hash--;for(var r=1,n=0,_=e.source.length;n<_;n++)r=101*r+e.source[n]&4294967295;return r},l.__init__=function(){return e.None},l.__le__=function(t,r){return e.list.__le__(t.source,r.source)},l.__len__=function(t){return t.source.length},l.__lt__=function(t,r){return e.list.__lt__(t.source,r.source)},l.__mul__=function(){for(var e=t.args("__mul__",2,{self:null,other:null},["self","other"],arguments,{},null,null),r=t.PyNumber_Index(e.other),n=l.$factory(),_=0;_255)throw e.ValueError.$factory("bytes must be in range(0, 256)")}}return s.source=u,s.encoding=i,s.errors=o,s},l.__repr__=l.__str__=function(t){for(var e="b'",r=0,n=t.source.length;r=128){var i=_.toString(16);e+="\\x"+(i=(1==i.length?"0":"")+i)}else e+=String.fromCharCode(_)}return e+"'"},l.__reduce_ex__=function(t){return l.__repr__(t)},l.decode=function(t,r,n){switch(void 0===r&&(r="utf-8"),void 0===n&&(n="strict"),n){case"strict":case"ignore":case"replace":case"surrogateescape":case"xmlcharrefreplace":case"backslashreplace":return function(t,r,n){var _="",i=g(r);switch(i){case"utf_8":case"utf-8":case"utf8":case"U8":case"UTF":for(var s=0,u=d("800"),l=d("c2"),c=d("1000"),f=d("e0"),p=d("e1"),b=d("e3"),v=d("a0"),y=d("80"),B=d("2000");s=0?r.count:i.length;if(!r.old.__class__)throw e.TypeError.$factory("first argument must be a bytes-like object, not '"+t.get_class(r.old).__name__+"'");if(!r.old.__class__.$buffer_protocol)throw e.TypeError.$factory("first argument must be a bytes-like object, not '"+r.sep.__class__.__name__+"'");if(!r.new.__class__)throw e.TypeError.$factory("second argument must be a bytes-like object, not '"+t.get_class(r.old).__name__+"'");if(!r.new.__class__.$buffer_protocol)throw e.TypeError.$factory("second argument must be a bytes-like object, not '"+r.sep.__class__.__name__+"'");for(var c=0;c_)&&n.push(l.$factory(s.slice(_,i))),n},l.lstrip=function(t,e){return f(t,e,"l")},l.rstrip=function(t,e){return f(t,e,"r")},l.startswith=function(){var r=t.args("startswith",3,{self:null,prefix:null,start:null},["self","prefix","start"],arguments,{start:0},null,null),n=r.start;if(e.isinstance(r.prefix,l)){for(var _=!0,i=0;i-1||(a[o++]=_.source[r.source[s]]);return l.$factory(a)};function p(t,r,n){throw e.UnicodeEncodeError.$factory("'"+t+"' codec can't encode character "+e.hex(r)+" in position "+n)}function h(t,r){throw e.UnicodeDecodeError.$factory("'"+t+"' codec can't decode bytes in position "+r)}function $(t){return t.toString(16)}function d(t){return parseInt(t,16)}function g(t){var e=t.toLowerCase();return"windows"==e.substr(0,7)&&(e="cp"+e.substr(7)),e=(e=e.replace("-","")).replace("-","_")}function m(t){if(void 0===a[t]){var r=e.__import__("encodings."+t)[t].decoding_table;a[t]={};for(var n=0;n=97&&e<=122?e-32:e);return l.$factory(r)},l.lower=function(t){for(var e,r=[],n=0,_=0,i=t.source.length;_=65&&e<=90?e+32:e);return l.$factory(r)},l.$factory=function(t,e,r){return l.__new__(l,t,e,r)},l.__class__=e.type,l.$is_class=!0,l)void 0===s[b]&&"function"==typeof l[b]&&(s[b]=function(t){return function(){return l[t].apply(null,arguments)}}(b));t.set_func_names(l,"builtins"),t.set_func_names(s,"builtins"),e.bytes=l,e.bytearray=s}(__BRYTHON__),function($B){var bltns=$B.InjectBuiltins();eval(bltns);var object=_b_.object,_window=self,JSConstructor={__class__:_b_.type,__module__:"",__mro__:[object],__name__:"JSConstructor",$is_class:!0,__call__:function(t){return function(){for(var e=[null],r=0,n=arguments.length;r-1)return t.elt;if([_b_.list,_b_.tuple].indexOf(e)>-1){var r=[];return t.forEach((function(t){r.push(pyobj2jsobj(t))})),r}if(e===_b_.dict){var n={};return _b_.list.$factory(_b_.dict.items(t)).forEach((function(t){"function"==typeof t[1]&&t[1].bind(n),n[t[0]]=pyobj2jsobj(t[1])})),n}return e===$B.builtins.float?t.valueOf():e===$B.Function||e===$B.method?function(){try{for(var e=[],r=0;r0?t.args[0]:""),t}}:t}},JSObject={__class__:_b_.type,__module__:"",__mro__:[object],__name__:"JSObject",__bool__:function(t){return new Boolean(t.js).valueOf()},__delattr__:function(t,e){return _b_.getattr(t,e),delete t.js[e],_b_.None},__dir__:function(t){return Object.keys(t.js)},__getattribute__:function(t,e){if("$$"==e.substr(0,2)&&(e=e.substr(2)),null===t.js)return object.__getattribute__(None,e);if("__class__"==e)return JSObject;if("__call__"==e){if("function"==typeof t.js)return function(){for(var e=[],r=0;r"},n.__str__=function(){return""},n.prototype=r.prototype,{__class__:JSObject,js:n,js_func:r}}return $B.$JS2Py(r)}if(t.js===_window&&"$$location"===e)return $Location();if(void 0===(n=t.__class__[e]))for(var _=t.__class__.__mro__,i=0,a=_.length;i"}return""},JSObject.__setattr__=function(t,e,r){e.substr&&"$$"==e.substr(0,2)&&(e=e.substr(2)),isinstance(r,JSObject)?t.js[e]=r.js:(t.js[e]=r,"function"==typeof r&&(t.js[e]=function(){for(var t=[],e=0,n=arguments.length;e0?t.toString=function(){return _+"\n"+t.__class__.__name__+": "+_b_.repr(t.args[0])}:t.toString=function(){return _+"\n"+t.__class__.__name__},console.log(t+""),t}}))},JSObject.__setitem__=JSObject.__setattr__,JSObject.__str__=JSObject.__repr__;var no_dict={string:!0,function:!0,number:!0,boolean:!0};JSObject.bind=function(t,e,r){return t.js.addEventListener(e,(function(t){return r(jsobj2pyobj(t))})),_b_.None},JSObject.to_dict=function(t){return $B.obj_dict(t.js)},JSObject.$factory=function(t){if(null===t)return _b_.None;if("function"==typeof t)return{__class__:JSObject,js:t,js_func:t};var e=$B.get_class(t);return e===_b_.float?_b_.float.$factory(t):void 0!==e?t:{__class__:JSObject,js:t}},$B.JSObject=JSObject,$B.JSConstructor=JSConstructor}(__BRYTHON__),function(t){t.stdlib={};for(var e=["VFS_import","__future__","_abcoll","_codecs","_collections","_collections_abc","_csv","_dummy_thread","_functools","_imp","_io","_markupbase","_py_abc","_random","_socket","_sre","_string","_strptime","_struct","_sysconfigdata","_testcapi","_thread","_threading_local","_warnings","_weakref","_weakrefset","abc","antigravity","argparse","atexit","base64","bdb","binascii","bisect","calendar","cmath","cmd","code","codecs","codeop","colorsys","configparser","Clib","copy","copyreg","csv","dataclasses","datetime","decimal","difflib","doctest","enum","errno","external_import","fnmatch","formatter","fractions","functools","gc","genericpath","getopt","gettext","glob","heapq","imp","inspect","io","ipaddress","itertools","keyword","linecache","locale","marshal","numbers","opcode","operator","optparse","os","pdb","pickle","platform","posix","posixpath","pprint","profile","pwd","pydoc","queue","re","reprlib","select","shutil","signal","site","site-packages.__future__","site-packages.docs","site-packages.header","site-packages.test_sp","socket","sre_compile","sre_constants","sre_parse","stat","string","struct","subprocess","sys","sysconfig","tarfile","tempfile","test.namespace_pkgs.module_and_namespace_package.a_test","textwrap","this","threading","time","timeit","token","tokenize","traceback","turtle","types","typing","uuid","warnings","weakref","webbrowser","zipfile","zlib"],r=0;r-1?"":""},"builtins"!=r.name&&(n.__file__=e);return $B.imported[r.__name__]=n,!0}function show_ns(){for(var kk=Object.keys(_window),i=0,len=kk.length;i1&&js.split("\n").forEach((function(t,e){console.log(e+1,":",t)})),t)console.log(attr,t[attr]);throw console.log(_b_.getattr(t,"info","[no info]")),console.log("message: "+t.$message),console.log("filename: "+t.fileName),console.log("linenum: "+t.lineNumber),$B.debug>0&&console.log("line info "+$B.line_info),t}finally{root=null,js=null,$B.clear_ns(module.__name__)}try{var mod=eval("$module");for(var attr in mod)module[attr]=mod[attr];return module.__initializing__=!1,$B.imported[module.__name__]=module,!0}catch(t){for(var attr in console.log(t+" for module "+module.__name__),t)console.log(attr+" "+t[attr]);throw $B.debug>0&&console.log("line info "+__BRYTHON__.line_info),t}}function new_spec(t){return t.__class__=module,t}module.__init__=function(){},module.__new__=function(t,e,r,n){return{__class__:t,__name__:e,__doc__:r||_b_.None,__package__:n||_b_.None}},module.__repr__=module.__str__=function(t){return""},module.__setattr__=function(t,e,r){"__builtins__"==t.__name__?$B.builtins[e]=r:t[e]=r},module.$factory=function(t,e,r){return{__class__:module,__name__:t,__doc__:e||_b_.None,__package__:r||_b_.None}},$B.set_func_names(module,"builtins"),$B.$download_module=$download_module,$B.run_py=run_py;var finder_VFS={__class__:_b_.type,__mro__:[_b_.object],__name__:"VFSFinder",create_module:function(t,e){return _b_.None},exec_module:function(t,e){var r=e.__spec__.loader_state.stored;delete e.__spec__.loader_state;var n=r[0],_=r[1];r[2];e.$is_package=r[3]||!1;var i=$B.brython_path+"Lib/"+e.__name__;if(e.$is_package&&(i+="/__init__.py"),e.__file__=i,".js"==n)run_js(_,e.__path__,e);else{if($B.precompiled.hasOwnProperty(e.__name__)){for(var a=e.__name__.split("."),o=0;o",$B.imported[s].__package__=s;else{var c=s.split(".");c.pop(),$B.imported[s].__package__=c.join(".")}try{u+="return $locals_"+s.replace(/\./g,"_");var f=new Function(u)()}catch(t){for(var p in console.log(u),console.log(t),t)console.log(p,t[p]);throw console.log(Object.keys($B.imported)),t}for(var h in f)$B.imported[s][h]=f[h];o>0&&$B.builtins.setattr($B.imported[a.slice(0,o).join(".")],a[o],f)}}return f}console.log("run Python code from VFS",e.__name__),run_py(_,e.__path__,e,".pyc.js"==n)}$B.debug>1&&console.log("import "+e.__name__+" from VFS")},find_module:function(t,e,r){return{__class__:Loader,load_module:function(e,r){var n=t.find_spec(t,e,r),_=module.$factory(e);$B.imported[e]=_,_.__spec__=n,t.exec_module(t,_)}}},find_spec:function(t,e,r,n){if(!$B.use_VFS)return _b_.None;var _=$B.VFS[e];if(void 0===_)return _b_.None;var i=_[3]||!1;return new_spec({name:e,loader:t,origin:$B.builtin_module_names.indexOf(e)>-1?"built-in":"brython_stdlib",submodule_search_locations:i?[]:_b_.None,loader_state:{stored:_},cached:_b_.None,parent:i?e:parent_package(e),has_location:_b_.False})}};for(var method in $B.set_func_names(finder_VFS,""),finder_VFS)"function"==typeof finder_VFS[method]&&(finder_VFS[method]=_b_.classmethod.$factory(finder_VFS[method]));finder_VFS.$factory=function(){return{__class__:finder_VFS}};var finder_stdlib_static={$factory:finder_stdlib_static,__class__:_b_.type,__mro__:[_b_.object],__name__:"StdlibStatic",create_module:function(t,e){return _b_.None},exec_module:function(t,e){var r=e.__spec__.loader_state;e.$is_package=r.is_package,"py"==r.ext?import_py(e,r.path,e.__package__):import_js(e,r.path),delete e.__spec__.loader_state},find_module:function(t,e,r){var n=t.find_spec(t,e,r);return n===_b_.None?_b_.None:{__class__:Loader,load_module:function(e,r){var _=module.$factory(e);$B.imported[e]=_,_.__spec__=n,_.__package__=n.parent,t.exec_module(t,_)}}},find_spec:function(t,e,r,n){if($B.stdlib&&$B.$options.static_stdlib_import){var _=$B.stdlib[e];if(void 0===_){var i=e.split(".");if(i.length>1){i.pop();var a=$B.stdlib[i.join(".")];a&&a[1]&&(_=["py"])}}if(void 0!==_){var o=_[0],s=void 0!==_[1],u={ext:o,is_package:s,path:(r=$B.brython_path+("py"==o?"Lib/":"libs/")+e.replace(/\./g,"/"))+(s?"/__init__.py":"py"==o?".py":".js"),address:_};return new_spec({name:e,loader:t,origin:u.path,submodule_search_locations:s?[r]:_b_.None,loader_state:u,cached:_b_.None,parent:s?e:parent_package(e),has_location:_b_.True})}}return _b_.None}};for(var method in $B.set_func_names(finder_stdlib_static,""),finder_stdlib_static)"function"==typeof finder_stdlib_static[method]&&(finder_stdlib_static[method]=_b_.classmethod.$factory(finder_stdlib_static[method]));finder_stdlib_static.$factory=function(){return{__class__:finder_stdlib_static}};var finder_path={__class__:_b_.type,__mro__:[_b_.object],__name__:"ImporterPath",create_module:function(t,e){return _b_.None},exec_module:function(t,e){var r=_b_.getattr(e,"__spec__"),n=r.loader_state.code;e.$is_package=r.loader_state.is_package,delete r.loader_state.code;var _=r.loader_state.type;"py"==_||"pyc.js"==_?run_py(n,r.origin,e,"pyc.js"==_):"js"==r.loader_state.type&&run_js(n,r.origin,e)},find_module:function(t,e,r){return finder_path.find_spec(t,e,r)},find_spec:function(t,e,r,n){$B.is_none(r)&&(r=$B.path);for(var _=0,i=r.length;_"),finder_path)"function"==typeof finder_path[method]&&(finder_path[method]=_b_.classmethod.$factory(finder_path[method]));finder_path.$factory=function(){return{__class__:finder_path}};var vfs_hook={__class__:_b_.type,__mro__:[_b_.object],__name__:"VfsPathFinder",load_vfs:function(self){try{var code=$download_module({__name__:""},self.path)}catch(t){throw self.vfs=void 0,new _b_.ImportError.$factory(t.$message||t.message)}eval(code),code=null;try{self.vfs=$vfs}catch(t){throw new _b_.ImportError.$factory("Expecting $vfs var in VFS file")}$B.path_importer_cache[self.path+"/"]=self},find_spec:function(t,e,r){if(void 0===t.vfs)try{vfs_hook.load_vfs(t)}catch(t){return console.log("Could not load VFS while importing '"+e+"'"),_b_.None}t.__class__.vfs=t.vfs;var n=t.vfs[e];if(void 0===n)return _b_.None;var _=n[2];return new_spec({name:e,loader:finder_VFS,origin:t.path+"#"+e,submodule_search_locations:_?[t.path]:_b_.None,loader_state:{stored:n},cached:_b_.None,parent:_?e:parent_package(e),has_location:_b_.True})},invalidate_caches:function(t){t.vfs=void 0},$factory:function(t){if("/"==t.substr(-1)&&(t=t.slice(0,-1)),".vfs.js"!=t.substr(-7))throw _b_.ImportError.$factory("VFS file URL must end with .vfs.js extension");return self={__class__:vfs_hook,path:t},self}};$B.set_func_names(vfs_hook,"");var url_hook={__class__:_b_.type,__mro__:[_b_.object],__name__:"UrlPathFinder",__repr__:function(t){return""},find_spec:function(t,e,r){var n={},_=!0,i=t.hint,a=t.path_entry+e.match(/[^.]+$/g)[0],o=[],s=void 0===i;(s||"js"==i)&&(o=[[a+".js","js",!1]]),(s||"pyc.js"==i)&&(o=o.concat([[a+".pyc.js","pyc.js",!1],[a+"/__init__.pyc.js","pyc.js",!0]])),(s||"py"==i)&&(o=o.concat([[a+".py","py",!1],[a+"/__init__.py","py",!0]]));for(var u=0;_&&u"),$B.path_importer_cache={};for(var _sys_paths=[[$B.script_dir+"/","py"],[$B.brython_path+"Lib/","py"],[$B.brython_path+"Lib/site-packages/","py"],[$B.brython_path+"libs/","js"]],i=0;i<_sys_paths.length;++i){var _path=_sys_paths[i],_type=_path[1];_path=_path[0],$B.path_importer_cache[_path]=url_hook.$factory(_path,_type)}function optimize_import_for_path(t,e){"/"!=t.slice(-1)&&(t+="/");var r="none"==e?_b_.None:url_hook.$factory(t,e);$B.path_importer_cache[t]=r}delete _path,delete _type,delete _sys_paths,$B.$__import__=function(t,e,r,n,_){var i=$B.imported[t],a=t.split(".");if(i==_b_.None)throw _b_.ImportError.$factory(t);if(void 0===i){$B.is_none(n)&&(n=[]);for(var o=0,s="",u="",l=a.length-1,c=_b_.None;o<=l;++o){var f=u;if(u+=s+a[o],s=".",(i=$B.imported[u])==_b_.None)throw _b_.ImportError.$factory(u);if(void 0===i){try{$B.import_hooks(u,c,void 0)}catch(t){throw delete $B.imported[u],$B.imported[u]=null,t}if($B.is_none($B.imported[u]))throw _b_.ImportError.$factory(u);f&&_b_.setattr($B.imported[f],a[o],$B.imported[u])}if(o0?$B.imported[t]:$B.imported[a[0]]},$B.$import=function(t,e,r,n){var _=t.split(".");"."==t[t.length-1]&&_.pop();for(var i=[],a=!0,o=0,s=_.length;o"},$B.imported._importlib=_importlib_module}(__BRYTHON__),function($B){var bltns=$B.InjectBuiltins();eval(bltns);var object=_b_.object;function $err(t,e){var r="unsupported operand type(s) for "+t+": 'float' and '"+$B.get_class(e).__name__+"'";throw _b_.TypeError.$factory(r)}var float={__class__:_b_.type,__dir__:object.__dir__,__name__:"float",$is_class:!0,$native:!0,$descriptors:{numerator:!0,denominator:!0,imag:!0,real:!0}};function preformat(t,e){if(e.empty)return _b_.str.$factory(t);if(e.type&&-1=="eEfFgGn%".indexOf(e.type))throw _b_.ValueError.$factory("Unknown format code '"+e.type+"' for object of type 'float'");if(isNaN(t))return"f"==e.type||"g"==e.type?"nan":"NAN";if(t==Number.POSITIVE_INFINITY)return"f"==e.type||"g"==e.type?"inf":"INF";if(void 0===e.precision&&void 0!==e.type&&(e.precision=6),"%"==e.type&&(t*=100),"e"==e.type){var r=t.toExponential(e.precision),n=parseInt(r.substr(r.search("e")+1));return Math.abs(n)<10&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),r}if(void 0!==e.precision){var _=e.precision;if(0==_)return Math.round(t)+"";var i=(r=t.toFixed(_)).indexOf(".");if(void 0===e.type||"%"!=e.type&&"f"!=e.type.toLowerCase()){var a=t.toExponential(e.precision-1);((n=parseInt(a.substr(a.search("e")+1)))<-4||n>=e.precision-1)&&(r=a,Math.abs(n)<10&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)))}else if(-1==i)r+="."+"0".repeat(e.precision);else{var o=e.precision-r.length+i+1;o>0&&(r+="0".repeat(o))}}else r=_b_.str.$factory(t);if(void 0===e.type||-1!="gGn".indexOf(e.type)){for(;"0"==r.charAt(r.length-1);)r=r.substr(0,r.length-1);"."==r.charAt(r.length-1)&&(void 0===e.type?r+="0":r=r.substr(0,r.length-1))}return void 0!==e.sign&&(" "==e.sign||"+"==e.sign)&&t>0&&(r=e.sign+r),"%"==e.type&&(r+="%"),r}float.numerator=function(t){return t},float.denominator=function(t){return _b_.int.$factory(1)},float.imag=function(t){return _b_.int.$factory(0)},float.real=function(t){return t},float.__float__=function(t){return t},float.as_integer_ratio=function(t){if(t.valueOf()==Number.POSITIVE_INFINITY||t.valueOf()==Number.NEGATIVE_INFINITY)throw _b_.OverflowError.$factory("Cannot pass infinity to float.as_integer_ratio.");if(!Number.isFinite(t.valueOf()))throw _b_.ValueError.$factory("Cannot pass NaN to float.as_integer_ratio.");for(var e=_b_.$frexp(t.valueOf()),r=e[0],n=e[1],_=0;_<300&&r!=Math.floor(r);_++)r*=2,n--;return numerator=float.$factory(r),py_exponent=abs(n),denominator=1,py_exponent=_b_.getattr(_b_.int.$factory(denominator),"__lshift__")(py_exponent),n>0?numerator*=py_exponent:denominator=py_exponent,_b_.tuple.$factory([_b_.int.$factory(numerator),_b_.int.$factory(denominator)])},float.__bool__=function(t){return _b_.bool.$factory(t.valueOf())},float.__eq__=function(t,e){return(!isNaN(t)||!isNaN(e))&&(isinstance(e,_b_.int)?t==e:isinstance(e,float)?t.valueOf()==e.valueOf():isinstance(e,_b_.complex)?0==e.$imag&&t==e.$real:_b_.hasattr(e,"__eq__")?_b_.getattr(e,"__eq__")(t.value):t.value===e)},float.__floordiv__=function(t,e){if(isinstance(e,[_b_.int,float])){if(0==e.valueOf())throw ZeroDivisionError.$factory("division by zero");return float.$factory(Math.floor(t/e))}if(hasattr(e,"__rfloordiv__"))return getattr(e,"__rfloordiv__")(t);$err("//",e)},float.fromhex=function(t){if(!isinstance(t,_b_.str))throw _b_.ValueError.$factory("argument must be a string");var e,r=t.trim();switch(r.toLowerCase()){case"+inf":case"inf":case"+infinity":case"infinity":return $FloatClass(1/0);case"-inf":case"-infinity":return $FloatClass(-1/0);case"+nan":case"nan":return $FloatClass(Number.NaN);case"-nan":return $FloatClass(-Number.NaN);case"":throw _b_.ValueError.$factory("could not convert string to float")}if(null!==(e=/^(\d*\.?\d*)$/.exec(r)))return $FloatClass(parseFloat(e[1]));if(null==(e=/^(\+|-)?(0x)?([0-9A-F]+\.?)?(\.[0-9A-F]+)?(p(\+|-)?\d+)?$/i.exec(r)))throw _b_.ValueError.$factory("invalid hexadecimal floating-point string");var n=e[1],_=parseInt(e[3]||"0",16),i=e[4]||".0",a=e[5]||"p0";n="-"==n?-1:1;for(var o=_,s=1,u=i.length;s";var n=preformat(t,r).split("."),_=n[0];if(r.comma){for(var i=_.length,a=Math.ceil(_.length/3),o=[],s=0;s0?float.$factory(t):float.$factory(-t)},_b_.$frexp=function(t){var e=t;if(isinstance(t,float)&&(e=t.valueOf()),isNaN(e)||_b_.$isinf(e))return[e,-1];if(0==e)return[0,0];var r=1,n=0,_=e;for(_<0&&(r=-r,_=-_);_<.5;)_*=2,n--;for(;_>=1;)_*=.5,n++;return[_*=r,n]},_b_.$ldexp=function(t,e){if(_b_.$isninf(t))return float.$factory("-inf");if(_b_.$isinf(t))return float.$factory("inf");var r=t;if(isinstance(t,float)&&(r=t.valueOf()),0==r)return r;var n=e;return isinstance(e,float)&&(n=e.valueOf()),r*Math.pow(2,n)},float.hex=function(t){switch(t.valueOf()){case 1/0:case-1/0:case Number.NaN:case-Number.NaN:return t;case-0:return"-0x0.0p0";case 0:return"0x0.0p0"}var e=_b_.$frexp(_b_.$fabs(t.valueOf())),r=e[0],n=e[1],_=1-Math.max(-1021-n,0);r=_b_.$ldexp(r,_),n-=_;var i="0123456789ABCDEF".split(""),a=i[Math.floor(r)];a+=".",r-=Math.floor(r);for(var o=0;o<13;o++)r*=16,a+=i[Math.floor(r)],r-=Math.floor(r);var s="+";return n<0&&(s="-",n=-n),t.value<0?"-0x"+a+"p"+s+n:"0x"+a+"p"+s+n},float.__init__=function(t,e){return t.valueOf=function(){return e.valueOf()},t.toString=function(){return e+""},_b_.None},float.__int__=function(t){return parseInt(t)},float.is_integer=function(t){return _b_.int.$factory(t)==t},float.__mod__=function(t,e){if(0==e)throw ZeroDivisionError.$factory("float modulo");if(isinstance(e,_b_.int))return new Number((t%e+e)%e);if(isinstance(e,float)){var r=Math.floor(t/e);return new Number(t-e*r)}if(isinstance(e,bool)){var n=0;return e.valueOf()&&(n=1),new Number((t%n+n)%n)}if(hasattr(e,"__rmod__"))return getattr(e,"__rmod__")(t);$err("%",e)},float.__mro__=[object],float.__mul__=function(t,e){if(isinstance(e,_b_.int))return e.__class__==$B.long_int?new Number(t*parseFloat(e.value)):new Number(t*e);if(isinstance(e,float))return new Number(t*e);if(isinstance(e,bool)){var r=0;return e.valueOf()&&(r=1),new Number(t*r)}return isinstance(e,_b_.complex)?$B.make_complex(float.$factory(t*e.$real),float.$factory(t*e.$imag)):hasattr(e,"__rmul__")?getattr(e,"__rmul__")(t):void $err("*",e)},float.__ne__=function(t,e){return!float.__eq__(t,e)},float.__neg__=function(t,e){return float.$factory(-t)},float.__pos__=function(t){return t},float.__pow__=function(t,e){if(isinstance(e,_b_.int)||isinstance(e,float)){if(1==t)return t;if(0==e)return new Number(1);if(!(-1!=t||isFinite(e)&&e.__class__!==$B.long_int&&$B.is_safe_int(e)||isNaN(e)))return new Number(1);if(0==t&&isFinite(e)&&e<0)throw _b_.ZeroDivisionError.$factory("0.0 cannot be raised to a negative power");return t!=Number.NEGATIVE_INFINITY||isNaN(e)?t!=Number.POSITIVE_INFINITY||isNaN(e)?e!=Number.NEGATIVE_INFINITY||isNaN(t)?e!=Number.POSITIVE_INFINITY||isNaN(t)?t<0&&!_b_.getattr(e,"__eq__")(_b_.int.$factory(e))?_b_.complex.__pow__($B.make_complex(t,0),e):float.$factory(Math.pow(t,e)):Math.abs(t)<1?new Number(0):Number.POSITIVE_INFINITY:Math.abs(t)<1?Number.POSITIVE_INFINITY:new Number(0):e>0?t:new Number(0):e<0&&e%2==1?new Number(-0):e<0?new Number(0):e>0&&e%2==1?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY}if(isinstance(e,_b_.complex)){var r=Math.pow(t,e.$real),n=Math.log(t);return $B.make_complex(r*Math.cos(n),r*Math.sin(n))}if(hasattr(e,"__rpow__"))return getattr(e,"__rpow__")(t);$err("** or pow()",e)},float.__repr__=float.__str__=function(t){if(t===float)return"";if(t.valueOf()==1/0)return"inf";if(t.valueOf()==-1/0)return"-inf";if(isNaN(t.valueOf()))return"nan";var e=t.valueOf()+"";return-1==e.indexOf(".")&&(e+=".0"),_b_.str.$factory(e)},float.__setattr__=function(t,e,r){if(t.constructor===Number)throw void 0===float[e]?_b_.AttributeError.$factory("'float' object has no attribute '"+e+"'"):_b_.AttributeError.$factory("'float' object attribute '"+e+"' is read-only");return t[e]=r,$N},float.__truediv__=function(t,e){if(isinstance(e,[_b_.int,float])){if(0==e.valueOf())throw ZeroDivisionError.$factory("division by zero");return float.$factory(t/e)}if(isinstance(e,_b_.complex)){var r=e.$real*e.$real+e.$imag*e.$imag;if(0==r)throw ZeroDivisionError.$factory("division by zero");return $B.make_complex(float.$factory(t*e.$real/r),float.$factory(-t*e.$imag/r))}if(hasattr(e,"__rtruediv__"))return getattr(e,"__rtruediv__")(t);$err("/",e)};var $op_func=function(t,e){if(isinstance(e,_b_.int))return"boolean"==typeof e?e?t-1:t:e.__class__===$B.long_int?float.$factory(t-parseInt(e.value)):float.$factory(t-e);if(isinstance(e,float))return float.$factory(t-e);if(isinstance(e,bool)){var r=0;return e.valueOf()&&(r=1),float.$factory(t-r)}return isinstance(e,_b_.complex)?$B.make_complex(t-e.$real,-e.$imag):hasattr(e,"__rsub__")?getattr(e,"__rsub__")(t):void $err("-",e)};$op_func+="";var $ops={"+":"add","-":"sub"};for(var $op in $ops){var $opf=$op_func.replace(/-/gm,$op);$opf=$opf.replace(/__rsub__/gm,"__r"+$ops[$op]+"__"),eval("float.__"+$ops[$op]+"__ = "+$opf)}var $comp_func=function(t,e){if(isinstance(e,_b_.int))return e.__class__===$B.long_int?t>parseInt(e.value):t>e.valueOf();if(isinstance(e,float))return t>e;if(isinstance(e,bool))return t.valueOf()>bool.__hash__(e);if(hasattr(e,"__int__")||hasattr(e,"__index__"))return _b_.int.__gt__(t,$B.$GetInt(e));var r;if((r=getattr(e,"__le__",None))!==None)return r(t);if((r=getattr(e,"__le__",None))!==None)return r(t);throw _b_.TypeError.$factory("unorderable types: float() > "+$B.get_class(e).__name__+"()")};for(var $op in $comp_func+="",$B.$comps)eval("float.__"+$B.$comps[$op]+"__ = "+$comp_func.replace(/>/gm,$op).replace(/__gt__/gm,"__"+$B.$comps[$op]+"__").replace(/__le__/,"__"+$B.$inv_comps[$op]+"__"));$B.make_rmethods(float);var $notimplemented=function(t,e){throw _b_.TypeError.$factory("unsupported operand types for OPERATOR: 'float' and '"+$B.get_class(e).__name__+"'")};for(var $op in $notimplemented+="",$B.$operators)if(void 0===$B.augmented_assigns[$op]){var $opfunc="__"+$B.$operators[$op]+"__";void 0===float[$opfunc]&&eval("float."+$opfunc+"="+$notimplemented.replace(/OPERATOR/gm,$op))}function $FloatClass(t){return new Number(t)}function to_digits(t){for(var e="",r=0;r-1?n:t[r]}return e}float.$factory=function(value){switch(value){case void 0:return $FloatClass(0);case Number.MAX_VALUE:return $FloatClass(1/0);case-Number.MAX_VALUE:return $FloatClass(-1/0);case!0:return new Number(1);case!1:return new Number(0)}if("number"==typeof value)return new Number(value);if(isinstance(value,float))return value;if(isinstance(value,bytes)){var s=getattr(value,"decode")("latin-1");return float.$factory(getattr(value,"decode")("latin-1"))}if(hasattr(value,"__float__"))return $FloatClass(getattr(value,"__float__")());if("string"==typeof value)switch(value=value.trim(),value.toLowerCase()){case"+inf":case"inf":case"+infinity":case"infinity":return Number.POSITIVE_INFINITY;case"-inf":case"-infinity":return Number.NEGATIVE_INFINITY;case"+nan":case"nan":return Number.NaN;case"-nan":return-Number.NaN;case"":throw _b_.ValueError.$factory("count not convert string to float");default:if(value=value.charAt(0)+value.substr(1).replace(/_/g,""),value=to_digits(value),isFinite(value))return $FloatClass(eval(value));throw _b_.str.encode(value,"latin-1"),_b_.ValueError.$factory("Could not convert to float(): '"+_b_.str.$factory(value)+"'")}throw _b_.TypeError.$factory("float() argument must be a string or a number, not '"+$B.get_class(value).__name__+"'")},float.__new__=function(t){if(void 0===t)throw _b_.TypeError.$factory("float.__new__(): not enough arguments");return{__class__:t}},$B.$FloatClass=$FloatClass,$B.set_func_names(float,"builtins");var FloatSubclass=$B.FloatSubclass={__class__:_b_.type,__mro__:[object],__name__:"float",$is_class:!0};for(var $attr in float)"function"==typeof float[$attr]&&(FloatSubclass[$attr]=function(t){return function(){var e=[],r=0;if(arguments.length>0){e=[arguments[0].valueOf()],r=1;for(var n=1,_=arguments.length;n<_;n++)e[r++]=arguments[n]}return float[t].apply(null,e)}}($attr));$B.set_func_names(FloatSubclass,"builtins"),_b_.float=float}(__BRYTHON__),function($B){var bltns=$B.InjectBuiltins();eval(bltns);var object=_b_.object,$N=_b_.None;function $err(t,e){var r="unsupported operand type(s) for "+t+": 'int' and '"+$B.get_class(e).__name__+"'";throw _b_.TypeError.$factory(r)}var int={__class__:_b_.type,__name__:"int",__dir__:object.__dir__,$is_class:!0,$native:!0,$descriptors:{numerator:!0,denominator:!0,imag:!0,real:!0}};function preformat(t,e){if(e.empty)return _b_.str.$factory(t);if(e.type&&-1=="bcdoxXn".indexOf(e.type))throw _b_.ValueError.$factory("Unknown format code '"+e.type+"' for object of type 'int'");var r;switch(e.type){case void 0:case"d":r=t.toString();break;case"b":r=(e.alternate?"0b":"")+t.toString(2);break;case"c":r=_b_.chr(t);break;case"o":r=(e.alternate?"0o":"")+t.toString(8);break;case"x":r=(e.alternate?"0x":"")+t.toString(16);break;case"X":r=(e.alternate?"0X":"")+t.toString(16).toUpperCase();break;case"n":return t}return void 0!==e.sign&&(" "==e.sign||"+"==e.sign)&&t>=0&&(r=e.sign+r),r}int.from_bytes=function(){var t,e,r=$B.args("from_bytes",3,{bytes:null,byteorder:null,signed:null},["bytes","byteorder","signed"],arguments,{signed:False},null,null),n=r.bytes,_=r.byteorder,i=r.signed;if(isinstance(n,[_b_.bytes,_b_.bytearray]))t=n.source,e=n.source.length;else{e=(t=_b_.list.$factory(n)).length;for(var a=0;a=0;a--)o=$B.add($B.mul(s,t[a]),o),s=$B.mul(s,256);return i?t[0]<128?o:$B.sub(o,s):o;case"little":(o=t[0])>=128&&(o-=256);for(s=256,a=1;ar)throw _b_.OverflowError.$factory("int too big to convert");return"big"==n&&(a=a.reverse()),{__class__:_b_.bytes,source:a}},int.__abs__=function(t){return abs(t)},int.__bool__=function(t){return new Boolean(t.valueOf())},int.__ceil__=function(t){return Math.ceil(t)},int.__divmod__=function(t,e){return divmod(t,e)},int.__eq__=function(t,e){return void 0===e?t===int:isinstance(e,int)||isinstance(e,_b_.float)?t.valueOf()==e.valueOf():isinstance(e,_b_.complex)?0!=e.$imag?False:t.valueOf()==e.$real:hasattr(e,"__eq__")?getattr(e,"__eq__")(t):t.valueOf()===e},int.__float__=function(t){return new Number(t)},int.__format__=function(t,e){var r=new $B.parse_format_spec(e);if(r.type&&-1!="eEfFgG%".indexOf(r.type))return _b_.float.__format__(t,e);r.align=r.align||">";var n=preformat(t,r);if(r.comma){for(var _="-"==n[0]?"-":"",i=n.substr(_.length),a=i.length,o=Math.ceil(i.length/3),s=[],u=0;u$B.min_int&&n<$B.max_int?n:int.$factory($B.long_int.__mul__($B.long_int.$factory(t),$B.long_int.$factory(e)));if(isinstance(e,_b_.float))return new Number(t*e);if(isinstance(e,_b_.bool))return e.valueOf()?t:int.$factory(0);if(isinstance(e,_b_.complex))return $B.make_complex(int.__mul__(t,e.$real),int.__mul__(t,e.$imag));if(isinstance(e,[_b_.list,_b_.tuple])){for(var n=[],_=e.slice(0,e.length),i=0;i$B.min_int&&n<$B.max_int?n:n===1/0||isFinite(n)?int.$factory($B.long_int.__pow__($B.long_int.$factory(t),$B.long_int.$factory(e))):n}if(isinstance(e,_b_.float))return t>=0?new Number(Math.pow(t,e.valueOf())):_b_.complex.__pow__($B.make_complex(t,0),e);if(isinstance(e,_b_.complex)){var i=Math.pow(t,e.$real),a=Math.log(t);return $B.make_complex(i*Math.cos(a),i*Math.sin(a))}if(hasattr(e,"__rpow__"))return getattr(e,"__rpow__")(t);$err("**",e)},int.__repr__=function(t){return t===int?"":t.toString()},int.__rshift__=function(t,e){if(isinstance(e,int))return int.$factory($B.long_int.__rshift__($B.long_int.$factory(t),$B.long_int.$factory(e)));var r=getattr(e,"__rrshift__",None);if(r!==None)return r(t);$err(">>",e)},int.__setattr__=function(t,e,r){if("number"==typeof t)throw void 0===int.$factory[e]?_b_.AttributeError.$factory("'int' object has no attribute '"+e+"'"):_b_.AttributeError.$factory("'int' object attribute '"+e+"' is read-only");return t[e]=r,$N},int.__str__=int.__repr__,int.__truediv__=function(t,e){if(isinstance(e,int)){if(0==e)throw ZeroDivisionError.$factory("division by zero");return e.__class__===$B.long_int?new Number(t/parseInt(e.value)):new Number(t/e)}if(isinstance(e,_b_.float)){if(!e.valueOf())throw ZeroDivisionError.$factory("division by zero");return new Number(t/e)}if(isinstance(e,_b_.complex)){var r=e.$real*e.$real+e.$imag*e.$imag;if(0==r)throw ZeroDivisionError.$factory("division by zero");return $B.make_complex(t*e.$real/r,-t*e.$imag/r)}if(hasattr(e,"__rtruediv__"))return getattr(e,"__rtruediv__")(t);$err("/",e)},int.bit_length=function(t){return s=bin(t),s=getattr(s,"lstrip")("-0b"),s.length},int.numerator=function(t){return t},int.denominator=function(t){return int.$factory(1)},int.imag=function(t){return int.$factory(0)},int.real=function(t){return t},$B.max_int32=2147483647,$B.min_int32=-$B.max_int32;var $op_func=function(t,e){return isinstance(e,int)?e.__class__===$B.long_int||t>$B.max_int32||t<$B.min_int32||e>$B.max_int32||e<$B.min_int32?$B.long_int.__sub__($B.long_int.$factory(t),$B.long_int.$factory(e)):t-e:isinstance(e,_b_.bool)?t-e:hasattr(e,"__rsub__")?getattr(e,"__rsub__")(t):void $err("-",e)};$op_func+="";var $ops={"&":"and","|":"or","^":"xor"};for(var $op in $ops){var opf=$op_func.replace(/-/gm,$op);opf=opf.replace(new RegExp("sub","gm"),$ops[$op]),eval("int.__"+$ops[$op]+"__ = "+opf)}var $op_func=function(t,e){if(isinstance(e,int)){if("number"==typeof e){var r=t.valueOf()-e.valueOf();return r>$B.min_int&&r<$B.max_int?r:$B.long_int.__sub__($B.long_int.$factory(t),$B.long_int.$factory(e))}return"boolean"==typeof e?e?t-1:t:$B.long_int.__sub__($B.long_int.$factory(t),$B.long_int.$factory(e))}if(isinstance(e,_b_.float))return new Number(t-e);if(isinstance(e,_b_.complex))return $B.make_complex(t-e.$real,-e.$imag);if(isinstance(e,_b_.bool)){var n=0;return e.valueOf()&&(n=1),t-n}if(isinstance(e,_b_.complex))return $B.make_complex(t.valueOf()-e.$real,e.$imag);var _=$B.$getattr(e,"__rsub__",None);if(_!==None)return _(t);throw $err("-",e)};$op_func+="";var $ops={"+":"add","-":"sub"};for(var $op in $ops){var opf=$op_func.replace(/-/gm,$op);opf=opf.replace(new RegExp("sub","gm"),$ops[$op]),eval("int.__"+$ops[$op]+"__ = "+opf)}var $comp_func=function(t,e){if(e.__class__===$B.long_int)return $B.long_int.__lt__(e,$B.long_int.$factory(t));if(isinstance(e,int))return t.valueOf()>e.valueOf();if(isinstance(e,_b_.float))return t.valueOf()>e.valueOf();if(isinstance(e,_b_.bool))return t.valueOf()>_b_.bool.__hash__(e);if(hasattr(e,"__int__")||hasattr(e,"__index__"))return int.__gt__(t,$B.$GetInt(e));var r=$B.$getattr(e,"__lt__",None);if(r!==None)return r(t);throw _b_.TypeError.$factory("unorderable types: int() > "+$B.get_class(e).__name__+"()")};for(var $op in $comp_func+="",$B.$comps)eval("int.__"+$B.$comps[$op]+"__ = "+$comp_func.replace(/>/gm,$op).replace(/__gt__/gm,"__"+$B.$comps[$op]+"__").replace(/__lt__/,"__"+$B.$inv_comps[$op]+"__"));$B.make_rmethods(int);var $valid_digits=function(t){var e="";if(0===t)return"0";if(t<10){for(var r=0;r$B.max_int?$B.long_int.$from_float(t):t>0?Math.floor(t):Math.ceil(t);if(!(e>=2&&e<=36)&&0!=e)throw _b_.ValueError.$factory("invalid base");if("number"==typeof t){if(10==e)return t<$B.min_int||t>$B.max_int?$B.long_int.$factory(t):t;if(t.toString().search("e")>-1)throw _b_.OverflowError.$factory("can't convert to base "+e);var n=parseInt(t,e);return t<$B.min_int||t>$B.max_int?$B.long_int.$factory(t,e):n}if(!0===t)return Number(1);if(!1===t)return Number(0);if(t.__class__===$B.long_int){var _=parseInt(t.value);return _>$B.min_int&&_<$B.max_int?_:t}if(e=$B.$GetInt(e),isinstance(t,_b_.str)&&(t=t.valueOf()),"string"==typeof t){var i=t.trim();if(2==i.length&&0==e&&("0b"==i||"0o"==i||"0x"==i))throw _b_.ValueError.$factory("invalid value");if(i.length>2){var a=i.substr(0,2).toUpperCase();if(0==e&&("0B"==a&&(e=2),"0O"==a&&(e=8),"0X"==a&&(e=16)),"0B"==a||"0O"==a||"0X"==a)for(i=i.substr(2);i.startsWith("_");)i=i.substr(1)}var o=$valid_digits(e),s=new RegExp("^[+-]?["+o+"]["+o+"_]*$","i"),u=s.exec(i);if(null===u)throw _b_.ValueError.$factory("invalid literal for int() with base "+e+": '"+_b_.str.$factory(t)+"'");if(t=i.replace(/_/g,""),e<=10&&!isFinite(t))throw _b_.ValueError.$factory("invalid literal for int() with base "+e+": '"+_b_.str.$factory(t)+"'");return(n=parseInt(t,e))<$B.min_int||n>$B.max_int?$B.long_int.$factory(t,e):n}if(isinstance(t,[_b_.bytes,_b_.bytearray])){o=$valid_digits(e);for(var l=0;l0}catch(t){return!0}}}};var bool={__class__:_b_.type,__module__:"builtins",__mro__:[int,object],__name__:"bool",$is_class:!0,$native:!0,__add__:function(t,e){return(e?1:0)+(t?1:0)},__and__:function(t,e){return $B.$bool(int.__and__(t,e))},__eq__:function(t,e){return t?$B.$bool(e):!$B.$bool(e)},__ne__:function(t,e){return t?!$B.$bool(e):$B.$bool(e)},__ge__:function(t,e){return _b_.int.__ge__(bool.__hash__(t),e)},__gt__:function(t,e){return _b_.int.__gt__(bool.__hash__(t),e)}};bool.__hash__=bool.__index__=bool.__int__=function(t){return t.valueOf()?1:0},bool.__le__=function(t,e){return!bool.__gt__(t,e)},bool.__lshift__=function(t,e){return t.valueOf()<=0;a--)2==(r=(_+(--i<0?0:parseInt(t.charAt(i)))+parseInt(e.charAt(a))).toString()).length?(n=r.charAt(1)+n,_=parseInt(r.charAt(0))):(n=r+n,_=0);for(;i>0;)i--,2==(r=(_+parseInt(t.charAt(i))).toString()).length?(n=r.charAt(1)+n,_=parseInt(r.charAt(0))):(n=r+n,_=0);return _&&(n=_+n),{__class__:long_int,value:n,pos:!0}}function check_shift(t){if(!isinstance(t,long_int))throw TypeError.$factory("shift must be int, not '"+$B.get_class(t).__name__+"'");if(!t.pos)throw ValueError.$factory("negative shift count")}function clone(t){var e={};for(var r in t)e[r]=t[r];return e}function comp_pos(t,e){return t.length>e.length?1:t.lengthe?1:t=0;a--)i--,(r=parseInt(t.charAt(i))-_-parseInt(e.charAt(a)))<0?(n=10+r+n,_=1):(n=r+n,_=0);for(;i>0;)i--,(r=parseInt(t.charAt(i))-_)<0?(n=10+r+n,_=1):(n=r+n,_=0);for(;"0"==n.charAt(0)&&n.length>1;)n=n.substr(1);return{__class__:long_int,value:n,pos:!0}}function digits(t){for(var e={},r=0;r10)for(r=0;r-1){var n=/-?(\d)(\.\d+)?e([+-])(\d*)/.exec(e),_=n[1],i=n[2],a=n[3],o=n[4];"+"==a&&(r=void 0===i?_+"0".repeat(o-1):_+i+"0".repeat(o-1-i.length))}return{__class__:long_int,value:r,pos:t>=0}},long_int.__abs__=function(t){return{__class__:long_int,value:t.value,pos:!0}},long_int.__add__=function(t,e){if(isinstance(e,_b_.float))return _b_.float.$factory(parseInt(t.value)+e.value);var r;if("number"==typeof e&&(e=long_int.$factory(_b_.str.$factory(e))),t.pos&&e.pos)return add_pos(t.value,e.value);if(t.pos||e.pos){if(t.pos&&!e.pos){switch(comp_pos(t.value,e.value)){case 1:r=sub_pos(t.value,e.value);break;case 0:r={__class__:long_int,value:0,pos:!0};break;case-1:(r=sub_pos(e.value,t.value)).pos=!1}return intOrLong(r)}switch(comp_pos(t.value,e.value)){case 1:(r=sub_pos(t.value,e.value)).pos=!1;break;case 0:r={__class__:ong_int,value:0,pos:!0};break;case-1:r=sub_pos(e.value,t.value)}return intOrLong(r)}return(r=add_pos(t.value,e.value)).pos=!1,intOrLong(r)},long_int.__and__=function(t,e){"number"==typeof e&&(e=long_int.$factory(_b_.str.$factory(e)));var r=long_int.__index__(t),n=long_int.__index__(e);if(r.lengthe.value.length?t.pos:t.value.length=e.value:t.value<=e.value},long_int.__gt__=function(t,e){return!long_int.__le__(t,e)},long_int.__index__=function(t){for(var e,r="",n=t.value;r=(e=divmod_pos(n,"2"))[1].value+r,"0"!=(n=e[0].value););if(t.pos)r="0"+r;else{for(var _="",i=!1,a=r.length-1;a>=0;a--){"0"==r.charAt(a)?_=i?"1"+_:"0"+_:i?_="0"+_:(i=!0,_="1"+_)}r=_="1"+_}return intOrLong(r)},long_int.__invert__=function(t){return long_int.__sub__(long_int.$factory("-1"),t)},long_int.__le__=function(t,e){return"number"==typeof e&&(e=long_int.$factory(_b_.str.$factory(e))),t.pos!==e.pos||t.value.length>e.value.length?!t.pos:t.value.length=e.value},long_int.__lt__=function(t,e){return!long_int.__ge__(t,e)},long_int.__lshift__=function(t,e){var r;if(e.__class__===long_int){var n=parseInt(e.value);if(n<0)throw _b_.ValueError.$factory("negative shift count");n<$B.max_int&&(r=!0,e=n)}if(r){if(0==n)return t}else if("0"==(e=long_int.$factory(e)).value)return t;for(var _=t.value;;){for(var i,a=0,o="",s=_.length-1;s>=0;s--)2==(i=(a+2*parseInt(_.charAt(s))).toString()).length?(o=i.charAt(1)+o,a=parseInt(i.charAt(0))):(o=i+o,a=0);if(a&&(o=a+o),_=o,r){if(0==--e)break}else if("0"==(e=sub_pos(e.value,"1")).value)break}return intOrLong({__class__:long_int,value:_,pos:t.pos})},long_int.__mod__=function(t,e){return intOrLong(long_int.__divmod__(t,e)[1])},long_int.__mro__=[_b_.int,_b_.object],long_int.__mul__=function(t,e){switch(t){case Number.NEGATIVE_INFINITY:case Number.POSITIVE_INFINITY:return $B.rich_comp("__eq__",e,0)?NaN:_b_.getattr(e,"__gt__")(0)?t:-t}if(isinstance(e,_b_.float))return _b_.float.$factory(parseInt(t.value)*e);"number"==typeof e&&(e=long_int.$factory(_b_.str.$factory(e)));var r=mul_pos(t.value,e.value);return t.pos==e.pos||(r.pos=!1),intOrLong(r)},long_int.__neg__=function(t){return{__class__:long_int,value:t.value,pos:!t.pos}},long_int.__or__=function(t,e){e=long_int.$factory(e);var r=long_int.__index__(t),n=long_int.__index__(e);if(r.length0;){var _=divmod_pos(n,e.toString());if(r=parseInt(_[1].value).toString(e)+r,0==(n=_[0].value))break}return r};var MAX_SAFE_INTEGER=Math.pow(2,53)-1,MIN_SAFE_INTEGER=-MAX_SAFE_INTEGER;function isSafeInteger(t){return"number"==typeof t&&Math.round(t)===t&&MIN_SAFE_INTEGER<=t&&t<=MAX_SAFE_INTEGER}function intOrLong(t){var e=parseInt(t.value)*(t.pos?1:-1);return e>MIN_SAFE_INTEGER&&e2)throw _b_.TypeError.$factory("long_int takes at most 2 arguments ("+arguments.length+" given)");if(void 0===e)e=10;else if(!isinstance(e,int))throw TypeError.$factory("'"+$B.get_class(e).__name__+"' object cannot be interpreted as an integer");if(e<0||1==e||e>36)throw ValueError.$factory("long_int.$factory() base must be >= 2 and <= 36");if(isinstance(t,_b_.float)){if(t===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY)return t;t=new Number(t>=0?Math.round(t.value):Math.ceil(t.value))}else if(isinstance(t,_b_.bool))return t.valueOf()?int.$factory(1):int.$factory(0);if("number"==typeof t)if(isSafeInteger(t))t=t.toString();else{if(t.constructor!=Number)throw ValueError.$factory("argument of long_int is not a safe integer");t=t.toString()}else{if(t.__class__===long_int)return t;if(isinstance(t,_b_.bool))t=_b_.bool.__int__(t)+"";else if("string"!=typeof t)throw ValueError.$factory("argument of long_int must be a string, not "+$B.get_class(t).__name__)}for(var r=!1,n=!0,_=0;" "==t.charAt(0)&&t.length;)t=t.substr(1);for(;" "==t.charAt(t.length-1)&&t.length;)t=t.substr(0,t.length-1);if("+"==t.charAt(0)?r=!0:"-"==t.charAt(0)&&(r=!0,n=!1),r){if(1==t.length)throw ValueError.$factory('long_int argument is not a valid number: "'+t+'"');t=t.substr(1)}for(;_2&&void 0!==arguments[2].$nat&&Object.keys(arguments[2].kw).length>0)throw console.log(arguments),_b_.TypeError.$factory("complex() can't take second arg if first is a string");var _=r;(r=r.trim()).startsWith("(")&&r.endsWith(")")&&(r=(r=r.substr(1)).substr(0,r.length-1));var i=/^\s*([\+\-]*[0-9_]*\.?[0-9_]*(e[\+\-]*[0-9_]*)?)([\+\-]?)([0-9_]*\.?[0-9_]*(e[\+\-]*[0-9_]*)?)(j?)\s*$/i,a=i.exec(r);function o(t){var e=parseFloat(t.charAt(0)+t.substr(1).replace(/_/g,""));if(isNaN(e))throw _b_.ValueError.$factory("could not convert string to complex: '"+_+"'");return e}if(null===a)throw _b_.ValueError.$factory("complex() arg is a malformed string");if("."==a[_real]||"."==a[_imag]||".e"==a[_real]||".e"==a[_imag]||"e"==a[_real]||"e"==a[_imag])throw _b_.ValueError.$factory("complex() arg is a malformed string");return""!=a[_j]?""==a[_sign]?(r=0,n="+"==a[_real]||""==a[_real]?1:"-"==a[_real]?-1:o(a[_real])):(r=o(a[_real]),n=""==a[_imag]?1:o(a[_imag]),n="-"==a[_sign]?-n:n):(r=o(a[_real]),n=0),{__class__:complex,$real:r||0,$imag:n||0}}if(1==arguments.length&&r.__class__===complex&&0==n)return r;if((isinstance(r,_b_.float)||isinstance(r,_b_.int))&&(isinstance(n,_b_.float)||isinstance(n,_b_.int)))return{__class__:complex,$real:r,$imag:n};for(var s=0;s0?"("+t.$real+"+"+t.$imag+"j)":0==t.$imag?1/t.$imag<0?"("+t.$real+"-"+t.$imag+"j)":"("+t.$real+"+"+t.$imag+"j)":"("+t.$real+"-"+-t.$imag+"j)"},complex.__sqrt__=function(t){if(0==t.$imag)return complex(Math.sqrt(t.$real));var e=t.$real,r=t.$imag,n=Math.sqrt((e+sqrt)/2),_=Number.sign(r)*Math.sqrt((-e+sqrt)/2);return make_complex(n,_)},complex.__truediv__=function(t,e){if(isinstance(e,complex)){if(0==e.$real&&0==e.$imag)throw ZeroDivisionError.$factory("division by zero");var r=t.$real*e.$real+t.$imag*e.$imag,n=e.$real*e.$real+e.$imag*e.$imag,_=t.$imag*e.$real-t.$real*e.$imag;return make_complex(r/n,_/n)}if(isinstance(e,_b_.int)){if(!e.valueOf())throw ZeroDivisionError.$factory("division by zero");return complex.__truediv__(t,complex(e.valueOf()))}if(isinstance(e,_b_.float)){if(!e.value)throw ZeroDivisionError.$factory("division by zero");return complex.__truediv__(t,complex(e.value))}$UnsupportedOpType("//","complex",e.__class__)},complex.conjugate=function(t){return make_complex(t.$real,-t.$imag)};var $op_func=function(t,e){throw _b_.TypeError.$factory("TypeError: unsupported operand type(s) for -: 'complex' and '"+$B.get_class(e).__name__+"'")};$op_func+="";var $ops={"&":"and","|":"ior","<<":"lshift",">>":"rshift","^":"xor"};for(var $op in $ops)eval("complex.__"+$ops[$op]+"__ = "+$op_func.replace(/-/gm,$op));complex.__ior__=complex.__or__;var $op_func=function(t,e){if(isinstance(e,complex))return make_complex(t.$real-e.$real,t.$imag-e.$imag);if(isinstance(e,_b_.int))return make_complex($B.sub(t.$real,e.valueOf()),t.$imag);if(isinstance(e,_b_.float))return make_complex(t.$real-e.valueOf(),t.$imag);if(isinstance(e,_b_.bool)){var r=0;return e.valueOf()&&(r=1),make_complex(t.$real-r,t.$imag)}throw _b_.TypeError.$factory("unsupported operand type(s) for -: "+t.__repr__()+" and '"+$B.get_class(e).__name__+"'")};complex.__sub__=$op_func,$op_func+="",$op_func=$op_func.replace(/-/gm,"+").replace(/sub/gm,"add"),eval("complex.__add__ = "+$op_func);var $comp_func=function(t,e){if(void 0===e||e==_b_.None)throw _b_.NotImplemented.$factory("");throw _b_.TypeError.$factory("TypeError: no ordering relation is defined for complex numbers")};for(var $op in $comp_func+="",$B.$comps)eval("complex.__"+$B.$comps[$op]+"__ = "+$comp_func.replace(/>/gm,$op));$B.make_rmethods(complex),complex.real=function(t){return new Number(t.$real)},complex.real.setter=function(){throw _b_.AttributeError.$factory("readonly attribute")},complex.imag=function(t){return new Number(t.$imag)},complex.imag.setter=function(){throw _b_.AttributeError.$factory("readonly attribute")};var _real=1,_real_mantissa=2,_sign=3,_imag=4,_imag_mantissa=5,_j=6,type_conversions=["__complex__","__float__","__int__"],_convert=function(t){for(var e=0;e=0)return-1;if(t>=0)return 1;t=-t,e=-e}al=log10(t),bl=log10(e);var r=0;return albl&&(e*=POWERS_OF_TEN[al-bl-1],t/=10,r=1),t===e?r:t=DEFAULT_MIN_MERGE;)e|=1&t,t>>=1;return t+e}function makeAscendingRun(t,e,r,n){var _=e+1;if(_===r)return 1;if(n(t[_++],t[e])<0){for(;_=0;)_++;return _-e}function reverseRun(t,e,r){for(r--;e>>1;_(i,t[s])<0?o=s:a=s+1}var u=n-a;switch(u){case 3:t[a+3]=t[a+2];case 2:t[a+2]=t[a+1];case 1:t[a+1]=t[a];break;default:for(;u>0;)t[a+u]=t[a+u-1],u--}t[a]=i}}function gallopLeft(t,e,r,n,_,i){var a=0,o=0,s=1;if(i(t,e[r+_])>0){for(o=n-_;s0;)a=s,(s=1+(s<<1))<=0&&(s=o);s>o&&(s=o),a+=_,s+=_}else{for(o=_+1;so&&(s=o);var u=a;a=_-s,s=_-u}for(a++;a>>1);i(t,e[r+l])>0?a=l+1:s=l}return s}function gallopRight(t,e,r,n,_,i){var a=0,o=0,s=1;if(i(t,e[r+_])<0){for(o=_+1;so&&(s=o);var u=a;a=_-s,s=_-u}else{for(o=n-_;s=0;)a=s,(s=1+(s<<1))<=0&&(s=o);s>o&&(s=o),a+=_,s+=_}for(a++;a>>1);i(t,e[r+l])<0?s=l:a=l+1}return s}var TIM_SORT_ASSERTION="TimSortAssertion",TimSortAssertion=function(t){this.name=TIM_SORT_ASSERTION,this.message=t},TimSort=function(t,e){return self={array:t,compare:e,minGallop:DEFAULT_MIN_GALLOPING,length:t.length,tmpStorageLength:DEFAULT_TMP_STORAGE_LENGTH,stackLength:0,runStart:null,runLength:null,stackSize:0,pushRun:function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},mergeRuns:function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]this.runLength[t+1])break;this.mergeAt(t)}},forceMergeRuns:function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]=DEFAULT_MIN_GALLOPING||p>=DEFAULT_MIN_GALLOPING);if(h)break;c<0&&(c=0),c+=2}if(this.minGallop=c,c<1&&(this.minGallop=1),1===e){for(o=0;o=0;o--)i[f+o]=i[c+o];if(0===e){d=!0;break}}if(i[l--]=a[u--],1==--n){d=!0;break}if(0!==($=n-gallopLeft(i[s],a,0,n,n-1,_))){n-=$,f=(l-=$)+1,c=(u-=$)+1;for(o=0;o<$;o++)i[f+o]=a[c+o];if(n<=1){d=!0;break}}if(i[l--]=i[s--],0==--e){d=!0;break}p--}while(h>=DEFAULT_MIN_GALLOPING||$>=DEFAULT_MIN_GALLOPING);if(d)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===n){f=(l-=e)+1,c=(s-=e)+1;for(o=e-1;o>=0;o--)i[f+o]=i[c+o];i[l]=a[u]}else{if(0==n)throw new TimSortAssertion("mergeHigh preconditions were not respected");c=l-(n-1);for(o=0;o=0;o--)i[f+o]=i[c+o];i[l]=a[u]}else{c=l-(n-1);for(var o=0;o>>1),self.tmp=new Array(self.tmpStorageLength),self.stackLength=self.length<120?5:self.length<1542?10:self.length<119151?19:40,self.runStart=new Array(self.stackLength),self.runLength=new Array(self.stackLength),self};function tim_sort(t,e,r,n){if(!Array.isArray(t))throw TypeError.$factory("Can only sort arrays");e?"function"!=typeof e&&(n=r,r=e,e=alphabeticalCompare):e=alphabeticalCompare,r||(r=0),n||(n=t.length);var _=n-r;if(!(_<2)){var i=0;if(_o&&(s=o),binaryInsertionSort(t,r,r+s,r+i,e),i=s}a.pushRun(r,i),a.mergeRuns(),_-=i,r+=i}while(0!==_);a.forceMergeRuns()}}}function tim_sort_safe(t,e){try{tim_sort(t,e,0,t.length)}catch(r){if(r.name!=TIM_SORT_ASSERTION)throw r;t.sort(e)}}$B.$TimSort=tim_sort_safe,$B.$AlphabeticalCompare=alphabeticalCompare}(__BRYTHON__),function($B){var bltns=$B.InjectBuiltins();eval(bltns);var object=_b_.object,$N=_b_.None;function $list(){return list.$factory.apply(null,arguments)}var list={__class__:_b_.type,__module__:"builtins",__mro__:[object],__name__:"list",$is_class:!0,$native:!0,__dir__:object.__dir__,__add__:function(t,e){if($B.get_class(t)!==$B.get_class(e)){var r=getattr(e,"__radd__",NotImplemented);if(r!==NotImplemented)return r(t);throw TypeError.$factory('can only concatenate list (not "'+$B.get_class(e).__name__+'") to list')}var n=t.valueOf().concat(e.valueOf());return isinstance(t,tuple)&&(n=tuple.$factory(n)),n},__contains__:function(t,e){for(var r=$B.args("__contains__",2,{self:null,item:null},["self","item"],arguments,{},null,null),n=(t=r.self,e=r.item,function(t){return $B.rich_comp("__eq__",e,t)}),_=0;_=0&&r0?0:t.length);var i=e.stop;i===None&&(i=n>0?t.length:0),_<0&&(_=t.length+_),i<0&&(i=t.length+i);var a=[],o=null;r=0;if(n>0){if(i>_)for(o=_;oi;o+=n)void 0!==t[o]&&(a[r++]=o);a.reverse()}for(o=a.length;o--;)t.splice(a[o],1);return $N}if(hasattr(e,"__int__")||hasattr(e,"__index__"))return list.__delitem__(t,_b_.int.$factory(e)),$N;throw _b_.TypeError.$factory("list indices must be integer, not "+_b_.str.$factory(e.__class__))},__eq__:function(t,e){if(isinstance(t,list))var r=list;else r=tuple;if(isinstance(e,r)&&e.length==t.length){for(var n=t.length;n--;)if(!$B.rich_comp("__eq__",t[n],e[n]))return!1;return!0}return!1},__getitem__:function(t,e){var r=$B.args("__getitem__",2,{self:null,key:null},["self","key"],arguments,{},null,null),n=(t=r.self,r.key),_=$B.get_class(t).$factory;if(isinstance(n,_b_.int)){var i=t.valueOf(),a=n;if(n<0&&(a=i.length+a),a>=0&&a0){if(c<=l)return _(s);for(u=l;ul)return _(s);for(u=l;u>c;u+=f)s[a++]=i[u];return _(s)}if(hasattr(n,"__int__")||hasattr(n,"__index__"))return list.__getitem__(t,_b_.int.$factory(n));throw _b_.TypeError.$factory("list indices must be integer, not "+$B.get_class(n).__name__)},__ge__:function(t,e){if(!isinstance(e,[list,_b_.tuple]))throw _b_.TypeError.$factory("unorderable types: list() >= "+$B.get_class(e).__name__+"()");for(var r=0;r=e.length)return!0;if(!$B.rich_comp("__eq__",t[r],e[r])){if(res=getattr(t[r],"__ge__")(e[r]),res===_b_.NotImplemented)throw _b_.TypeError.$factory("unorderable types: "+$B.get_class(t[r]).__name__+"() >= "+$B.get_class(e[r]).__name__+"()");return res}r++}return e.length==t.length},__gt__:function(t,e){if(!isinstance(e,[list,_b_.tuple]))throw _b_.TypeError.$factory("unorderable types: list() > "+$B.get_class(e).__name__+"()");for(var r=0;r=e.length)return!0;if(!$B.rich_comp("__eq__",t[r],e[r])){if(res=getattr(t[r],"__gt__")(e[r]),res===_b_.NotImplemented)throw _b_.TypeError.$factory("unorderable types: "+$B.get_class(t[r]).__name__+"() > "+$B.get_class(e[r]).__name__+"()");return res}r++}return!1}};list.__hash__=None,list.__iadd__=function(){var t=$B.args("__iadd__",2,{self:null,x:null},["self","x"],arguments,{},null,null),e=getattr(t.x,"__radd__",NotImplemented);if(e!==NotImplemented)return e(t.self);for(var r=list.$factory($B.$iter(t.x)),n=0;n";for(var e=[],r=0;r=0&&_r){var _=r+Math.floor(Math.random()*(n-r));$qsort(t,e,r,_=$partition(t,e,r,n,_)),$qsort(t,e,_+1,n)}}function $elts_class(t){if(0==t.length)return null;for(var e=$B.get_class(t[0]),r=t.length;r--;)if($B.get_class(t[r])!==e)return!1;return e}function $tuple(t){return t}list.append=function(){var t=$B.args("append",2,{self:null,x:null},["self","x"],arguments,{},null,null);return t.self[t.self.length]=t.x,$N},list.clear=function(){for(var t=$B.args("clear",1,{self:null},["self"],arguments,{},null,null);t.self.length;)t.self.pop();return $N},list.copy=function(){var t=$B.args("copy",1,{self:null},["self"],arguments,{},null,null);return t.self.slice()},list.count=function(){for(var t=$B.args("count",2,{self:null,x:null},["self","x"],arguments,{},null,null),e=0,r=function(e){return $B.rich_comp("__eq__",t.x,e)},n=t.self.length;n--;)r(t.self[n])&&e++;return e},list.extend=function(){for(var t=$B.args("extend",2,{self:null,t:null},["self","t"],arguments,{},null,null),e=list.$factory($B.$iter(t.t)),r=0;r-1);e++);for(var r=this.length-1;r>=e&&(t=this.charCodeAt(r),[32,10,13,9,12,11,160,5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288,65279].indexOf(t)>-1);r--);return this.substring(e,r+1)}),String.prototype.trimLeft||(String.prototype.trimLeft=function(){for(var t,e=0;e-1);e++);return this.substring(e)}),String.prototype.trimRight||(String.prototype.trimRight=function(){for(var t,e=this.length-1;e>=0&&(t=this.charCodeAt(e),[32,10,13,9,12,11,160,5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288,65279].indexOf(t)>-1);e--);return this.substring(0,e+1)});var object=_b_.object,str={__class__:_b_.type,__dir__:object.__dir__,__name__:"str",$is_class:!0,$native:!0};function normalize_start_end(t){if(null===t.start||t.start===_b_.None?t.start=0:t.start<0&&(t.start+=t.self.length,t.start=Math.max(0,t.start)),null===t.end||t.end===_b_.None?t.end=t.self.length:t.end<0&&(t.end+=t.self.length,t.end=Math.max(0,t.end)),!isinstance(t.start,_b_.int)||!isinstance(t.end,_b_.int))throw _b_.TypeError.$factory("slice indices must be integers or None or have an __index__ method")}function reverse(t){return t.split("").reverse().join("")}function check_str(t){if(!_b_.isinstance(t,str))throw _b_.TypeError.$factory("can't convert '"+$B.get_class(t).__name__+"' object to str implicitly")}function preformat(t,e){if(e.empty)return _b_.str.$factory(t);if(e.type&&"s"!=e.type)throw _b_.ValueError.$factory("Unknown format code '"+e.type+"' for object of type 'str'");return t}str.__add__=function(t,e){if("string"!=typeof e)try{return getattr(e,"__radd__")(t)}catch(t){throw _b_.TypeError.$factory("Can't convert "+$B.get_class(e).__name__+" to str implicitly")}return t+e},str.__contains__=function(t,e){if("string"!=typeof e)throw _b_.TypeError.$factory("'in ' requires string as left operand, not "+e.__class__);var r=e.length;if(0==r)return!0;if(0==t.length)return 0==r;for(var n=0,_=t.length;n<_;n++)if(t.substr(n,r)==e)return!0;return!1},str.__delitem__=function(){throw _b_.TypeError.$factory("'str' object doesn't support item deletion")},str.__dir__=object.__dir__,str.__eq__=function(t,e){return void 0===e?t===str:_b_.isinstance(e,_b_.str)?e.valueOf()==t.valueOf():e===t.valueOf()},str.__format__=function(t,e){var r=new $B.parse_format_spec(e);if(void 0!==r.sign)throw _b_.ValueError.$factory("Sign not allowed in string format specifier");return r.align=r.align||"<",$B.format_width(preformat(t,r),r)},str.__getitem__=function(t,e){if(isinstance(e,_b_.int)){var r=e;if(e<0&&(r+=t.length),r>=0&&r0){if(i<=_)return"";for(s=_;s=_)return"";for(s=_;s>i;s+=a)o+=t.charAt(s)}return o}if(isinstance(e,_b_.bool))return t.__getitem__(_b_.int.$factory(e));throw _b_.TypeError.$factory("string indices must be integers")},str.__hash__=function(t){if(void 0===t)return str.__hashvalue__||$B.$py_next_hash--;for(var e=1,r=0,n=t.length;r=0)return"+"}else if(e.space&&t>=0)return" ";return""},str_format=function(t,e){return e.pad_char=" ",format_padding(str.$factory(t),e)},num_format=function(t,e){number_check(t),t=t.__class__===$B.long_int?$B.long_int.to_base(t,10):parseInt(t);var r=format_int_precision(t,e);if("0"===e.pad_char){if(t<0)return r=r.substring(1),"-"+format_padding(r,e,!0);var n=format_sign(t,e);if(""!==n)return n+format_padding(r,e,!0)}return format_padding(format_sign(t,e)+r,e)},repr_format=function(t,e){return e.pad_char=" ",format_padding(repr(t),e)},ascii_format=function(t,e){return e.pad_char=" ",format_padding(ascii(t),e)},_float_helper=function(t,e){return number_check(t),e.precision?(e.precision=parseInt(e.precision,10),validate_precision(e.precision)):e.decimal_point?e.precision=0:e.precision=6,parseFloat(t)},trailing_zeros=/(.*?)(0+)([eE].*)/,leading_zeros=/\.(0*)/,trailing_dot=/\.$/,validate_precision=function(t){t>20&&(t=20)},floating_point_format=function(t,e,r){if(t=_float_helper(t,r),v=t.toString(),v_len=v.length,dot_idx=v.indexOf("."),dot_idx<0&&(dot_idx=v_len),t<1&&t>-1){var n,_=leading_zeros.exec(v);if((n=_?_[1].length:0)>=4){if(t=format_sign(t,r)+format_float_precision(t,e,r,_floating_g_exp_helper),r.alternate)r.precision<=1&&(t=t[0]+"."+t.substring(1));else(i=trailing_zeros.exec(t))&&(t=i[1].replace(trailing_dot,"")+i[3]);return format_padding(t,r)}return r.precision=(r.precision||0)+n,format_padding(format_sign(t,r)+format_float_precision(t,e,r,(function(t,e){return t.toFixed(min(e,v_len-dot_idx)+n)})),r)}if(dot_idx>r.precision){var i;if(t=format_sign(t,r)+format_float_precision(t,e,r,_floating_g_exp_helper),r.alternate)r.precision<=1&&(t=t[0]+"."+t.substring(1));else(i=trailing_zeros.exec(t))&&(t=i[1].replace(trailing_dot,"")+i[3]);return format_padding(t,r)}return format_padding(format_sign(t,r)+format_float_precision(t,e,r,(function(t,e){return r.decimal_point?e>v_len&&(r.alternate||(e=v_len)):e=min(v_len-1,6),et.length-4&&(t=t.substring(0,_+2)+"0"+t.substring(_+2)),n?t.toUpperCase():t},floating_point_decimal_format=function(t,e,r){return t=_float_helper(t,r),format_padding(format_sign(t,r)+format_float_precision(t,e,r,(function(t,e,r){return t=t.toFixed(e),0===e&&r.alternate&&(t+="."),t})),r)},_floating_exp_helper=function(t,e,r,n){var _=(t=t.toExponential(e)).lastIndexOf("e");return _>t.length-4&&(t=t.substring(0,_+2)+"0"+t.substring(_+2)),n?t.toUpperCase():t},floating_point_exponential_format=function(t,e,r){return t=_float_helper(t,r),format_padding(format_sign(t,r)+format_float_precision(t,e,r,_floating_exp_helper),r)},signed_hex_format=function(t,e,r){var n;if(number_check(t),n=t.__class__===$B.long_int?$B.long_int.to_base(t,16):(n=parseInt(t)).toString(16),n=format_int_precision(n,r),e&&(n=n.toUpperCase()),"0"===r.pad_char){t<0&&(n=n.substring(1),n="-"+format_padding(n,r,!0));var _=format_sign(t,r);""!==_&&(n=_+format_padding(n,r,!0))}return r.alternate&&(n="-"===n.charAt(0)?e?"-0X"+n.slice(1):"-0x"+n.slice(1):e?"0X"+n:"0x"+n),format_padding(format_sign(t,r)+n,r)},octal_format=function(t,e){var r;if(number_check(t),r=t.__class__===$B.long_int?$B.long_int.to_base(8):(r=parseInt(t)).toString(8),r=format_int_precision(r,e),"0"===e.pad_char){t<0&&(r=r.substring(1),r="-"+format_padding(r,e,!0));var n=format_sign(t,e);""!==n&&(r=n+format_padding(r,e,!0))}return e.alternate&&(r="-"===r.charAt(0)?"-0o"+r.slice(1):"0o"+r),format_padding(r,e)},single_char_format=function(t,e){if(isinstance(t,str)&&1==t.length)return t;try{t=_b_.int.$factory(t)}catch(t){throw _b_.TypeError.$factory("%c requires int or char")}return format_padding(chr(t),e)},num_flag=function(t,e){"0"!==t||e.padding||e.decimal_point||e.left?e.decimal_point?e.precision=(e.precision||"")+t:e.padding=(e.padding||"")+t:e.pad_char="0"},decimal_point_flag=function(t,e){if(e.decimal_point)throw new UnsupportedChar;e.decimal_point=!0},neg_flag=function(t,e){e.pad_char=" ",e.left=!0},space_flag=function(t,e){e.space=!0},sign_flag=function(t,e){e.sign=!0},alternate_flag=function(t,e){e.alternate=!0},char_mapping={s:str_format,d:num_format,i:num_format,u:num_format,o:octal_format,r:repr_format,a:ascii_format,g:function(t,e){return floating_point_format(t,!1,e)},G:function(t,e){return floating_point_format(t,!0,e)},f:function(t,e){return floating_point_decimal_format(t,!1,e)},F:function(t,e){return floating_point_decimal_format(t,!0,e)},e:function(t,e){return floating_point_exponential_format(t,!1,e)},E:function(t,e){return floating_point_exponential_format(t,!0,e)},x:function(t,e){return signed_hex_format(t,!1,e)},X:function(t,e){return signed_hex_format(t,!0,e)},c:single_char_format,0:function(t,e){return num_flag("0",e)},1:function(t,e){return num_flag("1",e)},2:function(t,e){return num_flag("2",e)},3:function(t,e){return num_flag("3",e)},4:function(t,e){return num_flag("4",e)},5:function(t,e){return num_flag("5",e)},6:function(t,e){return num_flag("6",e)},7:function(t,e){return num_flag("7",e)},8:function(t,e){return num_flag("8",e)},9:function(t,e){return num_flag("9",e)},"-":neg_flag," ":space_flag,"+":sign_flag,".":decimal_point_flag,"#":alternate_flag},UnsupportedChar=function(){this.name="UnsupportedChar"};str.__mod__=function(t,e){var r,n=t.length,_=0,i=null;_b_.isinstance(e,_b_.tuple)?i=0:r=_b_.getattr(e,"__getitem__",_b_.None);var a="",o=function(t){++_;var e=kwarg_key.exec(t.substring(c));if(!e)throw _b_.ValueError.$factory("incomplete format key");var n=e[1];c+=e[0].length;try{var i=r(n)}catch(t){if("KeyError"===t.name)throw t;throw _b_.TypeError.$factory("format requires a mapping")}return u(t,i)},s=function(t){var r;if(null===i)r=e;else if(void 0===(r=e[i++]))throw _b_.TypeError.$factory("not enough arguments for format string");return u(t,r)},u=function(t,e){for(var r={pad_char:" "};;){var n=char_mapping[t[c]];try{if(void 0===n)throw new UnsupportedChar;var _=n(e,r);if(void 0!==_)return _;++c}catch(r){if("UnsupportedChar"==r.name){if(invalid_char=t[c],void 0===invalid_char)throw _b_.ValueError.$factory("incomplete format");throw _b_.ValueError.$factory("unsupported format character '"+invalid_char+"' (0x"+invalid_char.charCodeAt(0).toString(16)+") at index "+c)}if("NotANumber"===r.name){var i=t[c],a=e.__class__;throw a=a?a.__name__:"string"==typeof e?"str":typeof e,_b_.TypeError.$factory("%"+i+" format: a number is required, not "+a)}throw r}}},l=0;do{var c=t.indexOf("%",_);if(c<0){a+=t.substring(_);break}if(a+=t.substring(_,c),!(++ci)throw _b_.TypeError.$factory("not enough arguments for format string");if(e.length":t.toString()},str.toString=function(){return"string!"};var $comp_func=function(t,e){if("string"!=typeof e)throw _b_.TypeError.$factory("unorderable types: 'str' > "+$B.get_class(e).__name__+"()");return t>e};$comp_func+="";var $comps={">":"gt",">=":"ge","<":"lt","<=":"le"};for(var $op in $comps)eval("str.__"+$comps[$op]+"__ = "+$comp_func.replace(/>/gm,$op));$B.make_rmethods(str);var $notimplemented=function(t,e){throw NotImplementedError.$factory("OPERATOR not implemented for class str")},from_unicode=["title","capitalize","casefold","islower","isupper","istitle","isspace","isalpha","isalnum","isdecimal","isdigit","isnumeric","isidentifier","isprintable","lower","swapcase","upper"];function parse_format(t){var e,r,n,_=t.split(":"),i=[];if(1==_.length?e=t:(e=_[0],n=_.splice(1).join(":")),(_=e.split("!")).length>1&&(e=_[0],1!==(r=_[1]).length||-1=="ras".search(r)))throw _b_.ValueError.$factory("wrong conversion flag "+r);if(void 0!==e){e=e.replace(/\.[_a-zA-Z][_a-zA-Z0-9]*|\[[_a-zA-Z][_a-zA-Z0-9]*\]|\[[0-9]+\]/g,(function(t){return i.push(t),""}))}return{name:e,name_ext:i,conv:r,spec:n||""}}function $re_escape(t){for(var e="[.*+?|()$^",r=0,n=e.length;r=0;)n++,_+=t.sub.length;return n},str.encode=function(t,e){if(void 0===e&&(e="utf-8"),"rot13"==e||"rot_13"==e){for(var r="",n=0,_=t.length;n<_;n++){var i=t.charAt(n);r+="a"<=i&&i<="m"||"A"<=i&&i<="M"?String.fromCharCode(String.charCodeAt(i)+13):"m"0;)a+=" ",_++;break;case"\r":case"\n":a+=o,_=0;break;default:a+=o,_++}i++}return a},str.find=function(){var t=$B.args("str.find",4,{self:null,sub:null,start:null,end:null},["self","sub","start","end"],arguments,{start:0,end:null},null,null);if(check_str(t.sub),normalize_start_end(t),!isinstance(t.start,_b_.int)||!isinstance(t.end,_b_.int))throw _b_.TypeError.$factory("slice indices must be integers or None or have an __index__ method");var e=t.self.substring(t.start,t.end);if(0==t.sub.length&&t.start==t.self.length)return t.self.length;if(e.length+t.sub.length==0)return-1;for(var r=e.length-t.sub.length,n=0;n<=r;n++)if(e.substr(n,t.sub.length)==t.sub)return t.start+n;return-1},str.format=function(t){for(var e,r=$B.args("format",1,{self:null},["self"],arguments,{},"$args","$kw"),n=0,_=t.length,i="",a=[],o=0;n<_;)if("{"==(e=t.charAt(n))&&"{"==t.charAt(n+1))i+="{",n+=2;else if("}"==e&&"}"==t.charAt(n+1))i+="}",n+=2;else if("{"==e){a.push(i);for(var s=n+1,u=1;s<_;)if("{"==t.charAt(s))u++,s++;else if("}"==t.charAt(s)){if(s++,0==--u){var l=t.substring(n+1,s-1),c=parse_format(l);if(c.name||(c.name=o+"",o++),void 0!==c.spec){function f(t,e){return/\d+/.exec(e)?_b_.tuple.__getitem__(r.$args,parseInt(e)):_b_.dict.__getitem__(r.$kw,e)}c.spec=c.spec.replace(/\{(.+?)\}/g,f)}a.push(c),i="";break}}else s++;if(u>0)throw ValueError.$factory("wrong format "+t);n=s}else i+=e,n++;i&&a.push(i);for(var p,h="",$=0;$-1){n=parseInt(p.name);var d=_b_.tuple.__getitem__(r.$args,n)}else d=_b_.dict.__getitem__(r.$kw,p.name);for(var g=0;g-1&&(b=parseInt(b)),d=_b_.getattr(d,"__getitem__")(b)}}"a"==p.conv?d=_b_.ascii(d):"r"==p.conv?d=_b_.repr(d):"s"==p.conv&&(d=_b_.str.$factory(d)),d.$is_class||d.$factory?h+=d.__class__.__format__(d,p.spec):h+=_b_.getattr(d,"__format__")(p.spec)}else h+=a[$];return h},str.format_map=function(t){throw NotImplementedError.$factory("function format_map not implemented yet")},str.index=function(t){var e=str.find.apply(null,arguments);if(-1===e)throw _b_.ValueError.$factory("substring not found");return e},str.join=function(){for(var t=$B.args("join",2,{self:null,iterable:null},["self","iterable"],arguments,{},null,null),e=_b_.iter(t.iterable),r=[],n=0,_=$B.current_exception;;)try{var i=_b_.next(e);if(!isinstance(i,str))throw _b_.TypeError.$factory("sequence item "+n+": expected str instance, "+$B.get_class(i).__name__+" found");r.push(i)}catch(t){if(_b_.isinstance(t,_b_.StopIteration)){$B.current_exception=_;break}throw t}return r.join(t.self)},str.ljust=function(t){var e=$B.args("ljust",3,{self:null,width:null,fillchar:null},["self","width","fillchar"],arguments,{fillchar:" "},null,null);return e.width<=t.length?t:t+e.fillchar.repeat(e.width-t.length)},str.lstrip=function(t,e){var r=$B.args("lstrip",2,{self:null,chars:null},["self","chars"],arguments,{chars:_b_.None},null,null);if(r.chars===_b_.None)return r.self.trimLeft();for(var n=0;n-1&&i.length>=n){var a=i.slice(n).join("");return r+i.slice(0,n).join(r)+a}return r+i.join(r)+r}i=str.split(t,e,n);var o=t,s=-1;if(0==e.length){o=r;for(var u=0;u0&&!((s=o.indexOf(e,s))<0);)o=o.substr(0,s)+r+o.substr(s+e.length),s+=r.length,n--;return o},str.rfind=function(t){var e=$B.args("rfind",4,{self:null,sub:null,start:null,end:null},["self","sub","start","end"],arguments,{start:0,end:null},null,null);if(normalize_start_end(e),check_str(e.sub),0==e.sub.length)return e.start>e.self.length?-1:e.self.length;for(var r=e.sub.length,n=e.end-r;n>=e.start;n--)if(e.self.substr(n,r)==e.sub)return n;return-1},str.rindex=function(){var t=str.rfind.apply(null,arguments);if(-1==t)throw _b_.ValueError.$factory("substring not found");return t},str.rjust=function(t){var e=$B.args("rjust",3,{self:null,width:null,fillchar:null},["self","width","fillchar"],arguments,{fillchar:" "},null,null);return e.width<=t.length?t:e.fillchar.repeat(e.width-t.length)+t},str.rpartition=function(t,e){var r=$B.args("rpartition",2,{self:null,sep:null},["self","sep"],arguments,{},null,null);check_str(r.sep);t=reverse(r.self),e=reverse(r.sep);for(var n=str.partition(t,e).reverse(),_=0;_=0;n--)if(-1==r.chars.indexOf(r.self.charAt(n)))return r.self.substring(0,n+1);return""},str.split=function(){var t=$B.args("split",3,{self:null,sep:null,maxsplit:null},["self","sep","maxsplit"],arguments,{sep:_b_.None,maxsplit:-1},null,null),e=t.sep,r=t.maxsplit,n=t.self,_=0;if(r.__class__===$B.long_int&&(r=parseInt(r.value)),""==e)throw _b_.ValueError.$factory("empty separator");if(e===_b_.None){for(var i=[];_-1;)_++;if(_===n.length-1)return[n];for(var a="";;){if(-1==n.charAt(_).search(/\s/))""==a?a=n.charAt(_):a+=n.charAt(_);else if(""!==a){if(i.push(a),-1!==r&&i.length==r+1)return i.pop(),i.push(a+n.substr(_)),i;a=""}if(++_>n.length-1){a&&i.push(a);break}}return i}i=[];var o="",s=e.length;if(0==r)return[n];for(;_-1&&i.length>=r)return i.push(n.substr(_)),i;o=""}else o+=n.charAt(_),_++;return i.push(o),i},str.splitlines=function(t){var e=$B.args("splitlines",2,{self:null,keepends:null},["self","keepends"],arguments,{keepends:!1},null,null);if(!_b_.isinstance(e.keepends,[_b_.bool,_b_.int]))throw _b_.TypeError.$factory("integer argument expected, got "+$B.get_class(e.keepends).__name);var r=_b_.int.$factory(e.keepends);if(r){for(var n=[],_=i,i=0,t=e.self;i=e&&-1!=t.chars.indexOf(t.self.charAt(r));r--);return t.self.substring(e,r+1)},str.translate=function(t,e){var r=[],n=0;if(isinstance(e,_b_.dict))for(var _=0,i=t.length;_";switch(typeof t){case"string":return t;case"number":if(isFinite(t))return t.toString()}try{if(t.$is_class||t.$factory)return $B.$getattr(t.__class__,"__str__")(t);var e=$B.$getattr(t,"__str__")}catch(r){console.log("no __str__ for",t),console.log("err ",r);try{e=getattr(t,"__repr__")}catch(e){return $B.debug>1&&console.log(e),console.log("Warning - no method __str__ or __repr__, default to toString",t),t.toString()}}return $B.$call(e)()},str.__new__=function(t){if(void 0===t)throw _b_.TypeError.$factory("str.__new__(): not enough arguments");return{__class__:t}},$B.set_func_names(str,"builtins");var StringSubclass=$B.StringSubclass={__class__:_b_.type,__mro__:[object],__name__:"str",$is_class:!0};for(var $attr in str)"function"==typeof str[$attr]&&(StringSubclass[$attr]=function(t){return function(){var e=[],r=0;if(arguments.length>0){e=[arguments[0].valueOf()],r=1;for(var n=1,_=arguments.length;n<_;n++)e[r++]=arguments[n]}return str[t].apply(null,e)}}($attr));function fstring_expression(){this.type="expression",this.expression="",this.conversion=null,this.fmt=null}StringSubclass.__new__=function(t){return{__class__:t}},$B.set_func_names(StringSubclass,"builtins"),_b_.str=str,$B.parse_format_spec=function(t){if(""==t)this.empty=!0;else{var e=0,r="<>=^",n="0123456789",_=r.indexOf(t.charAt(0));-1!=_?t.charAt(1)&&-1!=r.indexOf(t.charAt(1))?(this.fill=t.charAt(0),this.align=t.charAt(1),e=2):(this.align=r[_],this.fill=" ",e++):(_=r.indexOf(t.charAt(1)),t.charAt(1)&&-1!=_&&(this.align=r[_],this.fill=t.charAt(0),e=2));var i=t.charAt(e);for("+"!=i&&"-"!=i&&" "!=i||(this.sign=i,e++,i=t.charAt(e)),"#"==i&&(this.alternate=!0,e++,i=t.charAt(e)),"0"==i&&(this.fill="0",this.align="=",e++,i=t.charAt(e));i&&n.indexOf(i)>-1;)void 0===this.width?this.width=i:this.width+=i,e++,i=t.charAt(e);if(void 0!==this.width&&(this.width=parseInt(this.width)),","==i&&(this.comma=!0,e++,i=t.charAt(e)),"."==i){if(-1==n.indexOf(t.charAt(e+1)))throw _b_.ValueError.$factory("Missing precision in format spec");for(this.precision=t.charAt(e+1),e+=2,i=t.charAt(e);i&&n.indexOf(i)>-1;)this.precision+=i,e++,i=t.charAt(e);this.precision=parseInt(this.precision)}if(i&&"bcdeEfFgGnosxX%".indexOf(i)>-1&&(this.type=i,e++,i=t.charAt(e)),e!==t.length)throw _b_.ValueError.$factory("Invalid format specifier")}this.toString=function(){return(void 0===this.fill?"":_b_.str.$factory(this.fill))+(this.align||"")+(this.sign||"")+(this.alternate?"#":"")+(this.sign_aware?"0":"")+(this.width||"")+(this.comma?",":"")+(this.precision?"."+this.precision:"")+(this.type||"")}},$B.format_width=function(t,e){if(e.width&&t.length":return r.repeat(_)+t;case"=":return"+-".indexOf(t.charAt(0))>-1?t.charAt(0)+r.repeat(_)+t.substr(1):r.repeat(_)+t;case"^":var i=parseInt(_/2);return r.repeat(i)+t+r.repeat(_-i)}}return t},$B.parse_fstring=function(t){for(var e,r=[],n=0,_="",i=null,a=0;n-1){if(0==_.expression.length)throw Error("f-string: empty expression not allowed");if(-1=="ars".indexOf(t.charAt(o+1)))throw Error("f-string: invalid conversion character: expected 's', 'r', or 'a'");_.conversion=t.charAt(o+1),o+=2}else if("("==e)s++,_.expression+=e,o++;else if(")"==e)s--,_.expression+=e,o++;else if('"'==e)if('"""'==t.substr(o,3)){if(-1==(l=t.indexOf('"""',o+3)))throw Error("f-string: unterminated string");var u=t.substring(o,l+3);u=u.replace("\n","\\n\\"),_.expression+=u,o=l+3}else{var l;if(-1==(l=t.indexOf('"',o+1)))throw Error("f-string: unterminated string");_.expression+=t.substring(o,l+1),o=l+1}else 0==s&&":"==e?(_.fmt=!0,_.expression+=e,o++):(_.expression+=e,o++)}if(a>0)throw Error("f-string: expected '}'")}return _.length>0&&r.push(_),r}}(__BRYTHON__),function($B){var bltns=$B.InjectBuiltins();eval(bltns);var object=_b_.object,str_hash=_b_.str.__hash__,$N=_b_.None;function $DictClass(t,e){this.iter=null,this.__class__=dict,dict.clear(this);for(var r=dict.__setitem__,n=t.length;n--;)r(t[n],e[n])}var dict={__class__:_b_.type,__module__:"builtins",__mro__:[object],__name__:"dict",$is_class:!0,$native:!0},$key_iterator=function(t){this.d=t,this.current=0,this.iter=new $item_generator(t)};$key_iterator.prototype.length=function(){return this.iter.items.length},$key_iterator.prototype.next=function(){return this.iter.next()[0]};var $value_iterator=function(t){this.d=t,this.current=0,this.iter=new $item_generator(t)};$value_iterator.prototype.length=function(){return this.iter.items.length},$value_iterator.prototype.next=function(){return this.iter.next()[1]};var $item_generator=function(t){if(this.i=0,t.$jsobj){for(var e in this.items=[],t.$jsobj)if("$"!=e.charAt(0)){var r=t.$jsobj[e];void 0===r?r=_b_.NotImplemented:null===r&&(r=$N),this.items.push([e,r])}}else{var n=[];for(var _ in t.$numeric_dict)n.push([parseFloat(_),t.$numeric_dict[_]]);for(var _ in t.$string_dict)n.push([_,t.$string_dict[_]]);for(var _ in t.$object_dict)n.push(t.$object_dict[_]);this.items=n}};$item_generator.prototype.next=function(){if(this.i0},dict.__contains__=function(){var t=$B.args("__contains__",2,{self:null,item:null},["self","item"],arguments,{},null,null),e=t.self,r=t.item;if(e.$jsobj)return void 0!==e.$jsobj[r];switch(typeof r){case"string":return void 0!==e.$string_dict[r];case"number":return void 0!==e.$numeric_dict[r]}var n=hash(r);return!(void 0===e.$str_hash[n]||!$B.rich_comp("__eq__",r,e.$str_hash[n]))||(!(void 0===e.$numeric_dict[n]||!$B.rich_comp("__eq__",r,n))||void 0!==e.$object_dict[n]&&$B.rich_comp("__eq__",r,e.$object_dict[n][0]))},dict.__delitem__=function(){var t=$B.args("__eq__",2,{self:null,arg:null},["self","arg"],arguments,{},null,null),e=t.self,r=t.arg;if(e.$jsobj){if(void 0===e.$jsobj[r])throw KeyError.$factory(r);return delete e.$jsobj[r],$N}switch(typeof r){case"string":if(void 0===e.$string_dict[r])throw KeyError.$factory(_b_.str.$factory(r));return delete e.$string_dict[r],delete e.$str_hash[str_hash(r)],$N;case"number":if(void 0===e.$numeric_dict[r])throw KeyError.$factory(_b_.str.$factory(r));return delete e.$numeric_dict[r],$N}var n=hash(r);return void 0!==e.$object_dict[n]&&delete e.$object_dict[n],e.$jsobj&&delete e.$jsobj[r],$N},dict.__eq__=function(){var t=$B.args("__eq__",2,{self:null,other:null},["self","other"],arguments,{},null,null),e=t.self,r=t.other;if(!isinstance(r,dict))return!1;if(e.$jsobj&&(e=jsobj2dict(e.$jsobj)),r.$jsobj&&(r=jsobj2dict(r.$jsobj)),dict.__len__(e)!=dict.__len__(r))return!1;if(e.$numeric_dict.length!=r.$numeric_dict.length||e.$string_dict.length!=r.$string_dict.length||e.$object_dict.length!=r.$object_dict.length)return!1;for(var n in e.$numeric_dict)if(!$B.rich_comp("__eq__",r.$numeric_dict[n],e.$numeric_dict[n]))return!1;for(var n in e.$string_dict)if(!$B.rich_comp("__eq__",r.$string_dict[n],e.$string_dict[n]))return!1;for(var n in e.$object_dict)if(!$B.rich_comp("__eq__",r.$object_dict[n][1],e.$object_dict[n][1]))return!1;return!0},dict.__getitem__=function(){var t=$B.args("__getitem__",2,{self:null,arg:null},["self","arg"],arguments,{},null,null),e=t.self,r=t.arg;if(e.$jsobj){if(!e.$jsobj.hasOwnProperty(r))throw _b_.KeyError.$factory(str.$factory(r));return void 0===e.$jsobj[r]?_b_.NotImplemented:null===e.$jsobj[r]?$N:e.$jsobj[r]}switch(typeof r){case"string":if(void 0!==e.$string_dict[r])return e.$string_dict[r];break;case"number":if(void 0!==e.$numeric_dict[r])return e.$numeric_dict[r]}var n=_b_.hash(r),_=function(t){return $B.rich_comp("__eq__",r,t)},i=e.$str_hash[n];if(void 0!==i&&_(i))return e.$string_dict[i];if(void 0!==e.$numeric_dict[n]&&_(n))return e.$numeric_dict[n];var a=e.$object_dict[n];if(void 0!==a)return _(e.$object_dict[n][0]),e.$object_dict[n][1];if(e.__class__!==dict)try{var o=getattr(e.__class__,"__missing__");return o(e,r)}catch(t){}throw KeyError.$factory(_b_.str.$factory(r))},dict.__hash__=None,dict.__init__=function(t){for(var e=[],r=1;r0;)_(t,n[r-1][0],n[r-1][1]);return $N}if(void 0===n.$nat&&isinstance(n,dict))return $copy_dict(t,n),$N;if(n.__class__===$B.JSObject)return t.$jsobj=n.js,$N}var i=$B.args("dict",0,{},[],e,{},"args","kw"),a=(e=i.args,i.kw);if(e.length>0){if(isinstance(e[0],dict))return $B.$copy_dict(t,e[0]),$N;if(Array.isArray(e[0])){var o=e[0];for(r=o.length-1,_=dict.__setitem__;r-- >0;)_(t,o[r-1][0],o[r-1][1])}else for(var s=$B.$iter(e[0]),u=$B.current_exception;;)try{var l=next(s),c=getattr(l,"__getitem__")(0),f=getattr(l,"__getitem__")(1);dict.__setitem__(t,c,f)}catch(t){if(t.__class__===_b_.StopIteration){$B.current_exception=u;break}throw t}}return dict.__len__(a)>0&&$copy_dict(t,a),$N};var $dict_iterator=$B.$iterator_class("dict iterator");dict.__iter__=function(t){return dict.keys(t)},dict.__len__=function(t){var e=0;if(t.$jsobj){for(var r in t.$jsobj)"$"!=r.charAt(0)&&e++;return e}for(var n in t.$numeric_dict)e++;for(var n in t.$string_dict)e++;for(var n in t.$object_dict)e+=t.$object_dict[n].length;return e},dict.__ne__=function(t,e){return!dict.__eq__(t,e)},dict.__new__=function(t){if(void 0===t)throw _b_.TypeError.$factory("int.__new__(): not enough arguments");return{__class__:t,$numeric_dict:{},$object_dict:{},$string_dict:{},$str_hash:{}}},dict.__next__=function(t){null==t.$iter&&(t.$iter=new $item_generator(t));try{return t.$iter.next()}catch(t){if("StopIteration"!==t.__name__)throw t}},dict.__repr__=function(t){if(t.$jsobj)return dict.__repr__(jsobj2dict(t.$jsobj));var e=[];return new $item_generator(t).as_list().forEach((function(r){if(!t.$jsobj&&r[1]===t||t.$jsobj&&r[1]===t.$jsobj)e.push(repr(r[0])+": {...}");else try{e.push(repr(r[0])+": "+repr(r[1]))}catch(t){e.push(repr(r[0])+": ")}})),"{"+e.join(", ")+"}"},dict.__setitem__=function(t,e,r){var n=$B.args("__setitem__",3,{self:null,key:null,value:null},["self","key","value"],arguments,{},null,null);return dict.$setitem(n.self,n.key,n.value)},dict.$setitem=function(t,e,r){if(t.$jsobj)return t.$jsobj.__class__===_b_.type?(t.$jsobj[e]=$B.pyobj2jsobj(r),"__init__"!=e&&"__new__"!=e||(t.$jsobj.$factory=$B.$instance_creator(t.$jsobj))):t.$jsobj[e]=$B.pyobj2jsobj(r),$N;switch(typeof e){case"string":return t.$string_dict[e]=r,t.$str_hash[str_hash(e)]=e,$N;case"number":return t.$numeric_dict[e]=r,$N}var n=hash(e),_=function(t){return $B.rich_comp("__eq__",e,t)};if(void 0!==t.$numeric_dict[n]&&_(n))return t.$numeric_dict[n]=r,$N;var i=t.$str_hash[n];return void 0!==i&&_(i)?(t.$string_dict[i]=r,$N):(void 0!==t.$object_dict[n]&&_(t.$object_dict[n][0]),t.$object_dict[n]=[e,r],$N)},dict.__str__=dict.__repr__,$B.make_rmethods(dict),dict.clear=function(){var t=$B.args("clear",1,{self:null},["self"],arguments,{},null,null),e=t.self;if(e.$numeric_dict={},e.$string_dict={},e.$str_hash={},e.$object_dict={},e.$jsobj)for(var r in e.$jsobj)"$"!==r.charAt(0)&&"__class__"!==r&&delete e.$jsobj[r];return $N},dict.copy=function(t){var e=$B.args("copy",1,{self:null},["self"],arguments,{},null,null),r=(t=e.self,_b_.dict.$factory());return $copy_dict(r,t),r},dict.fromkeys=function(){for(var t=$B.args("fromkeys",3,{cls:null,keys:null,value:null},["cls","keys","value"],arguments,{value:_b_.None},null,null),e=t.keys,r=t.value,n=t.cls,_=$B.$call(n)(),i=$B.$iter(e),a=$B.current_exception;;)try{var o=_b_.next(i);n===dict?dict.__setitem__(_,o,r):_b_.getattr(_,"__setitem__")(o,r)}catch(t){if($B.is_exc(t,[_b_.StopIteration]))return $B.current_exception=a,_;throw t}},dict.get=function(){var t=$B.args("get",3,{self:null,key:null,_default:null},["self","key","_default"],arguments,{_default:$N},null,null);try{return dict.__getitem__(t.self,t.key)}catch(e){if(_b_.isinstance(e,_b_.KeyError))return t._default;throw e}};var $dict_itemsDict=$B.$iterator_class("dict_items");dict.items=function(t){if(arguments.length>1){var e=arguments.length-1,r="items() takes no arguments ("+e+" given)";throw _b_.TypeError.$factory(r)}return $iterator_wrapper(new $item_iterator(t),$dict_itemsDict)};var $dict_keysDict=$B.$iterator_class("dict_keys");dict.keys=function(t){if(arguments.length>1){var e=arguments.length-1,r="keys() takes no arguments ("+e+" given)";throw _b_.TypeError.$factory(r)}return $iterator_wrapper(new $key_iterator(t),$dict_keysDict)},dict.pop=function(){var t=$B.args("pop",3,{self:null,key:null,_default:null},["self","key","_default"],arguments,{_default:$N},null,null),e=t.self,r=t.key,n=t._default;try{var _=dict.__getitem__(e,r);return dict.__delitem__(e,r),_}catch(t){if(t.__class__===_b_.KeyError){if(void 0!==n)return n;throw t}throw t}},dict.popitem=function(t){var e=$B.current_exception;try{var r=new $item_iterator(t).next();return dict.__delitem__(t,r[0]),_b_.tuple.$factory(r)}catch(t){if(t.__class__==_b_.StopIteration)throw $B.current_exception=e,KeyError.$factory("'popitem(): dictionary is empty'")}},dict.setdefault=function(){var t=$B.args("setdefault",3,{self:null,key:null,_default:null},["self","key","_default"],arguments,{_default:$N},null,null),e=t.self,r=t.key,n=t._default;try{return dict.__getitem__(e,r)}catch(t){return void 0===n&&(n=$N),dict.__setitem__(e,r,n),n}},dict.update=function(t){var e=$B.args("update",1,{self:null},["self"],arguments,{},"args","kw"),r=(t=e.self,e.args),n=e.kw;if(r.length>0){var _=r[0];if(isinstance(_,dict))_.$jsobj&&(_=jsobj2dict(_)),$copy_dict(t,_);else if(hasattr(_,"__getitem__")&&hasattr(_,"keys"))for(var i=_b_.list.$factory(getattr(_,"keys")()),a=dict.__setitem__,o=i.length;o--;){var s=getattr(_,"__getitem__")(i[o]);a(t,i[o],s)}}return $copy_dict(t,n),$N};var $dict_valuesDict=$B.$iterator_class("dict_values");dict.values=function(t){if(arguments.length>1){var e=arguments.length-1,r="values() takes no arguments ("+e+" given)";throw _b_.TypeError.$factory(r)}return $iterator_wrapper(new $value_iterator(t),$dict_valuesDict)},dict.$factory=function(t,e){var r={__class__:dict,$numeric_dict:{},$object_dict:{},$string_dict:{},$str_hash:{}};if(void 0===t)return r;if(void 0===e){if(Array.isArray(t)){for(var n=-1,_=t.length-1,i=dict.__setitem__;n++<_;){var a=t[n];switch(typeof a[0]){case"string":r.$string_dict[a[0]]=a[1],r.$str_hash[str_hash(a[0])]=a[0];break;case"number":r.$numeric_dict[a[0]]=a[1];break;default:i(r,a[0],a[1])}}return r}if("kw"==t.$nat){var o=t.kw;for(var s in o)switch(typeof s){case"string":r.$string_dict[s]=o[s],r.$str_hash[str_hash(s)]=s;break;case"number":r.$numeric_dict[s]=o[s];break;default:i(r,s,o[s])}return r}if(t.$jsobj){for(var s in r.$jsobj={},t.$jsobj)r.$jsobj[s]=t.$jsobj[s];return r}}return dict.__init__(r,...arguments),r},_b_.dict=dict,$B.set_func_names(dict,"builtins"),dict.fromkeys=_b_.classmethod.$factory(dict.fromkeys),$B.$dict_iterator=function(t){return new $item_generator(t)},$B.$dict_length=dict.__len__,$B.$dict_getitem=dict.__getitem__,$B.$dict_get=dict.get,$B.$dict_set=dict.__setitem__,$B.$dict_contains=dict.__contains__,$B.$dict_items=function(t){return new $item_generator(t).as_list()},$B.$copy_dict=$copy_dict,$B.$dict_get_copy=dict.copy;var mappingproxy=$B.make_class("mappingproxy",(function(t){var e=obj_dict(t);return e.__class__=mappingproxy,e}));function jsobj2dict(t){var e=dict.$factory();for(var r in t)if("$"!=r.charAt(0)&&"__class__"!==r){if(void 0===t[r])continue;t[r].$jsobj===t?e.$string_dict[r]=e:e.$string_dict[r]=t[r]}return e}mappingproxy.__setitem__=function(){throw _b_.TypeError.$factory("'mappingproxy' object does not support item assignment")},$B.set_func_names(mappingproxy,"builtins"),$B.obj_dict=function(t){var e=$B.get_class(t);if(void 0!==e&&e.$native)throw _b_.AttributeError.$factory(e.__name__+" has no attribute '__dict__'");var r=dict.$factory();return r.$jsobj=t,r}}(__BRYTHON__),function($B){var _b_=$B.builtins,object=_b_.object,$N=_b_.None;function create_type(t){return $B.get_class(t).$factory()}function clone(t){var e=create_type(t);return e.$items=t.$items.slice(),e}var set={__class__:_b_.type,__module__:"builtins",__name__:"set",$is_class:!0,$native:!0,__add__:function(t,e){throw _b_.TypeError.$factory("unsupported operand type(s) for +: 'set' and "+typeof e)},__and__:function(t,e,r){$test(r,e);for(var n=create_type(t),_=0,i=t.$items.length;_=0;r--)if(isNaN(t.$items[r]))return!0;return!1}return t.$items.indexOf(e)>-1}if(t.$str&&"string"==typeof e)return t.$items.indexOf(e)>-1;_b_.isinstance(e,set)||_b_.hash(e);r=0;for(var n=t.$items.length;r-1&&t.$items.splice(o,1)}else for(var s=0;s-1?i.push(s):a.push(r)}else{for(var u=!1,l=0;!u&&l0)}catch(t){return!1}};var o=["NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","type","target","currentTarget","eventPhase","bubbles","cancelable","timeStamp","stopPropagation","preventDefault","initEvent"],s=["altKey","altLeft","button","cancelBubble","clientX","clientY","contentOverflow","ctrlKey","ctrlLeft","data","dataFld","dataTransfer","fromElement","keyCode","nextPage","offsetX","offsetY","origin","propertyName","reason","recordset","repeat","screenX","screenY","shiftKey","shiftLeft","source","srcElement","srcFilter","srcUrn","toElement","type","url","wheelDelta","x","y"];t.$isEvent=function(t){for(var e=!0,r=0;r");var c=t.DOMEvent={__class__:e.type,__mro__:[r],__name__:"DOMEvent"};c.__new__=function(t,e){var r=new Event(e);return r.__class__=c,void 0===r.preventDefault&&(r.preventDefault=function(){r.returnValue=!1}),void 0===r.stopPropagation&&(r.stopPropagation=function(){r.cancelBubble=!0}),r},c.__getattribute__=function(r,n){switch(n){case"__repr__":case"__str__":return function(){return""};case"x":return a(r).x;case"y":return a(r).y;case"data":return void 0!==r.dataTransfer?p.$factory(r.dataTransfer):r.data;case"target":if(void 0!==r.target)return m.$factory(r.target);case"char":return String.fromCharCode(r.which)}var _=r[n];if(void 0!==_){if("function"==typeof _){var i=function(){for(var e=[],n=0;n");var p={__class__:e.type,__name__:"Clipboard"};p.__getitem__=function(t,e){return t.data.getData(e)},p.__mro__=[r],p.__setitem__=function(t,e,r){t.data.setData(e,r)},p.$factory=function(t){return{data:t,__class__:p}},t.set_func_names(p,"");var h=t.OpenFile={__class__:e.type,__name__:"OpenFile",__mro__:[r]};h.$factory=function(t,e,r){var n={__class__:$OpenFileDict,file:t,reader:new FileReader};return"r"===e?n.reader.readAsText(t,r):"rb"===e&&n.reader.readAsBinaryString(t),n},h.__getattr__=function(t,e){return void 0!==t["get_"+e]?t["get_"+e]:t.reader[e]},h.__setattr__=function(t,e,r){var n=t.reader;if("on"==e.substr(0,2)){n.addEventListener(e.substr(2),(function(t){return r(f(t))}))}else{if("set_"+e in n)return n["set_"+e](r);e in n?n[e]=r:setattr(n,e,r)}},t.set_func_names(h,"");var $={File:function(){},FileReader:function(){}};$.File.__class__=e.type,$.File.__str__=function(){return""},$.FileReader.__class__=e.type,$.FileReader.__str__=function(){return""};var d={__class__:e.type,__name__:"Options",__delitem__:function(t,e){t.parent.options.remove(e.elt)},__getitem__:function(t,e){return m.$factory(t.parent.options[e])},__len__:function(t){return t.parent.options.length},__mro__:[r],__setattr__:function(t,e,r){t.parent.options[e]=r},__setitem__:function(e,r,n){e.parent.options[r]=t.$JS2Py(n)},__str__:function(t){return""},append:function(t,e){t.parent.options.add(e.elt)},insert:function(t,e,r){void 0===e?t.parent.options.add(r.elt):t.parent.options.add(r.elt,e)},item:function(t,e){return t.parent.options.item(e)},namedItem:function(t,e){return t.parent.options.namedItem(e)},remove:function(t,e){t.parent.options.remove(e.elt)},$factory:function(t){return{__class__:d,parent:t}}};t.set_func_names(d,"");var g={__class__:e.type,__name__:"CSSProperty"};g.__mro__=[r],g.__getattr__=function(t,e){return r.__getattribute__(t.js,e)},g.__setattr__=function(t,r,n){if("float"===r.toLowerCase())t.js.cssFloat=n,t.js.styleFloat=n;else{switch(r){case"top":case"left":case"height":case"width":case"borderWidth":e.isinstance(n,e.int)&&(n+="px")}t.js[r]=n}},g.$factory=function(t){return{__class__:g,js:t}},t.set_func_names(g,"");var m={__class__:e.type,__mro__:[r],__name__:"DOMNode"};function b(t){for(var e=[],r=0;r-1)return function(t){return void 0===t?(_.elt.select(),e.None):m.select(_,t)};var p=_.elt[i];if(void 0===p&&t.aliased_names[i]&&(p=_.elt["$$"+i]),void 0===p)return r.__getattribute__(_,i);if(void 0!==(s=p)){if(null===s)return e.None;if("function"==typeof s){var h=function(r,_){return function(){for(var i=[],a=0,o=0;o0){for(var n=B.$factory(),_=n.children.length,i=0;i"}return""},m.__setattr__=function(r,n,_){if("on"!=n.substr(0,2)){switch(n){case"left":case"top":case"width":case"height":if("CANVAS"==r.elt.tagName)return r.elt.style[n]=_,e.None;if(1==r.elt.nodeType)return r.elt.style[n]=_+"px",e.None}if(void 0!==m["set_"+n])return m["set_"+n](r,_);function i(e){console.log(e);var r=t.last(t.frames_stack);if(t.debug>0){var n=r[1].$line_info.split(",");if(console.log("module",n[1],"line",n[0]),t.$py_src.hasOwnProperty(n[1])){var _=t.$py_src[n[1]];console.log(_.split("\n")[parseInt(n[0])-1])}}else console.log("module",r[2])}for(var a=Object.getPrototypeOf(r.elt),o=0;a&&a!==Object.prototype&&o++<10;){var s=Object.getOwnPropertyDescriptors(a);if(!s||"function"!=typeof s.hasOwnProperty)break;if(s.hasOwnProperty(n)){s[n].writable||void 0!==s[n].set||i("Warning: property '"+n+"' is not writable. Use element.attrs['"+n+"'] instead.");break}a=Object.getPrototypeOf(a)}return r.elt.style&&void 0!==r.elt.style[n]&&i("Warning: '"+n+"' is a property of element.style"),r.elt[n]=_,e.None}t.$bool(_)?m.bind(r,n.substr(2),_):m.unbind(r,n.substr(2))},m.__setitem__=function(t,e,r){"number"==typeof e?t.elt.childNodes[e]=r:"string"==typeof e&&t.elt.attributes&&(t.elt instanceof SVGElement?t.elt.setAttributeNS(null,e,r):"function"==typeof t.elt.setAttribute&&t.elt.setAttribute(e,r))},m.abs_left={__get__:function(t){return i(t.elt).left},__set__:function(){throw e.AttributeError.$factory("'DOMNode' objectattribute 'abs_left' is read-only")}},m.abs_top={__get__:function(t){return i(t.elt).top},__set__:function(){throw e.AttributeError.$factory("'DOMNode' objectattribute 'abs_top' is read-only")}},m.bind=function(e,r){if(2==arguments.length)return n=e,_=r,function(t){return m.bind(n,_,t),t};for(var n,_,i=2;i");var v={__class__:e.type,__name__:"query",__contains__:function(t,e){return t._keys.indexOf(e)>-1},__getitem__:function(t,e){var r=t._values[e];if(void 0===r)throw KeyError.$factory(e);return 1==r.length?r[0]:r}},y=t.$iterator_class("query string iterator");v.__iter__=function(e){return t.$iterator(e._keys,y)},v.__mro__=[r],v.getfirst=function(t,r,n){var _=t._values[r];return void 0===_?void 0===n?e.None:n:_[0]},v.getlist=function(t,e){var r=t._values[e];return void 0===r?[]:r},v.getvalue=function(t,r,n){try{return v.__getitem__(t,r)}catch(t){return void 0===n?e.None:n}},v.keys=function(t){return t._keys},m.query=function(t){for(var e={__class__:v,_keys:[],_values:{}},r=location.search.substr(1).split("&"),n=0;n-1?e._values[a].push(o):(e._keys.push(a),e._values[a]=[o])}return e};var B={__class__:e.type,__mro__:[r],__name__:"TagSum",appendChild:function(t,e){t.children.push(e)},__add__:function(r,n){return t.get_class(n)===B?r.children=r.children.concat(n.children):e.isinstance(n,[e.str,e.int,e.float,e.dict,e.set,e.list])?r.children=r.children.concat(m.$factory(document.createTextNode(n))):r.children.push(n),r},__radd__:function(t,e){var r=B.$factory();return r.children=t.children.concat(m.$factory(document.createTextNode(e))),r},__repr__:function(t){for(var e=" ",r=0;r"),t.TagSum=B;var x=n.$factory(_);x.get_postMessage=function(t,r){if(e.isinstance(t,dict)){var n={__class__:"dict"};e.list.$factory(e.dict.items(t)).forEach((function(t){n[t[0]]=t[1]})),t=n}return _.postMessage(t,r)},t.DOMNode=m,t.win=x}(__BRYTHON__),function($B){var _b_=$B.builtins,bltns=$B.InjectBuiltins();function rstrip(t,e){for(var r=e||" \t\n",n=0,_=t.length;n<_&&r.indexOf(t.charAt(_-1-n))>-1;)n++;return t.substr(0,_-n)}function jscode_namespace(t,e,r){var n="";"store"===e&&(n=" = {}");var _='for(var attr in this.blocks){eval("var " + attr + " = this.blocks[attr]")};var $locals_'+t+" = this.env"+n+', $local_name = "'+t+'", $locals = $locals_'+t+";";return r&&(_+="$locals.$parent = $locals_"+r.replace(/\./g,"_")+";"),_}function make_node(t,e){if("marker"!==e.type){if(e.C.$genjs)var r=e.C.$genjs;else r=e.C.$genjs=e.C.to_js();var n=!1,_=!1,i=!1;if(e.locals_def){var a=e.func_node.parent_block.id;if("generator"==e.func_node.ntype)r=jscode_namespace(t.iter_id,"store",a);else r+="$locals.$parent = $locals_"+a+";"}if(e.is_catch&&(_=!0,n=!0),e.is_except&&(_=!0),"node"==e.C.type){var o=e.C.tree[0],s=o.type;switch(o.type){case"except":_=!0,n=!0;break;case"single_kw":n=!0,"else"==o.token&&(i=!0),"finally"==o.token&&(_=!0);break;case"condition":"elif"==o.token&&(i=!0,n=!0),"if"==o.token&&(n=!0)}}if(r){var u=new $B.genNode(r);if(u.line_num=e.line_num,"yield"==s){var l=t.yields.length,c="return ["+(r=rstrip(r,";"))+", "+l+"]";u.data=c,t.yields.push(u)}else if(e.is_set_yield_value){l=t.yields.length;var f="var sent_value = this.sent_value === undefined ? None : this.sent_value;";f+="if(sent_value.__class__ === $B.$GeneratorSendError){throw sent_value.err}",f+="var $yield_value"+r+" = sent_value;",f+="this.sent_value = None",u.data=f}else"break"!=s&&"continue"!=s||(u["is_"+s]=!0,u.loop_num=e.C.tree[0].loop_ctx.loop_num);u.is_yield="yield"==s||"return"==s,u.is_cond=n,u.is_except=_,u.is_if="condition"==s&&"if"==o.token,u.is_try=e.is_try,u.is_else=i,u.loop_start=e.loop_start,u.is_set_yield_value=e.is_set_yield_value;for(var p=0,h=e.children.length;p"}},$B.GeneratorBreak={},$B.$GeneratorSendError={};var $GeneratorReturn={};function in_loop(t){for(;t;){if(void 0!==t.loop_start)return t;t=t.parent}return!1}function in_try(t){for(var e=[],r=t.parent,n=0;r;)r.is_try&&(e[n++]=r),r=r.parent;return e}$B.generator_return=function(t){return{__class__:$GeneratorReturn,value:t}};var $BRGeneratorDict={__class__:_b_.type,__name__:"generator",__module__:"builtins",$is_class:!0};function remove_line_nums(t){for(var e=0;e0){var h=new $B.genNode("try");for(c=0,f=s.length;c0&&$B.$add_line_num(n,_.rank);var o=new $B.genNode(_.to_js());remove_line_nums(n.parent),o.module=i,o.yields=[],o.loop_ends={},o.def_id=r,o.iter_id=a;for(var s=0,u=n.children.length;s instead.'),$B.JSObject.$factory(...arguments)},JSConstructor:function(){return console.log('"javascript.JSConstructor" is deprecrated. Use window..new() instead.'),$B.JSConstructor.$factory.apply(null,arguments)},load:function(script_url){console.log('"javascript.load" is deprecrated. Use browser.load instead.');var file_obj=$B.builtins.open(script_url),content=$B.builtins.getattr(file_obj,"read")();eval(content)},NULL:null,py2js:function(t,e){return void 0===e&&(e="__main__"+$B.UUID()),$B.py2js(t,e,e,$B.builtins_scope).to_js()},pyobj2jsobj:function(t){return $B.pyobj2jsobj(t)},jsobj2pyobj:function(t){return $B.jsobj2pyobj(t)},UNDEFINED:void 0};var _b_=$B.builtins;function load(t,e){for(var r in e.__class__=$B.module,e.__name__=t,e.__repr__=e.__str__=function(){return""},$B.imported[t]=e,e)if("function"==typeof e[r]){for(t=r;"$"==t.charAt(0);)t=t.substr(1);e[r].$infos={__name__:t}}}for(var attr in modules._sys={__file__:$B.brython_path+"/libs/_sys.js",Getframe:function(t){return $B._frame.$factory($B.frames_stack,t)},modules:{__get__:function(){return $B.obj_dict($B.imported)},__set__:function(t,e,r){throw _b_.TypeError.$factory("Read only property 'sys.modules'")}},path:{__get__:function(){return $B.path},__set__:function(t,e,r){$B.path=r}},meta_path:{__get__:function(){return $B.meta_path},__set__:function(t,e,r){$B.meta_path=r}},path_hooks:{__get__:function(){return $B.path_hooks},__set__:function(t,e,r){$B.path_hooks=r}},path_importer_cache:{__get__:function(){return _b_.dict.$factory($B.JSObject.$factory($B.path_importer_cache))},__set__:function(t,e,r){throw _b_.TypeError.$factory("Read only property 'sys.path_importer_cache'")}},stderr:{__get__:function(){return $B.stderr},__set__:function(t,e,r){$B.stderr=r},write:function(t){_b_.getattr($B.stderr,"write")(t)}},stdout:{__get__:function(){return $B.stdout},__set__:function(t,e,r){$B.stdout=r},write:function(t){_b_.getattr($B.stdout,"write")(t)}},stdin:$B.stdin,vfs:{__get__:function(){return $B.hasOwnProperty("VFS")?$B.obj_dict($B.VFS):_b_.None},__set__:function(){throw _b_.TypeError.$factory("Read only property 'sys.vfs'")}}},modules)load(attr,modules[attr]);$B.isa_web_worker||(modules.browser.html=modules["browser.html"]);var _b_=$B.builtins;for(var attr in _b_.__builtins__=$B.module.$factory("__builtins__","Python builtins"),$B.builtins)_b_.__builtins__[attr]=_b_[attr],$B.builtins_scope.binding[attr]=!0;_b_.__builtins__.__setattr__=function(t,e){_b_[t]=e}}(__BRYTHON__),function(t){var e=t.builtins;t.import_hooks=function(r,n,_,i){t.is_none(_)&&(_=void 0);for(var a,o,s=t.meta_path,u=t.imported,l=0,c=s.length;l=0;i--){\n iself--\n if(iself<0){sv=0}else{sv=parseInt(v1.charAt(iself))}\n x = (carry+sv+parseInt(v2.charAt(i))).toString()\n if(x.length==2){res=x.charAt(1)+res;carry=parseInt(x.charAt(0))}\n else{res=x+res;carry=0}\n }\n while(iself>0){\n iself--\n x = (carry+parseInt(v1.charAt(iself))).toString()\n if(x.length==2){res=x.charAt(1)+res;carry=parseInt(x.charAt(0))}\n else{res=x+res;carry=0}\n }\n if(carry){res=carry+res} \n return {__class__:$LongIntDict, value:res, pos:true}\n}\n\nfunction check_shift(shift){\n // Check the argument of >> and <<\n if(!isinstance(shift, LongInt)){\n throw TypeError(\"shift must be LongInt, not '\"+\n $B.get_class(shift).__name__+\"'\")\n }\n if(!shift.pos){throw ValueError(\"negative shift count\")}\n}\n\nfunction clone(obj){\n // Used for traces\n var obj1 = {}\n for(var attr in obj){obj1[attr]=obj[attr]}\n return obj1\n}\n\nfunction comp_pos(v1, v2){\n // Compare two positive numbers\n if(v1.length>v2.length){return 1}\n else if(v1.lengthv2){return 1}\n else if(v11){\n // If the value in cols[i] has more than one digit, only keep the\n // last one and report the others at the right index\n // For instance if cols[i] = 123, keep 3 in cols[i], add 2 to\n // cols[i-1] and 1 to cols[i-2]\n cols[i] = parseInt(col.charAt(col.length-1))\n j = col.length\n while(j--\x3e1){\n var report = parseInt(col.charAt(j-1))\n var pos = i-col.length+j\n if(cols[pos]===undefined){cols[pos]=report}\n else{cols[pos] += report}\n }\n }\n }\n\n // Find minimum index in cols\n // The previous loop may have introduced negative indices\n var imin\n for(var attr in cols){\n i = parseInt(attr)\n if(imin===undefined){imin=i}\n else if(i=v2\n\n var res = '', carry = 0, i1=v1.length, sv=0\n \n // For all digits in v2, starting by the rightmost, substract it from\n // the matching digit in v1\n // This is the equivalent of the manual operation :\n // 12345678\n // - 98765\n //\n // We begin by the rightmost operation : 8-5 (3, no carry),\n // then 7-6 (1, no carry)\n // then 6-7 (9, carry 1) and so on\n for(var i=v2.length-1;i>=0;i--){\n i1--\n sv = parseInt(v1.charAt(i1))\n x = (sv-carry-parseInt(v2.charAt(i)))\n if(x<0){res=(10+x)+res;carry=1}\n else{res=x+res;carry=0}\n }\n \n // If there are remaining digits in v1, substract the carry, if any\n while(i1>0){\n i1--\n x = (parseInt(v1.charAt(i1))-carry)\n if(x<0){res=(10+x)+res;carry=1}\n else{res=x+res;carry=0}\n }\n\n // Remove leading zeros and return the result\n while(res.charAt(0)=='0' && res.length>1){res=res.substr(1)}\n return {__class__:$LongIntDict, value:res, pos:true}\n}\n\n// Special methods to implement operations on instances of LongInt\n\n$LongIntDict.__abs__ = function(self){\n return {__class__:$LongIntDict, value: self.value, pos:true}\n}\n\n$LongIntDict.__add__ = function(self, other){\n if (typeof other == 'number') other=LongInt(_b_.str.$factory(other))\n // Addition of \"self\" and \"other\"\n // If both have the same sign (+ or -) we add their absolute values\n // If they have different sign we use the substraction of their\n // absolute values\n var res\n if(self.pos&&other.pos){ // self > 0, other > 0\n return add_pos(self.value, other.value)\n }else if(!self.pos&&!other.pos){ // self < 0, other < 0\n res = add_pos(self.value, other.value)\n res.pos = false\n return res\n }else if(self.pos && !other.pos){ // self > 0, other < 0\n switch (comp_pos(self.value, other.value)){\n case 1:\n res = sub_pos(self.value, other.value)\n break\n case 0:\n res = {__class__:$LongIntDict, value:0, pos:true}\n break\n case -1:\n res = sub_pos(other.value, self.value)\n res.pos = false\n break\n }\n return res\n }else{ // self < 0, other > 0\n switch(comp_pos(self.value, other.value)){\n case 1:\n res = sub_pos(self.value, other.value)\n res.pos = false\n break\n case 0:\n res = {__class__:$LongIntDict, value:0, pos:true}\n break\n case -1:\n res = sub_pos(other.value, self.value)\n break\n }\n return res\n }\n}\n\n$LongIntDict.__and__ = function(self, other){\n if (typeof other == 'number') other=LongInt(_b_.str.$factory(other))\n // Bitwise \"and\" : build the binary representation of self and other\n var v1 = $LongIntDict.__index__(self)\n var v2 = $LongIntDict.__index__(other)\n // apply \"and\" on zeros and ones\n if(v1.lengthother.value.length){return true}\n else if(self.value.length= other.value}\n}\n\n$LongIntDict.__gt__ = function(self, other){\n return !$LongIntDict.__le__(self, other)\n}\n\n$LongIntDict.__index__ = function(self){\n // Used by bin()\n // returns a string with the binary value of self\n // The algorithm computes the result of the floor division of self by 2\n \n // XXX to do : negative integers\n \n var res = '', pos=self.value.length,\n temp = self.value, d\n while(true){\n d = divmod_pos(temp, '2')\n res = d[1].value + res\n temp = d[0].value\n if(temp=='0'){break}\n }\n return res\n}\n\n$LongIntDict.__invert__ = function(self){\n var bin = $LongIntDict.__index__(self)\n var res = ''\n for(var i=0;iother.value.length){return false}\n else if(self.value.length=0;i--){\n x = (carry+parseInt(res.charAt(i))*2).toString()\n if(x.length==2){res1=x.charAt(1)+res1;carry=parseInt(x.charAt(0))}\n else{res1=x+res1;carry=0}\n }\n if(carry){res1=carry+res1}\n res=res1\n shift = sub_pos(shift.value, '1')\n if(shift.value=='0'){break}\n }\n return {__class__:$LongIntDict, value:res, pos:self.pos}\n}\n\n$LongIntDict.__mod__ = function(self, other){\n return $LongIntDict.__divmod__(self, other)[1]\n}\n\n$LongIntDict.__mro__ = [_b_.object]\n\n$LongIntDict.__mul__ = function(self, other){\n if (typeof other == 'number') other=LongInt(_b_.str.$factory(other))\n var res = mul_pos(self.value, other.value)\n if(self.pos==other.pos){return res}\n res.pos = false\n return res\n}\n\n$LongIntDict.__neg__ = function(obj){\n return {__class__:$LongIntDict, value:obj.value, pos:!obj.pos}\n}\n\n$LongIntDict.__or__ = function(self, other){\n var v1 = $LongIntDict.__index__(self)\n var v2 = $LongIntDict.__index__(other)\n if(v1.length0){\n var dm = divmod_pos(v, base.toString())\n res = parseInt(dm[1].value).toString(base)+res\n v = dm[0].value\n if(v==0){break}\n }\n return res\n}\n\nfunction digits(base){\n // Return an object where keys are all the digits valid in specified base\n // and value is \"true\"\n // Used to test if the string passed as first argument to LongInt is valid\n var is_digits = {}\n // Number from 0 to base, or from 0 to 9 if base > 10\n for(var i=0;i10){\n // Additional letters\n // For instance in base 16, add \"abcdefABCDEF\" as keys\n for(var i=0;i2){\n throw _b_.TypeError(\"LongInt takes at most 2 arguments (\"+\n arguments.length+\" given)\")\n }\n // base defaults to 10\n if(base===undefined){base = 10}\n else if(!isinstance(base, int)){\n throw TypeError(\"'\"+$B.get_class(base).__name__+\"' object cannot be interpreted as an integer\")\n }\n if(base<0 || base==1 || base>36){\n throw ValueError(\"LongInt() base must be >= 2 and <= 36\")\n }\n if(isinstance(value, float)){\n if(value>=0){value=Math.round(value.value)}\n else{value=Math.ceil(value.value)}\n }\n if(typeof value=='number'){\n if(isSafeInteger(value)){value = value.toString()}\n else{throw ValueError(\"argument of long_int is not a safe integer\")}\n }else if(typeof value!='string'){\n throw ValueError(\"argument of long_int must be a string, not \"+\n $B.get_class(value).__name__)\n }\n var has_prefix = false, pos = true, start = 0\n // Strip leading and trailing whitespaces\n while(value.charAt(0)==' ' && value.length){value = value.substr(1)}\n while(value.charAt(value.length-1)==' ' && value.length){\n value = value.substr(0, value.length-1)\n }\n // Check if string starts with + or -\n if(value.charAt(0)=='+'){has_prefix=true}\n else if(value.charAt(0)=='-'){has_prefix=true;pos=false}\n if(has_prefix){\n // Remove prefix\n if(value.length==1){\n // \"+\" or \"-\" alone are not valid arguments\n throw ValueError('LongInt argument is not a valid number: \"'+value+'\"')\n }else{value=value.substr(1)}\n }\n // Ignore leading zeros\n while(start Math.pow(2, 32)}\n\n// Big number Library from jsfromhell.com\n// This library helps with producing \"correct\" results from\n// mathematic operations\n\n//+ Jonas Raoni Soares Silva\n//@ http://jsfromhell.com/classes/bignumber [rev. #4]\n\n\nvar BigNumber = function(n, p, r){\n var o = this, i\n if(n instanceof BigNumber){\n for(i in {precision: 0, roundType: 0, _s: 0, _f: 0}){o[i] = n[i]}\n o._d = n._d.slice()\n return\n }\n o.precision = isNaN(p = Math.abs(p)) ? BigNumber.defaultPrecision : p\n o.roundType = isNaN(r = Math.abs(r)) ? BigNumber.defaultRoundType : r\n o._s = (n += \"\").charAt(0) == \"-\"\n o._f = ((n = n.replace(/[^\\d.]/g, \"\").split(\".\", 2))[0] =\n n[0].replace(/^0+/, \"\") || \"0\").length\n for(i = (n = o._d = (n.join(\"\") || \"0\").split(\"\")).length; i;\n n[--i] = +n[i]){}\n o.round()\n}\nwith({$: BigNumber, o: BigNumber.prototype}){\n $.ROUND_HALF_EVEN = ($.ROUND_HALF_DOWN = ($.ROUND_HALF_UP =\n ($.ROUND_FLOOR = ($.ROUND_CEIL = ($.ROUND_DOWN = ($.ROUND_UP = 0) + 1) +\n 1) + 1) + 1) + 1) + 1\n $.defaultPrecision = 40\n $.defaultRoundType = $.ROUND_HALF_UP\n o.add = function(n){\n if(this._s != (n = new BigNumber(n))._s){\n return n._s ^= 1, this.subtract(n)\n }\n var o = new BigNumber(this),\n a = o._d,\n b = n._d,\n la = o._f,\n lb = n._f,\n n = Math.max(la, lb),\n i,\n r\n la != lb && ((lb = la - lb) > 0 ? o._zeroes(b, lb, 1) :\n o._zeroes(a, -lb, 1))\n i = (la = a.length) == (lb = b.length) ? a.length :\n ((lb = la - lb) > 0 ? o._zeroes(b, lb) : o._zeroes(a, -lb)).length\n for(r = 0; i; r = (a[--i] = a[i] + b[i] + r) / 10 >>> 0, a[i] %= 10){}\n return r && ++n && a.unshift(r), o._f = n, o.round()\n };\n o.subtract = function(n){\n if(this._s != (n = new BigNumber(n))._s)\n return n._s ^= 1, this.add(n);\n var o = new BigNumber(this),\n c = o.abs().compare(n.abs()) + 1,\n a = c ? o : n,\n b = c ? n : o,\n la = a._f,\n lb = b._f,\n d = la,\n i,\n j;\n a = a._d, b = b._d, la != lb && ((lb = la - lb) > 0 ? o._zeroes(b, lb, 1) : o._zeroes(a, -lb, 1));\n for(i = (la = a.length) == (lb = b.length) ? a.length : ((lb = la - lb) > 0 ? o._zeroes(b, lb) : o._zeroes(a, -lb)).length; i;){\n if(a[--i] < b[i]){\n for(j = i; j && !a[--j]; a[j] = 9);\n --a[j], a[i] += 10;\n }\n b[i] = a[i] - b[i];\n }\n return c || (o._s ^= 1), o._f = d, o._d = b, o.round();\n };\n o.multiply = function(n){\n var o = new BigNumber(this), r = o._d.length >= (n = new BigNumber(n))._d.length, a = (r ? o : n)._d,\n b = (r ? n : o)._d, la = a.length, lb = b.length, x = new BigNumber, i, j, s;\n for(i = lb; i; r && s.unshift(r), x.set(x.add(new BigNumber(s.join(\"\")))))\n for(s = (new Array(lb - --i)).join(\"0\").split(\"\"), r = 0, j = la; j; r += a[--j] * b[i], s.unshift(r % 10), r = (r / 10) >>> 0);\n return o._s = o._s != n._s, o._f = ((r = la + lb - o._f - n._f) >= (j = (o._d = x._d).length) ? this._zeroes(o._d, r - j + 1, 1).length : j) - r, o.round();\n };\n o.divide = function(n){\n if((n = new BigNumber(n)) == \"0\")\n throw new Error(\"Division by 0\");\n else if(this == \"0\")\n return new BigNumber;\n var o = new BigNumber(this), a = o._d, b = n._d, la = a.length - o._f,\n lb = b.length - n._f, r = new BigNumber, i = 0, j, s, l, f = 1, c = 0, e = 0;\n r._s = o._s != n._s, r.precision = Math.max(o.precision, n.precision),\n r._f = +r._d.pop(), la != lb && o._zeroes(la > lb ? b : a, Math.abs(la - lb));\n n._f = b.length, b = n, b._s = false, b = b.round();\n for(n = new BigNumber; a[0] == \"0\"; a.shift());\n out:\n do{\n for(l = c = 0, n == \"0\" && (n._d = [], n._f = 0); i < a.length && n.compare(b) == -1; ++i){\n (l = i + 1 == a.length, (!f && ++c > 1 || (e = l && n == \"0\" && a[i] == \"0\")))\n && (r._f == r._d.length && ++r._f, r._d.push(0));\n (a[i] == \"0\" && n == \"0\") || (n._d.push(a[i]), ++n._f);\n if(e)\n break out;\n if((l && n.compare(b) == -1 && (r._f == r._d.length && ++r._f, 1)) || (l = 0))\n while(r._d.push(0), n._d.push(0), ++n._f, n.compare(b) == -1);\n }\n if(f = 0, n.compare(b) == -1 && !(l = 0))\n while(l ? r._d.push(0) : l = 1, n._d.push(0), ++n._f, n.compare(b) == -1);\n for(s = new BigNumber, j = 0; n.compare(y = s.add(b)) + 1 && ++j; s.set(y));\n n.set(n.subtract(s)), !l && r._f == r._d.length && ++r._f, r._d.push(j);\n }\n while((i < a.length || n != \"0\") && (r._d.length - r._f) <= r.precision);\n return r.round();\n };\n o.mod = function(n){\n return this.subtract(this.divide(n).intPart().multiply(n));\n };\n o.pow = function(n){\n var o = new BigNumber(this), i;\n if((n = (new BigNumber(n)).intPart()) == 0) return o.set(1);\n for(i = Math.abs(n); --i; o.set(o.multiply(this)));\n return n < 0 ? o.set((new BigNumber(1)).divide(o)) : o;\n };\n o.set = function(n){\n return this.constructor(n), this;\n };\n o.compare = function(n){\n var a = this, la = this._f, b = new BigNumber(n), lb = b._f, r = [-1, 1], i, l;\n if(a._s != b._s)\n return a._s ? -1 : 1;\n if(la != lb)\n return r[(la > lb) ^ a._s];\n for(la = (a = a._d).length, lb = (b = b._d).length, i = -1, l = Math.min(la, lb); ++i < l;)\n if(a[i] != b[i])\n return r[(a[i] > b[i]) ^ a._s];\n return la != lb ? r[(la > lb) ^ a._s] : 0;\n };\n o.negate = function(){\n var n = new BigNumber(this); return n._s ^= 1, n;\n };\n o.abs = function(){\n var n = new BigNumber(this); return n._s = 0, n;\n };\n o.intPart = function(){\n return new BigNumber((this._s ? \"-\" : \"\") + (this._d.slice(0, this._f).join(\"\") || \"0\"));\n };\n o.valueOf = o.toString = function(){\n var o = this;\n return (o._s ? \"-\" : \"\") + (o._d.slice(0, o._f).join(\"\") || \"0\") + (o._f != o._d.length ? \".\" + o._d.slice(o._f).join(\"\") : \"\");\n };\n o._zeroes = function(n, l, t){\n var s = [\"push\", \"unshift\"][t || 0];\n for(++l; --l; n[s](0));\n return n;\n };\n o.round = function(){\n if(\"_rounding\" in this) return this;\n var $ = BigNumber, r = this.roundType, b = this._d, d, p, n, x;\n for(this._rounding = true; this._f > 1 && !b[0]; --this._f, b.shift());\n for(d = this._f, p = this.precision + d, n = b[p]; b.length > d && !b[b.length -1]; b.pop());\n x = (this._s ? \"-\" : \"\") + (p - d ? \"0.\" + this._zeroes([], p - d - 1).join(\"\") : \"\") + 1;\n if(b.length > p){\n n && (r == $.DOWN ? false : r == $.UP ? true : r == $.CEIL ? !this._s\n : r == $.FLOOR ? this._s : r == $.HALF_UP ? n >= 5 : r == $.HALF_DOWN ? n > 5\n : r == $.HALF_EVEN ? n >= 5 && b[p - 1] & 1 : false) && this.add(x);\n b.splice(p, b.length - p);\n }\n return delete this._rounding, this;\n };\n}\n\nvar isNegZero = function(x) {return x === 0 && Math.atan2(x,x) < 0}\n\nvar _mod = {\n __getattr__ : function(attr){\n var res = this[attr]\n if(res === undefined){$raise('AttributeError',\n 'module math has no attribute ' + attr)}\n return res\n },\n acos: function(x) {return float.$factory(Math.acos(float_check(x)))},\n acosh: function(x) {\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var y = float_check(x)\n return float.$factory(Math.log(y + Math.sqrt(y * y - 1)))\n },\n asin: function(x) {return float.$factory(Math.asin(float_check(x)))},\n asinh: function(x) {\n if(_b_.$isninf(x)){return float.$factory('-inf')}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var y = float_check(x)\n return float.$factory(Math.log(y + Math.sqrt(y * y + 1)))\n },\n atan: function(x) {\n if(_b_.$isninf(x)){return float.$factory(-Math.PI / 2)}\n if(_b_.$isinf(x)){return float.$factory(Math.PI / 2)}\n return float.$factory(Math.atan(float_check(x)))},\n atan2: function(y, x) {\n return float.$factory(Math.atan2(float_check(y), float_check(x)))\n },\n atanh: function(x) {\n var y = float_check(x)\n if(y == 0){return 0}\n return float.$factory(0.5 * Math.log((1 / y + 1)/(1 / y - 1)));\n },\n ceil: function(x) {\n try{return getattr(x, '__ceil__')()}catch(err){}\n\n if(_b_.$isninf(x)){return float.$factory('-inf')}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n if(isNaN(x)){return float.$factory('nan')}\n\n var y = float_check(x)\n if(! isNaN(parseFloat(y)) && isFinite(y)){\n return int.$factory(Math.ceil(y))\n }\n\n $raise('ValueError',\n 'object is not a number and does not contain __ceil__')\n },\n copysign: function(x,y) {\n var x1 = Math.abs(float_check(x))\n var y1 = float_check(y)\n var sign = y1 ? y1 < 0 ? -1 : 1 : 1\n if(isNegZero(y1)){sign = -1} // probably need to work on adding a check for -0\n return float.$factory(x1 * sign)\n },\n cos : function(x){return float.$factory(Math.cos(float_check(x)))},\n cosh: function(x){\n if(_b_.$isinf(x)) {return float.$factory('inf')}\n var y = float_check(x)\n if(Math.cosh !== undefined){return float.$factory(Math.cosh(y))}\n return float.$factory((Math.pow(Math.E, y) + Math.pow(Math.E, -y)) / 2)\n },\n degrees: function(x){return float.$factory(float_check(x) * 180 / Math.PI)},\n e: float.$factory(Math.E),\n erf: function(x) {\n // inspired from\n // http://stackoverflow.com/questions/457408/is-there-an-easily-available-implementation-of-erf-for-python\n var y = float_check(x)\n var t = 1.0 / (1.0 + 0.5 * Math.abs(y))\n var ans = 1 - t * Math.exp( -y * y - 1.26551223 +\n t * ( 1.00002368 +\n t * ( 0.37409196 +\n t * ( 0.09678418 +\n t * (-0.18628806 +\n t * ( 0.27886807 +\n t * (-1.13520398 +\n t * ( 1.48851587 +\n t * (-0.82215223 +\n t * 0.17087277)))))))))\n if(y >= 0.0){return ans}\n return -ans\n },\n\n erfc: function(x) {\n // inspired from\n // http://stackoverflow.com/questions/457408/is-there-an-easily-available-implementation-of-erf-for-python\n var y = float_check(x)\n var t = 1.0 / (1.0 + 0.5 * Math.abs(y))\n var ans = 1 - t * Math.exp( -y * y - 1.26551223 +\n t * ( 1.00002368 +\n t * ( 0.37409196 +\n t * ( 0.09678418 +\n t * (-0.18628806 +\n t * ( 0.27886807 +\n t * (-1.13520398 +\n t * ( 1.48851587 +\n t * (-0.82215223 +\n t * 0.17087277)))))))))\n if(y >= 0.0){return 1 - ans}\n return 1 + ans\n },\n exp: function(x){\n if(_b_.$isninf(x)){return float.$factory(0)}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var _r = Math.exp(float_check(x))\n if(_b_.$isinf(_r)){throw OverflowError(\"math range error\")}\n return float.$factory(_r)\n },\n expm1: function(x){return float.$factory(Math.exp(float_check(x)) - 1)},\n //fabs: function(x){ return x>0?float.$factory(x):float.$factory(-x)},\n fabs: function(x){return _b_.$fabs(x)}, //located in py_float.js\n factorial: function(x) {\n //using code from http://stackoverflow.com/questions/3959211/fast-factorial-function-in-javascript\n var y = float_check(x),\n r = 1\n for(var i = 2; i <= y; i++){r *= i}\n return r\n },\n floor: function(x){return Math.floor(float_check(x))},\n fmod: function(x,y){return float.$factory(float_check(x) % float_check(y))},\n frexp: function(x){\n var _l = _b_.$frexp(x)\n return _b_.tuple.$factory([float.$factory(_l[0]), _l[1]])\n },\n fsum: function(x){\n /* Translation into Javascript of the function msum in an Active\n State Cookbook recipe : https://code.activestate.com/recipes/393090/\n by Raymond Hettinger\n */\n var partials = [],\n res = new Number(),\n _it = _b_.iter(x)\n while(true){\n try{\n var x = _b_.next(_it),\n i = 0\n for(var j = 0, len = partials.length; j < len; j++){\n var y = partials[j]\n if(Math.abs(x) < Math.abs(y)){\n var z = x\n x = y\n y = z\n }\n var hi = x + y,\n lo = y - (hi - x)\n if(lo){\n partials[i] = lo\n i++\n }\n x = hi\n }\n partials = partials.slice(0, i).concat([x])\n }catch(err){\n if(_b_.isinstance(err, _b_.StopIteration)){break}\n throw err\n }\n }\n var res = new Number(0)\n for(var i = 0; i < partials.length; i++){\n res += new Number(partials[i])\n }\n return new Number(res)\n },\n gamma: function(x){\n //using code from http://stackoverflow.com/questions/3959211/fast-factorial-function-in-javascript\n // Lanczos Approximation of the Gamma Function\n // As described in Numerical Recipes in C (2nd ed. Cambridge University Press, 1992)\n var y = float_check(x)\n var z = y + 1\n var d1 = Math.sqrt(2 * Math.PI) / z\n\n var d2 = 1.000000000190015;\n d2 += 76.18009172947146 / (z + 1)\n d2 += -86.50532032941677 / (z + 2)\n d2 += 24.01409824083091 / (z + 3)\n d2 += -1.231739572450155 / (z + 4)\n d2 += 1.208650973866179E-3 / (z + 5)\n d2 += -5.395239384953E-6 / (z + 6)\n\n return d1 * d2 * Math.pow(z + 5.5, z + 0.5) * Math.exp(-(z + 5.5))\n },\n hypot: function(x,y){\n if(_b_.$isinf(x) || _b_.$isinf(y)){return float.$factory('inf')}\n var x1 = float_check(x),\n y1 = float_check(y)\n return float.$factory(Math.sqrt(x1 * x1 + y1 * y1))},\n inf: float.$factory('inf'),\n isclose:function(){\n var $ns = $B.args(\"isclose\",\n 4,\n {a: null, b: null, rel_tol: null, abs_tol: null},\n ['a', 'b', 'rel_tol', 'abs_tol'],\n arguments,\n {rel_tol: 1e-09, abs_tol: 0.0},\n null,\n null)\n var a = $ns['a'],\n b = $ns['b'],\n rel_tol = $ns['rel_tol'],\n abs_tol = $ns['abs_tol']\n if(rel_tol < 0.0 || abs_tol < 0.0){\n throw ValueError('tolerances must be non-negative')\n }\n if(a == b){return True}\n if(_b_.$isinf(a) || _b_.$isinf(b)){return false}\n var diff = _b_.$fabs(b - a)\n var result = (\n (diff <= _b_.$fabs(rel_tol * b)) ||\n (diff <= _b_.$fabs(rel_tol * a))\n ) || (diff <= _b_.$fabs(abs_tol)\n )\n return result\n },\n isfinite: function(x){return isFinite(float_check(x))},\n isinf: function(x){return _b_.$isinf(float_check(x))},\n isnan: function(x){return isNaN(float_check(x))},\n ldexp: function(x, i){return _b_.$ldexp(x, i)}, //located in py_float.js\n lgamma: function(x){\n // see gamma function for sources\n var y = float_check(x),\n z = y + 1,\n d1 = Math.sqrt(2 * Math.PI) / z\n\n var d2 = 1.000000000190015\n d2 += 76.18009172947146 / (z + 1)\n d2 += -86.50532032941677 / (z + 2)\n d2 += 24.01409824083091 / (z + 3)\n d2 += -1.231739572450155 / (z + 4)\n d2 += 1.208650973866179E-3 / (z + 5)\n d2 += -5.395239384953E-6 / (z + 6)\n\n return float.$factory(Math.log(Math.abs(d1 * d2 *\n Math.pow(z + 5.5, z + 0.5) * Math.exp(-(z + 5.5)))))\n },\n log: function(x, base){\n var x1 = float_check(x)\n if(base === undefined){return float.$factory(Math.log(x1))}\n return float.$factory(Math.log(x1) / Math.log(float_check(base)))\n },\n log1p: function(x){return float.$factory(Math.log(1.0 + float_check(x)))},\n log2: function(x){\n if(isNaN(x)){return float.$factory('nan')}\n if(_b_.$isninf(x)) {throw ValueError('')}\n var x1 = float_check(x)\n if(x1 < 0.0){throw ValueError('')}\n return float.$factory(Math.log(x1) / Math.LN2)\n },\n log10: function(x) {\n return float.$factory(Math.log(float_check(x)) / Math.LN10)\n },\n modf: function(x) {\n if(_b_.$isninf(x)){\n return _b_.tuple.$factory([0.0, float.$factory('-inf')])\n }\n if(_b_.$isinf(x)){\n return _b_.tuple.$factory([0.0, float.$factory('inf')])\n }\n if(isNaN(x)){\n return _b_.tuple.$factory([float.$factory('nan'),\n float.$factory('nan')])\n }\n\n var x1 = float_check(x)\n if(x1 > 0){\n var i = float.$factory(x1 - Math.floor(x1))\n return _b_.tuple.$factory([i, float.$factory(x1 - i)])\n }\n\n var x2 = Math.ceil(x1)\n var i = float.$factory(x1 - x2)\n return _b_.tuple.$factory([i, float.$factory(x2)])\n },\n nan: float.$factory('nan'),\n pi : float.$factory(Math.PI),\n pow: function(x,y) {\n var x1 = float_check(x)\n var y1 = float_check(y)\n if(y1 == 0){return float.$factory(1)}\n if(x1 == 0 && y1 < 0){throw _b_.ValueError('')}\n\n if(isNaN(y1)){\n if(x1 == 1){return float.$factory(1)}\n return float.$factory('nan')\n }\n if(x1 == 0){return float.$factory(0)}\n\n if(_b_.$isninf(y)){\n if(x1 == 1 || x1 == -1){return float.$factory(1)}\n if(x1 < 1 && x1 > -1){return float.$factory('inf')}\n return float.$factory(0)\n }\n if(_b_.$isinf(y)){\n if(x1 == 1 || x1 == -1){return float.$factory(1)}\n if(x1 < 1 && x1 > -1){return float.$factory(0)}\n return float.$factory('inf')\n }\n\n if(isNaN(x1)){return float.$factory('nan')}\n if(_b_.$isninf(x)){\n if(y1 > 0 && isOdd(y1)){return float.$factory('-inf')}\n if(y1 > 0){return float.$factory('inf')} // this is even or a float\n if(y1 < 0){return float.$factory(0)}\n return float.$factory(1)\n }\n\n if(_b_.$isinf(x)){\n if(y1 > 0){return float.$factory('inf')}\n if(y1 < 0){return float.$factory(0)}\n return float.$factory(1)\n }\n\n var r\n if(isLargeNumber(x1) || isLargeNumber(y1)){\n var x = new BigNumber(x1),\n y = new BigNumber(y1)\n r = x.pow(y)\n }else{\n r = Math.pow(x1,y1)\n }\n\n if(isNaN(r)){return float.$factory('nan')}\n if(_b_.$isninf(r)){return float.$factory('-inf')}\n if(_b_.$isinf(r)){return float.$factory('inf')}\n\n return r\n },\n radians: function(x){\n return float.$factory(float_check(x) * Math.PI / 180)\n },\n sin : function(x){return float.$factory(Math.sin(float_check(x)))},\n sinh: function(x) {\n //if (_b_.$isinf(x)) return float.$factory('inf');\n var y = float_check(x)\n if(Math.sinh !== undefined){return float.$factory(Math.sinh(y))}\n return float.$factory(\n (Math.pow(Math.E, y) - Math.pow(Math.E, -y)) / 2)\n },\n sqrt : function(x){\n var y = float_check(x)\n if(y < 0){throw ValueError(\"math range error\")}\n if(_b_.$isinf(y)){return float.$factory('inf')}\n var _r = Math.sqrt(y)\n if(_b_.$isinf(_r)){throw OverflowError(\"math range error\")}\n return float.$factory(_r)\n },\n tan: function(x) {\n var y = float_check(x)\n return float.$factory(Math.tan(y))\n },\n tanh: function(x) {\n var y = float_check(x)\n if(Math.tanh !== undefined){return float.$factory(Math.tanh(y))}\n return float.$factory((Math.pow(Math.E, y) - Math.pow(Math.E, -y))/\n (Math.pow(Math.E, y) + Math.pow(Math.E, -y)))\n },\n trunc: function(x) {\n try{return getattr(x, '__trunc__')()}catch(err){}\n var x1 = float_check(x)\n if(!isNaN(parseFloat(x1)) && isFinite(x1)){\n if(Math.trunc !== undefined){return int.$factory(Math.trunc(x1))}\n if(x1 > 0){return int.$factory(Math.floor(x1))}\n return int.$factory(Math.ceil(x1)) // x1 < 0\n }\n $raise('ValueError',\n 'object is not a number and does not contain __trunc__')\n }\n}\n\nfor(var $attr in _mod){\n if(typeof _mod[$attr] === 'function'){\n _mod[$attr].__repr__ = (function(func){\n return function(){return ''}\n })($attr)\n _mod[$attr].__str__ = (function(func){\n return function(){return ''}\n })($attr)\n }\n}\n\nreturn _mod\n\n})(__BRYTHON__)\n"],modulefinder:[".js","var $module=(function($B){\n\nvar _b_=$B.builtins\nvar _mod = {}\n\n$ModuleFinderDict = {__class__:_b_.type,__name__:'ModuleFinder'}\n$ModuleFinderDict.__mro__ = [_b_.object]\n\n$ModuleFinderDict.run_script = function(self, pathname){\n // pathname is the url of a Python script\n var py_src = _b_.$open(pathname).read()\n // transform into internal Brython tree structure\n var root = $B.py2js(py_src)\n // walk the tree to find occurences of imports\n function walk(node){\n var modules = []\n var ctx = node.context\n if(ctx && ctx.type=='node'){ctx = ctx.tree[0]}\n\n if(ctx && ctx.type==\"import\"){\n for(var i=0, _len_i = ctx.tree.length; i < _len_i;i++){\n if(modules.indexOf(ctx.tree[i].name)==-1){\n modules.push(ctx.tree[i].name)\n }\n }\n }else if(ctx && ctx.type==\"from\"){\n if(modules.indexOf(ctx.module)==-1){\n modules.push(ctx.module)\n }\n }\n \n for(var i=0, _len_i = node.children.length; i < _len_i;i++){\n mods = walk(node.children[i])\n for(var j=0, _len_j = mods.length; j < _len_j;j++){\n if(modules.indexOf(mods[j])==-1){modules.push(mods[j])}\n }\n }\n return modules\n }\n self.modules = walk(root)\n}\n\n_mod.ModuleFinder = function(){return {__class__:$ModuleFinderDict}\n}\n_mod.ModuleFinder.$dict = $ModuleFinderDict\n_mod.ModuleFinder.__class__ = $B.$factory\n$ModuleFinderDict.$factory = _mod.ModuleFinder\n\nreturn _mod\n})(__BRYTHON__)\n"],random:[".js","// Javascript implementation of the random module\n// Based on Ian Bicking's implementation of the Mersenne twister\n\nvar $module = (function($B){\n\nvar _b_ = $B.builtins,\n i\n\nvar VERSION = 3\n\n// Code copied from https://github.com/ianb/whrandom/blob/master/mersenne.js\n// by Ian Bicking\n\n// this program is a JavaScript version of Mersenne Twister,\n// a straight conversion from the original program, mt19937ar.c,\n// translated by y. okada on july 17, 2006.\n// and modified a little at july 20, 2006, but there are not any substantial differences.\n// modularized by Ian Bicking, March 25, 2013 (found original version at http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVASCRIPT/java-script.html)\n// in this program, procedure descriptions and comments of original source code were not removed.\n// lines commented with //c// were originally descriptions of c procedure. and a few following lines are appropriate JavaScript descriptions.\n// lines commented with /* and */ are original comments.\n// lines commented with // are additional comments in this JavaScript version.\n/*\n A C-program for MT19937, with initialization improved 2002/1/26.\n Coded by Takuji Nishimura and Makoto Matsumoto.\n\n Before using, initialize the state by using init_genrand(seed)\n or init_by_array(init_key, key_length).\n\n Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. The names of its contributors may not be used to endorse or promote\n products derived from this software without specific prior written\n permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n Any feedback is very welcome.\n http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n*/\n\nfunction RandomStream(seed) {\n\n /*jshint bitwise:false */\n /* Period parameters */\n //c//#define N 624\n //c//#define M 397\n //c//#define MATRIX_A 0x9908b0dfUL /* constant vector a */\n //c//#define UPPER_MASK 0x80000000UL /* most significant w-r bits */\n //c//#define LOWER_MASK 0x7fffffffUL /* least significant r bits */\n var N = 624\n var M = 397\n var MATRIX_A = 0x9908b0df /* constant vector a */\n var UPPER_MASK = 0x80000000 /* most significant w-r bits */\n var LOWER_MASK = 0x7fffffff /* least significant r bits */\n //c//static unsigned long mt[N]; /* the array for the state vector */\n //c//static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */\n var mt = new Array(N) /* the array for the state vector */\n var mti = N + 1 /* mti==N+1 means mt[N] is not initialized */\n\n function unsigned32(n1){\n // returns a 32-bits unsiged integer from an operand to which applied a\n // bit operator.\n return n1 < 0 ? (n1 ^ UPPER_MASK) + UPPER_MASK : n1\n }\n\n function subtraction32(n1, n2){\n // emulates lowerflow of a c 32-bits unsiged integer variable, instead of\n // the operator -. these both arguments must be non-negative integers\n // expressible using unsigned 32 bits.\n return n1 < n2 ? unsigned32((0x100000000 - (n2 - n1)) & 0xffffffff) :\n n1 - n2\n }\n\n function addition32(n1, n2){\n // emulates overflow of a c 32-bits unsiged integer variable, instead of\n // the operator +. these both arguments must be non-negative integers\n // expressible using unsigned 32 bits.\n return unsigned32((n1 + n2) & 0xffffffff)\n }\n\n function multiplication32(n1, n2){\n // emulates overflow of a c 32-bits unsiged integer variable, instead of the\n // operator *. these both arguments must be non-negative integers\n // expressible using unsigned 32 bits.\n var sum = 0\n for (var i = 0; i < 32; ++i){\n if((n1 >>> i) & 0x1){\n sum = addition32(sum, unsigned32(n2 << i))\n }\n }\n return sum\n }\n\n /* initializes mt[N] with a seed */\n //c//void init_genrand(unsigned long s)\n function init_genrand(s) {\n //c//mt[0]= s & 0xffffffff;\n mt[0] = unsigned32(s & 0xffffffff)\n for(mti = 1; mti < N; mti++){\n mt[mti] =\n //c//(1812433253 * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);\n addition32(multiplication32(1812433253,\n unsigned32(mt[mti - 1] ^ (mt[mti - 1] >>> 30))), mti)\n /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n /* In the previous versions, MSBs of the seed affect */\n /* only MSBs of the array mt[]. */\n /* 2002/01/09 modified by Makoto Matsumoto */\n //c//mt[mti] &= 0xffffffff;\n mt[mti] = unsigned32(mt[mti] & 0xffffffff);\n /* for >32 bit machines */\n }\n }\n\n /* initialize by an array with array-length */\n /* init_key is the array for initializing keys */\n /* key_length is its length */\n /* slight change for C++, 2004/2/26 */\n //c//void init_by_array(unsigned long init_key[], int key_length)\n function init_by_array(init_key, key_length) {\n //c//int i, j, k;\n var i, j, k\n init_genrand(19650218)\n i = 1\n j = 0\n k = (N > key_length ? N : key_length)\n for(; k; k--){\n //c//mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525))\n //c// + init_key[j] + j; /* non linear */\n mt[i] = addition32(\n addition32(unsigned32(mt[i] ^\n multiplication32(unsigned32(mt[i - 1] ^ (mt[i - 1] >>> 30)),\n 1664525)),\n init_key[j]), j)\n mt[i] =\n //c//mt[i] &= 0xffffffff; /* for WORDSIZE > 32 machines */\n unsigned32(mt[i] & 0xffffffff)\n i++\n j++\n if(i >= N){mt[0] = mt[N - 1]; i = 1}\n if(j >= key_length){j = 0}\n }\n for(k = N - 1; k; k--){\n //c//mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941))\n //c//- i; /* non linear */\n mt[i] = subtraction32(\n unsigned32(\n (mt[i]) ^\n multiplication32(\n unsigned32(mt[i - 1] ^ (mt[i - 1] >>> 30)),\n 1566083941)),\n i\n )\n //c//mt[i] &= 0xffffffff; /* for WORDSIZE > 32 machines */\n mt[i] = unsigned32(mt[i] & 0xffffffff)\n i++\n if(i >= N){mt[0] = mt[N - 1]; i = 1}\n }\n mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n }\n\n /* generates a random number on [0,0xffffffff]-interval */\n //c//unsigned long genrand_int32(void)\n function genrand_int32() {\n //c//unsigned long y;\n //c//static unsigned long mag01[2]={0x0UL, MATRIX_A};\n var y;\n var mag01 = [0x0, MATRIX_A];\n /* mag01[x] = x * MATRIX_A for x=0,1 */\n\n if(mti >= N){ /* generate N words at one time */\n //c//int kk;\n var kk\n\n if(mti == N + 1){ /* if init_genrand() has not been called, */\n init_genrand(Date.now()) /* a default initial seed is used */\n }\n\n for(kk = 0; kk < N - M; kk++){\n //c//y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);\n //c//mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1];\n y = unsigned32((mt[kk]&UPPER_MASK) | (mt[kk + 1]&LOWER_MASK))\n mt[kk] = unsigned32(mt[kk + M] ^ (y >>> 1) ^ mag01[y & 0x1])\n }\n for(;kk < N - 1; kk++){\n //c//y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);\n //c//mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1];\n y = unsigned32((mt[kk]&UPPER_MASK) | (mt[kk + 1]&LOWER_MASK))\n mt[kk] = unsigned32(mt[kk + (M - N)] ^ (y >>> 1) ^ mag01[y & 0x1])\n }\n //c//y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);\n //c//mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1];\n y = unsigned32((mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK))\n mt[N - 1] = unsigned32(mt[M - 1] ^ (y >>> 1) ^ mag01[y & 0x1])\n mti = 0\n }\n\n y = mt[mti++]\n\n /* Tempering */\n //c//y ^= (y >> 11);\n //c//y ^= (y << 7) & 0x9d2c5680;\n //c//y ^= (y << 15) & 0xefc60000;\n //c//y ^= (y >> 18);\n y = unsigned32(y ^ (y >>> 11))\n y = unsigned32(y ^ ((y << 7) & 0x9d2c5680))\n y = unsigned32(y ^ ((y << 15) & 0xefc60000))\n y = unsigned32(y ^ (y >>> 18))\n\n return y\n }\n\n /* generates a random number on [0,0x7fffffff]-interval */\n //c//long genrand_int31(void)\n function genrand_int31(){\n //c//return (genrand_int32()>>1);\n return (genrand_int32()>>>1)\n }\n\n /* generates a random number on [0,1]-real-interval */\n //c//double genrand_real1(void)\n function genrand_real1(){\n return genrand_int32()*(1.0/4294967295.0)\n /* divided by 2^32-1 */\n }\n\n /* generates a random number on [0,1)-real-interval */\n //c//double genrand_real2(void)\n function genrand_real2(){\n return genrand_int32() * (1.0 / 4294967296.0)\n /* divided by 2^32 */\n }\n\n /* generates a random number on (0,1)-real-interval */\n //c//double genrand_real3(void)\n function genrand_real3() {\n return ((genrand_int32()) + 0.5) * (1.0 / 4294967296.0)\n /* divided by 2^32 */\n }\n\n /* generates a random number on [0,1) with 53-bit resolution*/\n //c//double genrand_res53(void)\n function genrand_res53() {\n //c//unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6;\n var a = genrand_int32() >>> 5,\n b = genrand_int32() >>> 6\n return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0)\n }\n /* These real versions are due to Isaku Wada, 2002/01/09 added */\n\n var random = genrand_res53\n\n random.seed = function(seed){\n if(! seed){seed = Date.now()}\n if(typeof seed != \"number\"){seed = parseInt(seed, 10)}\n if((seed !== 0 && ! seed) || isNaN(seed)){throw \"Bad seed\"}\n init_genrand(seed)\n }\n\n random.seed(seed)\n\n random.int31 = genrand_int31\n random.real1 = genrand_real1\n random.real2 = genrand_real2\n random.real3 = genrand_real3\n random.res53 = genrand_res53\n\n // Added for compatibility with Python\n random.getstate = function(){return [VERSION, mt, mti]}\n\n random.setstate = function(state){\n mt = state[1]\n mti = state[2]\n }\n\n return random\n\n}\n\n// magic constants\n\nvar NV_MAGICCONST = 4 * Math.exp(-0.5)/Math.sqrt(2),\n gauss_next = null,\n NV_MAGICCONST = 1.71552776992141,\n TWOPI = 6.28318530718,\n LOG4 = 1.38629436111989,\n SG_MAGICCONST = 2.50407739677627,\n VERSION = VERSION\n\nvar Random = $B.make_class(\"Random\",\n function(){\n return {\n __class__: Random,\n _random: RandomStream()\n }\n }\n)\n\nRandom._randbelow = function(self, x){\n return Math.floor(x * self._random())\n}\n\nRandom._urandom = function(self, n){\n /*\n urandom(n) -> str\n Return n random bytes suitable for cryptographic use.\n */\n\n var randbytes = []\n for(i = 0; i < n; i++){randbytes.push(parseInt(self._random() * 256))}\n return _b_.bytes.$factory(randbytes)\n}\n\nRandom.betavariate = function(){\n /* Beta distribution.\n\n Conditions on the parameters are alpha > 0 and beta > 0.\n Returned values range between 0 and 1.\n\n\n # This version due to Janne Sinkkonen, and matches all the std\n # texts (e.g., Knuth Vol 2 Ed 3 pg 134 \"the beta distribution\").\n */\n\n var $ = $B.args('betavariate', 3, {self: null, alpha:null, beta:null},\n ['self', 'alpha', 'beta'], arguments, {}, null, null),\n self = $.self,\n alpha = $.alpha,\n beta = $.beta\n\n var y = Random.gammavariate(self, alpha, 1)\n if(y == 0){return _b_.float.$factory(0)}\n else{return y / (y + Random.gammavariate(self, beta, 1))}\n}\n\nRandom.choice = function(){\n var $ = $B.args(\"choice\", 2,\n {self: null, seq:null},[\"self\", \"seq\"],arguments, {}, null, null),\n self = $.self,\n seq = $.seq\n var len, rank\n if(Array.isArray(seq)){len = seq.length}\n else{len = _b_.getattr(seq,\"__len__\")()}\n if(len == 0){\n throw _b_.IndexError.$factory(\"Cannot choose from an empty sequence\")\n }\n rank = parseInt(self._random() * len)\n if(Array.isArray(seq)){return seq[rank]}\n else{return _b_.getattr(seq, \"__getitem__\")(rank)}\n}\n\nRandom.expovariate = function(self, lambd){\n /*\n Exponential distribution.\n\n lambd is 1.0 divided by the desired mean. It should be\n nonzero. (The parameter would be called \"lambda\", but that is\n a reserved word in Python.) Returned values range from 0 to\n positive infinity if lambd is positive, and from negative\n infinity to 0 if lambd is negative.\n\n */\n // lambd: rate lambd = 1/mean\n // ('lambda' is a Python reserved word)\n\n // we use 1-random() instead of random() to preclude the\n // possibility of taking the log of zero.\n return -Math.log(1.0 - self._random()) / lambd\n}\n\nRandom.gammavariate = function(self, alpha, beta){\n /* Gamma distribution. Not the gamma function!\n\n Conditions on the parameters are alpha > 0 and beta > 0.\n\n The probability distribution function is:\n\n x ** (alpha - 1) * math.exp(-x / beta)\n pdf(x) = --------------------------------------\n math.gamma(alpha) * beta ** alpha\n\n */\n\n // alpha > 0, beta > 0, mean is alpha*beta, variance is alpha*beta**2\n\n // Warning: a few older sources define the gamma distribution in terms\n // of alpha > -1.0\n\n var $ = $B.args('gammavariate', 3,\n {self: null, alpha:null, beta:null},\n ['self', 'alpha', 'beta'],\n arguments, {}, null, null),\n self = $.self,\n alpha = $.alpha,\n beta = $.beta,\n LOG4 = Math.log(4),\n SG_MAGICCONST = 1.0 + Math.log(4.5)\n\n if(alpha <= 0.0 || beta <= 0.0){\n throw _b_.ValueError.$factory('gammavariate: alpha and beta must be > 0.0')\n }\n\n if(alpha > 1.0){\n\n // Uses R.C.H. Cheng, \"The generation of Gamma\n // variables with non-integral shape parameters\",\n // Applied Statistics, (1977), 26, No. 1, p71-74\n\n var ainv = Math.sqrt(2.0 * alpha - 1.0),\n bbb = alpha - LOG4,\n ccc = alpha + ainv\n\n while(true){\n var u1 = self._random()\n if(!((1e-7 < u1) && (u1 < .9999999))){\n continue\n }\n var u2 = 1.0 - self._random(),\n v = Math.log(u1 / (1.0 - u1)) / ainv,\n x = alpha * Math.exp(v),\n z = u1 * u1 * u2,\n r = bbb + ccc * v - x\n if((r + SG_MAGICCONST - 4.5 * z >= 0.0) || r >= Math.log(z)){\n return x * beta\n }\n }\n }else if(alpha == 1.0){\n // expovariate(1)\n var u = self._random()\n while(u <= 1e-7){u = self._random()}\n return -Math.log(u) * beta\n }else{\n // alpha is between 0 and 1 (exclusive)\n\n // Uses ALGORITHM GS of Statistical Computing - Kennedy & Gentle\n\n while(true){\n var u = self._random(),\n b = (Math.E + alpha)/Math.E,\n p = b*u,\n x\n if(p <= 1.0){x = Math.pow(p, (1.0/alpha))}\n else{x = -Math.log((b-p)/alpha)}\n var u1 = self._random()\n if(p > 1.0){\n if(u1 <= Math.pow(x, alpha - 1.0)){\n break\n }\n }else if(u1 <= Math.exp(-x)){\n break\n }\n }\n return x * beta\n }\n}\n\nRandom.gauss = function(){\n\n /* Gaussian distribution.\n\n mu is the mean, and sigma is the standard deviation. This is\n slightly faster than the normalvariate() function.\n\n Not thread-safe without a lock around calls.\n\n # When x and y are two variables from [0, 1), uniformly\n # distributed, then\n #\n # cos(2*pi*x)*sqrt(-2*log(1-y))\n # sin(2*pi*x)*sqrt(-2*log(1-y))\n #\n # are two *independent* variables with normal distribution\n # (mu = 0, sigma = 1).\n # (Lambert Meertens)\n # (corrected version; bug discovered by Mike Miller, fixed by LM)\n\n # Multithreading note: When two threads call this function\n # simultaneously, it is possible that they will receive the\n # same return value. The window is very small though. To\n # avoid this, you have to use a lock around all calls. (I\n # didn't want to slow this down in the serial case by using a\n # lock here.)\n */\n\n var $ = $B.args('gauss', 3, {self: null, mu:null, sigma:null},\n ['self', 'mu', 'sigma'], arguments, {}, null, null),\n self = $.self,\n mu = $.mu,\n sigma = $.sigma\n\n var z = gauss_next\n gauss_next = null\n if(z === null){\n var x2pi = self._random() * Math.PI * 2,\n g2rad = Math.sqrt(-2.0 * Math.log(1.0 - self._random())),\n z = Math.cos(x2pi) * g2rad\n gauss_next = Math.sin(x2pi) * g2rad\n }\n return mu + z*sigma\n}\n\nRandom.getrandbits = function(){\n var $ = $B.args(\"getrandbits\", 2,\n {self: null, k:null},[\"self\", \"k\"],arguments, {}, null, null),\n self = $.self,\n k = $B.$GetInt($.k)\n // getrandbits(k) -> x. Generates a long int with k random bits.\n if(k <= 0){\n throw _b_.ValueError.$factory('number of bits must be greater than zero')\n }\n if(k != _b_.int.$factory(k)){\n throw _b_.TypeError.$factory('number of bits should be an integer')\n }\n var numbytes = (k + 7), // bits / 8 and rounded up\n x = _b_.int.from_bytes(Random._urandom(self, numbytes), 'big')\n return _b_.getattr(x, '__rshift__')(\n _b_.getattr(numbytes*8,'__sub__')(k))\n}\n\nRandom.getstate = function(){\n // Return internal state; can be passed to setstate() later.\n var $ = $B.args('getstate', 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n return $.self._random.getstate()\n}\n\nRandom.lognormvariate = function(){\n /*\n Log normal distribution.\n\n If you take the natural logarithm of this distribution, you'll get a\n normal distribution with mean mu and standard deviation sigma.\n mu can have any value, and sigma must be greater than zero.\n\n */\n return Math.exp(Random.normalvariate.apply(null, arguments))\n}\n\nRandom.normalvariate = function(){\n /*\n Normal distribution.\n\n mu is the mean, and sigma is the standard deviation.\n\n */\n\n // mu = mean, sigma = standard deviation\n\n // Uses Kinderman and Monahan method. Reference: Kinderman,\n // A.J. and Monahan, J.F., \"Computer generation of random\n // variables using the ratio of uniform deviates\", ACM Trans\n // Math Software, 3, (1977), pp257-260.\n\n var $ = $B.args(\"normalvariate\", 3,\n {self: null, mu:null, sigma:null}, [\"self\", \"mu\", \"sigma\"],\n arguments, {}, null, null),\n self = $.self,\n mu = $.mu,\n sigma = $.sigma\n\n while(true){\n var u1 = self._random(),\n u2 = 1.0 - self._random(),\n z = NV_MAGICCONST * (u1 - 0.5) / u2,\n zz = z * z / 4.0\n if(zz <= -Math.log(u2)){break}\n }\n return mu + z * sigma\n}\n\nRandom.paretovariate = function(){\n /* Pareto distribution. alpha is the shape parameter.*/\n // Jain, pg. 495\n\n var $ = $B.args(\"paretovariate\", 2, {self: null, alpha:null},\n [\"self\", \"alpha\"], arguments, {}, null, null)\n\n var u = 1 - $.self._random()\n return 1 / Math.pow(u, 1 / $.alpha)\n}\n\nRandom.randint = function(self, a, b){\n var $ = $B.args('randint', 3,\n {self: null, a:null, b:null},\n ['self', 'a', 'b'],\n arguments, {}, null, null)\n return Random.randrange($.self, $.a, $.b + 1)\n}\n\nRandom.random = function(self){\n return self._random()\n}\n\nRandom.randrange = function(){\n var $ = $B.args('randrange', 4,\n {self: null, x:null, stop:null, step:null},\n ['self', 'x', 'stop', 'step'],\n arguments, {stop:null, step:null}, null, null),\n self = $.self,\n _random = self._random\n //console.log(\"randrange\", $)\n\n if($.stop === null){\n var start = 0, stop = $.x, step = 1\n }else{\n var start = $.x, stop = $.stop,\n step = $.step === null ? 1 : $.step\n if(step == 0){throw _b_.ValueError.$factory('step cannot be 0')}\n }\n if((step > 0 && start > stop) || (step < 0 && start < stop)){\n throw _b_.ValueError.$factory(\"empty range for randrange() (\" +\n start + \", \" + stop + \", \" + step + \")\")\n }\n if(typeof start == 'number' && typeof stop == 'number' &&\n typeof step == 'number'){\n return start + step * Math.floor(_random() *\n Math.ceil((stop - start) / step))\n }else{\n var d = _b_.getattr(stop, '__sub__')(start)\n d = _b_.getattr(d, '__floordiv__')(step)\n // Force d to be a LongInt\n d = $B.long_int.$factory(d)\n // d is a long integer with n digits ; to choose a random number\n // between 0 and d the most simple is to take a random digit\n // at each position, except the first one\n var s = d.value,\n _len = s.length,\n res = Math.floor(_random() * (parseInt(s.charAt(0)) +\n (_len == 1 ? 0 : 1))) + ''\n var same_start = res.charAt(0) == s.charAt(0)\n for(var i = 1; i < _len; i++){\n if(same_start){\n // If it's the last digit, don't allow stop as valid\n if(i == _len - 1){\n res += Math.floor(_random() * parseInt(s.charAt(i))) + ''\n }else{\n res += Math.floor(_random() *\n (parseInt(s.charAt(i)) + 1)) + ''\n same_start = res.charAt(i) == s.charAt(i)\n }\n }else{\n res += Math.floor(_random() * 10) + ''\n }\n }\n var offset = {__class__: $B.long_int, value: res,\n pos: true}\n d = _b_.getattr(step, '__mul__')(offset)\n d = _b_.getattr(start, '__add__')(d)\n return _b_.int.$factory(d)\n }\n}\n\nRandom.sample = function(){\n /*\n Chooses k unique random elements from a population sequence or set.\n\n Returns a new list containing elements from the population while\n leaving the original population unchanged. The resulting list is\n in selection order so that all sub-slices will also be valid random\n samples. This allows raffle winners (the sample) to be partitioned\n into grand prize and second place winners (the subslices).\n\n Members of the population need not be hashable or unique. If the\n population contains repeats, then each occurrence is a possible\n selection in the sample.\n\n To choose a sample in a range of integers, use range as an argument.\n This is especially fast and space efficient for sampling from a\n large population: sample(range(10000000), 60)\n\n # Sampling without replacement entails tracking either potential\n # selections (the pool) in a list or previous selections in a set.\n\n # When the number of selections is small compared to the\n # population, then tracking selections is efficient, requiring\n # only a small set and an occasional reselection. For\n # a larger number of selections, the pool tracking method is\n # preferred since the list takes less space than the\n # set and it doesn't suffer from frequent reselections.'\n\n */\n var $ = $B.args('sample', 3, {self: null, population: null,k: null},\n ['self', 'population','k'], arguments, {}, null, null),\n self = $.self,\n population = $.population,\n k = $.k\n\n if(!_b_.hasattr(population, '__len__')){\n throw _b_.TypeError.$factory(\"Population must be a sequence or set. \" +\n \"For dicts, use list(d).\")\n }\n var n = _b_.getattr(population, '__len__')()\n\n if(k < 0 || k > n){\n throw _b_.ValueError.$factory(\"Sample larger than population\")\n }\n var result = [],\n setsize = 21 // size of a small set minus size of an empty list\n if(k > 5){\n setsize += Math.pow(4, Math.ceil(Math.log(k * 3, 4))) // table size for big sets\n }\n if(n <= setsize){\n // An n-length list is smaller than a k-length set\n if(Array.isArray(population)){\n var pool = population.slice()\n }else{var pool = _b_.list.$factory(population)}\n for(var i = 0; i < k; i++){ //invariant: non-selected at [0,n-i)\n var j = Random._randbelow(self, n - i)\n result[i] = pool[j]\n pool[j] = pool[n - i - 1] // move non-selected item into vacancy\n }\n }else{\n selected = {}\n for(var i = 0; i < k; i++){\n var j = Random._randbelow(self, n)\n while(selected[j] !== undefined){\n j = Random._randbelow(self, n)\n }\n selected[j] = true\n result[i] = Array.isArray(population) ? population[j] :\n _b_.getattr(population, '__getitem__')(j)\n }\n }\n return result\n}\n\nRandom.seed = function(){\n /*\n Initialize internal state from hashable object.\n\n None or no argument seeds from current time or from an operating\n system specific randomness source if available.\n\n If *a* is an int, all bits are used.\n */\n var $ = $B.args('seed', 3, {self: null, a: null, version: null},\n ['self', 'a', 'version'],\n arguments, {a: new Date(), version: 2}, null, null),\n self = $.self,\n a = $.a,\n version = $.version\n\n if(version == 1){a = _b_.hash(a)}\n else if(version == 2){\n if(_b_.isinstance(a, _b_.str)){\n a = _b_.int.from_bytes(_b_.bytes.$factory(a, 'utf-8'), 'big')\n }else if(_b_.isinstance(a, [_b_.bytes, _b_.bytearray])){\n a = _b_.int.from_bytes(a, 'big')\n }else if(!_b_.isinstance(a, _b_.int)){\n throw _b_.TypeError.$factory('wrong argument')\n }\n if(a.__class__ === $B.long_int){\n // In this implementation, seed() only accepts safe integers\n // Generate a random one from the underlying string value,\n // using an arbitrary seed (99) to always return the same\n // integer\n var numbers = a.value,\n res = '',\n pos\n self._random.seed(99)\n for(var i = 0; i < 17; i++){\n pos = parseInt(self._random() * numbers.length)\n res += numbers.charAt(pos)\n }\n a = parseInt(res)\n }\n }else{\n throw ValueError.$factory('version can only be 1 or 2')\n }\n\n self._random.seed(a)\n gauss_next = null\n}\n\nRandom.setstate = function(state){\n // Restore internal state from object returned by getstate().\n var $ = $B.args('setstate', 2, {self: null, state:null}, ['self', 'state'],\n arguments, {}, null, null),\n self = $.self\n var state = self._random.getstate()\n if(! Array.isArray($.state)){\n throw _b_.TypeError.$factory('state must be a list, not '+\n $B.get_class($.state).__name__)\n }\n if($.state.length < state.length){\n throw _b_.ValueError.$factory(\"need more than \" + $.state.length +\n \" values to unpack\")\n }else if($.state.length > state.length){\n throw _b_.ValueError.$factory(\"too many values to unpack (expected \" +\n state.length + \")\")\n }\n if($.state[0] != 3){\n throw _b_.ValueError.$factory(\"ValueError: state with version \" +\n $.state[0] + \" passed to Random.setstate() of version 3\")\n }\n var second = _b_.list.$factory($.state[1])\n if(second.length !== state[1].length){\n throw _b_.ValueError.$factory('state vector is the wrong size')\n }\n for(var i = 0; i < second.length; i++){\n if(typeof second[i] != 'number'){\n throw _b_.ValueError.$factory('state vector items must be integers')\n }\n }\n self._random.setstate($.state)\n}\n\nRandom.shuffle = function(x, random){\n /*\n x, random = random.random -> shuffle list x in place; return None.\n\n Optional arg random is a 0-argument function returning a random\n float in [0.0, 1.0); by default, the standard random.random.\n */\n\n var $ = $B.args('shuffle', 3, {self: null, x: null, random: null},\n ['self', 'x','random'],\n arguments, {random: null}, null, null),\n self = $.self,\n x = $.x,\n random = $.random\n\n if(random === null){random = self._random}\n\n if(Array.isArray(x)){\n for(var i = x.length - 1; i >= 0;i--){\n var j = Math.floor(random() * (i + 1)),\n temp = x[j]\n x[j] = x[i]\n x[i] = temp\n }\n }else{\n var len = _b_.getattr(x, '__len__')(), temp,\n x_get = _b_.getattr(x, '__getitem__'),\n x_set = _b_.getattr(x, '__setitem__')\n\n for(i = len - 1; i >= 0; i--){\n var j = Math.floor(random() * (i + 1)),\n temp = x_get(j)\n x_set(j, x_get(i))\n x_set(i, temp)\n }\n }\n}\n\nRandom.triangular = function(){\n /*\n Triangular distribution.\n\n Continuous distribution bounded by given lower and upper limits,\n and having a given mode value in-between.\n\n http://en.wikipedia.org/wiki/Triangular_distribution\n */\n var $ = $B.args('triangular', 4,\n {self: null, low: null, high: null, mode: null},\n ['self', 'low', 'high', 'mode'],\n arguments, {low: 0, high: 1, mode: null}, null, null),\n low = $.low,\n high = $.high,\n mode = $.mode\n\n var u = $.self._random(),\n c = mode === null ? 0.5 : (mode - low) / (high - low)\n if(u > c){\n u = 1 - u\n c = 1 - c\n var temp = low\n low = high\n high = temp\n }\n return low + (high - low) * Math.pow(u * c, 0.5)\n}\n\nRandom.uniform = function(){\n var $ = $B.args('uniform', 3, {self: null, a: null, b: null},\n ['self', 'a', 'b'], arguments, {}, null, null),\n a = $B.$GetInt($.a),\n b = $B.$GetInt($.b)\n\n return a + (b - a) * $.self._random()\n}\n\nRandom.vonmisesvariate = function(){\n /* Circular data distribution.\n\n mu is the mean angle, expressed in radians between 0 and 2*pi, and\n kappa is the concentration parameter, which must be greater than or\n equal to zero. If kappa is equal to zero, this distribution reduces\n to a uniform random angle over the range 0 to 2*pi.\n\n */\n // mu: mean angle (in radians between 0 and 2*pi)\n // kappa: concentration parameter kappa (>= 0)\n // if kappa = 0 generate uniform random angle\n\n // Based upon an algorithm published in: Fisher, N.I.,\n // \"Statistical Analysis of Circular Data\", Cambridge\n // University Press, 1993.\n\n // Thanks to Magnus Kessler for a correction to the\n // implementation of step 4.\n\n var $ = $B.args('vonmisesvariate', 3,\n {self: null, mu: null, kappa:null}, ['self', 'mu', 'kappa'],\n arguments, {}, null, null),\n self = $.self,\n mu = $.mu,\n kappa = $.kappa,\n TWOPI = 2*Math.PI\n\n if(kappa <= 1e-6){return TWOPI * self._random()}\n\n var s = 0.5 / kappa,\n r = s + Math.sqrt(1.0 + s * s)\n\n while(true){\n var u1 = self._random(),\n z = Math.cos(Math.PI * u1),\n d = z / (r + z),\n u2 = self._random()\n if((u2 < 1.0 - d * d) ||\n (u2 <= (1.0 - d) * Math.exp(d))){\n break\n }\n }\n var q = 1.0 / r,\n f = (q + z) / (1.0 + q * z),\n u3 = self._random()\n if(u3 > 0.5){var theta = (mu + Math.acos(f)) % TWOPI}\n else{var theta = (mu - Math.acos(f)) % TWOPI}\n return theta\n}\n\nRandom.weibullvariate = function(){\n /*Weibull distribution.\n\n alpha is the scale parameter and beta is the shape parameter.\n\n */\n // Jain, pg. 499; bug fix courtesy Bill Arms\n var $ = $B.args(\"weibullvariate\", 3,\n {self: null, alpha: null, beta: null},\n [\"self\", \"alpha\", \"beta\"], arguments, {}, null, null)\n\n var u = 1 - $.self._random()\n return $.alpha * Math.pow(-Math.log(u), 1 / $.beta)\n}\n\n$B.set_func_names(Random, \"random\")\n\nvar $module = Random.$factory()\nfor(var attr in Random){\n $module[attr] = (function(x){\n return function(){return Random[x]($module, ...arguments)}\n })(attr)\n $module[attr].$infos = Random[attr].$infos\n}\n\n$module.Random = Random\n\nvar SystemRandom = $B.make_class(\"SystemRandom\",\n function(){\n return {__class__: SystemRandom}\n }\n)\nSystemRandom.__getattribute__ = function(){\n throw $B.builtins.NotImplementedError.$factory()\n}\n\n$module.SystemRandom = SystemRandom\n\nreturn $module\n\n})(__BRYTHON__)\n\n"],_ajax:[".js","// ajax\nvar $module = (function($B){\n\neval($B.InjectBuiltins())\nvar $N = $B.builtins.None\n\nvar ajax1 = $B.make_class(\"ajax1\",\n function(){\n if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari\n var xmlhttp = new XMLHttpRequest()\n }else{// code for IE6, IE5\n var xmlhttp = new ActiveXObject(\"Microsoft.XMLHTTP\")\n }\n xmlhttp.onreadystatechange = function(){\n // here, \"this\" refers to xmlhttp\n var state = this.readyState\n var timer = this.$requestTimer\n if(state == 0 && this.onuninitialized){this.onuninitialized()}\n else if(state == 1 && this.onloading){this.onloading()}\n else if(state == 2 && this.onloaded){this.onloaded()}\n else if(state == 3 && this.oninteractive){this.oninteractive()}\n else if(state == 4 && this.oncomplete){\n if(timer !== null){window.clearTimeout(timer)}\n this.oncomplete()\n }\n }\n return {\n __class__: ajax,\n js: xmlhttp,\n headers: {}\n }\n }\n)\n\nvar add_to_res = function(res, key, val) {\n if(isinstance(val, list)){\n for (j = 0; j < val.length; j++) {\n add_to_res(res, key, val[j])\n }\n }else if (val instanceof File || val instanceof Blob){\n res.append(key, val)\n }else{res.append(key,str.$factory(val))}\n}\n\nvar ajax = {\n __class__: _b_.type,\n __mro__: [$B.JSObject, _b_.object],\n __name__: 'ajax',\n\n __getattribute__ : function(self, attr){\n // Special case for send : accept dict as parameters\n if(attr == 'send'){\n return function(params){\n return ajax.send(self, params)\n }\n }\n // Otherwise default to JSObject method\n return $B.JSObject.__getattribute__(self, attr)\n },\n\n __repr__ : function(self){return ''},\n __str__ : function(self){return ''},\n\n bind : function(self, evt, func){\n // req.bind(evt,func) is the same as req.onevt = func\n self.js['on' + evt] = function(){\n try{\n return func.apply(null, arguments)\n }catch(err){\n if(err.__class__ !== undefined){\n var msg = _b_.getattr(err, 'info') +\n '\\n' + err.__class__.__name__\n if(err.args){msg += ': ' + err.args[0]}\n try{getattr($B.stderr, \"write\")(msg)}\n catch(err){console.log(msg)}\n }else{\n try{getattr($B.stderr, \"write\")(err)}\n catch(err1){console.log(err)}\n }\n }\n }\n return $N\n },\n\n send : function(self,params){\n // params can be Python dictionary or string\n //self.js.onreadystatechange = function(ev){console.log(ev.target)}\n var res = ''\n if(!params){\n self.js.send()\n return $N\n }else if(isinstance(params, str)){\n res = params\n }else if(isinstance(params, dict)){\n if(self.headers['content-type'] == 'multipart/form-data'){\n // The FormData object serializes the data in the 'multipart/form-data'\n // content-type so we may as well override that header if it was set\n // by the user.\n res = new FormData()\n var items = _b_.list.$factory(_b_.dict.items(params))\n for(var i = 0, len = items.length; i < len; i++){\n add_to_res(res, str.$factory(items[i][0]), items[i][1])\n }\n }else{\n var items = _b_.list.$factory(_b_.dict.items(params))\n for(var i = 0, len = items.length; i < len; i++){\n var key = encodeURIComponent(str.$factory(items[i][0]));\n if(isinstance(items[i][1], list)){\n for (j = 0; j < items[i][1].length; j++) {\n res += key +'=' +\n encodeURIComponent(str.$factory(items[i][1][j])) + '&'\n }\n }else{\n res += key + '=' +\n encodeURIComponent(str.$factory(items[i][1])) + '&'\n }\n }\n res = res.substr(0, res.length - 1)\n }\n }else{\n throw _b_.TypeError(\"send() argument must be string or dictionary, not '\" +\n str.$factory(params.__class__) + \"'\")\n }\n self.js.send(res)\n return $N\n },\n\n set_header : function(self,key,value){\n self.js.setRequestHeader(key,value)\n self.headers[key.toLowerCase()] = value.toLowerCase()\n },\n\n set_timeout : function(self,seconds,func){\n self.js.$requestTimer = setTimeout(\n function() {self.js.abort();func()},\n seconds * 1000)\n }\n}\n\najax.$factory = function(){\n\n if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari\n var xmlhttp = new XMLHttpRequest()\n }else{// code for IE6, IE5\n var xmlhttp = new ActiveXObject(\"Microsoft.XMLHTTP\")\n }\n xmlhttp.onreadystatechange = function(){\n // here, \"this\" refers to xmlhttp\n var state = this.readyState\n if(this.responseType == \"\" || this.responseType == \"text\"){\n res.js.text = this.responseText\n }\n var timer = this.$requestTimer\n if(state == 0 && this.onuninitialized){this.onuninitialized(res)}\n else if(state == 1 && this.onloading){this.onloading(res)}\n else if(state == 2 && this.onloaded){this.onloaded(res)}\n else if(state == 3 && this.oninteractive){this.oninteractive(res)}\n else if(state == 4 && this.oncomplete){\n if(timer !== null){window.clearTimeout(timer)}\n this.oncomplete(res)\n }\n }\n var res = {\n __class__: ajax,\n js: xmlhttp,\n headers: {}\n }\n return res\n}\n\n\n$B.set_func_names(ajax)\n\nreturn {ajax: ajax, ajax1: ajax1}\n\n})(__BRYTHON__)\n"],_base64:[".js",'var $module=(function($B){\n\nvar _b_ = $B.builtins,\n _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="\n\nfunction make_alphabet(altchars){\n var alphabet = _keyStr\n if(altchars !== undefined && altchars !== _b_.None){\n // altchars is an instance of Python bytes\n var source = altchars.source\n alphabet = alphabet.substr(0,alphabet.length-3) +\n _b_.chr(source[0]) + _b_.chr(source[1]) + \'=\'\n }\n return alphabet\n}\n\nvar Base64 = {\n error: function(){return \'binascii_error\'},\n\n encode: function(bytes, altchars){\n\n var input = bytes.source,\n output = "",\n chr1, chr2, chr3, enc1, enc2, enc3, enc4\n var i = 0\n\n var alphabet = make_alphabet(altchars)\n\n while(i < input.length){\n\n chr1 = input[i++]\n chr2 = input[i++]\n chr3 = input[i++]\n\n enc1 = chr1 >> 2\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4)\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6)\n enc4 = chr3 & 63\n\n if(isNaN(chr2)){\n enc3 = enc4 = 64\n }else if(isNaN(chr3)){\n enc4 = 64\n }\n\n output = output + alphabet.charAt(enc1) +\n alphabet.charAt(enc2) +\n alphabet.charAt(enc3) +\n alphabet.charAt(enc4)\n\n }\n return _b_.bytes.$factory(output, \'utf-8\', \'strict\')\n },\n\n\n decode: function(bytes, altchars, validate){\n var output = [],\n chr1, chr2, chr3,\n enc1, enc2, enc3, enc4\n\n var alphabet = make_alphabet(altchars)\n\n var input = bytes.source\n\n // If validate is set, check that all characters in input\n // are in the alphabet\n var _input = \'\'\n var padding = 0\n for(var i = 0, len = input.length; i < len; i++){\n var car = String.fromCharCode(input[i])\n var char_num = alphabet.indexOf(car)\n if(char_num == -1){\n if(validate){throw Base64.error("Non-base64 digit found: " +\n car)}\n }else if(char_num == 64 && i < input.length - 2){\n if(validate){throw Base64.error("Non-base64 digit found: " +\n car)}\n }else if(char_num == 64 && i >= input.length - 2){\n padding++\n _input += car\n }else{\n _input += car\n }\n }\n input = _input\n if(_input.length == padding){return _b_.bytes.$factory([])}\n if( _input.length % 4 > 0){throw Base64.error("Incorrect padding")}\n\n var i = 0\n while(i < input.length){\n\n enc1 = alphabet.indexOf(input.charAt(i++))\n enc2 = alphabet.indexOf(input.charAt(i++))\n enc3 = alphabet.indexOf(input.charAt(i++))\n enc4 = alphabet.indexOf(input.charAt(i++))\n\n chr1 = (enc1 << 2) | (enc2 >> 4)\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2)\n chr3 = ((enc3 & 3) << 6) | enc4\n\n output.push(chr1)\n\n if(enc3 != 64){output.push(chr2)}\n if(enc4 != 64){output.push(chr3)}\n\n }\n // return Python bytes\n return _b_.bytes.$factory(output, \'utf-8\', \'strict\')\n\n },\n\n _utf8_encode: function(string) {\n string = string.replace(/\\r\\n/g, "\\n")\n var utftext = "";\n\n for(var n = 0; n < string.length; n++){\n\n var c = string.charCodeAt(n)\n\n if(c < 128){\n utftext += String.fromCharCode(c)\n }else if((c > 127) && (c < 2048)){\n utftext += String.fromCharCode((c >> 6) | 192)\n utftext += String.fromCharCode((c & 63) | 128)\n }else{\n utftext += String.fromCharCode((c >> 12) | 224)\n utftext += String.fromCharCode(((c >> 6) & 63) | 128)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n\n }\n\n return utftext\n },\n\n _utf8_decode: function(utftext) {\n var string = "",\n i = 0,\n c = c1 = c2 = 0\n\n while(i < utftext.length){\n\n c = utftext.charCodeAt(i)\n\n if(c < 128){\n string += String.fromCharCode(c)\n i++\n }else if((c > 191) && (c < 224)){\n c2 = utftext.charCodeAt(i + 1)\n string += String.fromCharCode(((c & 31) << 6) | (c2 & 63))\n i += 2\n }else{\n c2 = utftext.charCodeAt(i + 1)\n c3 = utftext.charCodeAt(i + 2)\n string += String.fromCharCode(\n ((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63))\n i += 3\n }\n\n }\n\n return string\n }\n\n}\n\nreturn {Base64:Base64}\n}\n\n)(__BRYTHON__)'],_jsre:[".js","var $module=(function($B){\n\n var _b_ = $B.builtins\n var $s = []\n for(var $b in _b_) $s.push('var ' + $b +'=_b_[\"' + $b + '\"]')\n eval($s.join(';'))\n\n var JSObject = $B.JSObject\n\n var obj = {__class__: $module,\n __str__: function(){return \"\"}\n }\n obj.A = obj.ASCII = 256\n obj.I = obj.IGNORECASE = 2 // 'i'\n obj.L = obj.LOCALE = 4\n obj.M = obj.MULTILINE = 8 // 'm'\n obj.S = obj.DOTALL = 16\n obj.U = obj.UNICODE = 32\n obj.X = obj.VERBOSE = 64\n obj._is_valid = function(pattern) {\n if ($B.$options.re == 'pyre'){return false} //force use of python's re module\n if ($B.$options.re == 'jsre'){return true} //force use of brythons re module\n // FIXME: Improve\n\n if(! isinstance(pattern, str)){\n // this is probably a SRE_PATTERN, so return false, and let\n // python's re module handle this.\n return false\n }\n var is_valid = false\n try{\n new RegExp(pattern)\n is_valid = true\n }\n catch(e){}\n if(! is_valid){return false} //if js won't parse the pattern return false\n\n // using reference http://www.regular-expressions.info/\n // to compare python re and javascript regex libraries\n\n // look for things javascript does not support\n // check for name capturing group\n var mylist = ['?P=', '?P<', '(?#', '(?<=', '(? -1) return false\n }\n\n var re_list=['\\{,\\d+\\}']\n for(var i=0, _len_i = re_list.length; i < _len_i; i++) {\n var _re = new RegExp(re_list[i])\n if (_re.test(pattern)){return false}\n }\n\n // it looks like the pattern has passed all our tests so lets assume\n // javascript can handle this pattern.\n return true\n }\n var $SRE_PatternDict = {\n __class__:_b_.type,\n __name__:'SRE_Pattern'\n }\n $SRE_PatternDict.__mro__ = [object]\n $SRE_PatternDict.findall = function(self, string){\n return obj.findall(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.finditer = function(self, string){\n return obj.finditer(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.match = function(self, string){\n return obj.match(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.search = function(self, string){\n return obj.search(self.pattern, string, self.flags)\n }\n function normflags(flags){\n return ((flags & obj.I)? 'i' : '') + ((flags & obj.M)? 'm' : '');\n }\n obj.compile = function(pattern, flags){\n return {\n __class__: $SRE_PatternDict,\n pattern: pattern,\n flags: normflags(flags)\n }\n }\n obj.escape = function(string){\n // Escape all the characters in pattern except ASCII letters, numbers\n // and '_'. This is useful if you want to match an arbitrary literal\n // string that may have regular expression metacharacters in it.\n var res = ''\n var ok = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'\n for(var i = 0, _len_i = string.length; i < _len_i; i++){\n if(ok.search(string.charAt(i))>-1){res += string.charAt(i)}\n }\n return res\n }\n obj.findall = function(pattern, string, flags){\n var $ns=$B.args('re.findall', 2,\n {pattern:null, string:null}, ['pattern', 'string'],\n arguments,{}, 'args', 'kw') ,\n args = $ns['args'] ,\n _flags = 0;\n if(args.length>0){var flags = args[0]}\n else{var _flags = getattr($ns['kw'], 'get')('flags', 0)}\n\n var flags = normflags()\n flags += 'gm'\n var jsp = new RegExp(pattern,flags),\n jsmatch = string.match(jsp)\n if(jsmatch === null){return []}\n return jsmatch\n }\n obj.finditer = function(pattern, string, flags){\n var $ns=$B.args('re.finditer', 2,\n {pattern:null, string:null}, ['pattern', 'string'],\n arguments,{},'args','kw'),\n args = $ns['args'],\n _flags = 0;\n if(args.length>0){var flags=args[0]}\n else{var _flags = getattr($ns['kw'], 'get')('flags', 0)}\n\n var flags = normflags()\n flags += 'gm'\n var jsp = new RegExp(pattern, flags),\n jsmatch = string.match(jsp);\n if(jsmatch === null){return []}\n\n var _list = []\n for(var j = 0, _len_j = jsmatch.length; j < _len_j; j++) {\n var mo = {}\n mo._match=jsmatch[j]\n mo.group = function(){\n var res = []\n for(var i=0, _len_i = arguments.length; i < _len_i;i++){\n if(jsmatch[arguments[i]] === undefined){res.push(None)}\n else{res.push(jsmatch[arguments[i]])}\n }\n if(arguments.length == 1){return res[0]}\n return tuple.$factory(res)\n }\n mo.groups = function(_default){\n if(_default === undefined){_default=None}\n var res = []\n for(var i = 1, _len_i = jsmatch.length; i < _len_i; i++){\n if(jsmatch[i] === undefined){res.push(_default)}\n else{res.push(jsmatch[i])}\n }\n return tuple.$factory(res)\n }\n mo.start = function(){return mo._match.index}\n mo.end = function(){return mo._match.length - mo._match.index}\n mo.string = string\n _list.push(JSObject.$factory(mo))\n }\n return _list\n }\n obj.search = function(pattern, string){\n var $ns = $B.args('re.search', 2,\n {pattern:null, string:null},['pattern', 'string'],\n arguments, {}, 'args', 'kw')\n var args = $ns['args']\n if(args.length>0){var flags = args[0]}\n else{var flags = getattr($ns['kw'], 'get')('flags', '')}\n flags = normflags(flags)\n var jsp = new RegExp(pattern,flags)\n var jsmatch = string.match(jsp)\n if(jsmatch === null){return None}\n var mo = new Object()\n mo.group = function(){\n var res = []\n for(var i = 0, _len_i = arguments.length; i < _len_i; i++){\n if(jsmatch[arguments[i]] === undefined){res.push(None)}\n else{res.push(jsmatch[arguments[i]])}\n }\n if(arguments.length == 1){return res[0]}\n return tuple.$factory(res)\n }\n mo.groups = function(_default){\n if(_default===undefined){_default=None}\n var res = []\n for(var i = 1, _len_i = jsmatch.length; i < _len_i; i++){\n if(jsmatch[i] === undefined){res.push(_default)}\n else{res.push(jsmatch[i])}\n }\n return tuple.$factory(res)\n }\n mo.start = function(){return jsmatch.index}\n mo.end = function(){return jsmatch.length - jsmatch.index}\n mo.string = string\n return JSObject.$factory(mo)\n }\n obj.sub = function(pattern, repl, string){\n var $ns=$B.args('re.search', 3,\n {pattern: null, repl: null, string: null},\n ['pattern', 'repl', 'string'],\n arguments,{}, 'args', 'kw')\n for($var in $ns){eval(\"var \" + $var + \"=$ns[$var]\")}\n var args = $ns['args']\n var count = _b_.dict.get($ns['kw'], 'count', 0)\n var flags = _b_.dict.get($ns['kw'], 'flags', '')\n if(args.length > 0){var count = args[0]}\n if(args.length > 1){var flags = args[1]}\n flags = normflags(flags)\n if(typeof repl == \"string\"){\n // backreferences are \\1, \\2... in Python but $1,$2... in Javascript\n repl = repl.replace(/\\\\(\\d+)/g, '$$$1')\n }else if(typeof repl == \"function\"){\n // the argument passed to the Python function is the match object\n // the arguments passed to the Javascript function are :\n // - the matched substring\n // - the matched groups\n // - the offset of the matched substring inside the string\n // - the string being examined\n var $repl1 = function(){\n var mo = Object()\n mo.string = arguments[arguments.length - 1]\n var start = arguments[arguments.length - 2]\n var end = start + arguments[0].length\n mo.start = function(){return start}\n mo.end = function(){return end}\n groups = []\n for(var i = 1, _len_i = arguments.length-2; i < _len_i; i++){\n groups.push(arguments[i])\n }\n mo.groups = function(_default){\n if(_default === undefined){_default = None}\n var res = []\n for(var i = 0, _len_i = groups.length; i < _len_i; i++){\n if(groups[i] === undefined){res.push(_default)}\n else{res.push(groups[i])}\n }\n return res\n }\n return repl(JSObject.$factory(mo))\n }\n }\n if(count == 0){flags += 'g'}\n var jsp = new RegExp(pattern, flags)\n if(typeof repl == 'function'){return string.replace(jsp, $repl1)}\n else{return string.replace(jsp, repl)}\n }\n obj.match = (function(search_func){\n return function(){\n // match is like search but pattern must start with ^\n var pattern = arguments[0]\n if(pattern.charAt(0) != '^'){pattern = '^'+pattern}\n var args = [pattern]\n for(var i = 1, _len_i = arguments.length; i < _len_i; i++){\n args.push(arguments[i])\n }\n return search_func.apply(null, args)\n }\n })(obj.search)\n\n return obj\n}\n)(__BRYTHON__)\n"],_multiprocessing:[".js","// multiprocessing\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\nvar $s=[]\nfor(var $b in _b_) $s.push('var ' + $b +'=_b_[\"'+$b+'\"]')\neval($s.join(';'))\n\n//for(var $py_builtin in _b_){eval(\"var \"+$py_builtin+\"=_b_[$py_builtin]\")}\n\nvar Process = {\n __class__:_b_.type,\n __mro__: [_b_.object],\n __name__:'Process',\n $is_class: true\n}\n\nvar $convert_args=function(args) {\n var _list=[]\n for(var i=0, _len_i = args.length; i < _len_i; i++) {\n var _a=args[i]\n if(isinstance(_a, str)){_list.push(\"'\"+_a+\"'\")} else {_list.push(_a)}\n }\n\n return _list.join(',')\n}\n\nProcess.is_alive = function(self){return self.$alive}\n\nProcess.join = function(self, timeout){\n // need to block until process is complete\n // could probably use a addEventListener to execute all existing code\n // after this join statement\n\n self.$worker.addEventListener('message', function (e) {\n var data=e.data\n if (data.stdout != '') { // output stdout from process\n $B.stdout.write(data.stdout)\n }\n }, false);\n}\n\nProcess.run = function(self){\n //fix me\n}\n\nProcess.start = function(self){\n self.$worker.postMessage({target: self.$target,\n args: $convert_args(self.$args),\n // kwargs: self.$kwargs\n })\n self.$worker.addEventListener('error', function(e) { throw e})\n self.$alive=true\n}\n\nProcess.terminate = function(self){\n self.$worker.terminate()\n self.$alive=false\n}\n\n// variables\n//name\n//daemon\n//pid\n//exitcode\n\nProcess. $factory = function(){\n //arguments group=None, target=None, name=None, args=(), kwargs=()\n\n var $ns=$B.args('Process',0,{},[],arguments,{},null,'kw')\n var kw=$ns['kw']\n\n var target=_b_.dict.get($ns['kw'],'target',None)\n var args=_b_.dict.get($ns['kw'],'args',tuple.$factory())\n\n var worker = new Worker('/src/web_workers/multiprocessing.js')\n\n var res = {\n __class__:Process,\n $worker: worker,\n name: $ns['name'] || None,\n $target: target+'',\n $args: args,\n //$kwargs: $ns['kw'],\n $alive: false\n }\n return res\n}\n\n$B.set_func_names(Process, \"multiprocessing\")\n\nvar Pool = $B.make_class(\"Pool\")\n\nPool.__enter__ = function(self){}\nPool.__exit__ = function(self){}\n\nPool.__str__ = Pool.toString = Pool.__repr__=function(self){\n return ''\n}\n\nPool.map = function(){\n\n var $ns=$B.args('Pool.map', 3,\n {self:null, func:null, fargs:null}, ['self', 'func', 'fargs'],\n arguments,{},'args','kw')\n var func=$ns['func']\n var fargs=$ns['fargs']\n\n var _results=[]\n\n fargs=iter(fargs)\n\n var _pos=0\n console.log(self.$processes)\n _workers=[]\n for(var i=0; i < self.$processes; i++) {\n _workers[i] = new Worker('/src/web_workers/multiprocessing.js')\n var arg\n\n try{arg=getattr(fargs, '__next__')()}\n catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n }\n console.log(arg)\n _workers[i].finished=false\n _workers[i].postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n\n _workers[i].addEventListener('message', function(e) {\n _results[e.data.pos]=e.data.result\n if (_results.length == args.length) return _results\n\n try {\n arg=getattr(fargs, '__next__')()\n e.currentTarget.postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n } catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n this.finished=true\n }\n }, false);\n }\n}\n\nPool.apply_async = function(){\n\n var $ns=$B.$MakeArgs('apply_async', 3,\n {self:null, func:null, fargs:null}, ['self', 'func', 'fargs'],\n arguments,{},'args','kw')\n var func=$ns['func']\n var fargs=$ns['fargs']\n\n fargs=iter(fargs)\n\n async_result = {}\n async_result.get=function(timeout){\n console.log(results)\n console.log(fargs)\n return this.results}\n async_result.results=[]\n\n var _pos=0\n\n _workers=[]\n for(var i=0; i < self.$processes; i++) {\n _workers[i] = new Worker('/src/web_workers/multiprocessing.js')\n var arg\n\n try{arg=getattr(fargs, '__next__')()}\n catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n }\n //console.log(arg)\n //_workers[i].finished=false\n _workers[i].postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n\n _workers[i].addEventListener('message', function(e) {\n async_result.results[e.data.pos]=e.data.result\n //if (_results.length == args.length) return _results\n\n try {\n arg=getattr(fargs, '__next__')()\n e.currentTarget.postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n } catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n this.finished=true\n }\n }, false);\n }\n\n console.log(\"return\", async_result)\n return async_result\n}\n\nPool.$factory = function(){\n console.log(\"pool\")\n console.log(arguments)\n var $ns=$B.args('Pool',1,\n {processes:null},['processes'],arguments,{},'args','kw')\n //var kw=$ns['kw']\n\n var processes=$ns['processes']\n\n if (processes == None) {\n // look to see if we have stored cpu_count in local storage\n // maybe we should create a brython config file with settings,etc..??\n\n // if not there use a tool such as Core Estimator to calculate number of cpu's\n // http://eligrey.com/blog/post/cpu-core-estimation-with-javascript\n }\n\n console.log(processes)\n var res = {\n __class__:Pool,\n $processes:processes\n }\n return res\n}\n\n$B.set_func_names(Pool, \"multiprocessing\")\n\nreturn {Process:Process, Pool:Pool}\n\n})(__BRYTHON__)\n"],_posixsubprocess:[".js","var $module=(function($B){\n\n return {\n cloexec_pipe: function() {} // fixme\n }\n})(__BRYTHON__)\n"],_profile:[".js","// Private interface to the profiling instrumentation implemented in py_utils.js.\n// Uses local a copy of the eval function from py_builtin_functions.js\n\nvar $module=(function($B) {\n eval($B.InjectBuiltins());\n return {\n brython:$B,\n data:$B.$profile_data,\n start:$B.$profile.start,\n stop:$B.$profile.stop,\n pause:$B.$profile.pause,\n status:$B.$profile.status,\n clear:$B.$profile.clear,\n elapsed:$B.$profile.elapsed,\n run:function(src,_globals,_locals,nruns) {\n var current_frame = $B.frames_stack[$B.frames_stack.length-1]\n if(current_frame!==undefined){\n var current_locals_id = current_frame[0].replace(/\\./,'_'),\n current_globals_id = current_frame[2].replace(/\\./,'_')\n }\n\n var is_exec = true,\n leave = false\n\n // code will be run in a specific block\n var globals_id = '$profile_'+$B.UUID(),\n locals_id\n\n if(_locals===_globals){\n locals_id = globals_id\n }else{\n locals_id = '$profile_'+$B.UUID()\n }\n // Initialise the object for block namespaces\n eval('var $locals_'+globals_id+' = {}\\nvar $locals_'+locals_id+' = {}')\n\n // Initialise block globals\n\n // A _globals dictionary is provided, set or reuse its attribute\n // globals_id\n _globals.globals_id = _globals.globals_id || globals_id\n globals_id = _globals.globals_id\n\n if(_locals === _globals || _locals === undefined){\n locals_id = globals_id\n parent_scope = $B.builtins_scope\n }else{\n // The parent block of locals must be set to globals\n parent_scope = {\n id: globals_id,\n parent_block: $B.builtins_scope,\n binding: {}\n }\n for(var attr in _globals.$string_dict){\n parent_scope.binding[attr] = true\n }\n }\n\n // Initialise block globals\n if(_globals.$jsobj){var items = _globals.$jsobj}\n else{var items = _globals.$string_dict}\n for(var item in items){\n item1 = to_alias(item)\n try{\n eval('$locals_' + globals_id + '[\"' + item1 +\n '\"] = items[item]')\n }catch(err){\n console.log(err)\n console.log('error setting', item)\n break\n }\n }\n\n // Initialise block locals\n var items = _b_.dict.items(_locals), item\n if(_locals.$jsobj){var items = _locals.$jsobj}\n else{var items = _locals.$string_dict}\n for(var item in items){\n item1 = to_alias(item)\n try{\n eval('$locals_' + locals_id + '[\"' + item[0] + '\"] = item[1]')\n }catch(err){\n console.log(err)\n console.log('error setting', item)\n break\n }\n }\n //var nb_modules = Object.keys(__BRYTHON__.modules).length\n //console.log('before exec', nb_modules)\n\n $B.current_exception = ce\n\n console.log(\"call py2js\", src, globals_id, locals_id, parent_scope)\n var root = $B.py2js(src, globals_id, locals_id, parent_scope),\n js, gns, lns\n\n try{\n\n var js = root.to_js()\n\n var i,res,gns;\n for(i=0;i>>2]|=(a[g>>>2]>>>24-8*(g%4)&255)<<24-8*((j+g)%4);else if(65535>>2]=a[g>>>2];else h.push.apply(h,a);this.sigBytes+=b;return this},clamp:function(){var b=this.words,h=this.sigBytes;b[h>>>2]&=4294967295<<\n32-8*(h%4);b.length=s.ceil(h/4)},clone:function(){var b=r.clone.call(this);b.words=this.words.slice(0);return b},random:function(b){for(var h=[],a=0;a>>2]>>>24-8*(j%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join("")},parse:function(b){for(var a=b.length,g=[],j=0;j>>3]|=parseInt(b.substr(j,\n2),16)<<24-4*(j%8);return new q.init(g,a/2)}},a=v.Latin1={stringify:function(b){var a=b.words;b=b.sigBytes;for(var g=[],j=0;j>>2]>>>24-8*(j%4)&255));return g.join("")},parse:function(b){for(var a=b.length,g=[],j=0;j>>2]|=(b.charCodeAt(j)&255)<<24-8*(j%4);return new q.init(g,a)}},u=v.Utf8={stringify:function(b){try{return decodeURIComponent(escape(a.stringify(b)))}catch(g){throw Error("Malformed UTF-8 data");}},parse:function(b){return a.parse(unescape(encodeURIComponent(b)))}},\ng=l.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(b){"string"==typeof b&&(b=u.parse(b));this._data.concat(b);this._nDataBytes+=b.sigBytes},_process:function(b){var a=this._data,g=a.words,j=a.sigBytes,k=this.blockSize,m=j/(4*k),m=b?s.ceil(m):s.max((m|0)-this._minBufferSize,0);b=m*k;j=s.min(4*b,j);if(b){for(var l=0;l>>32-j)+k}function m(a,k,b,h,l,j,m){a=a+(k&h|b&~h)+l+m;return(a<>>32-j)+k}function l(a,k,b,h,l,j,m){a=a+(k^b^h)+l+m;return(a<>>32-j)+k}function n(a,k,b,h,l,j,m){a=a+(b^(k|~h))+l+m;return(a<>>32-j)+k}for(var r=CryptoJS,q=r.lib,v=q.WordArray,t=q.Hasher,q=r.algo,a=[],u=0;64>u;u++)a[u]=4294967296*s.abs(s.sin(u+1))|0;q=q.MD5=t.extend({_doReset:function(){this._hash=new v.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(g,k){for(var b=0;16>b;b++){var h=k+b,w=g[h];g[h]=(w<<8|w>>>24)&16711935|(w<<24|w>>>8)&4278255360}var b=this._hash.words,h=g[k+0],w=g[k+1],j=g[k+2],q=g[k+3],r=g[k+4],s=g[k+5],t=g[k+6],u=g[k+7],v=g[k+8],x=g[k+9],y=g[k+10],z=g[k+11],A=g[k+12],B=g[k+13],C=g[k+14],D=g[k+15],c=b[0],d=b[1],e=b[2],f=b[3],c=p(c,d,e,f,h,7,a[0]),f=p(f,c,d,e,w,12,a[1]),e=p(e,f,c,d,j,17,a[2]),d=p(d,e,f,c,q,22,a[3]),c=p(c,d,e,f,r,7,a[4]),f=p(f,c,d,e,s,12,a[5]),e=p(e,f,c,d,t,17,a[6]),d=p(d,e,f,c,u,22,a[7]),\nc=p(c,d,e,f,v,7,a[8]),f=p(f,c,d,e,x,12,a[9]),e=p(e,f,c,d,y,17,a[10]),d=p(d,e,f,c,z,22,a[11]),c=p(c,d,e,f,A,7,a[12]),f=p(f,c,d,e,B,12,a[13]),e=p(e,f,c,d,C,17,a[14]),d=p(d,e,f,c,D,22,a[15]),c=m(c,d,e,f,w,5,a[16]),f=m(f,c,d,e,t,9,a[17]),e=m(e,f,c,d,z,14,a[18]),d=m(d,e,f,c,h,20,a[19]),c=m(c,d,e,f,s,5,a[20]),f=m(f,c,d,e,y,9,a[21]),e=m(e,f,c,d,D,14,a[22]),d=m(d,e,f,c,r,20,a[23]),c=m(c,d,e,f,x,5,a[24]),f=m(f,c,d,e,C,9,a[25]),e=m(e,f,c,d,q,14,a[26]),d=m(d,e,f,c,v,20,a[27]),c=m(c,d,e,f,B,5,a[28]),f=m(f,c,\nd,e,j,9,a[29]),e=m(e,f,c,d,u,14,a[30]),d=m(d,e,f,c,A,20,a[31]),c=l(c,d,e,f,s,4,a[32]),f=l(f,c,d,e,v,11,a[33]),e=l(e,f,c,d,z,16,a[34]),d=l(d,e,f,c,C,23,a[35]),c=l(c,d,e,f,w,4,a[36]),f=l(f,c,d,e,r,11,a[37]),e=l(e,f,c,d,u,16,a[38]),d=l(d,e,f,c,y,23,a[39]),c=l(c,d,e,f,B,4,a[40]),f=l(f,c,d,e,h,11,a[41]),e=l(e,f,c,d,q,16,a[42]),d=l(d,e,f,c,t,23,a[43]),c=l(c,d,e,f,x,4,a[44]),f=l(f,c,d,e,A,11,a[45]),e=l(e,f,c,d,D,16,a[46]),d=l(d,e,f,c,j,23,a[47]),c=n(c,d,e,f,h,6,a[48]),f=n(f,c,d,e,u,10,a[49]),e=n(e,f,c,d,\nC,15,a[50]),d=n(d,e,f,c,s,21,a[51]),c=n(c,d,e,f,A,6,a[52]),f=n(f,c,d,e,q,10,a[53]),e=n(e,f,c,d,y,15,a[54]),d=n(d,e,f,c,w,21,a[55]),c=n(c,d,e,f,v,6,a[56]),f=n(f,c,d,e,D,10,a[57]),e=n(e,f,c,d,t,15,a[58]),d=n(d,e,f,c,B,21,a[59]),c=n(c,d,e,f,r,6,a[60]),f=n(f,c,d,e,z,10,a[61]),e=n(e,f,c,d,j,15,a[62]),d=n(d,e,f,c,x,21,a[63]);b[0]=b[0]+c|0;b[1]=b[1]+d|0;b[2]=b[2]+e|0;b[3]=b[3]+f|0},_doFinalize:function(){var a=this._data,k=a.words,b=8*this._nDataBytes,h=8*a.sigBytes;k[h>>>5]|=128<<24-h%32;var l=s.floor(b/\n4294967296);k[(h+64>>>9<<4)+15]=(l<<8|l>>>24)&16711935|(l<<24|l>>>8)&4278255360;k[(h+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;a.sigBytes=4*(k.length+1);this._process();a=this._hash;k=a.words;for(b=0;4>b;b++)h=k[b],k[b]=(h<<8|h>>>24)&16711935|(h<<24|h>>>8)&4278255360;return a},clone:function(){var a=t.clone.call(this);a._hash=this._hash.clone();return a}});r.MD5=t._createHelper(q);r.HmacMD5=t._createHmacHelper(q)})(Math);\n'],"crypto_js.rollups.sha1":[".js",'/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(e,m){var p={},j=p.lib={},l=function(){},f=j.Base={extend:function(a){l.prototype=this;var c=new l;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nn=j.WordArray=f.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=m?c:4*a.length},toString:function(a){return(a||h).stringify(this)},concat:function(a){var c=this.words,q=a.words,d=this.sigBytes;a=a.sigBytes;this.clamp();if(d%4)for(var b=0;b>>2]|=(q[b>>>2]>>>24-8*(b%4)&255)<<24-8*((d+b)%4);else if(65535>>2]=q[b>>>2];else c.push.apply(c,q);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=e.ceil(c/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],b=0;b>>2]>>>24-8*(d%4)&255;b.push((f>>>4).toString(16));b.push((f&15).toString(16))}return b.join("")},parse:function(a){for(var c=a.length,b=[],d=0;d>>3]|=parseInt(a.substr(d,\n2),16)<<24-4*(d%8);return new n.init(b,c/2)}},g=b.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var b=[],d=0;d>>2]>>>24-8*(d%4)&255));return b.join("")},parse:function(a){for(var c=a.length,b=[],d=0;d>>2]|=(a.charCodeAt(d)&255)<<24-8*(d%4);return new n.init(b,c)}},r=b.Utf8={stringify:function(a){try{return decodeURIComponent(escape(g.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return g.parse(unescape(encodeURIComponent(a)))}},\nk=j.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new n.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=r.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,b=c.words,d=c.sigBytes,f=this.blockSize,h=d/(4*f),h=a?e.ceil(h):e.max((h|0)-this._minBufferSize,0);a=h*f;d=e.min(4*a,d);if(a){for(var g=0;ga;a++){if(16>a)l[a]=f[n+a]|0;else{var c=l[a-3]^l[a-8]^l[a-14]^l[a-16];l[a]=c<<1|c>>>31}c=(h<<5|h>>>27)+j+l[a];c=20>a?c+((g&e|~g&k)+1518500249):40>a?c+((g^e^k)+1859775393):60>a?c+((g&e|g&k|e&k)-1894007588):c+((g^e^\nk)-899497514);j=k;k=e;e=g<<30|g>>>2;g=h;h=c}b[0]=b[0]+h|0;b[1]=b[1]+g|0;b[2]=b[2]+e|0;b[3]=b[3]+k|0;b[4]=b[4]+j|0},_doFinalize:function(){var f=this._data,e=f.words,b=8*this._nDataBytes,h=8*f.sigBytes;e[h>>>5]|=128<<24-h%32;e[(h+64>>>9<<4)+14]=Math.floor(b/4294967296);e[(h+64>>>9<<4)+15]=b;f.sigBytes=4*e.length;this._process();return this._hash},clone:function(){var e=j.clone.call(this);e._hash=this._hash.clone();return e}});e.SHA1=j._createHelper(m);e.HmacSHA1=j._createHmacHelper(m)})();\n'],"crypto_js.rollups.sha224":[".js",'/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(g,l){var f={},k=f.lib={},h=function(){},m=k.Base={extend:function(a){h.prototype=this;var c=new h;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nq=k.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=l?c:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=g.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new q.init(d,c/2)}},n=t.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},j=t.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},\nw=k.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?g.ceil(f):g.max((f|0)-this._minBufferSize,0);a=f*e;b=g.min(4*a,b);if(a){for(var u=0;un;){var j;a:{j=s;for(var w=g.sqrt(j),v=2;v<=w;v++)if(!(j%v)){j=!1;break a}j=!0}j&&(8>n&&(m[n]=t(g.pow(s,0.5))),q[n]=t(g.pow(s,1/3)),n++);s++}var a=[],f=f.SHA256=h.extend({_doReset:function(){this._hash=new k.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],k=b[3],h=b[4],l=b[5],m=b[6],n=b[7],p=0;64>p;p++){if(16>p)a[p]=\nc[d+p]|0;else{var j=a[p-15],r=a[p-2];a[p]=((j<<25|j>>>7)^(j<<14|j>>>18)^j>>>3)+a[p-7]+((r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10)+a[p-16]}j=n+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&l^~h&m)+q[p]+a[p];r=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&g^f&g);n=m;m=l;l=h;h=k+j|0;k=g;g=f;f=e;e=j+r|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+k|0;b[4]=b[4]+h|0;b[5]=b[5]+l|0;b[6]=b[6]+m|0;b[7]=b[7]+n|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=g.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=h.clone.call(this);a._hash=this._hash.clone();return a}});l.SHA256=h._createHelper(f);l.HmacSHA256=h._createHmacHelper(f)})(Math);\n(function(){var g=CryptoJS,l=g.lib.WordArray,f=g.algo,k=f.SHA256,f=f.SHA224=k.extend({_doReset:function(){this._hash=new l.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var f=k._doFinalize.call(this);f.sigBytes-=4;return f}});g.SHA224=k._createHelper(f);g.HmacSHA224=k._createHmacHelper(f)})();\n'],"crypto_js.rollups.sha256":[".js",'/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(h,s){var f={},t=f.lib={},g=function(){},j=t.Base={extend:function(a){g.prototype=this;var c=new g;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nq=t.WordArray=j.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||u).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=j.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new q.init(d,c/2)}},k=v.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},l=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(k.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return k.parse(unescape(encodeURIComponent(a)))}},\nx=t.BufferedBlockAlgorithm=j.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=l.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var m=0;mk;){var l;a:{l=u;for(var x=h.sqrt(l),w=2;w<=x;w++)if(!(l%w)){l=!1;break a}l=!0}l&&(8>k&&(j[k]=v(h.pow(u,0.5))),q[k]=v(h.pow(u,1/3)),k++);u++}var a=[],f=f.SHA256=g.extend({_doReset:function(){this._hash=new t.init(j.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],m=b[2],h=b[3],p=b[4],j=b[5],k=b[6],l=b[7],n=0;64>n;n++){if(16>n)a[n]=\nc[d+n]|0;else{var r=a[n-15],g=a[n-2];a[n]=((r<<25|r>>>7)^(r<<14|r>>>18)^r>>>3)+a[n-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+a[n-16]}r=l+((p<<26|p>>>6)^(p<<21|p>>>11)^(p<<7|p>>>25))+(p&j^~p&k)+q[n]+a[n];g=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&m^f&m);l=k;k=j;j=p;p=h+r|0;h=m;m=f;f=e;e=r+g|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+m|0;b[3]=b[3]+h|0;b[4]=b[4]+p|0;b[5]=b[5]+j|0;b[6]=b[6]+k|0;b[7]=b[7]+l|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f);s.HmacSHA256=g._createHmacHelper(f)})(Math);\n'],"crypto_js.rollups.sha3":[".js",'/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(v,p){var d={},u=d.lib={},r=function(){},f=u.Base={extend:function(a){r.prototype=this;var b=new r;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\ns=u.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=p?b:4*a.length},toString:function(a){return(a||y).stringify(this)},concat:function(a){var b=this.words,c=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)for(var n=0;n>>2]|=(c[n>>>2]>>>24-8*(n%4)&255)<<24-8*((j+n)%4);else if(65535>>2]=c[n>>>2];else b.push.apply(b,c);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<\n32-8*(b%4);a.length=v.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],c=0;c>>2]>>>24-8*(j%4)&255;c.push((n>>>4).toString(16));c.push((n&15).toString(16))}return c.join("")},parse:function(a){for(var b=a.length,c=[],j=0;j>>3]|=parseInt(a.substr(j,\n2),16)<<24-4*(j%8);return new s.init(c,b/2)}},e=x.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var c=[],j=0;j>>2]>>>24-8*(j%4)&255));return c.join("")},parse:function(a){for(var b=a.length,c=[],j=0;j>>2]|=(a.charCodeAt(j)&255)<<24-8*(j%4);return new s.init(c,b)}},q=x.Utf8={stringify:function(a){try{return decodeURIComponent(escape(e.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return e.parse(unescape(encodeURIComponent(a)))}},\nt=u.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new s.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=q.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,c=b.words,j=b.sigBytes,n=this.blockSize,e=j/(4*n),e=a?v.ceil(e):v.max((e|0)-this._minBufferSize,0);a=e*n;j=v.min(4*a,j);if(a){for(var f=0;ft;t++){s[e+5*q]=(t+1)*(t+2)/2%64;var w=(2*e+3*q)%5,e=q%5,q=w}for(e=0;5>e;e++)for(q=0;5>q;q++)x[e+5*q]=q+5*((2*e+3*q)%5);e=1;for(q=0;24>q;q++){for(var a=w=t=0;7>a;a++){if(e&1){var b=(1<b?w^=1<e;e++)c[e]=f.create();d=d.SHA3=r.extend({cfg:r.cfg.extend({outputLength:512}),_doReset:function(){for(var a=this._state=\n[],b=0;25>b;b++)a[b]=new f.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(a,b){for(var e=this._state,f=this.blockSize/2,h=0;h>>24)&16711935|(l<<24|l>>>8)&4278255360,m=(m<<8|m>>>24)&16711935|(m<<24|m>>>8)&4278255360,g=e[h];g.high^=m;g.low^=l}for(f=0;24>f;f++){for(h=0;5>h;h++){for(var d=l=0,k=0;5>k;k++)g=e[h+5*k],l^=g.high,d^=g.low;g=c[h];g.high=l;g.low=d}for(h=0;5>h;h++){g=c[(h+4)%5];l=c[(h+1)%5];m=l.high;k=l.low;l=g.high^\n(m<<1|k>>>31);d=g.low^(k<<1|m>>>31);for(k=0;5>k;k++)g=e[h+5*k],g.high^=l,g.low^=d}for(m=1;25>m;m++)g=e[m],h=g.high,g=g.low,k=s[m],32>k?(l=h<>>32-k,d=g<>>32-k):(l=g<>>64-k,d=h<>>64-k),g=c[x[m]],g.high=l,g.low=d;g=c[0];h=e[0];g.high=h.high;g.low=h.low;for(h=0;5>h;h++)for(k=0;5>k;k++)m=h+5*k,g=e[m],l=c[m],m=c[(h+1)%5+5*k],d=c[(h+2)%5+5*k],g.high=l.high^~m.high&d.high,g.low=l.low^~m.low&d.low;g=e[0];h=y[f];g.high^=h.high;g.low^=h.low}},_doFinalize:function(){var a=this._data,\nb=a.words,c=8*a.sigBytes,e=32*this.blockSize;b[c>>>5]|=1<<24-c%32;b[(v.ceil((c+1)/e)*e>>>5)-1]|=128;a.sigBytes=4*b.length;this._process();for(var a=this._state,b=this.cfg.outputLength/8,c=b/8,e=[],h=0;h>>24)&16711935|(f<<24|f>>>8)&4278255360,d=(d<<8|d>>>24)&16711935|(d<<24|d>>>8)&4278255360;e.push(d);e.push(f)}return new u.init(e,b)},clone:function(){for(var a=r.clone.call(this),b=a._state=this._state.slice(0),c=0;25>c;c++)b[c]=b[c].clone();return a}});\np.SHA3=r._createHelper(d);p.HmacSHA3=r._createHmacHelper(d)})(Math);\n'],"crypto_js.rollups.sha384":[".js",'/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(a,c){var d={},j=d.lib={},f=function(){},m=j.Base={extend:function(a){f.prototype=this;var b=new f;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nB=j.WordArray=m.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=c?b:4*a.length},toString:function(a){return(a||y).stringify(this)},concat:function(a){var b=this.words,g=a.words,e=this.sigBytes;a=a.sigBytes;this.clamp();if(e%4)for(var k=0;k>>2]|=(g[k>>>2]>>>24-8*(k%4)&255)<<24-8*((e+k)%4);else if(65535>>2]=g[k>>>2];else b.push.apply(b,g);this.sigBytes+=a;return this},clamp:function(){var n=this.words,b=this.sigBytes;n[b>>>2]&=4294967295<<\n32-8*(b%4);n.length=a.ceil(b/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(n){for(var b=[],g=0;g>>2]>>>24-8*(e%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join("")},parse:function(a){for(var b=a.length,g=[],e=0;e>>3]|=parseInt(a.substr(e,\n2),16)<<24-4*(e%8);return new B.init(g,b/2)}},F=v.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var g=[],e=0;e>>2]>>>24-8*(e%4)&255));return g.join("")},parse:function(a){for(var b=a.length,g=[],e=0;e>>2]|=(a.charCodeAt(e)&255)<<24-8*(e%4);return new B.init(g,b)}},ha=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(F.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return F.parse(unescape(encodeURIComponent(a)))}},\nZ=j.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new B.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=ha.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(n){var b=this._data,g=b.words,e=b.sigBytes,k=this.blockSize,m=e/(4*k),m=n?a.ceil(m):a.max((m|0)-this._minBufferSize,0);n=m*k;e=a.min(4*n,e);if(n){for(var c=0;cy;y++)v[y]=a();j=j.SHA512=d.extend({_doReset:function(){this._hash=new m.init([new f.init(1779033703,4089235720),new f.init(3144134277,2227873595),new f.init(1013904242,4271175723),new f.init(2773480762,1595750129),new f.init(1359893119,2917565137),new f.init(2600822924,725511199),new f.init(528734635,4215389547),new f.init(1541459225,327033209)])},_doProcessBlock:function(a,c){for(var d=this._hash.words,\nf=d[0],j=d[1],b=d[2],g=d[3],e=d[4],k=d[5],m=d[6],d=d[7],y=f.high,M=f.low,$=j.high,N=j.low,aa=b.high,O=b.low,ba=g.high,P=g.low,ca=e.high,Q=e.low,da=k.high,R=k.low,ea=m.high,S=m.low,fa=d.high,T=d.low,s=y,p=M,G=$,D=N,H=aa,E=O,W=ba,I=P,t=ca,q=Q,U=da,J=R,V=ea,K=S,X=fa,L=T,u=0;80>u;u++){var z=v[u];if(16>u)var r=z.high=a[c+2*u]|0,h=z.low=a[c+2*u+1]|0;else{var r=v[u-15],h=r.high,w=r.low,r=(h>>>1|w<<31)^(h>>>8|w<<24)^h>>>7,w=(w>>>1|h<<31)^(w>>>8|h<<24)^(w>>>7|h<<25),C=v[u-2],h=C.high,l=C.low,C=(h>>>19|l<<\n13)^(h<<3|l>>>29)^h>>>6,l=(l>>>19|h<<13)^(l<<3|h>>>29)^(l>>>6|h<<26),h=v[u-7],Y=h.high,A=v[u-16],x=A.high,A=A.low,h=w+h.low,r=r+Y+(h>>>0>>0?1:0),h=h+l,r=r+C+(h>>>0>>0?1:0),h=h+A,r=r+x+(h>>>0>>0?1:0);z.high=r;z.low=h}var Y=t&U^~t&V,A=q&J^~q&K,z=s&G^s&H^G&H,ja=p&D^p&E^D&E,w=(s>>>28|p<<4)^(s<<30|p>>>2)^(s<<25|p>>>7),C=(p>>>28|s<<4)^(p<<30|s>>>2)^(p<<25|s>>>7),l=B[u],ka=l.high,ga=l.low,l=L+((q>>>14|t<<18)^(q>>>18|t<<14)^(q<<23|t>>>9)),x=X+((t>>>14|q<<18)^(t>>>18|q<<14)^(t<<23|q>>>9))+(l>>>0<\nL>>>0?1:0),l=l+A,x=x+Y+(l>>>0>>0?1:0),l=l+ga,x=x+ka+(l>>>0>>0?1:0),l=l+h,x=x+r+(l>>>0>>0?1:0),h=C+ja,z=w+z+(h>>>0>>0?1:0),X=V,L=K,V=U,K=J,U=t,J=q,q=I+l|0,t=W+x+(q>>>0>>0?1:0)|0,W=H,I=E,H=G,E=D,G=s,D=p,p=l+h|0,s=x+z+(p>>>0>>0?1:0)|0}M=f.low=M+p;f.high=y+s+(M>>>0

>>0?1:0);N=j.low=N+D;j.high=$+G+(N>>>0>>0?1:0);O=b.low=O+E;b.high=aa+H+(O>>>0>>0?1:0);P=g.low=P+I;g.high=ba+W+(P>>>0>>0?1:0);Q=e.low=Q+q;e.high=ca+t+(Q>>>0>>0?1:0);R=k.low=R+J;k.high=da+U+(R>>>0>>0?1:0);\nS=m.low=S+K;m.high=ea+V+(S>>>0>>0?1:0);T=d.low=T+L;d.high=fa+X+(T>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,c=a.words,d=8*this._nDataBytes,f=8*a.sigBytes;c[f>>>5]|=128<<24-f%32;c[(f+128>>>10<<5)+30]=Math.floor(d/4294967296);c[(f+128>>>10<<5)+31]=d;a.sigBytes=4*c.length;this._process();return this._hash.toX32()},clone:function(){var a=d.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});c.SHA512=d._createHelper(j);c.HmacSHA512=d._createHmacHelper(j)})();\n(function(){var a=CryptoJS,c=a.x64,d=c.Word,j=c.WordArray,c=a.algo,f=c.SHA512,c=c.SHA384=f.extend({_doReset:function(){this._hash=new j.init([new d.init(3418070365,3238371032),new d.init(1654270250,914150663),new d.init(2438529370,812702999),new d.init(355462360,4144912697),new d.init(1731405415,4290775857),new d.init(2394180231,1750603025),new d.init(3675008525,1694076839),new d.init(1203062813,3204075428)])},_doFinalize:function(){var a=f._doFinalize.call(this);a.sigBytes-=16;return a}});a.SHA384=\nf._createHelper(c);a.HmacSHA384=f._createHmacHelper(c)})();\n'],"crypto_js.rollups.sha512":[".js",'/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(a,m){var r={},f=r.lib={},g=function(){},l=f.Base={extend:function(a){g.prototype=this;var b=new g;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\np=f.WordArray=l.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=m?b:4*a.length},toString:function(a){return(a||q).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var j=0;j>>2]|=(d[j>>>2]>>>24-8*(j%4)&255)<<24-8*((c+j)%4);else if(65535>>2]=d[j>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var n=this.words,b=this.sigBytes;n[b>>>2]&=4294967295<<\n32-8*(b%4);n.length=a.ceil(b/4)},clone:function(){var a=l.clone.call(this);a.words=this.words.slice(0);return a},random:function(n){for(var b=[],d=0;d>>2]>>>24-8*(c%4)&255;d.push((j>>>4).toString(16));d.push((j&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c>>3]|=parseInt(a.substr(c,\n2),16)<<24-4*(c%8);return new p.init(d,b/2)}},G=y.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new p.init(d,b)}},fa=y.Utf8={stringify:function(a){try{return decodeURIComponent(escape(G.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return G.parse(unescape(encodeURIComponent(a)))}},\nh=f.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new p.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=fa.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(n){var b=this._data,d=b.words,c=b.sigBytes,j=this.blockSize,l=c/(4*j),l=n?a.ceil(l):a.max((l|0)-this._minBufferSize,0);n=l*j;c=a.min(4*n,c);if(n){for(var h=0;hq;q++)y[q]=a();f=f.SHA512=r.extend({_doReset:function(){this._hash=new l.init([new g.init(1779033703,4089235720),new g.init(3144134277,2227873595),new g.init(1013904242,4271175723),new g.init(2773480762,1595750129),new g.init(1359893119,2917565137),new g.init(2600822924,725511199),new g.init(528734635,4215389547),new g.init(1541459225,327033209)])},_doProcessBlock:function(a,f){for(var h=this._hash.words,\ng=h[0],n=h[1],b=h[2],d=h[3],c=h[4],j=h[5],l=h[6],h=h[7],q=g.high,m=g.low,r=n.high,N=n.low,Z=b.high,O=b.low,$=d.high,P=d.low,aa=c.high,Q=c.low,ba=j.high,R=j.low,ca=l.high,S=l.low,da=h.high,T=h.low,v=q,s=m,H=r,E=N,I=Z,F=O,W=$,J=P,w=aa,t=Q,U=ba,K=R,V=ca,L=S,X=da,M=T,x=0;80>x;x++){var B=y[x];if(16>x)var u=B.high=a[f+2*x]|0,e=B.low=a[f+2*x+1]|0;else{var u=y[x-15],e=u.high,z=u.low,u=(e>>>1|z<<31)^(e>>>8|z<<24)^e>>>7,z=(z>>>1|e<<31)^(z>>>8|e<<24)^(z>>>7|e<<25),D=y[x-2],e=D.high,k=D.low,D=(e>>>19|k<<13)^\n(e<<3|k>>>29)^e>>>6,k=(k>>>19|e<<13)^(k<<3|e>>>29)^(k>>>6|e<<26),e=y[x-7],Y=e.high,C=y[x-16],A=C.high,C=C.low,e=z+e.low,u=u+Y+(e>>>0>>0?1:0),e=e+k,u=u+D+(e>>>0>>0?1:0),e=e+C,u=u+A+(e>>>0>>0?1:0);B.high=u;B.low=e}var Y=w&U^~w&V,C=t&K^~t&L,B=v&H^v&I^H&I,ha=s&E^s&F^E&F,z=(v>>>28|s<<4)^(v<<30|s>>>2)^(v<<25|s>>>7),D=(s>>>28|v<<4)^(s<<30|v>>>2)^(s<<25|v>>>7),k=p[x],ia=k.high,ea=k.low,k=M+((t>>>14|w<<18)^(t>>>18|w<<14)^(t<<23|w>>>9)),A=X+((w>>>14|t<<18)^(w>>>18|t<<14)^(w<<23|t>>>9))+(k>>>0>>\n0?1:0),k=k+C,A=A+Y+(k>>>0>>0?1:0),k=k+ea,A=A+ia+(k>>>0>>0?1:0),k=k+e,A=A+u+(k>>>0>>0?1:0),e=D+ha,B=z+B+(e>>>0>>0?1:0),X=V,M=L,V=U,L=K,U=w,K=t,t=J+k|0,w=W+A+(t>>>0>>0?1:0)|0,W=I,J=F,I=H,F=E,H=v,E=s,s=k+e|0,v=A+B+(s>>>0>>0?1:0)|0}m=g.low=m+s;g.high=q+v+(m>>>0>>0?1:0);N=n.low=N+E;n.high=r+H+(N>>>0>>0?1:0);O=b.low=O+F;b.high=Z+I+(O>>>0>>0?1:0);P=d.low=P+J;d.high=$+W+(P>>>0>>0?1:0);Q=c.low=Q+t;c.high=aa+w+(Q>>>0>>0?1:0);R=j.low=R+K;j.high=ba+U+(R>>>0>>0?1:0);S=l.low=\nS+L;l.high=ca+V+(S>>>0>>0?1:0);T=h.low=T+M;h.high=da+X+(T>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,f=a.words,h=8*this._nDataBytes,g=8*a.sigBytes;f[g>>>5]|=128<<24-g%32;f[(g+128>>>10<<5)+30]=Math.floor(h/4294967296);f[(g+128>>>10<<5)+31]=h;a.sigBytes=4*f.length;this._process();return this._hash.toX32()},clone:function(){var a=r.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});m.SHA512=r._createHelper(f);m.HmacSHA512=r._createHmacHelper(f)})();\n'],abc:[".py","\n\n\n\"\"\"Abstract Base Classes (ABCs) according to PEP 3119.\"\"\"\n\n\ndef abstractmethod(funcobj):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n funcobj.__isabstractmethod__=True\n return funcobj\n \n \nclass abstractclassmethod(classmethod):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n callable.__isabstractmethod__=True\n super().__init__(callable)\n \n \nclass abstractstaticmethod(staticmethod):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n callable.__isabstractmethod__=True\n super().__init__(callable)\n \n \nclass abstractproperty(property):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __isabstractmethod__=True\n \n \nfrom _py_abc import ABCMeta,get_cache_token\nABCMeta.__module__='abc'\n\n\nclass ABC(metaclass=ABCMeta):\n ''\n\n \n __slots__=()\n",["_py_abc"]],antigravity:[".py","\nimport webbrowser\nimport hashlib\n\nwebbrowser.open(\"http://xkcd.com/353/\")\n\ndef geohash(latitude,longitude,datedow):\n ''\n\n\n\n\n \n \n h=hashlib.md5(datedow).hexdigest()\n p,q=[('%f'%float.fromhex('0.'+x))for x in (h[:16],h[16:32])]\n print('%d%s %d%s'%(latitude,p[1:],longitude,q[1:]))\n",["hashlib","webbrowser"]],argparse:[".py","\n\n\"\"\"Command-line parsing library\n\nThis module is an optparse-inspired command-line parsing library that:\n\n - handles both optional and positional arguments\n - produces highly informative usage messages\n - supports parsers that dispatch to sub-parsers\n\nThe following is a simple usage example that sums integers from the\ncommand-line and writes the result to a file::\n\n parser = argparse.ArgumentParser(\n description='sum the integers at the command line')\n parser.add_argument(\n 'integers', metavar='int', nargs='+', type=int,\n help='an integer to be summed')\n parser.add_argument(\n '--log', default=sys.stdout, type=argparse.FileType('w'),\n help='the file where the sum should be written')\n args = parser.parse_args()\n args.log.write('%s' % sum(args.integers))\n args.log.close()\n\nThe module contains the following public classes:\n\n - ArgumentParser -- The main entry point for command-line parsing. As the\n example above shows, the add_argument() method is used to populate\n the parser with actions for optional and positional arguments. Then\n the parse_args() method is invoked to convert the args at the\n command-line into an object with attributes.\n\n - ArgumentError -- The exception raised by ArgumentParser objects when\n there are errors with the parser's actions. Errors raised while\n parsing the command-line are caught by ArgumentParser and emitted\n as command-line messages.\n\n - FileType -- A factory for defining types of files to be created. As the\n example above shows, instances of FileType are typically passed as\n the type= argument of add_argument() calls.\n\n - Action -- The base class for parser actions. Typically actions are\n selected by passing strings like 'store_true' or 'append_const' to\n the action= argument of add_argument(). However, for greater\n customization of ArgumentParser actions, subclasses of Action may\n be defined and passed as the action= argument.\n\n - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,\n ArgumentDefaultsHelpFormatter -- Formatter classes which\n may be passed as the formatter_class= argument to the\n ArgumentParser constructor. HelpFormatter is the default,\n RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser\n not to change the formatting for help text, and\n ArgumentDefaultsHelpFormatter adds information about argument defaults\n to the help.\n\nAll other classes in this module are considered implementation details.\n(Also note that HelpFormatter and RawDescriptionHelpFormatter are only\nconsidered public as object names -- the API of the formatter objects is\nstill considered an implementation detail.)\n\"\"\"\n\n__version__='1.1'\n__all__=[\n'ArgumentParser',\n'ArgumentError',\n'ArgumentTypeError',\n'FileType',\n'HelpFormatter',\n'ArgumentDefaultsHelpFormatter',\n'RawDescriptionHelpFormatter',\n'RawTextHelpFormatter',\n'MetavarTypeHelpFormatter',\n'Namespace',\n'Action',\n'ONE_OR_MORE',\n'OPTIONAL',\n'PARSER',\n'REMAINDER',\n'SUPPRESS',\n'ZERO_OR_MORE',\n]\n\n\nimport collections as _collections\nimport copy as _copy\nimport os as _os\nimport re as _re\nimport sys as _sys\nimport textwrap as _textwrap\n\nfrom gettext import gettext as _,ngettext\n\n\nSUPPRESS='==SUPPRESS=='\n\nOPTIONAL='?'\nZERO_OR_MORE='*'\nONE_OR_MORE='+'\nPARSER='A...'\nREMAINDER='...'\n_UNRECOGNIZED_ARGS_ATTR='_unrecognized_args'\n\n\n\n\n\nclass _AttributeHolder(object):\n ''\n\n\n\n\n\n \n \n def __repr__(self):\n type_name=type(self).__name__\n arg_strings=[]\n for arg in self._get_args():\n arg_strings.append(repr(arg))\n for name,value in self._get_kwargs():\n arg_strings.append('%s=%r'%(name,value))\n return '%s(%s)'%(type_name,', '.join(arg_strings))\n \n def _get_kwargs(self):\n return sorted(self.__dict__.items())\n \n def _get_args(self):\n return []\n \n \ndef _ensure_value(namespace,name,value):\n if getattr(namespace,name,None )is None :\n setattr(namespace,name,value)\n return getattr(namespace,name)\n \n \n \n \n \n \nclass HelpFormatter(object):\n ''\n\n\n\n \n \n def __init__(self,\n prog,\n indent_increment=2,\n max_help_position=24,\n width=None ):\n \n \n if width is None :\n try :\n width=int(_os.environ['COLUMNS'])\n except (KeyError,ValueError):\n width=80\n width -=2\n \n self._prog=prog\n self._indent_increment=indent_increment\n self._max_help_position=max_help_position\n self._max_help_position=min(max_help_position,\n max(width -20,indent_increment *2))\n self._width=width\n \n self._current_indent=0\n self._level=0\n self._action_max_length=0\n \n self._root_section=self._Section(self,None )\n self._current_section=self._root_section\n \n self._whitespace_matcher=_re.compile(r'\\s+')\n self._long_break_matcher=_re.compile(r'\\n\\n\\n+')\n \n \n \n \n def _indent(self):\n self._current_indent +=self._indent_increment\n self._level +=1\n \n def _dedent(self):\n self._current_indent -=self._indent_increment\n assert self._current_indent >=0,'Indent decreased below 0.'\n self._level -=1\n \n class _Section(object):\n \n def __init__(self,formatter,parent,heading=None ):\n self.formatter=formatter\n self.parent=parent\n self.heading=heading\n self.items=[]\n \n def format_help(self):\n \n if self.parent is not None :\n self.formatter._indent()\n join=self.formatter._join_parts\n for func,args in self.items:\n func(*args)\n item_help=join([func(*args)for func,args in self.items])\n if self.parent is not None :\n self.formatter._dedent()\n \n \n if not item_help:\n return ''\n \n \n if self.heading is not SUPPRESS and self.heading is not None :\n current_indent=self.formatter._current_indent\n heading='%*s%s:\\n'%(current_indent,'',self.heading)\n else :\n heading=''\n \n \n return join(['\\n',heading,item_help,'\\n'])\n \n def _add_item(self,func,args):\n self._current_section.items.append((func,args))\n \n \n \n \n def start_section(self,heading):\n self._indent()\n section=self._Section(self,self._current_section,heading)\n self._add_item(section.format_help,[])\n self._current_section=section\n \n def end_section(self):\n self._current_section=self._current_section.parent\n self._dedent()\n \n def add_text(self,text):\n if text is not SUPPRESS and text is not None :\n self._add_item(self._format_text,[text])\n \n def add_usage(self,usage,actions,groups,prefix=None ):\n if usage is not SUPPRESS:\n args=usage,actions,groups,prefix\n self._add_item(self._format_usage,args)\n \n def add_argument(self,action):\n if action.help is not SUPPRESS:\n \n \n get_invocation=self._format_action_invocation\n invocations=[get_invocation(action)]\n for subaction in self._iter_indented_subactions(action):\n invocations.append(get_invocation(subaction))\n \n \n invocation_length=max([len(s)for s in invocations])\n action_length=invocation_length+self._current_indent\n self._action_max_length=max(self._action_max_length,\n action_length)\n \n \n self._add_item(self._format_action,[action])\n \n def add_arguments(self,actions):\n for action in actions:\n self.add_argument(action)\n \n \n \n \n def format_help(self):\n help=self._root_section.format_help()\n if help:\n help=self._long_break_matcher.sub('\\n\\n',help)\n help=help.strip('\\n')+'\\n'\n return help\n \n def _join_parts(self,part_strings):\n return ''.join([part\n for part in part_strings\n if part and part is not SUPPRESS])\n \n def _format_usage(self,usage,actions,groups,prefix):\n if prefix is None :\n prefix=_('usage: ')\n \n \n if usage is not None :\n usage=usage %dict(prog=self._prog)\n \n \n elif usage is None and not actions:\n usage='%(prog)s'%dict(prog=self._prog)\n \n \n elif usage is None :\n prog='%(prog)s'%dict(prog=self._prog)\n \n \n optionals=[]\n positionals=[]\n for action in actions:\n if action.option_strings:\n optionals.append(action)\n else :\n positionals.append(action)\n \n \n format=self._format_actions_usage\n action_usage=format(optionals+positionals,groups)\n usage=' '.join([s for s in [prog,action_usage]if s])\n \n \n text_width=self._width -self._current_indent\n if len(prefix)+len(usage)>text_width:\n \n \n part_regexp=r'\\(.*?\\)+|\\[.*?\\]+|\\S+'\n opt_usage=format(optionals,groups)\n pos_usage=format(positionals,groups)\n opt_parts=_re.findall(part_regexp,opt_usage)\n pos_parts=_re.findall(part_regexp,pos_usage)\n assert ' '.join(opt_parts)==opt_usage\n assert ' '.join(pos_parts)==pos_usage\n \n \n def get_lines(parts,indent,prefix=None ):\n lines=[]\n line=[]\n if prefix is not None :\n line_len=len(prefix)-1\n else :\n line_len=len(indent)-1\n for part in parts:\n if line_len+1+len(part)>text_width and line:\n lines.append(indent+' '.join(line))\n line=[]\n line_len=len(indent)-1\n line.append(part)\n line_len +=len(part)+1\n if line:\n lines.append(indent+' '.join(line))\n if prefix is not None :\n lines[0]=lines[0][len(indent):]\n return lines\n \n \n if len(prefix)+len(prog)<=0.75 *text_width:\n indent=' '*(len(prefix)+len(prog)+1)\n if opt_parts:\n lines=get_lines([prog]+opt_parts,indent,prefix)\n lines.extend(get_lines(pos_parts,indent))\n elif pos_parts:\n lines=get_lines([prog]+pos_parts,indent,prefix)\n else :\n lines=[prog]\n \n \n else :\n indent=' '*len(prefix)\n parts=opt_parts+pos_parts\n lines=get_lines(parts,indent)\n if len(lines)>1:\n lines=[]\n lines.extend(get_lines(opt_parts,indent))\n lines.extend(get_lines(pos_parts,indent))\n lines=[prog]+lines\n \n \n usage='\\n'.join(lines)\n \n \n return '%s%s\\n\\n'%(prefix,usage)\n \n def _format_actions_usage(self,actions,groups):\n \n group_actions=set()\n inserts={}\n for group in groups:\n try :\n start=actions.index(group._group_actions[0])\n except ValueError:\n continue\n else :\n end=start+len(group._group_actions)\n if actions[start:end]==group._group_actions:\n for action in group._group_actions:\n group_actions.add(action)\n if not group.required:\n if start in inserts:\n inserts[start]+=' ['\n else :\n inserts[start]='['\n inserts[end]=']'\n else :\n if start in inserts:\n inserts[start]+=' ('\n else :\n inserts[start]='('\n inserts[end]=')'\n for i in range(start+1,end):\n inserts[i]='|'\n \n \n parts=[]\n for i,action in enumerate(actions):\n \n \n \n if action.help is SUPPRESS:\n parts.append(None )\n if inserts.get(i)=='|':\n inserts.pop(i)\n elif inserts.get(i+1)=='|':\n inserts.pop(i+1)\n \n \n elif not action.option_strings:\n default=self._get_default_metavar_for_positional(action)\n part=self._format_args(action,default)\n \n \n if action in group_actions:\n if part[0]=='['and part[-1]==']':\n part=part[1:-1]\n \n \n parts.append(part)\n \n \n else :\n option_string=action.option_strings[0]\n \n \n \n if action.nargs ==0:\n part='%s'%option_string\n \n \n \n else :\n default=self._get_default_metavar_for_optional(action)\n args_string=self._format_args(action,default)\n part='%s %s'%(option_string,args_string)\n \n \n if not action.required and action not in group_actions:\n part='[%s]'%part\n \n \n parts.append(part)\n \n \n for i in sorted(inserts,reverse=True ):\n parts[i:i]=[inserts[i]]\n \n \n text=' '.join([item for item in parts if item is not None ])\n \n \n open=r'[\\[(]'\n close=r'[\\])]'\n text=_re.sub(r'(%s) '%open,r'\\1',text)\n text=_re.sub(r' (%s)'%close,r'\\1',text)\n text=_re.sub(r'%s *%s'%(open,close),r'',text)\n text=_re.sub(r'\\(([^|]*)\\)',r'\\1',text)\n text=text.strip()\n \n \n return text\n \n def _format_text(self,text):\n if '%(prog)'in text:\n text=text %dict(prog=self._prog)\n text_width=max(self._width -self._current_indent,11)\n indent=' '*self._current_indent\n return self._fill_text(text,text_width,indent)+'\\n\\n'\n \n def _format_action(self,action):\n \n help_position=min(self._action_max_length+2,\n self._max_help_position)\n help_width=max(self._width -help_position,11)\n action_width=help_position -self._current_indent -2\n action_header=self._format_action_invocation(action)\n \n \n if not action.help:\n tup=self._current_indent,'',action_header\n action_header='%*s%s\\n'%tup\n \n \n elif len(action_header)<=action_width:\n tup=self._current_indent,'',action_width,action_header\n action_header='%*s%-*s '%tup\n indent_first=0\n \n \n else :\n tup=self._current_indent,'',action_header\n action_header='%*s%s\\n'%tup\n indent_first=help_position\n \n \n parts=[action_header]\n \n \n if action.help:\n help_text=self._expand_help(action)\n help_lines=self._split_lines(help_text,help_width)\n parts.append('%*s%s\\n'%(indent_first,'',help_lines[0]))\n for line in help_lines[1:]:\n parts.append('%*s%s\\n'%(help_position,'',line))\n \n \n elif not action_header.endswith('\\n'):\n parts.append('\\n')\n \n \n for subaction in self._iter_indented_subactions(action):\n parts.append(self._format_action(subaction))\n \n \n return self._join_parts(parts)\n \n def _format_action_invocation(self,action):\n if not action.option_strings:\n default=self._get_default_metavar_for_positional(action)\n metavar,=self._metavar_formatter(action,default)(1)\n return metavar\n \n else :\n parts=[]\n \n \n \n if action.nargs ==0:\n parts.extend(action.option_strings)\n \n \n \n else :\n default=self._get_default_metavar_for_optional(action)\n args_string=self._format_args(action,default)\n for option_string in action.option_strings:\n parts.append('%s %s'%(option_string,args_string))\n \n return ', '.join(parts)\n \n def _metavar_formatter(self,action,default_metavar):\n if action.metavar is not None :\n result=action.metavar\n elif action.choices is not None :\n choice_strs=[str(choice)for choice in action.choices]\n result='{%s}'%','.join(choice_strs)\n else :\n result=default_metavar\n \n def format(tuple_size):\n if isinstance(result,tuple):\n return result\n else :\n return (result,)*tuple_size\n return format\n \n def _format_args(self,action,default_metavar):\n get_metavar=self._metavar_formatter(action,default_metavar)\n if action.nargs is None :\n result='%s'%get_metavar(1)\n elif action.nargs ==OPTIONAL:\n result='[%s]'%get_metavar(1)\n elif action.nargs ==ZERO_OR_MORE:\n result='[%s [%s ...]]'%get_metavar(2)\n elif action.nargs ==ONE_OR_MORE:\n result='%s [%s ...]'%get_metavar(2)\n elif action.nargs ==REMAINDER:\n result='...'\n elif action.nargs ==PARSER:\n result='%s ...'%get_metavar(1)\n else :\n formats=['%s'for _ in range(action.nargs)]\n result=' '.join(formats)%get_metavar(action.nargs)\n return result\n \n def _expand_help(self,action):\n params=dict(vars(action),prog=self._prog)\n for name in list(params):\n if params[name]is SUPPRESS:\n del params[name]\n for name in list(params):\n if hasattr(params[name],'__name__'):\n params[name]=params[name].__name__\n if params.get('choices')is not None :\n choices_str=', '.join([str(c)for c in params['choices']])\n params['choices']=choices_str\n return self._get_help_string(action)%params\n \n def _iter_indented_subactions(self,action):\n try :\n get_subactions=action._get_subactions\n except AttributeError:\n pass\n else :\n self._indent()\n yield from get_subactions()\n self._dedent()\n \n def _split_lines(self,text,width):\n text=self._whitespace_matcher.sub(' ',text).strip()\n return _textwrap.wrap(text,width)\n \n def _fill_text(self,text,width,indent):\n text=self._whitespace_matcher.sub(' ',text).strip()\n return _textwrap.fill(text,width,initial_indent=indent,\n subsequent_indent=indent)\n \n def _get_help_string(self,action):\n return action.help\n \n def _get_default_metavar_for_optional(self,action):\n return action.dest.upper()\n \n def _get_default_metavar_for_positional(self,action):\n return action.dest\n \n \nclass RawDescriptionHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _fill_text(self,text,width,indent):\n return ''.join(indent+line for line in text.splitlines(keepends=True ))\n \n \nclass RawTextHelpFormatter(RawDescriptionHelpFormatter):\n ''\n\n\n\n \n \n def _split_lines(self,text,width):\n return text.splitlines()\n \n \nclass ArgumentDefaultsHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _get_help_string(self,action):\n help=action.help\n if '%(default)'not in action.help:\n if action.default is not SUPPRESS:\n defaulting_nargs=[OPTIONAL,ZERO_OR_MORE]\n if action.option_strings or action.nargs in defaulting_nargs:\n help +=' (default: %(default)s)'\n return help\n \n \nclass MetavarTypeHelpFormatter(HelpFormatter):\n ''\n\n\n\n\n \n \n def _get_default_metavar_for_optional(self,action):\n return action.type.__name__\n \n def _get_default_metavar_for_positional(self,action):\n return action.type.__name__\n \n \n \n \n \n \n \ndef _get_action_name(argument):\n if argument is None :\n return None\n elif argument.option_strings:\n return '/'.join(argument.option_strings)\n elif argument.metavar not in (None ,SUPPRESS):\n return argument.metavar\n elif argument.dest not in (None ,SUPPRESS):\n return argument.dest\n else :\n return None\n \n \nclass ArgumentError(Exception):\n ''\n\n\n\n \n \n def __init__(self,argument,message):\n self.argument_name=_get_action_name(argument)\n self.message=message\n \n def __str__(self):\n if self.argument_name is None :\n format='%(message)s'\n else :\n format='argument %(argument_name)s: %(message)s'\n return format %dict(message=self.message,\n argument_name=self.argument_name)\n \n \nclass ArgumentTypeError(Exception):\n ''\n pass\n \n \n \n \n \n \nclass Action(_AttributeHolder):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n self.option_strings=option_strings\n self.dest=dest\n self.nargs=nargs\n self.const=const\n self.default=default\n self.type=type\n self.choices=choices\n self.required=required\n self.help=help\n self.metavar=metavar\n \n def _get_kwargs(self):\n names=[\n 'option_strings',\n 'dest',\n 'nargs',\n 'const',\n 'default',\n 'type',\n 'choices',\n 'help',\n 'metavar',\n ]\n return [(name,getattr(self,name))for name in names]\n \n def __call__(self,parser,namespace,values,option_string=None ):\n raise NotImplementedError(_('.__call__() not defined'))\n \n \nclass _StoreAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n if nargs ==0:\n raise ValueError('nargs for store actions must be > 0; if you '\n 'have nothing to store, actions such as store '\n 'true or store const may be more appropriate')\n if const is not None and nargs !=OPTIONAL:\n raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n super(_StoreAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=nargs,\n const=const,\n default=default,\n type=type,\n choices=choices,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n setattr(namespace,self.dest,values)\n \n \nclass _StoreConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n super(_StoreConstAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n const=const,\n default=default,\n required=required,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n setattr(namespace,self.dest,self.const)\n \n \nclass _StoreTrueAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=False ,\n required=False ,\n help=None ):\n super(_StoreTrueAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n const=True ,\n default=default,\n required=required,\n help=help)\n \n \nclass _StoreFalseAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=True ,\n required=False ,\n help=None ):\n super(_StoreFalseAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n const=False ,\n default=default,\n required=required,\n help=help)\n \n \nclass _AppendAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n if nargs ==0:\n raise ValueError('nargs for append actions must be > 0; if arg '\n 'strings are not supplying the value to append, '\n 'the append const action may be more appropriate')\n if const is not None and nargs !=OPTIONAL:\n raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n super(_AppendAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=nargs,\n const=const,\n default=default,\n type=type,\n choices=choices,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n items=_copy.copy(_ensure_value(namespace,self.dest,[]))\n items.append(values)\n setattr(namespace,self.dest,items)\n \n \nclass _AppendConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n super(_AppendConstAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n const=const,\n default=default,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n items=_copy.copy(_ensure_value(namespace,self.dest,[]))\n items.append(self.const)\n setattr(namespace,self.dest,items)\n \n \nclass _CountAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n default=None ,\n required=False ,\n help=None ):\n super(_CountAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n default=default,\n required=required,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n new_count=_ensure_value(namespace,self.dest,0)+1\n setattr(namespace,self.dest,new_count)\n \n \nclass _HelpAction(Action):\n\n def __init__(self,\n option_strings,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=None ):\n super(_HelpAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n default=default,\n nargs=0,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n parser.print_help()\n parser.exit()\n \n \nclass _VersionAction(Action):\n\n def __init__(self,\n option_strings,\n version=None ,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=\"show program's version number and exit\"):\n super(_VersionAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n default=default,\n nargs=0,\n help=help)\n self.version=version\n \n def __call__(self,parser,namespace,values,option_string=None ):\n version=self.version\n if version is None :\n version=parser.version\n formatter=parser._get_formatter()\n formatter.add_text(version)\n parser._print_message(formatter.format_help(),_sys.stdout)\n parser.exit()\n \n \nclass _SubParsersAction(Action):\n\n class _ChoicesPseudoAction(Action):\n \n def __init__(self,name,aliases,help):\n metavar=dest=name\n if aliases:\n metavar +=' (%s)'%', '.join(aliases)\n sup=super(_SubParsersAction._ChoicesPseudoAction,self)\n sup.__init__(option_strings=[],dest=dest,help=help,\n metavar=metavar)\n \n def __init__(self,\n option_strings,\n prog,\n parser_class,\n dest=SUPPRESS,\n help=None ,\n metavar=None ):\n \n self._prog_prefix=prog\n self._parser_class=parser_class\n self._name_parser_map=_collections.OrderedDict()\n self._choices_actions=[]\n \n super(_SubParsersAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=PARSER,\n choices=self._name_parser_map,\n help=help,\n metavar=metavar)\n \n def add_parser(self,name,**kwargs):\n \n if kwargs.get('prog')is None :\n kwargs['prog']='%s %s'%(self._prog_prefix,name)\n \n aliases=kwargs.pop('aliases',())\n \n \n if 'help'in kwargs:\n help=kwargs.pop('help')\n choice_action=self._ChoicesPseudoAction(name,aliases,help)\n self._choices_actions.append(choice_action)\n \n \n parser=self._parser_class(**kwargs)\n self._name_parser_map[name]=parser\n \n \n for alias in aliases:\n self._name_parser_map[alias]=parser\n \n return parser\n \n def _get_subactions(self):\n return self._choices_actions\n \n def __call__(self,parser,namespace,values,option_string=None ):\n parser_name=values[0]\n arg_strings=values[1:]\n \n \n if self.dest is not SUPPRESS:\n setattr(namespace,self.dest,parser_name)\n \n \n try :\n parser=self._name_parser_map[parser_name]\n except KeyError:\n args={'parser_name':parser_name,\n 'choices':', '.join(self._name_parser_map)}\n msg=_('unknown parser %(parser_name)r (choices: %(choices)s)')%args\n raise ArgumentError(self,msg)\n \n \n \n \n \n \n \n \n subnamespace,arg_strings=parser.parse_known_args(arg_strings,None )\n for key,value in vars(subnamespace).items():\n setattr(namespace,key,value)\n \n if arg_strings:\n vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR,[])\n getattr(namespace,_UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)\n \n \n \n \n \n \nclass FileType(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,mode='r',bufsize=-1,encoding=None ,errors=None ):\n self._mode=mode\n self._bufsize=bufsize\n self._encoding=encoding\n self._errors=errors\n \n def __call__(self,string):\n \n if string =='-':\n if 'r'in self._mode:\n return _sys.stdin\n elif 'w'in self._mode:\n return _sys.stdout\n else :\n msg=_('argument \"-\" with mode %r')%self._mode\n raise ValueError(msg)\n \n \n try :\n return open(string,self._mode,self._bufsize,self._encoding,\n self._errors)\n except OSError as e:\n message=_(\"can't open '%s': %s\")\n raise ArgumentTypeError(message %(string,e))\n \n def __repr__(self):\n args=self._mode,self._bufsize\n kwargs=[('encoding',self._encoding),('errors',self._errors)]\n args_str=', '.join([repr(arg)for arg in args if arg !=-1]+\n ['%s=%r'%(kw,arg)for kw,arg in kwargs\n if arg is not None ])\n return '%s(%s)'%(type(self).__name__,args_str)\n \n \n \n \n \nclass Namespace(_AttributeHolder):\n ''\n\n\n\n \n \n def __init__(self,**kwargs):\n for name in kwargs:\n setattr(self,name,kwargs[name])\n \n def __eq__(self,other):\n if not isinstance(other,Namespace):\n return NotImplemented\n return vars(self)==vars(other)\n \n def __ne__(self,other):\n if not isinstance(other,Namespace):\n return NotImplemented\n return not (self ==other)\n \n def __contains__(self,key):\n return key in self.__dict__\n \n \nclass _ActionsContainer(object):\n\n def __init__(self,\n description,\n prefix_chars,\n argument_default,\n conflict_handler):\n super(_ActionsContainer,self).__init__()\n \n self.description=description\n self.argument_default=argument_default\n self.prefix_chars=prefix_chars\n self.conflict_handler=conflict_handler\n \n \n self._registries={}\n \n \n self.register('action',None ,_StoreAction)\n self.register('action','store',_StoreAction)\n self.register('action','store_const',_StoreConstAction)\n self.register('action','store_true',_StoreTrueAction)\n self.register('action','store_false',_StoreFalseAction)\n self.register('action','append',_AppendAction)\n self.register('action','append_const',_AppendConstAction)\n self.register('action','count',_CountAction)\n self.register('action','help',_HelpAction)\n self.register('action','version',_VersionAction)\n self.register('action','parsers',_SubParsersAction)\n \n \n self._get_handler()\n \n \n self._actions=[]\n self._option_string_actions={}\n \n \n self._action_groups=[]\n self._mutually_exclusive_groups=[]\n \n \n self._defaults={}\n \n \n self._negative_number_matcher=_re.compile(r'^-\\d+$|^-\\d*\\.\\d+$')\n \n \n \n self._has_negative_number_optionals=[]\n \n \n \n \n def register(self,registry_name,value,object):\n registry=self._registries.setdefault(registry_name,{})\n registry[value]=object\n \n def _registry_get(self,registry_name,value,default=None ):\n return self._registries[registry_name].get(value,default)\n \n \n \n \n def set_defaults(self,**kwargs):\n self._defaults.update(kwargs)\n \n \n \n for action in self._actions:\n if action.dest in kwargs:\n action.default=kwargs[action.dest]\n \n def get_default(self,dest):\n for action in self._actions:\n if action.dest ==dest and action.default is not None :\n return action.default\n return self._defaults.get(dest,None )\n \n \n \n \n \n def add_argument(self,*args,**kwargs):\n ''\n\n\n \n \n \n \n \n chars=self.prefix_chars\n if not args or len(args)==1 and args[0][0]not in chars:\n if args and 'dest'in kwargs:\n raise ValueError('dest supplied twice for positional argument')\n kwargs=self._get_positional_kwargs(*args,**kwargs)\n \n \n else :\n kwargs=self._get_optional_kwargs(*args,**kwargs)\n \n \n if 'default'not in kwargs:\n dest=kwargs['dest']\n if dest in self._defaults:\n kwargs['default']=self._defaults[dest]\n elif self.argument_default is not None :\n kwargs['default']=self.argument_default\n \n \n action_class=self._pop_action_class(kwargs)\n if not callable(action_class):\n raise ValueError('unknown action \"%s\"'%(action_class,))\n action=action_class(**kwargs)\n \n \n type_func=self._registry_get('type',action.type,action.type)\n if not callable(type_func):\n raise ValueError('%r is not callable'%(type_func,))\n \n \n if hasattr(self,\"_get_formatter\"):\n try :\n self._get_formatter()._format_args(action,None )\n except TypeError:\n raise ValueError(\"length of metavar tuple does not match nargs\")\n \n return self._add_action(action)\n \n def add_argument_group(self,*args,**kwargs):\n group=_ArgumentGroup(self,*args,**kwargs)\n self._action_groups.append(group)\n return group\n \n def add_mutually_exclusive_group(self,**kwargs):\n group=_MutuallyExclusiveGroup(self,**kwargs)\n self._mutually_exclusive_groups.append(group)\n return group\n \n def _add_action(self,action):\n \n self._check_conflict(action)\n \n \n self._actions.append(action)\n action.container=self\n \n \n for option_string in action.option_strings:\n self._option_string_actions[option_string]=action\n \n \n for option_string in action.option_strings:\n if self._negative_number_matcher.match(option_string):\n if not self._has_negative_number_optionals:\n self._has_negative_number_optionals.append(True )\n \n \n return action\n \n def _remove_action(self,action):\n self._actions.remove(action)\n \n def _add_container_actions(self,container):\n \n title_group_map={}\n for group in self._action_groups:\n if group.title in title_group_map:\n msg=_('cannot merge actions - two groups are named %r')\n raise ValueError(msg %(group.title))\n title_group_map[group.title]=group\n \n \n group_map={}\n for group in container._action_groups:\n \n \n \n if group.title not in title_group_map:\n title_group_map[group.title]=self.add_argument_group(\n title=group.title,\n description=group.description,\n conflict_handler=group.conflict_handler)\n \n \n for action in group._group_actions:\n group_map[action]=title_group_map[group.title]\n \n \n \n \n for group in container._mutually_exclusive_groups:\n mutex_group=self.add_mutually_exclusive_group(\n required=group.required)\n \n \n for action in group._group_actions:\n group_map[action]=mutex_group\n \n \n for action in container._actions:\n group_map.get(action,self)._add_action(action)\n \n def _get_positional_kwargs(self,dest,**kwargs):\n \n if 'required'in kwargs:\n msg=_(\"'required' is an invalid argument for positionals\")\n raise TypeError(msg)\n \n \n \n if kwargs.get('nargs')not in [OPTIONAL,ZERO_OR_MORE]:\n kwargs['required']=True\n if kwargs.get('nargs')==ZERO_OR_MORE and 'default'not in kwargs:\n kwargs['required']=True\n \n \n return dict(kwargs,dest=dest,option_strings=[])\n \n def _get_optional_kwargs(self,*args,**kwargs):\n \n option_strings=[]\n long_option_strings=[]\n for option_string in args:\n \n if not option_string[0]in self.prefix_chars:\n args={'option':option_string,\n 'prefix_chars':self.prefix_chars}\n msg=_('invalid option string %(option)r: '\n 'must start with a character %(prefix_chars)r')\n raise ValueError(msg %args)\n \n \n option_strings.append(option_string)\n if option_string[0]in self.prefix_chars:\n if len(option_string)>1:\n if option_string[1]in self.prefix_chars:\n long_option_strings.append(option_string)\n \n \n dest=kwargs.pop('dest',None )\n if dest is None :\n if long_option_strings:\n dest_option_string=long_option_strings[0]\n else :\n dest_option_string=option_strings[0]\n dest=dest_option_string.lstrip(self.prefix_chars)\n if not dest:\n msg=_('dest= is required for options like %r')\n raise ValueError(msg %option_string)\n dest=dest.replace('-','_')\n \n \n return dict(kwargs,dest=dest,option_strings=option_strings)\n \n def _pop_action_class(self,kwargs,default=None ):\n action=kwargs.pop('action',default)\n return self._registry_get('action',action,action)\n \n def _get_handler(self):\n \n handler_func_name='_handle_conflict_%s'%self.conflict_handler\n try :\n return getattr(self,handler_func_name)\n except AttributeError:\n msg=_('invalid conflict_resolution value: %r')\n raise ValueError(msg %self.conflict_handler)\n \n def _check_conflict(self,action):\n \n \n confl_optionals=[]\n for option_string in action.option_strings:\n if option_string in self._option_string_actions:\n confl_optional=self._option_string_actions[option_string]\n confl_optionals.append((option_string,confl_optional))\n \n \n if confl_optionals:\n conflict_handler=self._get_handler()\n conflict_handler(action,confl_optionals)\n \n def _handle_conflict_error(self,action,conflicting_actions):\n message=ngettext('conflicting option string: %s',\n 'conflicting option strings: %s',\n len(conflicting_actions))\n conflict_string=', '.join([option_string\n for option_string,action\n in conflicting_actions])\n raise ArgumentError(action,message %conflict_string)\n \n def _handle_conflict_resolve(self,action,conflicting_actions):\n \n \n for option_string,action in conflicting_actions:\n \n \n action.option_strings.remove(option_string)\n self._option_string_actions.pop(option_string,None )\n \n \n \n if not action.option_strings:\n action.container._remove_action(action)\n \n \nclass _ArgumentGroup(_ActionsContainer):\n\n def __init__(self,container,title=None ,description=None ,**kwargs):\n \n update=kwargs.setdefault\n update('conflict_handler',container.conflict_handler)\n update('prefix_chars',container.prefix_chars)\n update('argument_default',container.argument_default)\n super_init=super(_ArgumentGroup,self).__init__\n super_init(description=description,**kwargs)\n \n \n self.title=title\n self._group_actions=[]\n \n \n self._registries=container._registries\n self._actions=container._actions\n self._option_string_actions=container._option_string_actions\n self._defaults=container._defaults\n self._has_negative_number_optionals=\\\n container._has_negative_number_optionals\n self._mutually_exclusive_groups=container._mutually_exclusive_groups\n \n def _add_action(self,action):\n action=super(_ArgumentGroup,self)._add_action(action)\n self._group_actions.append(action)\n return action\n \n def _remove_action(self,action):\n super(_ArgumentGroup,self)._remove_action(action)\n self._group_actions.remove(action)\n \n \nclass _MutuallyExclusiveGroup(_ArgumentGroup):\n\n def __init__(self,container,required=False ):\n super(_MutuallyExclusiveGroup,self).__init__(container)\n self.required=required\n self._container=container\n \n def _add_action(self,action):\n if action.required:\n msg=_('mutually exclusive arguments must be optional')\n raise ValueError(msg)\n action=self._container._add_action(action)\n self._group_actions.append(action)\n return action\n \n def _remove_action(self,action):\n self._container._remove_action(action)\n self._group_actions.remove(action)\n \n \nclass ArgumentParser(_AttributeHolder,_ActionsContainer):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n prog=None ,\n usage=None ,\n description=None ,\n epilog=None ,\n parents=[],\n formatter_class=HelpFormatter,\n prefix_chars='-',\n fromfile_prefix_chars=None ,\n argument_default=None ,\n conflict_handler='error',\n add_help=True ):\n \n superinit=super(ArgumentParser,self).__init__\n superinit(description=description,\n prefix_chars=prefix_chars,\n argument_default=argument_default,\n conflict_handler=conflict_handler)\n \n \n if prog is None :\n prog=_os.path.basename(_sys.argv[0])\n \n self.prog=prog\n self.usage=usage\n self.epilog=epilog\n self.formatter_class=formatter_class\n self.fromfile_prefix_chars=fromfile_prefix_chars\n self.add_help=add_help\n \n add_group=self.add_argument_group\n self._positionals=add_group(_('positional arguments'))\n self._optionals=add_group(_('optional arguments'))\n self._subparsers=None\n \n \n def identity(string):\n return string\n self.register('type',None ,identity)\n \n \n \n default_prefix='-'if '-'in prefix_chars else prefix_chars[0]\n if self.add_help:\n self.add_argument(\n default_prefix+'h',default_prefix *2+'help',\n action='help',default=SUPPRESS,\n help=_('show this help message and exit'))\n \n \n for parent in parents:\n self._add_container_actions(parent)\n try :\n defaults=parent._defaults\n except AttributeError:\n pass\n else :\n self._defaults.update(defaults)\n \n \n \n \n def _get_kwargs(self):\n names=[\n 'prog',\n 'usage',\n 'description',\n 'formatter_class',\n 'conflict_handler',\n 'add_help',\n ]\n return [(name,getattr(self,name))for name in names]\n \n \n \n \n def add_subparsers(self,**kwargs):\n if self._subparsers is not None :\n self.error(_('cannot have multiple subparser arguments'))\n \n \n kwargs.setdefault('parser_class',type(self))\n \n if 'title'in kwargs or 'description'in kwargs:\n title=_(kwargs.pop('title','subcommands'))\n description=_(kwargs.pop('description',None ))\n self._subparsers=self.add_argument_group(title,description)\n else :\n self._subparsers=self._positionals\n \n \n \n if kwargs.get('prog')is None :\n formatter=self._get_formatter()\n positionals=self._get_positional_actions()\n groups=self._mutually_exclusive_groups\n formatter.add_usage(self.usage,positionals,groups,'')\n kwargs['prog']=formatter.format_help().strip()\n \n \n parsers_class=self._pop_action_class(kwargs,'parsers')\n action=parsers_class(option_strings=[],**kwargs)\n self._subparsers._add_action(action)\n \n \n return action\n \n def _add_action(self,action):\n if action.option_strings:\n self._optionals._add_action(action)\n else :\n self._positionals._add_action(action)\n return action\n \n def _get_optional_actions(self):\n return [action\n for action in self._actions\n if action.option_strings]\n \n def _get_positional_actions(self):\n return [action\n for action in self._actions\n if not action.option_strings]\n \n \n \n \n def parse_args(self,args=None ,namespace=None ):\n args,argv=self.parse_known_args(args,namespace)\n if argv:\n msg=_('unrecognized arguments: %s')\n self.error(msg %' '.join(argv))\n return args\n \n def parse_known_args(self,args=None ,namespace=None ):\n if args is None :\n \n args=_sys.argv[1:]\n else :\n \n args=list(args)\n \n \n if namespace is None :\n namespace=Namespace()\n \n \n for action in self._actions:\n if action.dest is not SUPPRESS:\n if not hasattr(namespace,action.dest):\n if action.default is not SUPPRESS:\n setattr(namespace,action.dest,action.default)\n \n \n for dest in self._defaults:\n if not hasattr(namespace,dest):\n setattr(namespace,dest,self._defaults[dest])\n \n \n try :\n namespace,args=self._parse_known_args(args,namespace)\n if hasattr(namespace,_UNRECOGNIZED_ARGS_ATTR):\n args.extend(getattr(namespace,_UNRECOGNIZED_ARGS_ATTR))\n delattr(namespace,_UNRECOGNIZED_ARGS_ATTR)\n return namespace,args\n except ArgumentError:\n err=_sys.exc_info()[1]\n self.error(str(err))\n \n def _parse_known_args(self,arg_strings,namespace):\n \n if self.fromfile_prefix_chars is not None :\n arg_strings=self._read_args_from_files(arg_strings)\n \n \n \n action_conflicts={}\n for mutex_group in self._mutually_exclusive_groups:\n group_actions=mutex_group._group_actions\n for i,mutex_action in enumerate(mutex_group._group_actions):\n conflicts=action_conflicts.setdefault(mutex_action,[])\n conflicts.extend(group_actions[:i])\n conflicts.extend(group_actions[i+1:])\n \n \n \n \n option_string_indices={}\n arg_string_pattern_parts=[]\n arg_strings_iter=iter(arg_strings)\n for i,arg_string in enumerate(arg_strings_iter):\n \n \n if arg_string =='--':\n arg_string_pattern_parts.append('-')\n for arg_string in arg_strings_iter:\n arg_string_pattern_parts.append('A')\n \n \n \n else :\n option_tuple=self._parse_optional(arg_string)\n if option_tuple is None :\n pattern='A'\n else :\n option_string_indices[i]=option_tuple\n pattern='O'\n arg_string_pattern_parts.append(pattern)\n \n \n arg_strings_pattern=''.join(arg_string_pattern_parts)\n \n \n seen_actions=set()\n seen_non_default_actions=set()\n \n def take_action(action,argument_strings,option_string=None ):\n seen_actions.add(action)\n argument_values=self._get_values(action,argument_strings)\n \n \n \n \n if argument_values is not action.default:\n seen_non_default_actions.add(action)\n for conflict_action in action_conflicts.get(action,[]):\n if conflict_action in seen_non_default_actions:\n msg=_('not allowed with argument %s')\n action_name=_get_action_name(conflict_action)\n raise ArgumentError(action,msg %action_name)\n \n \n \n if argument_values is not SUPPRESS:\n action(self,namespace,argument_values,option_string)\n \n \n def consume_optional(start_index):\n \n \n option_tuple=option_string_indices[start_index]\n action,option_string,explicit_arg=option_tuple\n \n \n \n match_argument=self._match_argument\n action_tuples=[]\n while True :\n \n \n if action is None :\n extras.append(arg_strings[start_index])\n return start_index+1\n \n \n \n if explicit_arg is not None :\n arg_count=match_argument(action,'A')\n \n \n \n \n chars=self.prefix_chars\n if arg_count ==0 and option_string[1]not in chars:\n action_tuples.append((action,[],option_string))\n char=option_string[0]\n option_string=char+explicit_arg[0]\n new_explicit_arg=explicit_arg[1:]or None\n optionals_map=self._option_string_actions\n if option_string in optionals_map:\n action=optionals_map[option_string]\n explicit_arg=new_explicit_arg\n else :\n msg=_('ignored explicit argument %r')\n raise ArgumentError(action,msg %explicit_arg)\n \n \n \n elif arg_count ==1:\n stop=start_index+1\n args=[explicit_arg]\n action_tuples.append((action,args,option_string))\n break\n \n \n \n else :\n msg=_('ignored explicit argument %r')\n raise ArgumentError(action,msg %explicit_arg)\n \n \n \n \n else :\n start=start_index+1\n selected_patterns=arg_strings_pattern[start:]\n arg_count=match_argument(action,selected_patterns)\n stop=start+arg_count\n args=arg_strings[start:stop]\n action_tuples.append((action,args,option_string))\n break\n \n \n \n assert action_tuples\n for action,args,option_string in action_tuples:\n take_action(action,args,option_string)\n return stop\n \n \n \n positionals=self._get_positional_actions()\n \n \n def consume_positionals(start_index):\n \n match_partial=self._match_arguments_partial\n selected_pattern=arg_strings_pattern[start_index:]\n arg_counts=match_partial(positionals,selected_pattern)\n \n \n \n for action,arg_count in zip(positionals,arg_counts):\n args=arg_strings[start_index:start_index+arg_count]\n start_index +=arg_count\n take_action(action,args)\n \n \n \n positionals[:]=positionals[len(arg_counts):]\n return start_index\n \n \n \n extras=[]\n start_index=0\n if option_string_indices:\n max_option_string_index=max(option_string_indices)\n else :\n max_option_string_index=-1\n while start_index <=max_option_string_index:\n \n \n next_option_string_index=min([\n index\n for index in option_string_indices\n if index >=start_index])\n if start_index !=next_option_string_index:\n positionals_end_index=consume_positionals(start_index)\n \n \n \n if positionals_end_index >start_index:\n start_index=positionals_end_index\n continue\n else :\n start_index=positionals_end_index\n \n \n \n if start_index not in option_string_indices:\n strings=arg_strings[start_index:next_option_string_index]\n extras.extend(strings)\n start_index=next_option_string_index\n \n \n start_index=consume_optional(start_index)\n \n \n stop_index=consume_positionals(start_index)\n \n \n extras.extend(arg_strings[stop_index:])\n \n \n \n required_actions=[]\n for action in self._actions:\n if action not in seen_actions:\n if action.required:\n required_actions.append(_get_action_name(action))\n else :\n \n \n \n \n if (action.default is not None and\n isinstance(action.default,str)and\n hasattr(namespace,action.dest)and\n action.default is getattr(namespace,action.dest)):\n setattr(namespace,action.dest,\n self._get_value(action,action.default))\n \n if required_actions:\n self.error(_('the following arguments are required: %s')%\n ', '.join(required_actions))\n \n \n for group in self._mutually_exclusive_groups:\n if group.required:\n for action in group._group_actions:\n if action in seen_non_default_actions:\n break\n \n \n else :\n names=[_get_action_name(action)\n for action in group._group_actions\n if action.help is not SUPPRESS]\n msg=_('one of the arguments %s is required')\n self.error(msg %' '.join(names))\n \n \n return namespace,extras\n \n def _read_args_from_files(self,arg_strings):\n \n new_arg_strings=[]\n for arg_string in arg_strings:\n \n \n if not arg_string or arg_string[0]not in self.fromfile_prefix_chars:\n new_arg_strings.append(arg_string)\n \n \n else :\n try :\n with open(arg_string[1:])as args_file:\n arg_strings=[]\n for arg_line in args_file.read().splitlines():\n for arg in self.convert_arg_line_to_args(arg_line):\n arg_strings.append(arg)\n arg_strings=self._read_args_from_files(arg_strings)\n new_arg_strings.extend(arg_strings)\n except OSError:\n err=_sys.exc_info()[1]\n self.error(str(err))\n \n \n return new_arg_strings\n \n def convert_arg_line_to_args(self,arg_line):\n return [arg_line]\n \n def _match_argument(self,action,arg_strings_pattern):\n \n nargs_pattern=self._get_nargs_pattern(action)\n match=_re.match(nargs_pattern,arg_strings_pattern)\n \n \n if match is None :\n nargs_errors={\n None :_('expected one argument'),\n OPTIONAL:_('expected at most one argument'),\n ONE_OR_MORE:_('expected at least one argument'),\n }\n default=ngettext('expected %s argument',\n 'expected %s arguments',\n action.nargs)%action.nargs\n msg=nargs_errors.get(action.nargs,default)\n raise ArgumentError(action,msg)\n \n \n return len(match.group(1))\n \n def _match_arguments_partial(self,actions,arg_strings_pattern):\n \n \n result=[]\n for i in range(len(actions),0,-1):\n actions_slice=actions[:i]\n pattern=''.join([self._get_nargs_pattern(action)\n for action in actions_slice])\n match=_re.match(pattern,arg_strings_pattern)\n if match is not None :\n result.extend([len(string)for string in match.groups()])\n break\n \n \n return result\n \n def _parse_optional(self,arg_string):\n \n if not arg_string:\n return None\n \n \n if not arg_string[0]in self.prefix_chars:\n return None\n \n \n if arg_string in self._option_string_actions:\n action=self._option_string_actions[arg_string]\n return action,arg_string,None\n \n \n if len(arg_string)==1:\n return None\n \n \n if '='in arg_string:\n option_string,explicit_arg=arg_string.split('=',1)\n if option_string in self._option_string_actions:\n action=self._option_string_actions[option_string]\n return action,option_string,explicit_arg\n \n \n \n option_tuples=self._get_option_tuples(arg_string)\n \n \n if len(option_tuples)>1:\n options=', '.join([option_string\n for action,option_string,explicit_arg in option_tuples])\n args={'option':arg_string,'matches':options}\n msg=_('ambiguous option: %(option)s could match %(matches)s')\n self.error(msg %args)\n \n \n \n elif len(option_tuples)==1:\n option_tuple,=option_tuples\n return option_tuple\n \n \n \n \n if self._negative_number_matcher.match(arg_string):\n if not self._has_negative_number_optionals:\n return None\n \n \n if ' 'in arg_string:\n return None\n \n \n \n return None ,arg_string,None\n \n def _get_option_tuples(self,option_string):\n result=[]\n \n \n \n chars=self.prefix_chars\n if option_string[0]in chars and option_string[1]in chars:\n if '='in option_string:\n option_prefix,explicit_arg=option_string.split('=',1)\n else :\n option_prefix=option_string\n explicit_arg=None\n for option_string in self._option_string_actions:\n if option_string.startswith(option_prefix):\n action=self._option_string_actions[option_string]\n tup=action,option_string,explicit_arg\n result.append(tup)\n \n \n \n \n elif option_string[0]in chars and option_string[1]not in chars:\n option_prefix=option_string\n explicit_arg=None\n short_option_prefix=option_string[:2]\n short_explicit_arg=option_string[2:]\n \n for option_string in self._option_string_actions:\n if option_string ==short_option_prefix:\n action=self._option_string_actions[option_string]\n tup=action,option_string,short_explicit_arg\n result.append(tup)\n elif option_string.startswith(option_prefix):\n action=self._option_string_actions[option_string]\n tup=action,option_string,explicit_arg\n result.append(tup)\n \n \n else :\n self.error(_('unexpected option string: %s')%option_string)\n \n \n return result\n \n def _get_nargs_pattern(self,action):\n \n \n nargs=action.nargs\n \n \n if nargs is None :\n nargs_pattern='(-*A-*)'\n \n \n elif nargs ==OPTIONAL:\n nargs_pattern='(-*A?-*)'\n \n \n elif nargs ==ZERO_OR_MORE:\n nargs_pattern='(-*[A-]*)'\n \n \n elif nargs ==ONE_OR_MORE:\n nargs_pattern='(-*A[A-]*)'\n \n \n elif nargs ==REMAINDER:\n nargs_pattern='([-AO]*)'\n \n \n elif nargs ==PARSER:\n nargs_pattern='(-*A[-AO]*)'\n \n \n else :\n nargs_pattern='(-*%s-*)'%'-*'.join('A'*nargs)\n \n \n if action.option_strings:\n nargs_pattern=nargs_pattern.replace('-*','')\n nargs_pattern=nargs_pattern.replace('-','')\n \n \n return nargs_pattern\n \n \n \n \n def _get_values(self,action,arg_strings):\n \n if action.nargs not in [PARSER,REMAINDER]:\n try :\n arg_strings.remove('--')\n except ValueError:\n pass\n \n \n if not arg_strings and action.nargs ==OPTIONAL:\n if action.option_strings:\n value=action.const\n else :\n value=action.default\n if isinstance(value,str):\n value=self._get_value(action,value)\n self._check_value(action,value)\n \n \n \n elif (not arg_strings and action.nargs ==ZERO_OR_MORE and\n not action.option_strings):\n if action.default is not None :\n value=action.default\n else :\n value=arg_strings\n self._check_value(action,value)\n \n \n elif len(arg_strings)==1 and action.nargs in [None ,OPTIONAL]:\n arg_string,=arg_strings\n value=self._get_value(action,arg_string)\n self._check_value(action,value)\n \n \n elif action.nargs ==REMAINDER:\n value=[self._get_value(action,v)for v in arg_strings]\n \n \n elif action.nargs ==PARSER:\n value=[self._get_value(action,v)for v in arg_strings]\n self._check_value(action,value[0])\n \n \n else :\n value=[self._get_value(action,v)for v in arg_strings]\n for v in value:\n self._check_value(action,v)\n \n \n return value\n \n def _get_value(self,action,arg_string):\n type_func=self._registry_get('type',action.type,action.type)\n if not callable(type_func):\n msg=_('%r is not callable')\n raise ArgumentError(action,msg %type_func)\n \n \n try :\n result=type_func(arg_string)\n \n \n except ArgumentTypeError:\n name=getattr(action.type,'__name__',repr(action.type))\n msg=str(_sys.exc_info()[1])\n raise ArgumentError(action,msg)\n \n \n except (TypeError,ValueError):\n name=getattr(action.type,'__name__',repr(action.type))\n args={'type':name,'value':arg_string}\n msg=_('invalid %(type)s value: %(value)r')\n raise ArgumentError(action,msg %args)\n \n \n return result\n \n def _check_value(self,action,value):\n \n if action.choices is not None and value not in action.choices:\n args={'value':value,\n 'choices':', '.join(map(repr,action.choices))}\n msg=_('invalid choice: %(value)r (choose from %(choices)s)')\n raise ArgumentError(action,msg %args)\n \n \n \n \n def format_usage(self):\n formatter=self._get_formatter()\n formatter.add_usage(self.usage,self._actions,\n self._mutually_exclusive_groups)\n return formatter.format_help()\n \n def format_help(self):\n formatter=self._get_formatter()\n \n \n formatter.add_usage(self.usage,self._actions,\n self._mutually_exclusive_groups)\n \n \n formatter.add_text(self.description)\n \n \n for action_group in self._action_groups:\n formatter.start_section(action_group.title)\n formatter.add_text(action_group.description)\n formatter.add_arguments(action_group._group_actions)\n formatter.end_section()\n \n \n formatter.add_text(self.epilog)\n \n \n return formatter.format_help()\n \n def _get_formatter(self):\n return self.formatter_class(prog=self.prog)\n \n \n \n \n def print_usage(self,file=None ):\n if file is None :\n file=_sys.stdout\n self._print_message(self.format_usage(),file)\n \n def print_help(self,file=None ):\n if file is None :\n file=_sys.stdout\n self._print_message(self.format_help(),file)\n \n def _print_message(self,message,file=None ):\n if message:\n if file is None :\n file=_sys.stderr\n file.write(message)\n \n \n \n \n def exit(self,status=0,message=None ):\n if message:\n self._print_message(message,_sys.stderr)\n _sys.exit(status)\n \n def error(self,message):\n ''\n\n\n\n\n\n\n \n self.print_usage(_sys.stderr)\n args={'prog':self.prog,'message':message}\n self.exit(2,_('%(prog)s: error: %(message)s\\n')%args)\n",["collections","copy","gettext","os","re","sys","textwrap"]],atexit:[".py","''\n\n\n\n\n\nclass __loader__(object):\n pass\n \ndef _clear(*args,**kw):\n ''\n \n pass\n \ndef _run_exitfuncs(*args,**kw):\n ''\n \n pass\n \ndef register(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef unregister(*args,**kw):\n ''\n\n\n\n \n pass\n",[]],base64:[".py","#! /usr/bin/env python3\n\n\"\"\"RFC 3548: Base16, Base32, Base64 Data Encodings\"\"\"\n\n\n\n\n\n\n\n\n\nimport _base64\nimport binascii\nimport struct\nimport io\n\nsetattr(_base64.Base64,'error',binascii.Error)\n\n__all__=[\n\n'encode','decode','encodebytes','decodebytes',\n\n'b64encode','b64decode','b32encode','b32decode',\n'b16encode','b16decode',\n\n'standard_b64encode','standard_b64decode',\n\n\n\n\n'urlsafe_b64encode','urlsafe_b64decode',\n]\n\n\nbytes_types=(bytes,bytearray)\n\ndef _bytes_from_decode_data(s):\n if isinstance(s,str):\n try :\n return s.encode('ascii')\n except UnicodeEncodeError:\n raise ValueError('string argument should contain only ASCII characters')\n elif isinstance(s,bytes_types):\n return s\n else :\n raise TypeError(\"argument should be bytes or ASCII string, not %s\"%s.__class__.__name__)\n \n \n \n \n \ndef b64encode(s,altchars=None ):\n ''\n\n\n\n\n\n\n\n \n if not isinstance(s,bytes_types):\n raise TypeError(\"expected bytes, not %s\"%s.__class__.__name__)\n if altchars is not None :\n if not isinstance(altchars,bytes_types):\n print('wrong altchars')\n raise TypeError(\"expected bytes, not %s\"\n %altchars.__class__.__name__)\n assert len(altchars)>=2,repr(altchars)\n return _base64.Base64.encode(s,altchars)\n \n \ndef b64decode(s,altchars=None ,validate=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if isinstance(s,str):\n s=bytes(s,encoding='ascii')\n if altchars is not None :\n altchars=_bytes_from_decode_data(altchars)\n return _base64.Base64.decode(s,altchars,validate)\n \n \ndef standard_b64encode(s):\n ''\n\n\n \n return b64encode(s)\n \ndef standard_b64decode(s):\n ''\n\n\n\n\n\n \n return b64decode(s)\n \n \n_urlsafe_encode_translation=bytes.maketrans(b'+/',b'-_')\n_urlsafe_decode_translation=bytes.maketrans(b'-_',b'+/')\n\ndef urlsafe_b64encode(s):\n ''\n\n\n\n\n \n return b64encode(s).translate(_urlsafe_encode_translation)\n \ndef urlsafe_b64decode(s):\n ''\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n s=s.translate(_urlsafe_decode_translation)\n return b64decode(s)\n \n \n \n \n_b32alphabet={\n0:b'A',9:b'J',18:b'S',27:b'3',\n1:b'B',10:b'K',19:b'T',28:b'4',\n2:b'C',11:b'L',20:b'U',29:b'5',\n3:b'D',12:b'M',21:b'V',30:b'6',\n4:b'E',13:b'N',22:b'W',31:b'7',\n5:b'F',14:b'O',23:b'X',\n6:b'G',15:b'P',24:b'Y',\n7:b'H',16:b'Q',25:b'Z',\n8:b'I',17:b'R',26:b'2',\n}\n\n_b32tab=[v[0]for k,v in sorted(_b32alphabet.items())]\n_b32rev=dict([(v[0],k)for k,v in _b32alphabet.items()])\n\n\ndef b32encode(s):\n ''\n\n\n \n if not isinstance(s,bytes_types):\n raise TypeError(\"expected bytes, not %s\"%s.__class__.__name__)\n quanta,leftover=divmod(len(s),5)\n \n if leftover:\n s=s+bytes(5 -leftover)\n quanta +=1\n encoded=bytearray()\n for i in range(quanta):\n \n \n \n \n \n c1,c2,c3=struct.unpack('!HHB',s[i *5:(i+1)*5])\n c2 +=(c1&1)<<16\n c3 +=(c2&3)<<8\n encoded +=bytes([_b32tab[c1 >>11],\n _b32tab[(c1 >>6)&0x1f],\n _b32tab[(c1 >>1)&0x1f],\n _b32tab[c2 >>12],\n _b32tab[(c2 >>7)&0x1f],\n _b32tab[(c2 >>2)&0x1f],\n _b32tab[c3 >>5],\n _b32tab[c3&0x1f],\n ])\n \n if leftover ==1:\n encoded[-6:]=b'======'\n elif leftover ==2:\n encoded[-4:]=b'===='\n elif leftover ==3:\n encoded[-3:]=b'==='\n elif leftover ==4:\n encoded[-1:]=b'='\n return bytes(encoded)\n \n \ndef _strip_padchars(s):\n if isinstance(s,bytes_types):\n padchar=ord('=')\n else :\n padchar='='\n pos=-1\n while s[pos]==padchar:\n pos -=1\n pos=abs(pos+1)\n if pos ==0:\n return s,0\n else :\n return s[:-pos],pos\n \ndef b32decode(s,casefold=False ,map01=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n quanta,leftover=divmod(len(s),8)\n if leftover:\n raise binascii.Error('Incorrect padding')\n \n \n \n if map01 is not None :\n map01=_bytes_from_decode_data(map01)\n assert len(map01)==1,repr(map01)\n s=s.translate(bytes.maketrans(b'01',b'O'+map01))\n if casefold:\n s=s.upper()\n \n \n \n s,padchars=_strip_padchars(s)\n \n \n parts=[]\n acc=0\n shift=35\n for c in s:\n val=_b32rev.get(c)\n if val is None :\n raise binascii.Error('Non-base32 digit found')\n acc +=_b32rev[c]<\":\n return filename\n canonic=self.fncache.get(filename)\n if not canonic:\n canonic=os.path.abspath(filename)\n canonic=os.path.normcase(canonic)\n self.fncache[filename]=canonic\n return canonic\n \n def reset(self):\n import linecache\n linecache.checkcache()\n self.botframe=None\n self._set_stopinfo(None ,None )\n \n def trace_dispatch(self,frame,event,arg):\n if self.quitting:\n return\n if event =='line':\n return self.dispatch_line(frame)\n if event =='call':\n return self.dispatch_call(frame,arg)\n if event =='return':\n return self.dispatch_return(frame,arg)\n if event =='exception':\n return self.dispatch_exception(frame,arg)\n if event =='c_call':\n return self.trace_dispatch\n if event =='c_exception':\n return self.trace_dispatch\n if event =='c_return':\n return self.trace_dispatch\n print('bdb.Bdb.dispatch: unknown debugging event:',repr(event))\n return self.trace_dispatch\n \n def dispatch_line(self,frame):\n if self.stop_here(frame)or self.break_here(frame):\n self.user_line(frame)\n if self.quitting:raise BdbQuit\n return self.trace_dispatch\n \n def dispatch_call(self,frame,arg):\n \n if self.botframe is None :\n \n self.botframe=frame.f_back\n return self.trace_dispatch\n if not (self.stop_here(frame)or self.break_anywhere(frame)):\n \n return\n \n if self.stopframe and frame.f_code.co_flags&CO_GENERATOR:\n return self.trace_dispatch\n self.user_call(frame,arg)\n if self.quitting:raise BdbQuit\n return self.trace_dispatch\n \n def dispatch_return(self,frame,arg):\n if self.stop_here(frame)or frame ==self.returnframe:\n \n if self.stopframe and frame.f_code.co_flags&CO_GENERATOR:\n return self.trace_dispatch\n try :\n self.frame_returning=frame\n self.user_return(frame,arg)\n finally :\n self.frame_returning=None\n if self.quitting:raise BdbQuit\n \n if self.stopframe is frame and self.stoplineno !=-1:\n self._set_stopinfo(None ,None )\n return self.trace_dispatch\n \n def dispatch_exception(self,frame,arg):\n if self.stop_here(frame):\n \n \n \n if not (frame.f_code.co_flags&CO_GENERATOR\n and arg[0]is StopIteration and arg[2]is None ):\n self.user_exception(frame,arg)\n if self.quitting:raise BdbQuit\n \n \n \n \n elif (self.stopframe and frame is not self.stopframe\n and self.stopframe.f_code.co_flags&CO_GENERATOR\n and arg[0]in (StopIteration,GeneratorExit)):\n self.user_exception(frame,arg)\n if self.quitting:raise BdbQuit\n \n return self.trace_dispatch\n \n \n \n \n \n def is_skipped_module(self,module_name):\n for pattern in self.skip:\n if fnmatch.fnmatch(module_name,pattern):\n return True\n return False\n \n def stop_here(self,frame):\n \n \n if self.skip and\\\n self.is_skipped_module(frame.f_globals.get('__name__')):\n return False\n if frame is self.stopframe:\n if self.stoplineno ==-1:\n return False\n return frame.f_lineno >=self.stoplineno\n if not self.stopframe:\n return True\n return False\n \n def break_here(self,frame):\n filename=self.canonic(frame.f_code.co_filename)\n if filename not in self.breaks:\n return False\n lineno=frame.f_lineno\n if lineno not in self.breaks[filename]:\n \n \n lineno=frame.f_code.co_firstlineno\n if lineno not in self.breaks[filename]:\n return False\n \n \n (bp,flag)=effective(filename,lineno,frame)\n if bp:\n self.currentbp=bp.number\n if (flag and bp.temporary):\n self.do_clear(str(bp.number))\n return True\n else :\n return False\n \n def do_clear(self,arg):\n raise NotImplementedError(\"subclass of bdb must implement do_clear()\")\n \n def break_anywhere(self,frame):\n return self.canonic(frame.f_code.co_filename)in self.breaks\n \n \n \n \n def user_call(self,frame,argument_list):\n ''\n \n pass\n \n def user_line(self,frame):\n ''\n pass\n \n def user_return(self,frame,return_value):\n ''\n pass\n \n def user_exception(self,frame,exc_info):\n ''\n \n pass\n \n def _set_stopinfo(self,stopframe,returnframe,stoplineno=0):\n self.stopframe=stopframe\n self.returnframe=returnframe\n self.quitting=False\n \n \n self.stoplineno=stoplineno\n \n \n \n \n def set_until(self,frame,lineno=None ):\n ''\n \n \n if lineno is None :\n lineno=frame.f_lineno+1\n self._set_stopinfo(frame,frame,lineno)\n \n def set_step(self):\n ''\n \n \n \n \n if self.frame_returning:\n caller_frame=self.frame_returning.f_back\n if caller_frame and not caller_frame.f_trace:\n caller_frame.f_trace=self.trace_dispatch\n self._set_stopinfo(None ,None )\n \n def set_next(self,frame):\n ''\n self._set_stopinfo(frame,None )\n \n def set_return(self,frame):\n ''\n if frame.f_code.co_flags&CO_GENERATOR:\n self._set_stopinfo(frame,None ,-1)\n else :\n self._set_stopinfo(frame.f_back,frame)\n \n def set_trace(self,frame=None ):\n ''\n\n\n \n if frame is None :\n frame=sys._getframe().f_back\n self.reset()\n while frame:\n frame.f_trace=self.trace_dispatch\n self.botframe=frame\n frame=frame.f_back\n self.set_step()\n sys.settrace(self.trace_dispatch)\n \n def set_continue(self):\n \n self._set_stopinfo(self.botframe,None ,-1)\n if not self.breaks:\n \n sys.settrace(None )\n frame=sys._getframe().f_back\n while frame and frame is not self.botframe:\n del frame.f_trace\n frame=frame.f_back\n \n def set_quit(self):\n self.stopframe=self.botframe\n self.returnframe=None\n self.quitting=True\n sys.settrace(None )\n \n \n \n \n \n \n \n \n def set_break(self,filename,lineno,temporary=False ,cond=None ,\n funcname=None ):\n filename=self.canonic(filename)\n import linecache\n line=linecache.getline(filename,lineno)\n if not line:\n return 'Line %s:%d does not exist'%(filename,lineno)\n list=self.breaks.setdefault(filename,[])\n if lineno not in list:\n list.append(lineno)\n bp=Breakpoint(filename,lineno,temporary,cond,funcname)\n \n def _prune_breaks(self,filename,lineno):\n if (filename,lineno)not in Breakpoint.bplist:\n self.breaks[filename].remove(lineno)\n if not self.breaks[filename]:\n del self.breaks[filename]\n \n def clear_break(self,filename,lineno):\n filename=self.canonic(filename)\n if filename not in self.breaks:\n return 'There are no breakpoints in %s'%filename\n if lineno not in self.breaks[filename]:\n return 'There is no breakpoint at %s:%d'%(filename,lineno)\n \n \n for bp in Breakpoint.bplist[filename,lineno][:]:\n bp.deleteMe()\n self._prune_breaks(filename,lineno)\n \n def clear_bpbynumber(self,arg):\n try :\n bp=self.get_bpbynumber(arg)\n except ValueError as err:\n return str(err)\n bp.deleteMe()\n self._prune_breaks(bp.file,bp.line)\n \n def clear_all_file_breaks(self,filename):\n filename=self.canonic(filename)\n if filename not in self.breaks:\n return 'There are no breakpoints in %s'%filename\n for line in self.breaks[filename]:\n blist=Breakpoint.bplist[filename,line]\n for bp in blist:\n bp.deleteMe()\n del self.breaks[filename]\n \n def clear_all_breaks(self):\n if not self.breaks:\n return 'There are no breakpoints'\n for bp in Breakpoint.bpbynumber:\n if bp:\n bp.deleteMe()\n self.breaks={}\n \n def get_bpbynumber(self,arg):\n if not arg:\n raise ValueError('Breakpoint number expected')\n try :\n number=int(arg)\n except ValueError:\n raise ValueError('Non-numeric breakpoint number %s'%arg)\n try :\n bp=Breakpoint.bpbynumber[number]\n except IndexError:\n raise ValueError('Breakpoint number %d out of range'%number)\n if bp is None :\n raise ValueError('Breakpoint %d already deleted'%number)\n return bp\n \n def get_break(self,filename,lineno):\n filename=self.canonic(filename)\n return filename in self.breaks and\\\n lineno in self.breaks[filename]\n \n def get_breaks(self,filename,lineno):\n filename=self.canonic(filename)\n return filename in self.breaks and\\\n lineno in self.breaks[filename]and\\\n Breakpoint.bplist[filename,lineno]or []\n \n def get_file_breaks(self,filename):\n filename=self.canonic(filename)\n if filename in self.breaks:\n return self.breaks[filename]\n else :\n return []\n \n def get_all_breaks(self):\n return self.breaks\n \n \n \n \n def get_stack(self,f,t):\n stack=[]\n if t and t.tb_frame is f:\n t=t.tb_next\n while f is not None :\n stack.append((f,f.f_lineno))\n if f is self.botframe:\n break\n f=f.f_back\n stack.reverse()\n i=max(0,len(stack)-1)\n while t is not None :\n stack.append((t.tb_frame,t.tb_lineno))\n t=t.tb_next\n if f is None :\n i=max(0,len(stack)-1)\n return stack,i\n \n def format_stack_entry(self,frame_lineno,lprefix=': '):\n import linecache,reprlib\n frame,lineno=frame_lineno\n filename=self.canonic(frame.f_code.co_filename)\n s='%s(%r)'%(filename,lineno)\n if frame.f_code.co_name:\n s +=frame.f_code.co_name\n else :\n s +=\"\"\n if '__args__'in frame.f_locals:\n args=frame.f_locals['__args__']\n else :\n args=None\n if args:\n s +=reprlib.repr(args)\n else :\n s +='()'\n if '__return__'in frame.f_locals:\n rv=frame.f_locals['__return__']\n s +='->'\n s +=reprlib.repr(rv)\n line=linecache.getline(filename,lineno,frame.f_globals)\n if line:\n s +=lprefix+line.strip()\n return s\n \n \n \n \n \n def run(self,cmd,globals=None ,locals=None ):\n if globals is None :\n import __main__\n globals=__main__.__dict__\n if locals is None :\n locals=globals\n self.reset()\n if isinstance(cmd,str):\n cmd=compile(cmd,\"\",\"exec\")\n sys.settrace(self.trace_dispatch)\n try :\n exec(cmd,globals,locals)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n \n def runeval(self,expr,globals=None ,locals=None ):\n if globals is None :\n import __main__\n globals=__main__.__dict__\n if locals is None :\n locals=globals\n self.reset()\n sys.settrace(self.trace_dispatch)\n try :\n return eval(expr,globals,locals)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n \n def runctx(self,cmd,globals,locals):\n \n self.run(cmd,globals,locals)\n \n \n \n def runcall(self,func,*args,**kwds):\n self.reset()\n sys.settrace(self.trace_dispatch)\n res=None\n try :\n res=func(*args,**kwds)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n return res\n \n \ndef set_trace():\n Bdb().set_trace()\n \n \nclass Breakpoint:\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n next=1\n bplist={}\n bpbynumber=[None ]\n \n \n \n def __init__(self,file,line,temporary=False ,cond=None ,funcname=None ):\n self.funcname=funcname\n \n self.func_first_executable_line=None\n self.file=file\n self.line=line\n self.temporary=temporary\n self.cond=cond\n self.enabled=True\n self.ignore=0\n self.hits=0\n self.number=Breakpoint.next\n Breakpoint.next +=1\n \n self.bpbynumber.append(self)\n if (file,line)in self.bplist:\n self.bplist[file,line].append(self)\n else :\n self.bplist[file,line]=[self]\n \n def deleteMe(self):\n index=(self.file,self.line)\n self.bpbynumber[self.number]=None\n self.bplist[index].remove(self)\n if not self.bplist[index]:\n \n del self.bplist[index]\n \n def enable(self):\n self.enabled=True\n \n def disable(self):\n self.enabled=False\n \n def bpprint(self,out=None ):\n if out is None :\n out=sys.stdout\n print(self.bpformat(),file=out)\n \n def bpformat(self):\n if self.temporary:\n disp='del '\n else :\n disp='keep '\n if self.enabled:\n disp=disp+'yes '\n else :\n disp=disp+'no '\n ret='%-4dbreakpoint %s at %s:%d'%(self.number,disp,\n self.file,self.line)\n if self.cond:\n ret +='\\n\\tstop only if %s'%(self.cond,)\n if self.ignore:\n ret +='\\n\\tignore next %d hits'%(self.ignore,)\n if self.hits:\n if self.hits >1:\n ss='s'\n else :\n ss=''\n ret +='\\n\\tbreakpoint already hit %d time%s'%(self.hits,ss)\n return ret\n \n def __str__(self):\n return 'breakpoint %s at %s:%s'%(self.number,self.file,self.line)\n \n \n \ndef checkfuncname(b,frame):\n ''\n if not b.funcname:\n \n if b.line !=frame.f_lineno:\n \n \n return False\n return True\n \n \n \n if frame.f_code.co_name !=b.funcname:\n \n return False\n \n \n if not b.func_first_executable_line:\n \n b.func_first_executable_line=frame.f_lineno\n \n if b.func_first_executable_line !=frame.f_lineno:\n \n return False\n return True\n \n \n \ndef effective(file,line,frame):\n ''\n\n\n\n\n\n \n possibles=Breakpoint.bplist[file,line]\n for b in possibles:\n if not b.enabled:\n continue\n if not checkfuncname(b,frame):\n continue\n \n b.hits +=1\n if not b.cond:\n \n if b.ignore >0:\n b.ignore -=1\n continue\n else :\n \n return (b,True )\n else :\n \n \n \n try :\n val=eval(b.cond,frame.f_globals,frame.f_locals)\n if val:\n if b.ignore >0:\n b.ignore -=1\n \n else :\n return (b,True )\n \n \n except :\n \n \n \n return (b,False )\n return (None ,None )\n \n \n \n \nclass Tdb(Bdb):\n def user_call(self,frame,args):\n name=frame.f_code.co_name\n if not name:name='???'\n print('+++ call',name,args)\n def user_line(self,frame):\n import linecache\n name=frame.f_code.co_name\n if not name:name='???'\n fn=self.canonic(frame.f_code.co_filename)\n line=linecache.getline(fn,frame.f_lineno,frame.f_globals)\n print('+++',fn,frame.f_lineno,name,':',line.strip())\n def user_return(self,frame,retval):\n print('+++ return',retval)\n def user_exception(self,frame,exc_stuff):\n print('+++ exception',exc_stuff)\n self.set_continue()\n \ndef foo(n):\n print('foo(',n,')')\n x=bar(n *10)\n print('bar returned',x)\n \ndef bar(a):\n print('bar(',a,')')\n return a /2\n \ndef test():\n t=Tdb()\n t.run('import bdb; bdb.foo(10)')\n",["__main__","fnmatch","inspect","linecache","os","reprlib","sys"]],binascii:[".py","''\n\n\n\n\n\n\n\nclass Error(ValueError):\n def __init__(self,msg=''):\n self._msg=msg\n \n def __str__(self):\n return \" binascii.Error: \"+self._msg\n \n \nclass Done(Exception):\n pass\n \nclass Incomplete(Error):\n pass\n \ndef a2b_uu(s):\n if not s:\n return ''\n \n length=(ord(s[0])-0x20)%64\n \n def quadruplets_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n except IndexError:\n s +=' '\n yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n return\n s=s[4:]\n \n try :\n result=[''.join(\n [chr((A -0x20)<<2 |(((B -0x20)>>4)&0x3)),\n chr(((B -0x20)&0xf)<<4 |(((C -0x20)>>2)&0xf)),\n chr(((C -0x20)&0x3)<<6 |((D -0x20)&0x3f))\n ])for A,B,C,D in quadruplets_gen(s[1:].rstrip())]\n except ValueError:\n raise Error('Illegal char')\n result=''.join(result)\n trailingdata=result[length:]\n if trailingdata.strip('\\x00'):\n raise Error('Trailing garbage')\n result=result[:length]\n if len(result)45:\n raise Error('At most 45 bytes at once')\n \n def triples_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2])\n except IndexError:\n s +='\\0\\0'\n yield ord(s[0]),ord(s[1]),ord(s[2])\n return\n s=s[3:]\n \n result=[''.join(\n [chr(0x20+((A >>2)&0x3F)),\n chr(0x20+(((A <<4)|((B >>4)&0xF))&0x3F)),\n chr(0x20+(((B <<2)|((C >>6)&0x3))&0x3F)),\n chr(0x20+((C)&0x3F))])\n for A,B,C in triples_gen(s)]\n return chr(ord(' ')+(length&0o77))+''.join(result)+'\\n'\n \n \ntable_a2b_base64={\n'A':0,\n'B':1,\n'C':2,\n'D':3,\n'E':4,\n'F':5,\n'G':6,\n'H':7,\n'I':8,\n'J':9,\n'K':10,\n'L':11,\n'M':12,\n'N':13,\n'O':14,\n'P':15,\n'Q':16,\n'R':17,\n'S':18,\n'T':19,\n'U':20,\n'V':21,\n'W':22,\n'X':23,\n'Y':24,\n'Z':25,\n'a':26,\n'b':27,\n'c':28,\n'd':29,\n'e':30,\n'f':31,\n'g':32,\n'h':33,\n'i':34,\n'j':35,\n'k':36,\n'l':37,\n'm':38,\n'n':39,\n'o':40,\n'p':41,\n'q':42,\n'r':43,\n's':44,\n't':45,\n'u':46,\n'v':47,\n'w':48,\n'x':49,\n'y':50,\n'z':51,\n'0':52,\n'1':53,\n'2':54,\n'3':55,\n'4':56,\n'5':57,\n'6':58,\n'7':59,\n'8':60,\n'9':61,\n'+':62,\n'/':63,\n'=':0,\n}\n\n\ndef a2b_base64(s):\n if not isinstance(s,(str,bytes,bytearray)):\n raise TypeError(\"expected string, bytes or a bytearray, got %r\"%(s,))\n s=s.rstrip()\n \n \n \n def next_valid_char(s,pos):\n for i in range(pos+1,len(s)):\n c=s[i]\n if c <0x7f:\n try :\n table_a2b_base64[chr(c)]\n return chr(c)\n except KeyError:\n pass\n return None\n \n quad_pos=0\n leftbits=0\n leftchar=0\n res=[]\n for i,c in enumerate(s):\n if isinstance(c,int):\n c=chr(c)\n if c >'\\x7f'or c =='\\n'or c =='\\r'or c ==' ':\n continue\n if c =='=':\n if quad_pos <2 or (quad_pos ==2 and next_valid_char(s,i)!='='):\n continue\n else :\n leftbits=0\n break\n try :\n next_c=table_a2b_base64[c]\n except KeyError:\n continue\n quad_pos=(quad_pos+1)&0x03\n leftchar=(leftchar <<6)|next_c\n leftbits +=6\n if leftbits >=8:\n leftbits -=8\n res.append((leftchar >>leftbits&0xff))\n leftchar &=((1 <>2)&0x3F],\n table_b2a_base64[((A <<4)|((B >>4)&0xF))&0x3F],\n table_b2a_base64[((B <<2)|((C >>6)&0x3))&0x3F],\n table_b2a_base64[(C)&0x3F]])\n for A,B,C in a]\n \n final=s[length -final_length:]\n if final_length ==0:\n snippet=''\n elif final_length ==1:\n a=final[0]\n snippet=table_b2a_base64[(a >>2)&0x3F]+\\\n table_b2a_base64[(a <<4)&0x3F]+'=='\n else :\n a=final[0]\n b=final[1]\n snippet=table_b2a_base64[(a >>2)&0x3F]+\\\n table_b2a_base64[((a <<4)|(b >>4)&0xF)&0x3F]+\\\n table_b2a_base64[(b <<2)&0x3F]+'='\n return bytes(''.join(result)+snippet+'\\n',__BRYTHON__.charset)\n \ndef a2b_qp(s,header=False ):\n inp=0\n odata=[]\n while inp =len(s):\n break\n \n if (s[inp]=='\\n')or (s[inp]=='\\r'):\n if s[inp]!='\\n':\n while inp 0 and data[lf -1]=='\\r'\n \n inp=0\n linelen=0\n odata=[]\n while inp '~'or\n c =='='or\n (header and c =='_')or\n (c =='.'and linelen ==0 and (inp+1 ==len(data)or\n data[inp+1]=='\\n'or\n data[inp+1]=='\\r'))or\n (not istext and (c =='\\r'or c =='\\n'))or\n ((c =='\\t'or c ==' ')and (inp+1 ==len(data)))or\n (c <=' 'and c !='\\r'and c !='\\n'and\n (quotetabs or (not quotetabs and (c !='\\t'and c !=' '))))):\n linelen +=3\n if linelen >=MAXLINESIZE:\n odata.append('=')\n if crlf:odata.append('\\r')\n odata.append('\\n')\n linelen=3\n odata.append('='+two_hex_digits(ord(c)))\n inp +=1\n else :\n if (istext and\n (c =='\\n'or (inp+1 0 and\n (odata[-1]==' 'or odata[-1]=='\\t')):\n ch=ord(odata[-1])\n odata[-1]='='\n odata.append(two_hex_digits(ch))\n \n if crlf:odata.append('\\r')\n odata.append('\\n')\n if c =='\\r':\n inp +=2\n else :\n inp +=1\n else :\n if (inp+1 =MAXLINESIZE):\n odata.append('=')\n if crlf:odata.append('\\r')\n odata.append('\\n')\n linelen=0\n \n linelen +=1\n if header and c ==' ':\n c='_'\n odata.append(c)\n inp +=1\n return ''.join(odata)\n \nhex_numbers='0123456789ABCDEF'\ndef hex(n):\n if n ==0:\n return '0'\n \n if n <0:\n n=-n\n sign='-'\n else :\n sign=''\n arr=[]\n \n def hex_gen(n):\n ''\n while n:\n yield n %0x10\n n=n /0x10\n \n for nibble in hex_gen(n):\n arr=[hex_numbers[nibble]]+arr\n return sign+''.join(arr)\n \ndef two_hex_digits(n):\n return hex_numbers[n /0x10]+hex_numbers[n %0x10]\n \n \ndef strhex_to_int(s):\n i=0\n for c in s:\n i=i *0x10+hex_numbers.index(c)\n return i\n \nhqx_encoding='!\"#$%&\\'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr'\n\nDONE=0x7f\nSKIP=0x7e\nFAIL=0x7d\n\ntable_a2b_hqx=[\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,SKIP,FAIL,FAIL,SKIP,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,0x00,0x01,0x02,0x03,0x04,0x05,0x06,\n\n0x07,0x08,0x09,0x0A,0x0B,0x0C,FAIL,FAIL,\n\n0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,FAIL,\n\n0x14,0x15,DONE,FAIL,FAIL,FAIL,FAIL,FAIL,\n\n0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,\n\n0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,FAIL,\n\n0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,FAIL,\n\n0x2C,0x2D,0x2E,0x2F,FAIL,FAIL,FAIL,FAIL,\n\n0x30,0x31,0x32,0x33,0x34,0x35,0x36,FAIL,\n\n0x37,0x38,0x39,0x3A,0x3B,0x3C,FAIL,FAIL,\n\n0x3D,0x3E,0x3F,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n]\n\ndef a2b_hqx(s):\n result=[]\n \n def quadruples_gen(s):\n t=[]\n for c in s:\n res=table_a2b_hqx[ord(c)]\n if res ==SKIP:\n continue\n elif res ==FAIL:\n raise Error('Illegal character')\n elif res ==DONE:\n yield t\n raise Done\n else :\n t.append(res)\n if len(t)==4:\n yield t\n t=[]\n yield t\n \n done=0\n try :\n for snippet in quadruples_gen(s):\n length=len(snippet)\n if length ==4:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n result.append(chr(((snippet[2]&0x03)<<6)|(snippet[3])))\n elif length ==3:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n elif length ==2:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n except Done:\n done=1\n except Error:\n raise\n return (''.join(result),done)\n \n \n \ndef b2a_hqx(s):\n result=[]\n \n def triples_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2])\n except IndexError:\n yield tuple([ord(c)for c in s])\n s=s[3:]\n \n for snippet in triples_gen(s):\n length=len(snippet)\n if length ==3:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n result.append(hqx_encoding[\n (snippet[1]&0x0f)<<2 |((snippet[2]&0xc0)>>6)])\n result.append(hqx_encoding[snippet[2]&0x3f])\n elif length ==2:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n result.append(hqx_encoding[\n (snippet[1]&0x0f)<<2])\n elif length ==1:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)])\n return ''.join(result)\n \ncrctab_hqx=[\n0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,\n0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,\n0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,\n0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,\n0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,\n0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,\n0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,\n0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,\n0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,\n0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,\n0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,\n0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,\n0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,\n0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,\n0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,\n0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,\n0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,\n0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,\n0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,\n0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,\n0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,\n0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,\n0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,\n0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,\n0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,\n0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,\n0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,\n0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,\n0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,\n0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,\n0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,\n0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0,\n]\n\ndef crc_hqx(s,crc):\n for c in s:\n crc=((crc <<8)&0xff00)^crctab_hqx[((crc >>8)&0xff)^ord(c)]\n \n return crc\n \ndef rlecode_hqx(s):\n ''\n\n\n\n \n if not s:\n return ''\n result=[]\n prev=s[0]\n count=1\n \n \n \n \n if s[-1]=='!':\n s=s[1:]+'?'\n else :\n s=s[1:]+'!'\n \n for c in s:\n if c ==prev and count <255:\n count +=1\n else :\n if count ==1:\n if prev !='\\x90':\n result.append(prev)\n else :\n result.extend(['\\x90','\\x00'])\n elif count <4:\n if prev !='\\x90':\n result.extend([prev]*count)\n else :\n result.extend(['\\x90','\\x00']*count)\n else :\n if prev !='\\x90':\n result.extend([prev,'\\x90',chr(count)])\n else :\n result.extend(['\\x90','\\x00','\\x90',chr(count)])\n count=1\n prev=c\n \n return ''.join(result)\n \ndef rledecode_hqx(s):\n s=s.split('\\x90')\n result=[s[0]]\n prev=s[0]\n for snippet in s[1:]:\n count=ord(snippet[0])\n if count >0:\n result.append(prev[-1]*(count -1))\n prev=snippet\n else :\n result.append('\\x90')\n prev='\\x90'\n result.append(snippet[1:])\n \n return ''.join(result)\n \ncrc_32_tab=[\n0x00000000,0x77073096,0xee0e612c,0x990951ba,0x076dc419,\n0x706af48f,0xe963a535,0x9e6495a3,0x0edb8832,0x79dcb8a4,\n0xe0d5e91e,0x97d2d988,0x09b64c2b,0x7eb17cbd,0xe7b82d07,\n0x90bf1d91,0x1db71064,0x6ab020f2,0xf3b97148,0x84be41de,\n0x1adad47d,0x6ddde4eb,0xf4d4b551,0x83d385c7,0x136c9856,\n0x646ba8c0,0xfd62f97a,0x8a65c9ec,0x14015c4f,0x63066cd9,\n0xfa0f3d63,0x8d080df5,0x3b6e20c8,0x4c69105e,0xd56041e4,\n0xa2677172,0x3c03e4d1,0x4b04d447,0xd20d85fd,0xa50ab56b,\n0x35b5a8fa,0x42b2986c,0xdbbbc9d6,0xacbcf940,0x32d86ce3,\n0x45df5c75,0xdcd60dcf,0xabd13d59,0x26d930ac,0x51de003a,\n0xc8d75180,0xbfd06116,0x21b4f4b5,0x56b3c423,0xcfba9599,\n0xb8bda50f,0x2802b89e,0x5f058808,0xc60cd9b2,0xb10be924,\n0x2f6f7c87,0x58684c11,0xc1611dab,0xb6662d3d,0x76dc4190,\n0x01db7106,0x98d220bc,0xefd5102a,0x71b18589,0x06b6b51f,\n0x9fbfe4a5,0xe8b8d433,0x7807c9a2,0x0f00f934,0x9609a88e,\n0xe10e9818,0x7f6a0dbb,0x086d3d2d,0x91646c97,0xe6635c01,\n0x6b6b51f4,0x1c6c6162,0x856530d8,0xf262004e,0x6c0695ed,\n0x1b01a57b,0x8208f4c1,0xf50fc457,0x65b0d9c6,0x12b7e950,\n0x8bbeb8ea,0xfcb9887c,0x62dd1ddf,0x15da2d49,0x8cd37cf3,\n0xfbd44c65,0x4db26158,0x3ab551ce,0xa3bc0074,0xd4bb30e2,\n0x4adfa541,0x3dd895d7,0xa4d1c46d,0xd3d6f4fb,0x4369e96a,\n0x346ed9fc,0xad678846,0xda60b8d0,0x44042d73,0x33031de5,\n0xaa0a4c5f,0xdd0d7cc9,0x5005713c,0x270241aa,0xbe0b1010,\n0xc90c2086,0x5768b525,0x206f85b3,0xb966d409,0xce61e49f,\n0x5edef90e,0x29d9c998,0xb0d09822,0xc7d7a8b4,0x59b33d17,\n0x2eb40d81,0xb7bd5c3b,0xc0ba6cad,0xedb88320,0x9abfb3b6,\n0x03b6e20c,0x74b1d29a,0xead54739,0x9dd277af,0x04db2615,\n0x73dc1683,0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,\n0xe40ecf0b,0x9309ff9d,0x0a00ae27,0x7d079eb1,0xf00f9344,\n0x8708a3d2,0x1e01f268,0x6906c2fe,0xf762575d,0x806567cb,\n0x196c3671,0x6e6b06e7,0xfed41b76,0x89d32be0,0x10da7a5a,\n0x67dd4acc,0xf9b9df6f,0x8ebeeff9,0x17b7be43,0x60b08ed5,\n0xd6d6a3e8,0xa1d1937e,0x38d8c2c4,0x4fdff252,0xd1bb67f1,\n0xa6bc5767,0x3fb506dd,0x48b2364b,0xd80d2bda,0xaf0a1b4c,\n0x36034af6,0x41047a60,0xdf60efc3,0xa867df55,0x316e8eef,\n0x4669be79,0xcb61b38c,0xbc66831a,0x256fd2a0,0x5268e236,\n0xcc0c7795,0xbb0b4703,0x220216b9,0x5505262f,0xc5ba3bbe,\n0xb2bd0b28,0x2bb45a92,0x5cb36a04,0xc2d7ffa7,0xb5d0cf31,\n0x2cd99e8b,0x5bdeae1d,0x9b64c2b0,0xec63f226,0x756aa39c,\n0x026d930a,0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,\n0x95bf4a82,0xe2b87a14,0x7bb12bae,0x0cb61b38,0x92d28e9b,\n0xe5d5be0d,0x7cdcefb7,0x0bdbdf21,0x86d3d2d4,0xf1d4e242,\n0x68ddb3f8,0x1fda836e,0x81be16cd,0xf6b9265b,0x6fb077e1,\n0x18b74777,0x88085ae6,0xff0f6a70,0x66063bca,0x11010b5c,\n0x8f659eff,0xf862ae69,0x616bffd3,0x166ccf45,0xa00ae278,\n0xd70dd2ee,0x4e048354,0x3903b3c2,0xa7672661,0xd06016f7,\n0x4969474d,0x3e6e77db,0xaed16a4a,0xd9d65adc,0x40df0b66,\n0x37d83bf0,0xa9bcae53,0xdebb9ec5,0x47b2cf7f,0x30b5ffe9,\n0xbdbdf21c,0xcabac28a,0x53b39330,0x24b4a3a6,0xbad03605,\n0xcdd70693,0x54de5729,0x23d967bf,0xb3667a2e,0xc4614ab8,\n0x5d681b02,0x2a6f2b94,0xb40bbe37,0xc30c8ea1,0x5a05df1b,\n0x2d02ef8d\n]\n\ndef crc32(s,crc=0):\n result=0\n crc=~int(crc)&0xffffffff\n \n for c in s:\n crc=crc_32_tab[(crc ^int(ord(c)))&0xff]^(crc >>8)\n \n \n \n result=crc ^0xffffffff\n \n if result >2 **31:\n result=((result+2 **31)%2 **32)-2 **31\n \n return result\n \ndef b2a_hex(s):\n if isinstance(s,bytes)or isinstance(s,bytearray):\n conv=lambda x:x\n unconv=lambda x:x\n else :\n conv=lambda x:ord(x)\n unconv=lambda x:chr(x)\n result=[]\n for char in s:\n c=(conv(char)>>4)&0xf\n if c >9:\n c=c+ord('a')-10\n else :\n c=c+ord('0')\n result.append(unconv(c))\n c=conv(char)&0xf\n if c >9:\n c=c+ord('a')-10\n else :\n c=c+ord('0')\n result.append(unconv(c))\n if isinstance(s,bytes):\n return bytes(result,encoding='ascii')\n if isinstance(s,bytearray):\n return bytearray(result,encoding='ascii')\n return ''.join(result)\n \nhexlify=b2a_hex\n\ntable_hex=[\n-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1,\n-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1\n]\n\n\ndef a2b_hex(t):\n result=[]\n \n def pairs_gen(s):\n if isinstance(s,bytes)or isinstance(s,bytearray):\n conv=lambda x:x\n else :\n conv=lambda x:ord(x)\n while s:\n try :\n yield table_hex[conv(s[0])],table_hex[conv(s[1])]\n except IndexError:\n if len(s):\n raise TypeError('Odd-length string')\n return\n s=s[2:]\n \n for a,b in pairs_gen(t):\n if a <0 or b <0:\n raise TypeError('Non-hexadecimal digit found')\n result.append(chr((a <<4)+b))\n return bytes(''.join(result),__BRYTHON__.charset)\n \n \nunhexlify=a2b_hex\n",[]],bisect:[".py","''\n\ndef insort_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n \n \n if lo <0:\n raise ValueError('lo must be non-negative')\n if hi is None :\n hi=len(a)\n while lo =9:\n names=day_name\n else :\n names=day_abbr\n return names[day][:width].center(width)\n \n def formatweekheader(self,width):\n \'\'\n\n \n return \' \'.join(self.formatweekday(i,width)for i in self.iterweekdays())\n \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n \'\'\n\n \n s=month_name[themonth]\n if withyear:\n s="%s %r"%(s,theyear)\n return s.center(width)\n \n def prmonth(self,theyear,themonth,w=0,l=0):\n \'\'\n\n \n print(self.formatmonth(theyear,themonth,w,l),end=\' \')\n \n def formatmonth(self,theyear,themonth,w=0,l=0):\n \'\'\n\n \n w=max(2,w)\n l=max(1,l)\n s=self.formatmonthname(theyear,themonth,7 *(w+1)-1)\n s=s.rstrip()\n s +=\'\\n\'*l\n s +=self.formatweekheader(w).rstrip()\n s +=\'\\n\'*l\n for week in self.monthdays2calendar(theyear,themonth):\n s +=self.formatweek(week,w).rstrip()\n s +=\'\\n\'*l\n return s\n \n def formatyear(self,theyear,w=2,l=1,c=6,m=3):\n \'\'\n\n \n w=max(2,w)\n l=max(1,l)\n c=max(2,c)\n colwidth=(w+1)*7 -1\n v=[]\n a=v.append\n a(repr(theyear).center(colwidth *m+c *(m -1)).rstrip())\n a(\'\\n\'*l)\n header=self.formatweekheader(w)\n for (i,row)in enumerate(self.yeardays2calendar(theyear,m)):\n \n months=range(m *i+1,min(m *(i+1)+1,13))\n a(\'\\n\'*l)\n names=(self.formatmonthname(theyear,k,colwidth,False )\n for k in months)\n a(formatstring(names,colwidth,c).rstrip())\n a(\'\\n\'*l)\n headers=(header for k in months)\n a(formatstring(headers,colwidth,c).rstrip())\n a(\'\\n\'*l)\n \n height=max(len(cal)for cal in row)\n for j in range(height):\n weeks=[]\n for cal in row:\n if j >=len(cal):\n weeks.append(\'\')\n else :\n weeks.append(self.formatweek(cal[j],w))\n a(formatstring(weeks,colwidth,c).rstrip())\n a(\'\\n\'*l)\n return \'\'.join(v)\n \n def pryear(self,theyear,w=0,l=0,c=6,m=3):\n \'\'\n print(self.formatyear(theyear,w,l,c,m))\n \n \nclass HTMLCalendar(Calendar):\n \'\'\n\n \n \n \n cssclasses=["mon","tue","wed","thu","fri","sat","sun"]\n \n def formatday(self,day,weekday):\n \'\'\n\n \n if day ==0:\n return \' \'\n else :\n return \'%d\'%(self.cssclasses[weekday],day)\n \n def formatweek(self,theweek):\n \'\'\n\n \n s=\'\'.join(self.formatday(d,wd)for (d,wd)in theweek)\n return \'%s\'%s\n \n def formatweekday(self,day):\n \'\'\n\n \n return \'%s\'%(self.cssclasses[day],day_abbr[day])\n \n def formatweekheader(self):\n \'\'\n\n \n s=\'\'.join(self.formatweekday(i)for i in self.iterweekdays())\n return \'%s\'%s\n \n def formatmonthname(self,theyear,themonth,withyear=True ):\n \'\'\n\n \n if withyear:\n s=\'%s %s\'%(month_name[themonth],theyear)\n else :\n s=\'%s\'%month_name[themonth]\n return \'%s\'%s\n \n def formatmonth(self,theyear,themonth,withyear=True ):\n \'\'\n\n \n v=[]\n a=v.append\n a(\'\')\n a(\'\\n\')\n a(self.formatmonthname(theyear,themonth,withyear=withyear))\n a(\'\\n\')\n a(self.formatweekheader())\n a(\'\\n\')\n for week in self.monthdays2calendar(theyear,themonth):\n a(self.formatweek(week))\n a(\'\\n\')\n a(\'
\')\n a(\'\\n\')\n return \'\'.join(v)\n \n def formatyear(self,theyear,width=3):\n \'\'\n\n \n v=[]\n a=v.append\n width=max(width,1)\n a(\'\')\n a(\'\\n\')\n a(\'\'%(width,theyear))\n for i in range(January,January+12,width):\n \n months=range(i,min(i+width,13))\n a(\'\')\n for m in months:\n a(\'\')\n a(\'\')\n a(\'
%s
\')\n a(self.formatmonth(theyear,m,withyear=False ))\n a(\'
\')\n return \'\'.join(v)\n \n def formatyearpage(self,theyear,width=3,css=\'calendar.css\',encoding=None ):\n \'\'\n\n \n if encoding is None :\n encoding=sys.getdefaultencoding()\n v=[]\n a=v.append\n a(\'\\n\'%encoding)\n a(\'\\n\')\n a(\'\\n\')\n a(\'\\n\')\n a(\'\\n\'%encoding)\n if css is not None :\n a(\'\\n\'%css)\n a(\'Calendar for %d\\n\'%theyear)\n a(\'\\n\')\n a(\'\\n\')\n a(self.formatyear(theyear,width))\n a(\'\\n\')\n a(\'\\n\')\n return \'\'.join(v).encode(encoding,"xmlcharrefreplace")\n \n \nclass different_locale:\n def __init__(self,locale):\n self.locale=locale\n \n def __enter__(self):\n self.oldlocale=_locale.getlocale(_locale.LC_TIME)\n _locale.setlocale(_locale.LC_TIME,self.locale)\n \n def __exit__(self,*args):\n _locale.setlocale(_locale.LC_TIME,self.oldlocale)\n \n \nclass LocaleTextCalendar(TextCalendar):\n \'\'\n\n\n\n\n \n \n def __init__(self,firstweekday=0,locale=None ):\n TextCalendar.__init__(self,firstweekday)\n if locale is None :\n locale=_locale.getdefaultlocale()\n self.locale=locale\n \n def formatweekday(self,day,width):\n with different_locale(self.locale):\n if width >=9:\n names=day_name\n else :\n names=day_abbr\n name=names[day]\n return name[:width].center(width)\n \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n with different_locale(self.locale):\n s=month_name[themonth]\n if withyear:\n s="%s %r"%(s,theyear)\n return s.center(width)\n \n \nclass LocaleHTMLCalendar(HTMLCalendar):\n \'\'\n\n\n\n\n \n def __init__(self,firstweekday=0,locale=None ):\n HTMLCalendar.__init__(self,firstweekday)\n if locale is None :\n locale=_locale.getdefaultlocale()\n self.locale=locale\n \n def formatweekday(self,day):\n with different_locale(self.locale):\n s=day_abbr[day]\n return \'%s\'%(self.cssclasses[day],s)\n \n def formatmonthname(self,theyear,themonth,withyear=True ):\n with different_locale(self.locale):\n s=month_name[themonth]\n if withyear:\n s=\'%s %s\'%(s,theyear)\n return \'%s\'%s\n \n \n \nc=TextCalendar()\n\nfirstweekday=c.getfirstweekday\n\ndef setfirstweekday(firstweekday):\n if not MONDAY <=firstweekday <=SUNDAY:\n raise IllegalWeekdayError(firstweekday)\n c.firstweekday=firstweekday\n \nmonthcalendar=c.monthdayscalendar\nprweek=c.prweek\nweek=c.formatweek\nweekheader=c.formatweekheader\nprmonth=c.prmonth\nmonth=c.formatmonth\ncalendar=c.formatyear\nprcal=c.pryear\n\n\n\n_colwidth=7 *3 -1\n_spacing=6\n\n\ndef format(cols,colwidth=_colwidth,spacing=_spacing):\n \'\'\n print(formatstring(cols,colwidth,spacing))\n \n \ndef formatstring(cols,colwidth=_colwidth,spacing=_spacing):\n \'\'\n spacing *=\' \'\n return spacing.join(c.center(colwidth)for c in cols)\n \n \nEPOCH=1970\n_EPOCH_ORD=datetime.date(EPOCH,1,1).toordinal()\n\n\ndef timegm(tuple):\n \'\'\n year,month,day,hour,minute,second=tuple[:6]\n days=datetime.date(year,month,1).toordinal()-_EPOCH_ORD+day -1\n hours=days *24+hour\n minutes=hours *60+minute\n seconds=minutes *60+second\n return seconds\n \n \ndef main(args):\n import optparse\n parser=optparse.OptionParser(usage="usage: %prog [options] [year [month]]")\n parser.add_option(\n "-w","--width",\n dest="width",type="int",default=2,\n help="width of date column (default 2, text only)"\n )\n parser.add_option(\n "-l","--lines",\n dest="lines",type="int",default=1,\n help="number of lines for each week (default 1, text only)"\n )\n parser.add_option(\n "-s","--spacing",\n dest="spacing",type="int",default=6,\n help="spacing between months (default 6, text only)"\n )\n parser.add_option(\n "-m","--months",\n dest="months",type="int",default=3,\n help="months per row (default 3, text only)"\n )\n parser.add_option(\n "-c","--css",\n dest="css",default="calendar.css",\n help="CSS to use for page (html only)"\n )\n parser.add_option(\n "-L","--locale",\n dest="locale",default=None ,\n help="locale to be used from month and weekday names"\n )\n parser.add_option(\n "-e","--encoding",\n dest="encoding",default=None ,\n help="Encoding to use for output."\n )\n parser.add_option(\n "-t","--type",\n dest="type",default="text",\n choices=("text","html"),\n help="output type (text or html)"\n )\n \n (options,args)=parser.parse_args(args)\n \n if options.locale and not options.encoding:\n parser.error("if --locale is specified --encoding is required")\n sys.exit(1)\n \n locale=options.locale,options.encoding\n \n if options.type =="html":\n if options.locale:\n cal=LocaleHTMLCalendar(locale=locale)\n else :\n cal=HTMLCalendar()\n encoding=options.encoding\n if encoding is None :\n encoding=sys.getdefaultencoding()\n optdict=dict(encoding=encoding,css=options.css)\n write=sys.stdout.buffer.write\n if len(args)==1:\n write(cal.formatyearpage(datetime.date.today().year,**optdict))\n elif len(args)==2:\n write(cal.formatyearpage(int(args[1]),**optdict))\n else :\n parser.error("incorrect number of arguments")\n sys.exit(1)\n else :\n if options.locale:\n cal=LocaleTextCalendar(locale=locale)\n else :\n cal=TextCalendar()\n optdict=dict(w=options.width,l=options.lines)\n if len(args)!=3:\n optdict["c"]=options.spacing\n optdict["m"]=options.months\n if len(args)==1:\n result=cal.formatyear(datetime.date.today().year,**optdict)\n elif len(args)==2:\n result=cal.formatyear(int(args[1]),**optdict)\n elif len(args)==3:\n result=cal.formatmonth(int(args[1]),int(args[2]),**optdict)\n else :\n parser.error("incorrect number of arguments")\n sys.exit(1)\n write=sys.stdout.write\n if options.encoding:\n result=result.encode(options.encoding)\n write=sys.stdout.buffer.write\n write(result)\n \n \nif __name__ =="__main__":\n main(sys.argv)\n',["datetime","locale","optparse","sys"]],cmath:[".py","\n\n\n\n\n\n\n\n\n\nimport math\nimport sys\n\ndef takes_complex(func):\n def decorated(x):\n if isinstance(x,complex):\n return func(x)\n elif type(x)in [int,float]:\n return func(complex(x))\n elif hasattr(x,'__complex__'):\n c=x.__complex__()\n if not isinstance(c,complex):\n raise TypeError(\"A complex number is required\")\n else :\n return func(c)\n elif hasattr(x,'__float__'):\n try :\n c=complex(x.__float__(),0)\n except :\n raise TypeError(\"A complex number is required\")\n return func(c)\n else :\n raise TypeError(\"A complex number is required\")\n if hasattr(func,'__doc__'):\n decorated.__doc__=func.__doc__\n if hasattr(func,'__name__'):\n decorated.__name__=func.__name__\n return decorated\n \n@takes_complex\ndef isfinite(x):\n return math.isfinite(x.imag)and math.isfinite(x.real)\n \n@takes_complex\ndef phase(x):\n ''\n return math.atan2(x.imag,x.real)\n \n@takes_complex\ndef polar(x):\n ''\n\n\n\n\n \n phi=math.atan2(x.imag,x.real)\n r=math.sqrt(x.real **2+x.imag **2)\n return r,phi\n \ndef rect(r,phi):\n ''\n\n \n if math.isinf(r)or math.isinf(phi):\n \n \n if math.isinf(phi)and r !=.0 and not math.isnan(r):\n raise ValueError(\"math domain error\")\n \n \n \n \n if -_INF 0:\n _real=math.copysign(_INF,math.cos(phi))\n _imag=math.copysign(_INF,math.sin(phi))\n else :\n _real=-math.copysign(_INF,cos(phi));\n _imag=-math.copysign(_INF,sin(phi));\n return complex(_real,_imag)\n return _SPECIAL_VALUE(complex(r,phi),_rect_special_values)\n \n else :\n if phi ==.0:\n \n \n \n return complex(r,phi *r)\n else :\n return complex(r *math.cos(phi),r *math.sin(phi))\n \n@takes_complex\ndef sqrt(x):\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n s,d,ax,ay=.0,.0,math.fabs(x.real),math.fabs(x.imag)\n \n ret=_SPECIAL_VALUE(x,_sqrt_special_values)\n if ret is not None :\n return ret\n \n if x.real ==.0 and x.imag ==.0:\n _real=.0\n _imag=x.imag\n return complex(_real,_imag)\n \n if ax 0. or ay >0.):\n \n ax=math.ldexp(ax,_CM_SCALE_UP);\n s=math.ldexp(math.sqrt(ax+math.hypot(ax,math.ldexp(ay,_CM_SCALE_UP))),_CM_SCALE_DOWN)\n else :\n ax /=8.0 ;\n s=2.0 *math.sqrt(ax+math.hypot(ax,ay /8.0));\n \n d=ay /(2.0 *s)\n \n if x.real >=.0:\n _real=s ;\n _imag=math.copysign(d,x.imag)\n else :\n _real=d ;\n _imag=math.copysign(s,x.imag)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef acos(x):\n ''\n\n\n\n\n \n \n ret=_SPECIAL_VALUE(x,_acos_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n \n \n _real=math.atan2(math.fabs(x.imag),x.real)\n \n \n \n if x.real <0:\n _imag=-math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,x.imag);\n else :\n _imag=math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,-x.imag);\n else :\n s1=complex(float(1 -x.real),-x.imag)\n s1=sqrt(s1)\n s2=complex(1.0+x.real,x.imag)\n s2=sqrt(s2)\n _real=2.0 *math.atan2(s1.real,s2.real);\n _imag=math.asinh(s2.real *s1.imag -s2.imag *s1.real)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef acosh(x):\n ''\n\n\n\n \n ret=_SPECIAL_VALUE(x,_acosh_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n \n _real=math.log(math.hypot(x.real /2.0,x.imag /2.0))+_M_LN2 *2.0\n _imag=math.atan2(x.imag,x.real);\n else :\n s1=sqrt(complex(x.real -1.0,x.imag))\n s2=sqrt(complex(x.real+1.0,x.imag))\n _real=math.asinh(s1.real *s2.real+s1.imag *s2.imag)\n _imag=2. *math.atan2(s1.imag,s2.real)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef asin(x):\n ''\n\n\n\n \n \n s=complex(-x.imag,x.real)\n s=asinh(s)\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef asinh(x):\n ''\n\n\n\n\n \n ret=_SPECIAL_VALUE(x,_asinh_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n if x.imag >=.0:\n _real=math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,x.real)\n else :\n _real=-math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,-x.real)\n _imag=math.atan2(x.imag,math.fabs(x.real))\n else :\n s1=sqrt(complex(1.0+x.imag,-x.real))\n s2=sqrt(complex(1.0 -x.imag,x.real))\n _real=math.asinh(s1.real *s2.imag -s2.real *s1.imag)\n _imag=math.atan2(x.imag,s1.real *s2.real -s1.imag *s2.imag)\n return complex(_real,_imag)\n \n@takes_complex\ndef atan(x):\n ''\n\n\n\n\n \n s=atanh(complex(-x.imag,x.real))\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef atanh(x):\n ''\n\n\n\n\n \n \n ret=_SPECIAL_VALUE(x,_atanh_special_values)\n if ret is not None :\n return ret\n \n \n if x.real <.0:\n return -(atanh(-x))\n \n ay=math.fabs(x.imag)\n \n if x.real >_CM_SQRT_LARGE_DOUBLE or ay >_CM_SQRT_LARGE_DOUBLE:\n \n \n \n \n \n h=math.hypot(x.real /2.,x.imag /2.)\n _real=x.real /4. /h /h\n \n \n \n \n \n \n _imag=-math.copysign(math.pi /2.,-x.imag)\n \n elif x.real ==1.0 and ay <_CM_SQRT_DBL_MIN:\n \n \n if (ay ==.0):\n raise ValueError(\"math domain error\")\n else :\n _real=-math.log(math.sqrt(ay)/math.sqrt(math.hypot(ay,2.)))\n _imag=math.copysign(math.atan2(2.0,-ay)/2,x.imag)\n \n else :\n \n _real=math.log1p(4. *x.real /((1 -x.real)*(1 -x.real)+ay *ay))/4.\n _imag=-math.atan2(-2. *x.imag,(1 -x.real)*(1+x.real)-ay *ay)/2.\n errno=0\n \n return complex(_real,_imag)\n \n@takes_complex\ndef cos(x):\n ''\n return cosh(complex(-x.imag,x.real))\n \n@takes_complex\ndef cosh(x):\n ''\n \n \n if isinf(x):\n if -_INF 0:\n _real=math.copysign(_INF,math.cos(x.imag))\n _imag=math.copysign(_INF,math.sin(x.imag))\n else :\n _real=math.copysign(_INF,math.cos(x.imag))\n _imag=-math.copysign(_INF,math.sin(x.imag))\n return complex(_real,_imag)\n else :\n \n if x.imag !=.0 and not math.isnan(x.real):\n raise ValueError(\"math domain error\")\n return _SPECIAL_VALUE(x,_cosh_special_values)\n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n \n \n x_minus_one=x.real -math.copysign(1.0,x.real)\n _real=cos(x.imag)*math.cosh(x_minus_one)*math.e\n _imag=sin(x.imag)*math.sinh(x_minus_one)*math.e\n else :\n _real=math.cos(x.imag)*math.cosh(x.real)\n _imag=math.sin(x.imag)*math.sinh(x.real)\n \n ret=complex(_real,_imag)\n \n if isinf(ret):\n raise OverflowError()\n return ret\n \n@takes_complex\ndef exp(x):\n ''\n if math.isinf(x.real)or math.isinf(x.imag):\n \n if math.isinf(x.imag)and (-_INF 0):\n raise ValueError(\"math domain error\")\n \n if math.isinf(x.real)and -_INF 0:\n _real=math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n else :\n _real=math.copysign(.0,cos(x.imag))\n _imag=math.copysign(.0,sin(x.imag))\n return complex(_real,_imag)\n \n return _SPECIAL_VALUE(x,_exp_special_values)\n \n \n if x.real >_CM_LOG_LARGE_DOUBLE:\n l=math.exp(x.real -1.);\n _real=l *math.cos(x.imag)*math.e\n _imag=l *math.sin(x.imag)*math.e\n else :\n l=math.exp(x.real);\n _real=l *math.cos(x.imag)\n _imag=l *math.sin(x.imag)\n \n if math.isinf(_real)or math.isinf(_imag):\n raise OverflowError()\n \n return complex(_real,_imag)\n \n@takes_complex\ndef isinf(x):\n ''\n return math.isinf(x.real)or math.isinf(x.imag)\n \n@takes_complex\ndef isnan(x):\n ''\n return math.isnan(x.real)or math.isnan(x.imag)\n \n \n@takes_complex\ndef _to_complex(x):\n return x\n \ndef log(x,base=None ):\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n x=_to_complex(x)\n \n \n \n \n \n \n if base is not None :\n x=log(x)\n base=log(base)\n x=x /base\n \n ret=_SPECIAL_VALUE(x,_log_special_values)\n if ret is not None :\n return ret\n \n ax=math.fabs(x.real)\n ay=math.fabs(x.imag)\n \n if ax >_CM_LARGE_DOUBLE or ay >_CM_LARGE_DOUBLE:\n _real=math.log(math.hypot(ax /2.0,ay /2.0))+_M_LN2\n elif ax .0 or ay >.0:\n \n _real=math.log(math.hypot(math.ldexp(ax,sys.float_info.mant_dig),math.ldexp(ay,sys.float_info.mant_dig)))-sys.float_info.mant_dig *_M_LN2\n else :\n \n raise ValueError(\"math domain error\")\n _real=-_INF\n _imag=math.atan2(x.imag,x.real)\n else :\n h=math.hypot(ax,ay)\n if 0.71 <=h and h <=1.73:\n am=max(ax,ay)\n an=min(ax,ay)\n _real=math.log1p((am -1)*(am+1)+an *an)/2.\n else :\n _real=math.log(h)\n _imag=math.atan2(x.imag,x.real)\n return complex(_real,_imag)\n \n@takes_complex\ndef log10(x):\n ''\n\n\n\n \n ret=log(x);\n _real=ret.real /_M_LN10\n _imag=ret.imag /_M_LN10\n return complex(_real,_imag)\n \n@takes_complex\ndef sin(x):\n ''\n \n s=complex(-x.imag,x.real)\n s=sinh(s)\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef sinh(x):\n ''\n \n if math.isinf(x.real)or math.isinf(x.imag):\n \n \n if math.isinf(x.imag)and not math.isnan(x.real):\n raise ValueError(\"math domain error\")\n \n if math.isinf(x.real)and -_INF 0:\n _real=math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n else :\n _real=-math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n return complex(_real,_imag)\n \n return _SPECIAL_VALUE(x,_sinh_special_values)\n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n x_minus_one=x.real -math.copysign(1.0,x.real)\n _real=math.cos(x.imag)*math.sinh(x.imag)*math.e\n _imag=math.sin(x.imag)*math.cosh(x.imag)*math.e\n else :\n _real=math.cos(x.imag)*math.sinh(x.real)\n _imag=math.sin(x.imag)*math.cosh(x.real)\n \n if math.isinf(_real)or math.isinf(_imag):\n raise OverflowError()\n \n return complex(_real,_imag)\n \n@takes_complex\ndef tan(x):\n ''\n s=atanh(complex(-x.imag,x.real))\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef tanh(x):\n ''\n ''\n\n\n \n \n \n \n \n \n \n \n \n \n \n if isinf(x):\n if math.isinf(x.imag)and -_INF 0:\n _real=1.0\n _imag=math.copysign(.0,2.0 *math.sin(x.imag)*math.cos(x.imag))\n else :\n _real=-1.0\n _imag=math.copysign(.0,2. *math.sin(x.imag)*math.cos(x.imag))\n return complex(_real,_imag)\n return _SPECIAL_VALUE(x,_tanh_special_values)\n \n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n _real=math.copysign(1.,x.real)\n _imag=4. *math.sin(x.imag)*math.cos(x.imag)*math.exp(-2. *math.fabs(x.real))\n else :\n tx=math.tanh(x.real)\n ty=math.tan(x.imag)\n cx=1.0 /math.cosh(x.real)\n txty=tx *ty\n denom=1.+txty *txty\n _real=tx *(1.+ty *ty)/denom\n _imag=((ty /denom)*cx)*cx\n return complex(_real,_imag)\n \n \npi=math.pi\ne=math.e\n\n_CM_LARGE_DOUBLE=sys.float_info.max /4\n_CM_SQRT_LARGE_DOUBLE=math.sqrt(_CM_LARGE_DOUBLE)\n_CM_LOG_LARGE_DOUBLE=math.log(_CM_LARGE_DOUBLE)\n_CM_SQRT_DBL_MIN=math.sqrt(sys.float_info.min)\n_M_LN2=0.6931471805599453094\n_M_LN10=2.302585092994045684\n\nif sys.float_info.radix ==2:\n _CM_SCALE_UP=int((2 *(sys.float_info.mant_dig /2)+1))\nelif sys.float_info.radix ==16:\n _CM_SCALE_UP=int((4 *sys.float_info.mant_dig+1))\nelse :\n raise (\"cmath implementation expects the float base to be either 2 or 16, got \"+str(sys.float_info.radix)+\" instead.\")\n_CM_SCALE_DOWN=int((-(_CM_SCALE_UP+1)/2))\n\n_INF=float('inf')\n_NAN=float('nan')\n_PI=math.pi\n_P14=0.25 *math.pi\n_P12=0.5 *math.pi\n_P34=0.75 *math.pi\n_U=-9.5426319407711027e33\n\n\n_ST_NINF=0\n_ST_NEG=1\n_ST_NZERO=2\n_ST_PZERO=3\n_ST_POS=4\n_ST_PINF=5\n_ST_NAN=6\n\n\ndef _SPECIAL_VALUE(z,table):\n if not math.isfinite(z.real)or not math.isfinite(z.imag):\n return table[_special_type(z.real)][_special_type(z.imag)]\n else :\n return None\n \ndef _special_type(x):\n if -_INF ):\"\n misc_header=\"Miscellaneous help topics:\"\n undoc_header=\"Undocumented commands:\"\n nohelp=\"*** No help on %s\"\n use_rawinput=1\n \n def __init__(self,completekey='tab',stdin=None ,stdout=None ):\n ''\n\n\n\n\n\n\n\n\n \n if stdin is not None :\n self.stdin=stdin\n else :\n self.stdin=sys.stdin\n if stdout is not None :\n self.stdout=stdout\n else :\n self.stdout=sys.stdout\n self.cmdqueue=[]\n self.completekey=completekey\n \n def cmdloop(self,intro=None ):\n ''\n\n\n\n \n \n self.preloop()\n if self.use_rawinput and self.completekey:\n try :\n import readline\n self.old_completer=readline.get_completer()\n readline.set_completer(self.complete)\n readline.parse_and_bind(self.completekey+\": complete\")\n except ImportError:\n pass\n try :\n if intro is not None :\n self.intro=intro\n if self.intro:\n self.stdout.write(str(self.intro)+\"\\n\")\n stop=None\n while not stop:\n if self.cmdqueue:\n line=self.cmdqueue.pop(0)\n else :\n if self.use_rawinput:\n try :\n line=input(self.prompt)\n except EOFError:\n line='EOF'\n else :\n self.stdout.write(self.prompt)\n self.stdout.flush()\n line=self.stdin.readline()\n if not len(line):\n line='EOF'\n else :\n line=line.rstrip('\\r\\n')\n line=self.precmd(line)\n stop=self.onecmd(line)\n stop=self.postcmd(stop,line)\n self.postloop()\n finally :\n if self.use_rawinput and self.completekey:\n try :\n import readline\n readline.set_completer(self.old_completer)\n except ImportError:\n pass\n \n \n def precmd(self,line):\n ''\n\n\n \n return line\n \n def postcmd(self,stop,line):\n ''\n return stop\n \n def preloop(self):\n ''\n pass\n \n def postloop(self):\n ''\n\n\n \n pass\n \n def parseline(self,line):\n ''\n\n\n \n line=line.strip()\n if not line:\n return None ,None ,line\n elif line[0]=='?':\n line='help '+line[1:]\n elif line[0]=='!':\n if hasattr(self,'do_shell'):\n line='shell '+line[1:]\n else :\n return None ,None ,line\n i,n=0,len(line)\n while i 0:\n cmd,args,foo=self.parseline(line)\n if cmd =='':\n compfunc=self.completedefault\n else :\n try :\n compfunc=getattr(self,'complete_'+cmd)\n except AttributeError:\n compfunc=self.completedefault\n else :\n compfunc=self.completenames\n self.completion_matches=compfunc(text,line,begidx,endidx)\n try :\n return self.completion_matches[state]\n except IndexError:\n return None\n \n def get_names(self):\n \n \n return dir(self.__class__)\n \n def complete_help(self,*args):\n commands=set(self.completenames(*args))\n topics=set(a[5:]for a in self.get_names()\n if a.startswith('help_'+args[0]))\n return list(commands |topics)\n \n def do_help(self,arg):\n ''\n if arg:\n \n try :\n func=getattr(self,'help_'+arg)\n except AttributeError:\n try :\n doc=getattr(self,'do_'+arg).__doc__\n if doc:\n self.stdout.write(\"%s\\n\"%str(doc))\n return\n except AttributeError:\n pass\n self.stdout.write(\"%s\\n\"%str(self.nohelp %(arg,)))\n return\n func()\n else :\n names=self.get_names()\n cmds_doc=[]\n cmds_undoc=[]\n help={}\n for name in names:\n if name[:5]=='help_':\n help[name[5:]]=1\n names.sort()\n \n prevname=''\n for name in names:\n if name[:3]=='do_':\n if name ==prevname:\n continue\n prevname=name\n cmd=name[3:]\n if cmd in help:\n cmds_doc.append(cmd)\n del help[cmd]\n elif getattr(self,name).__doc__:\n cmds_doc.append(cmd)\n else :\n cmds_undoc.append(cmd)\n self.stdout.write(\"%s\\n\"%str(self.doc_leader))\n self.print_topics(self.doc_header,cmds_doc,15,80)\n self.print_topics(self.misc_header,list(help.keys()),15,80)\n self.print_topics(self.undoc_header,cmds_undoc,15,80)\n \n def print_topics(self,header,cmds,cmdlen,maxcol):\n if cmds:\n self.stdout.write(\"%s\\n\"%str(header))\n if self.ruler:\n self.stdout.write(\"%s\\n\"%str(self.ruler *len(header)))\n self.columnize(cmds,maxcol -1)\n self.stdout.write(\"\\n\")\n \n def columnize(self,list,displaywidth=80):\n ''\n\n\n\n \n if not list:\n self.stdout.write(\"\\n\")\n return\n \n nonstrings=[i for i in range(len(list))\n if not isinstance(list[i],str)]\n if nonstrings:\n raise TypeError(\"list[i] not a string for i in %s\"\n %\", \".join(map(str,nonstrings)))\n size=len(list)\n if size ==1:\n self.stdout.write('%s\\n'%str(list[0]))\n return\n \n for nrows in range(1,len(list)):\n ncols=(size+nrows -1)//nrows\n colwidths=[]\n totwidth=-2\n for col in range(ncols):\n colwidth=0\n for row in range(nrows):\n i=row+nrows *col\n if i >=size:\n break\n x=list[i]\n colwidth=max(colwidth,len(x))\n colwidths.append(colwidth)\n totwidth +=colwidth+2\n if totwidth >displaywidth:\n break\n if totwidth <=displaywidth:\n break\n else :\n nrows=len(list)\n ncols=1\n colwidths=[0]\n for row in range(nrows):\n texts=[]\n for col in range(ncols):\n i=row+nrows *col\n if i >=size:\n x=\"\"\n else :\n x=list[i]\n texts.append(x)\n while texts and not texts[-1]:\n del texts[-1]\n for col in range(len(texts)):\n texts[col]=texts[col].ljust(colwidths[col])\n self.stdout.write(\"%s\\n\"%str(\" \".join(texts)))\n",["readline","string","sys"]],code:[".py",'\'\'\n\n\n\n\n\n\nimport sys\nimport traceback\nfrom codeop import CommandCompiler,compile_command\n\n__all__=["InteractiveInterpreter","InteractiveConsole","interact",\n"compile_command"]\n\nclass InteractiveInterpreter:\n \'\'\n\n\n\n\n\n \n \n def __init__(self,locals=None ):\n \'\'\n\n\n\n\n\n\n \n if locals is None :\n locals={"__name__":"__console__","__doc__":None }\n self.locals=locals\n self.compile=CommandCompiler()\n \n def runsource(self,source,filename="",symbol="single"):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n code=self.compile(source,filename,symbol)\n except (OverflowError,SyntaxError,ValueError):\n \n self.showsyntaxerror(filename)\n return False\n \n if code is None :\n \n return True\n \n \n self.runcode(code)\n return False\n \n def runcode(self,code):\n \'\'\n\n\n\n\n\n\n\n\n\n \n try :\n exec(code,self.locals)\n except SystemExit:\n raise\n except :\n self.showtraceback()\n \n def showsyntaxerror(self,filename=None ):\n \'\'\n\n\n\n\n\n\n\n\n\n \n type,value,tb=sys.exc_info()\n sys.last_type=type\n sys.last_value=value\n sys.last_traceback=tb\n if filename and type is SyntaxError:\n \n try :\n msg,(dummy_filename,lineno,offset,line)=value.args\n except ValueError:\n \n pass\n else :\n \n value=SyntaxError(msg,(filename,lineno,offset,line))\n sys.last_value=value\n if sys.excepthook is sys.__excepthook__:\n lines=traceback.format_exception_only(type,value)\n self.write(\'\'.join(lines))\n else :\n \n \n sys.excepthook(type,value,tb)\n \n def showtraceback(self):\n \'\'\n\n\n\n\n\n \n try :\n type,value,tb=sys.exc_info()\n sys.last_type=type\n sys.last_value=value\n sys.last_traceback=tb\n tblist=traceback.extract_tb(tb)\n del tblist[:1]\n lines=traceback.format_list(tblist)\n if lines:\n lines.insert(0,"Traceback (most recent call last):\\n")\n lines.extend(traceback.format_exception_only(type,value))\n finally :\n tblist=tb=None\n if sys.excepthook is sys.__excepthook__:\n self.write(\'\'.join(lines))\n else :\n \n \n sys.excepthook(type,value,tb)\n \n def write(self,data):\n \'\'\n\n\n\n\n \n sys.stderr.write(data)\n \n \nclass InteractiveConsole(InteractiveInterpreter):\n \'\'\n\n\n\n\n \n \n def __init__(self,locals=None ,filename=""):\n \'\'\n\n\n\n\n\n\n\n \n InteractiveInterpreter.__init__(self,locals)\n self.filename=filename\n self.resetbuffer()\n \n def resetbuffer(self):\n \'\'\n self.buffer=[]\n \n def interact(self,banner=None ):\n \'\'\n\n\n\n\n\n\n\n\n \n try :\n sys.ps1\n except AttributeError:\n sys.ps1=">>> "\n try :\n sys.ps2\n except AttributeError:\n sys.ps2="... "\n cprt=\'Type "help", "copyright", "credits" or "license" for more information.\'\n if banner is None :\n self.write("Python %s on %s\\n%s\\n(%s)\\n"%\n (sys.version,sys.platform,cprt,\n self.__class__.__name__))\n elif banner:\n self.write("%s\\n"%str(banner))\n more=0\n while 1:\n try :\n if more:\n prompt=sys.ps2\n else :\n prompt=sys.ps1\n try :\n line=self.raw_input(prompt)\n except EOFError:\n self.write("\\n")\n break\n else :\n more=self.push(line)\n except KeyboardInterrupt:\n self.write("\\nKeyboardInterrupt\\n")\n self.resetbuffer()\n more=0\n \n def push(self,line):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n \n self.buffer.append(line)\n source="\\n".join(self.buffer)\n more=self.runsource(source,self.filename)\n if not more:\n self.resetbuffer()\n return more\n \n def raw_input(self,prompt=""):\n \'\'\n\n\n\n\n\n\n\n\n \n return input(prompt)\n \n \n \ndef interact(banner=None ,readfunc=None ,local=None ):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n \n console=InteractiveConsole(local)\n if readfunc is not None :\n console.raw_input=readfunc\n else :\n try :\n import readline\n except ImportError:\n pass\n console.interact(banner)\n \n \nif __name__ =="__main__":\n interact()\n',["codeop","readline","sys","traceback"]],codecs:[".py","''\n\n\n\n\n\n\n\n\nimport builtins,sys\n\n\n\ntry :\n from _codecs import *\nexcept ImportError as why:\n raise SystemError('Failed to load the builtin codecs: %s'%why)\n \n__all__=[\"register\",\"lookup\",\"open\",\"EncodedFile\",\"BOM\",\"BOM_BE\",\n\"BOM_LE\",\"BOM32_BE\",\"BOM32_LE\",\"BOM64_BE\",\"BOM64_LE\",\n\"BOM_UTF8\",\"BOM_UTF16\",\"BOM_UTF16_LE\",\"BOM_UTF16_BE\",\n\"BOM_UTF32\",\"BOM_UTF32_LE\",\"BOM_UTF32_BE\",\n\"strict_errors\",\"ignore_errors\",\"replace_errors\",\n\"xmlcharrefreplace_errors\",\n\"register_error\",\"lookup_error\"]\n\n\n\n\n\n\n\n\n\n\nBOM_UTF8=b'\\xef\\xbb\\xbf'\n\n\nBOM_LE=BOM_UTF16_LE=b'\\xff\\xfe'\n\n\nBOM_BE=BOM_UTF16_BE=b'\\xfe\\xff'\n\n\nBOM_UTF32_LE=b'\\xff\\xfe\\x00\\x00'\n\n\nBOM_UTF32_BE=b'\\x00\\x00\\xfe\\xff'\n\nif sys.byteorder =='little':\n\n\n BOM=BOM_UTF16=BOM_UTF16_LE\n \n \n BOM_UTF32=BOM_UTF32_LE\n \nelse :\n\n\n BOM=BOM_UTF16=BOM_UTF16_BE\n \n \n BOM_UTF32=BOM_UTF32_BE\n \n \nBOM32_LE=BOM_UTF16_LE\nBOM32_BE=BOM_UTF16_BE\nBOM64_LE=BOM_UTF32_LE\nBOM64_BE=BOM_UTF32_BE\n\n\n\n\nclass CodecInfo(tuple):\n\n def __new__(cls,encode,decode,streamreader=None ,streamwriter=None ,\n incrementalencoder=None ,incrementaldecoder=None ,name=None ):\n self=tuple.__new__(cls,(encode,decode,streamreader,streamwriter))\n self.name=name\n self.encode=encode\n self.decode=decode\n self.incrementalencoder=incrementalencoder\n self.incrementaldecoder=incrementaldecoder\n self.streamwriter=streamwriter\n self.streamreader=streamreader\n return self\n \n def __repr__(self):\n return \"<%s.%s object for encoding %s at 0x%x>\"%\\\n (self.__class__.__module__,self.__class__.__name__,\n self.name,id(self))\n \nclass Codec:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def encode(self,input,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \n def decode(self,input,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \nclass IncrementalEncoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n ''\n\n\n\n\n\n \n self.errors=errors\n self.buffer=\"\"\n \n def encode(self,input,final=False ):\n ''\n\n \n raise NotImplementedError\n \n def reset(self):\n ''\n\n \n \n def getstate(self):\n ''\n\n \n return 0\n \n def setstate(self,state):\n ''\n\n\n \n \nclass BufferedIncrementalEncoder(IncrementalEncoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n IncrementalEncoder.__init__(self,errors)\n \n self.buffer=\"\"\n \n def _buffer_encode(self,input,errors,final):\n \n \n raise NotImplementedError\n \n def encode(self,input,final=False ):\n \n data=self.buffer+input\n (result,consumed)=self._buffer_encode(data,self.errors,final)\n \n self.buffer=data[consumed:]\n return result\n \n def reset(self):\n IncrementalEncoder.reset(self)\n self.buffer=\"\"\n \n def getstate(self):\n return self.buffer or 0\n \n def setstate(self,state):\n self.buffer=state or \"\"\n \nclass IncrementalDecoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n ''\n\n\n\n\n\n \n self.errors=errors\n \n def decode(self,input,final=False ):\n ''\n\n \n raise NotImplementedError\n \n def reset(self):\n ''\n\n \n \n def getstate(self):\n ''\n\n\n\n\n\n\n\n\n\n \n return (b\"\",0)\n \n def setstate(self,state):\n ''\n\n\n\n\n \n \nclass BufferedIncrementalDecoder(IncrementalDecoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n IncrementalDecoder.__init__(self,errors)\n \n self.buffer=b\"\"\n \n def _buffer_decode(self,input,errors,final):\n \n \n raise NotImplementedError\n \n def decode(self,input,final=False ):\n \n data=self.buffer+input\n (result,consumed)=self._buffer_decode(data,self.errors,final)\n \n self.buffer=data[consumed:]\n return result\n \n def reset(self):\n IncrementalDecoder.reset(self)\n self.buffer=b\"\"\n \n def getstate(self):\n \n return (self.buffer,0)\n \n def setstate(self,state):\n \n self.buffer=state[0]\n \n \n \n \n \n \n \n \nclass StreamWriter(Codec):\n\n def __init__(self,stream,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.errors=errors\n \n def write(self,object):\n \n ''\n \n data,consumed=self.encode(object,self.errors)\n self.stream.write(data)\n \n def writelines(self,list):\n \n ''\n\n \n self.write(''.join(list))\n \n def reset(self):\n \n ''\n\n\n\n\n\n\n \n pass\n \n def seek(self,offset,whence=0):\n self.stream.seek(offset,whence)\n if whence ==0 and offset ==0:\n self.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamReader(Codec):\n\n charbuffertype=str\n \n def __init__(self,stream,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.errors=errors\n self.bytebuffer=b\"\"\n self._empty_charbuffer=self.charbuffertype()\n self.charbuffer=self._empty_charbuffer\n self.linebuffer=None\n \n def decode(self,input,errors='strict'):\n raise NotImplementedError\n \n def read(self,size=-1,chars=-1,firstline=False ):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if self.linebuffer:\n self.charbuffer=self._empty_charbuffer.join(self.linebuffer)\n self.linebuffer=None\n \n \n while True :\n \n if chars <0:\n if size <0:\n if self.charbuffer:\n break\n elif len(self.charbuffer)>=size:\n break\n else :\n if len(self.charbuffer)>=chars:\n break\n \n if size <0:\n newdata=self.stream.read()\n else :\n newdata=self.stream.read(size)\n \n data=self.bytebuffer+newdata\n try :\n newchars,decodedbytes=self.decode(data,self.errors)\n except UnicodeDecodeError as exc:\n if firstline:\n newchars,decodedbytes=\\\n self.decode(data[:exc.start],self.errors)\n lines=newchars.splitlines(keepends=True )\n if len(lines)<=1:\n raise\n else :\n raise\n \n self.bytebuffer=data[decodedbytes:]\n \n self.charbuffer +=newchars\n \n if not newdata:\n break\n if chars <0:\n \n result=self.charbuffer\n self.charbuffer=self._empty_charbuffer\n else :\n \n result=self.charbuffer[:chars]\n self.charbuffer=self.charbuffer[chars:]\n return result\n \n def readline(self,size=None ,keepends=True ):\n \n ''\n\n\n\n\n\n \n \n \n if self.linebuffer:\n line=self.linebuffer[0]\n del self.linebuffer[0]\n if len(self.linebuffer)==1:\n \n \n self.charbuffer=self.linebuffer[0]\n self.linebuffer=None\n if not keepends:\n line=line.splitlines(keepends=False )[0]\n return line\n \n readsize=size or 72\n line=self._empty_charbuffer\n \n while True :\n data=self.read(readsize,firstline=True )\n if data:\n \n \n \n if (isinstance(data,str)and data.endswith(\"\\r\"))or\\\n (isinstance(data,bytes)and data.endswith(b\"\\r\")):\n data +=self.read(size=1,chars=1)\n \n line +=data\n lines=line.splitlines(keepends=True )\n if lines:\n if len(lines)>1:\n \n \n line=lines[0]\n del lines[0]\n if len(lines)>1:\n \n lines[-1]+=self.charbuffer\n self.linebuffer=lines\n self.charbuffer=None\n else :\n \n self.charbuffer=lines[0]+self.charbuffer\n if not keepends:\n line=line.splitlines(keepends=False )[0]\n break\n line0withend=lines[0]\n line0withoutend=lines[0].splitlines(keepends=False )[0]\n if line0withend !=line0withoutend:\n \n self.charbuffer=self._empty_charbuffer.join(lines[1:])+\\\n self.charbuffer\n if keepends:\n line=line0withend\n else :\n line=line0withoutend\n break\n \n if not data or size is not None :\n if line and not keepends:\n line=line.splitlines(keepends=False )[0]\n break\n if readsize <8000:\n readsize *=2\n return line\n \n def readlines(self,sizehint=None ,keepends=True ):\n \n ''\n\n\n\n\n\n\n\n\n \n data=self.read()\n return data.splitlines(keepends)\n \n def reset(self):\n \n ''\n\n\n\n\n\n \n self.bytebuffer=b\"\"\n self.charbuffer=self._empty_charbuffer\n self.linebuffer=None\n \n def seek(self,offset,whence=0):\n ''\n\n\n \n self.stream.seek(offset,whence)\n self.reset()\n \n def __next__(self):\n \n ''\n line=self.readline()\n if line:\n return line\n raise StopIteration\n \n def __iter__(self):\n return self\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamReaderWriter:\n\n ''\n\n\n\n\n\n\n \n \n encoding='unknown'\n \n def __init__(self,stream,Reader,Writer,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.reader=Reader(stream,errors)\n self.writer=Writer(stream,errors)\n self.errors=errors\n \n def read(self,size=-1):\n \n return self.reader.read(size)\n \n def readline(self,size=None ):\n \n return self.reader.readline(size)\n \n def readlines(self,sizehint=None ):\n \n return self.reader.readlines(sizehint)\n \n def __next__(self):\n \n ''\n return next(self.reader)\n \n def __iter__(self):\n return self\n \n def write(self,data):\n \n return self.writer.write(data)\n \n def writelines(self,list):\n \n return self.writer.writelines(list)\n \n def reset(self):\n \n self.reader.reset()\n self.writer.reset()\n \n def seek(self,offset,whence=0):\n self.stream.seek(offset,whence)\n self.reader.reset()\n if whence ==0 and offset ==0:\n self.writer.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n \n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamRecoder:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data_encoding='unknown'\n file_encoding='unknown'\n \n def __init__(self,stream,encode,decode,Reader,Writer,\n errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.encode=encode\n self.decode=decode\n self.reader=Reader(stream,errors)\n self.writer=Writer(stream,errors)\n self.errors=errors\n \n def read(self,size=-1):\n \n data=self.reader.read(size)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def readline(self,size=None ):\n \n if size is None :\n data=self.reader.readline()\n else :\n data=self.reader.readline(size)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def readlines(self,sizehint=None ):\n \n data=self.reader.read()\n data,bytesencoded=self.encode(data,self.errors)\n return data.splitlines(keepends=True )\n \n def __next__(self):\n \n ''\n data=next(self.reader)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def __iter__(self):\n return self\n \n def write(self,data):\n \n data,bytesdecoded=self.decode(data,self.errors)\n return self.writer.write(data)\n \n def writelines(self,list):\n \n data=''.join(list)\n data,bytesdecoded=self.decode(data,self.errors)\n return self.writer.write(data)\n \n def reset(self):\n \n self.reader.reset()\n self.writer.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \ndef open(filename,mode='rb',encoding=None ,errors='strict',buffering=1):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if encoding is not None and\\\n 'b'not in mode:\n \n mode=mode+'b'\n file=builtins.open(filename,mode,buffering)\n if encoding is None :\n return file\n info=lookup(encoding)\n srw=StreamReaderWriter(file,info.streamreader,info.streamwriter,errors)\n \n srw.encoding=encoding\n return srw\n \ndef EncodedFile(file,data_encoding,file_encoding=None ,errors='strict'):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if file_encoding is None :\n file_encoding=data_encoding\n data_info=lookup(data_encoding)\n file_info=lookup(file_encoding)\n sr=StreamRecoder(file,data_info.encode,data_info.decode,\n file_info.streamreader,file_info.streamwriter,errors)\n \n sr.data_encoding=data_encoding\n sr.file_encoding=file_encoding\n return sr\n \n \n \ndef getencoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).encode\n \ndef getdecoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).decode\n \ndef getincrementalencoder(encoding):\n\n ''\n\n\n\n\n\n \n encoder=lookup(encoding).incrementalencoder\n if encoder is None :\n raise LookupError(encoding)\n return encoder\n \ndef getincrementaldecoder(encoding):\n\n ''\n\n\n\n\n\n \n decoder=lookup(encoding).incrementaldecoder\n if decoder is None :\n raise LookupError(encoding)\n return decoder\n \ndef getreader(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamreader\n \ndef getwriter(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamwriter\n \ndef iterencode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n encoder=getincrementalencoder(encoding)(errors,**kwargs)\n for input in iterator:\n output=encoder.encode(input)\n if output:\n yield output\n output=encoder.encode(\"\",True )\n if output:\n yield output\n \ndef iterdecode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n decoder=getincrementaldecoder(encoding)(errors,**kwargs)\n for input in iterator:\n output=decoder.decode(input)\n if output:\n yield output\n output=decoder.decode(b\"\",True )\n if output:\n yield output\n \n \n \ndef make_identity_dict(rng):\n\n ''\n\n\n\n\n \n return {i:i for i in rng}\n \ndef make_encoding_map(decoding_map):\n\n ''\n\n\n\n\n\n\n\n\n\n \n m={}\n for k,v in decoding_map.items():\n if not v in m:\n m[v]=k\n else :\n m[v]=None\n return m\n \n \n \ntry :\n strict_errors=lookup_error(\"strict\")\n ignore_errors=lookup_error(\"ignore\")\n replace_errors=lookup_error(\"replace\")\n xmlcharrefreplace_errors=lookup_error(\"xmlcharrefreplace\")\n backslashreplace_errors=lookup_error(\"backslashreplace\")\nexcept LookupError:\n\n strict_errors=None\n ignore_errors=None\n replace_errors=None\n xmlcharrefreplace_errors=None\n backslashreplace_errors=None\n \n \n \n_false=0\nif _false:\n import encodings\n \n \n \nif __name__ =='__main__':\n\n\n sys.stdout=EncodedFile(sys.stdout,'latin-1','utf-8')\n \n \n sys.stdin=EncodedFile(sys.stdin,'utf-8','latin-1')\n",["_codecs","builtins","encodings","sys"]],codeop:[".py",'\'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport __future__\n\n_features=[getattr(__future__,fname)\nfor fname in __future__.all_feature_names]\n\n__all__=["compile_command","Compile","CommandCompiler"]\n\nPyCF_DONT_IMPLY_DEDENT=0x200\n\ndef _maybe_compile(compiler,source,filename,symbol):\n\n for line in source.split("\\n"):\n line=line.strip()\n if line and line[0]!=\'#\':\n break\n else :\n if symbol !="eval":\n source="pass"\n \n err=err1=err2=None\n code=code1=code2=None\n \n try :\n code=compiler(source,filename,symbol)\n except SyntaxError as err:\n pass\n \n try :\n code1=compiler(source+"\\n",filename,symbol)\n except SyntaxError as e:\n err1=e\n \n try :\n code2=compiler(source+"\\n\\n",filename,symbol)\n except SyntaxError as e:\n err2=e\n \n if code:\n return code\n if not code1 and repr(err1)==repr(err2):\n raise err1\n \ndef _compile(source,filename,symbol):\n return compile(source,filename,symbol,PyCF_DONT_IMPLY_DEDENT)\n \ndef compile_command(source,filename="",symbol="single"):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(_compile,source,filename,symbol)\n \nclass Compile:\n \'\'\n\n\n \n def __init__(self):\n self.flags=PyCF_DONT_IMPLY_DEDENT\n \n def __call__(self,source,filename,symbol):\n codeob=compile(source,filename,symbol,self.flags,1)\n for feature in _features:\n if codeob.co_flags&feature.compiler_flag:\n self.flags |=feature.compiler_flag\n return codeob\n \nclass CommandCompiler:\n \'\'\n\n\n\n \n \n def __init__(self,):\n self.compiler=Compile()\n \n def __call__(self,source,filename="",symbol="single"):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(self.compiler,source,filename,symbol)\n',["__future__"]],colorsys:[".py",'\'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=["rgb_to_yiq","yiq_to_rgb","rgb_to_hls","hls_to_rgb",\n"rgb_to_hsv","hsv_to_rgb"]\n\n\n\nONE_THIRD=1.0 /3.0\nONE_SIXTH=1.0 /6.0\nTWO_THIRD=2.0 /3.0\n\n\n\n\n\ndef rgb_to_yiq(r,g,b):\n y=0.30 *r+0.59 *g+0.11 *b\n i=0.60 *r -0.28 *g -0.32 *b\n q=0.21 *r -0.52 *g+0.31 *b\n return (y,i,q)\n \ndef yiq_to_rgb(y,i,q):\n r=y+0.948262 *i+0.624013 *q\n g=y -0.276066 *i -0.639810 *q\n b=y -1.105450 *i+1.729860 *q\n if r <0.0:\n r=0.0\n if g <0.0:\n g=0.0\n if b <0.0:\n b=0.0\n if r >1.0:\n r=1.0\n if g >1.0:\n g=1.0\n if b >1.0:\n b=1.0\n return (r,g,b)\n \n \n \n \n \n \n \ndef rgb_to_hls(r,g,b):\n maxc=max(r,g,b)\n minc=min(r,g,b)\n \n l=(minc+maxc)/2.0\n if minc ==maxc:\n return 0.0,l,0.0\n if l <=0.5:\n s=(maxc -minc)/(maxc+minc)\n else :\n s=(maxc -minc)/(2.0 -maxc -minc)\n rc=(maxc -r)/(maxc -minc)\n gc=(maxc -g)/(maxc -minc)\n bc=(maxc -b)/(maxc -minc)\n if r ==maxc:\n h=bc -gc\n elif g ==maxc:\n h=2.0+rc -bc\n else :\n h=4.0+gc -rc\n h=(h /6.0)%1.0\n return h,l,s\n \ndef hls_to_rgb(h,l,s):\n if s ==0.0:\n return l,l,l\n if l <=0.5:\n m2=l *(1.0+s)\n else :\n m2=l+s -(l *s)\n m1=2.0 *l -m2\n return (_v(m1,m2,h+ONE_THIRD),_v(m1,m2,h),_v(m1,m2,h -ONE_THIRD))\n \ndef _v(m1,m2,hue):\n hue=hue %1.0\n if hue MAX_INTERPOLATION_DEPTH:\n raise InterpolationDepthError(option,section,rest)\n while rest:\n p=rest.find(\"%\")\n if p <0:\n accum.append(rest)\n return\n if p >0:\n accum.append(rest[:p])\n rest=rest[p:]\n \n c=rest[1:2]\n if c ==\"%\":\n accum.append(\"%\")\n rest=rest[2:]\n elif c ==\"(\":\n m=self._KEYCRE.match(rest)\n if m is None :\n raise InterpolationSyntaxError(option,section,\n \"bad interpolation variable reference %r\"%rest)\n var=parser.optionxform(m.group(1))\n rest=rest[m.end():]\n try :\n v=map[var]\n except KeyError:\n raise InterpolationMissingOptionError(\n option,section,rest,var)\n if \"%\"in v:\n self._interpolate_some(parser,option,accum,v,\n section,map,depth+1)\n else :\n accum.append(v)\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"'%%' must be followed by '%%' or '(', \"\n \"found: %r\"%(rest,))\n \n \nclass ExtendedInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"\\$\\{([^}]+)\\}\")\n \n def before_get(self,parser,section,option,value,defaults):\n L=[]\n self._interpolate_some(parser,option,L,value,section,defaults,1)\n return ''.join(L)\n \n def before_set(self,parser,section,option,value):\n tmp_value=value.replace('$$','')\n tmp_value=self._KEYCRE.sub('',tmp_value)\n if '$'in tmp_value:\n raise ValueError(\"invalid interpolation syntax in %r at \"\n \"position %d\"%(value,tmp_value.find('%')))\n return value\n \n def _interpolate_some(self,parser,option,accum,rest,section,map,\n depth):\n if depth >MAX_INTERPOLATION_DEPTH:\n raise InterpolationDepthError(option,section,rest)\n while rest:\n p=rest.find(\"$\")\n if p <0:\n accum.append(rest)\n return\n if p >0:\n accum.append(rest[:p])\n rest=rest[p:]\n \n c=rest[1:2]\n if c ==\"$\":\n accum.append(\"$\")\n rest=rest[2:]\n elif c ==\"{\":\n m=self._KEYCRE.match(rest)\n if m is None :\n raise InterpolationSyntaxError(option,section,\n \"bad interpolation variable reference %r\"%rest)\n path=m.group(1).split(':')\n rest=rest[m.end():]\n sect=section\n opt=option\n try :\n if len(path)==1:\n opt=parser.optionxform(path[0])\n v=map[opt]\n elif len(path)==2:\n sect=path[0]\n opt=parser.optionxform(path[1])\n v=parser.get(sect,opt,raw=True )\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"More than one ':' found: %r\"%(rest,))\n except (KeyError,NoSectionError,NoOptionError):\n raise InterpolationMissingOptionError(\n option,section,rest,\":\".join(path))\n if \"$\"in v:\n self._interpolate_some(parser,opt,accum,v,sect,\n dict(parser.items(sect,raw=True )),\n depth+1)\n else :\n accum.append(v)\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"'$' must be followed by '$' or '{', \"\n \"found: %r\"%(rest,))\n \n \nclass LegacyInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"%\\(([^)]*)\\)s|.\")\n \n def before_get(self,parser,section,option,value,vars):\n rawval=value\n depth=MAX_INTERPOLATION_DEPTH\n while depth:\n depth -=1\n if value and \"%(\"in value:\n replace=functools.partial(self._interpolation_replace,\n parser=parser)\n value=self._KEYCRE.sub(replace,value)\n try :\n value=value %vars\n except KeyError as e:\n raise InterpolationMissingOptionError(\n option,section,rawval,e.args[0])\n else :\n break\n if value and \"%(\"in value:\n raise InterpolationDepthError(option,section,rawval)\n return value\n \n def before_set(self,parser,section,option,value):\n return value\n \n @staticmethod\n def _interpolation_replace(match,parser):\n s=match.group(1)\n if s is None :\n return match.group()\n else :\n return \"%%(%s)s\"%parser.optionxform(s)\n \n \nclass RawConfigParser(MutableMapping):\n ''\n \n \n _SECT_TMPL=r\"\"\"\n \\[ # [\n (?P

[^]]+) # very permissive!\n \\] # ]\n \"\"\"\n _OPT_TMPL=r\"\"\"\n (?Pn'%(\n toprefix,num_chg)\n else :\n in_change=False\n \n if not flaglist:\n flaglist=[False ]\n next_id=['']\n next_href=['']\n last=0\n if context:\n fromlist=[' No Differences Found ']\n tolist=fromlist\n else :\n fromlist=tolist=[' Empty File ']\n \n if not flaglist[0]:\n next_href[0]='f'%toprefix\n \n next_href[last]='t'%(toprefix)\n \n return fromlist,tolist,flaglist,next_href,next_id\n \n def make_table(self,fromlines,tolines,fromdesc='',todesc='',context=False ,\n numlines=5):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n self._make_prefix()\n \n \n \n fromlines,tolines=self._tab_newline_replace(fromlines,tolines)\n \n \n if context:\n context_lines=numlines\n else :\n context_lines=None\n diffs=_mdiff(fromlines,tolines,context_lines,linejunk=self._linejunk,\n charjunk=self._charjunk)\n \n \n if self._wrapcolumn:\n diffs=self._line_wrapper(diffs)\n \n \n fromlist,tolist,flaglist=self._collect_lines(diffs)\n \n \n fromlist,tolist,flaglist,next_href,next_id=self._convert_flags(\n fromlist,tolist,flaglist,context,numlines)\n \n s=[]\n fmt=' %s%s'+\\\n '%s%s\\n'\n for i in range(len(flaglist)):\n if flaglist[i]is None :\n \n \n if i >0:\n s.append(' \\n \\n')\n else :\n s.append(fmt %(next_id[i],next_href[i],fromlist[i],\n next_href[i],tolist[i]))\n if fromdesc or todesc:\n header_row='%s%s%s%s'%(\n '
',\n '%s'%fromdesc,\n '
',\n '%s'%todesc)\n else :\n header_row=''\n \n table=self._table_template %dict(\n data_rows=''.join(s),\n header_row=header_row,\n prefix=self._prefix[1])\n \n return table.replace('\\0+','').\\\n replace('\\0-','').\\\n replace('\\0^','').\\\n replace('\\1','').\\\n replace('\\t',' ')\n \ndel re\n\ndef restore(delta,which):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n tag={1:\"- \",2:\"+ \"}[int(which)]\n except KeyError:\n raise ValueError('unknown delta choice (must be 1 or 2): %r'\n %which)\n prefixes=(\" \",tag)\n for line in delta:\n if line[:2]in prefixes:\n yield line[2:]\n \ndef _test():\n import doctest,difflib\n return doctest.testmod(difflib)\n \nif __name__ ==\"__main__\":\n _test()\n",["collections","difflib","doctest","heapq","re","warnings"]],doctest:[".py","\n\n\n\n\n\n\n\nr\"\"\"Module doctest -- a framework for running examples in docstrings.\n\nIn simplest use, end each module M to be tested with:\n\ndef _test():\n import doctest\n doctest.testmod()\n\nif __name__ == \"__main__\":\n _test()\n\nThen running the module as a script will cause the examples in the\ndocstrings to get executed and verified:\n\npython M.py\n\nThis won't display anything unless an example fails, in which case the\nfailing example(s) and the cause(s) of the failure(s) are printed to stdout\n(why not stderr? because stderr is a lame hack <0.2 wink>), and the final\nline of output is \"Test failed.\".\n\nRun it with the -v switch instead:\n\npython M.py -v\n\nand a detailed report of all examples tried is printed to stdout, along\nwith assorted summaries at the end.\n\nYou can force verbose mode by passing \"verbose=True\" to testmod, or prohibit\nit by passing \"verbose=False\". In either of those cases, sys.argv is not\nexamined by testmod.\n\nThere are a variety of other ways to run doctests, including integration\nwith the unittest framework, and support for running non-Python text\nfiles containing doctests. There are also many ways to override parts\nof doctest's default behaviors. See the Library Reference Manual for\ndetails.\n\"\"\"\n\n__docformat__='reStructuredText en'\n\n__all__=[\n\n'register_optionflag',\n'DONT_ACCEPT_TRUE_FOR_1',\n'DONT_ACCEPT_BLANKLINE',\n'NORMALIZE_WHITESPACE',\n'ELLIPSIS',\n'SKIP',\n'IGNORE_EXCEPTION_DETAIL',\n'COMPARISON_FLAGS',\n'REPORT_UDIFF',\n'REPORT_CDIFF',\n'REPORT_NDIFF',\n'REPORT_ONLY_FIRST_FAILURE',\n'REPORTING_FLAGS',\n'FAIL_FAST',\n\n\n'Example',\n'DocTest',\n\n'DocTestParser',\n\n'DocTestFinder',\n\n'DocTestRunner',\n'OutputChecker',\n'DocTestFailure',\n'UnexpectedException',\n'DebugRunner',\n\n'testmod',\n'testfile',\n'run_docstring_examples',\n\n'DocTestSuite',\n'DocFileSuite',\n'set_unittest_reportflags',\n\n'script_from_examples',\n'testsource',\n'debug_src',\n'debug',\n]\n\nimport __future__\nimport argparse\nimport difflib\nimport inspect\nimport linecache\nimport os\nimport pdb\nimport re\nimport sys\nimport traceback\nimport unittest\nfrom io import StringIO\nfrom collections import namedtuple\n\nTestResults=namedtuple('TestResults','failed attempted')\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nOPTIONFLAGS_BY_NAME={}\ndef register_optionflag(name):\n\n return OPTIONFLAGS_BY_NAME.setdefault(name,1 <=2\n \n \n startpos,endpos=0,len(got)\n w=ws[0]\n if w:\n if got.startswith(w):\n startpos=len(w)\n del ws[0]\n else :\n return False\n w=ws[-1]\n if w:\n if got.endswith(w):\n endpos -=len(w)\n del ws[-1]\n else :\n return False\n \n if startpos >endpos:\n \n \n return False\n \n \n \n \n for w in ws:\n \n \n \n startpos=got.find(w,startpos,endpos)\n if startpos <0:\n return False\n startpos +=len(w)\n \n return True\n \ndef _comment_line(line):\n ''\n line=line.rstrip()\n if line:\n return '# '+line\n else :\n return '#'\n \ndef _strip_exception_details(msg):\n\n\n\n\n\n\n\n\n\n\n start,end=0,len(msg)\n \n i=msg.find(\"\\n\")\n if i >=0:\n end=i\n \n i=msg.find(':',0,end)\n if i >=0:\n end=i\n \n i=msg.rfind('.',0,end)\n if i >=0:\n start=i+1\n return msg[start:end]\n \nclass _OutputRedirectingPdb(pdb.Pdb):\n ''\n\n\n\n \n def __init__(self,out):\n self.__out=out\n self.__debugger_used=False\n \n pdb.Pdb.__init__(self,stdout=out,nosigint=True )\n \n self.use_rawinput=1\n \n def set_trace(self,frame=None ):\n self.__debugger_used=True\n if frame is None :\n frame=sys._getframe().f_back\n pdb.Pdb.set_trace(self,frame)\n \n def set_continue(self):\n \n \n if self.__debugger_used:\n pdb.Pdb.set_continue(self)\n \n def trace_dispatch(self,*args):\n \n save_stdout=sys.stdout\n sys.stdout=self.__out\n \n try :\n return pdb.Pdb.trace_dispatch(self,*args)\n finally :\n sys.stdout=save_stdout\n \n \ndef _module_relative_path(module,path):\n if not inspect.ismodule(module):\n raise TypeError('Expected a module: %r'%module)\n if path.startswith('/'):\n raise ValueError('Module-relative files may not have absolute paths')\n \n \n if hasattr(module,'__file__'):\n \n basedir=os.path.split(module.__file__)[0]\n elif module.__name__ =='__main__':\n \n if len(sys.argv)>0 and sys.argv[0]!='':\n basedir=os.path.split(sys.argv[0])[0]\n else :\n basedir=os.curdir\n else :\n \n raise ValueError(\"Can't resolve paths relative to the module \"+\n module+\" (it has no __file__)\")\n \n \n return os.path.join(basedir,*(path.split('/')))\n \n \n \n \n \n \n \n \n \n \n \n \n \nclass Example:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,source,want,exc_msg=None ,lineno=0,indent=0,\n options=None ):\n \n if not source.endswith('\\n'):\n source +='\\n'\n if want and not want.endswith('\\n'):\n want +='\\n'\n if exc_msg is not None and not exc_msg.endswith('\\n'):\n exc_msg +='\\n'\n \n self.source=source\n self.want=want\n self.lineno=lineno\n self.indent=indent\n if options is None :options={}\n self.options=options\n self.exc_msg=exc_msg\n \n def __eq__(self,other):\n if type(self)is not type(other):\n return NotImplemented\n \n return self.source ==other.source and\\\n self.want ==other.want and\\\n self.lineno ==other.lineno and\\\n self.indent ==other.indent and\\\n self.options ==other.options and\\\n self.exc_msg ==other.exc_msg\n \n def __hash__(self):\n return hash((self.source,self.want,self.lineno,self.indent,\n self.exc_msg))\n \nclass DocTest:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,examples,globs,name,filename,lineno,docstring):\n ''\n\n\n \n assert not isinstance(examples,str),\\\n \"DocTest no longer accepts str; use DocTestParser instead\"\n self.examples=examples\n self.docstring=docstring\n self.globs=globs.copy()\n self.name=name\n self.filename=filename\n self.lineno=lineno\n \n def __repr__(self):\n if len(self.examples)==0:\n examples='no examples'\n elif len(self.examples)==1:\n examples='1 example'\n else :\n examples='%d examples'%len(self.examples)\n return (''%\n (self.name,self.filename,self.lineno,examples))\n \n def __eq__(self,other):\n if type(self)is not type(other):\n return NotImplemented\n \n return self.examples ==other.examples and\\\n self.docstring ==other.docstring and\\\n self.globs ==other.globs and\\\n self.name ==other.name and\\\n self.filename ==other.filename and\\\n self.lineno ==other.lineno\n \n def __hash__(self):\n return hash((self.docstring,self.name,self.filename,self.lineno))\n \n \n def __lt__(self,other):\n if not isinstance(other,DocTest):\n return NotImplemented\n return ((self.name,self.filename,self.lineno,id(self))\n <\n (other.name,other.filename,other.lineno,id(other)))\n \n \n \n \n \nclass DocTestParser:\n ''\n\n \n \n \n \n \n \n _EXAMPLE_RE=re.compile(r'''\n # Source consists of a PS1 line followed by zero or more PS2 lines.\n (?P\n (?:^(?P [ ]*) >>> .*) # PS1 line\n (?:\\n [ ]* \\.\\.\\. .*)*) # PS2 lines\n \\n?\n # Want consists of any non-blank lines that do not start with PS1.\n (?P (?:(?![ ]*$) # Not a blank line\n (?![ ]*>>>) # Not a line starting with PS1\n .+$\\n? # But any other line\n )*)\n ''',re.MULTILINE |re.VERBOSE)\n \n \n \n \n \n \n \n \n \n \n _EXCEPTION_RE=re.compile(r\"\"\"\n # Grab the traceback header. Different versions of Python have\n # said different things on the first traceback line.\n ^(?P Traceback\\ \\(\n (?: most\\ recent\\ call\\ last\n | innermost\\ last\n ) \\) :\n )\n \\s* $ # toss trailing whitespace on the header.\n (?P .*?) # don't blink: absorb stuff until...\n ^ (?P \\w+ .*) # a line *starts* with alphanum.\n \"\"\",re.VERBOSE |re.MULTILINE |re.DOTALL)\n \n \n \n _IS_BLANK_OR_COMMENT=re.compile(r'^[ ]*(#.*)?$').match\n \n def parse(self,string,name=''):\n ''\n\n\n\n\n\n \n string=string.expandtabs()\n \n min_indent=self._min_indent(string)\n if min_indent >0:\n string='\\n'.join([l[min_indent:]for l in string.split('\\n')])\n \n output=[]\n charno,lineno=0,0\n \n for m in self._EXAMPLE_RE.finditer(string):\n \n output.append(string[charno:m.start()])\n \n lineno +=string.count('\\n',charno,m.start())\n \n (source,options,want,exc_msg)=\\\n self._parse_example(m,name,lineno)\n \n if not self._IS_BLANK_OR_COMMENT(source):\n output.append(Example(source,want,exc_msg,\n lineno=lineno,\n indent=min_indent+len(m.group('indent')),\n options=options))\n \n lineno +=string.count('\\n',m.start(),m.end())\n \n charno=m.end()\n \n output.append(string[charno:])\n return output\n \n def get_doctest(self,string,globs,name,filename,lineno):\n ''\n\n\n\n\n\n\n \n return DocTest(self.get_examples(string,name),globs,\n name,filename,lineno,string)\n \n def get_examples(self,string,name=''):\n ''\n\n\n\n\n\n\n\n\n \n return [x for x in self.parse(string,name)\n if isinstance(x,Example)]\n \n def _parse_example(self,m,name,lineno):\n ''\n\n\n\n\n\n\n\n\n \n \n indent=len(m.group('indent'))\n \n \n \n source_lines=m.group('source').split('\\n')\n self._check_prompt_blank(source_lines,indent,name,lineno)\n self._check_prefix(source_lines[1:],' '*indent+'.',name,lineno)\n source='\\n'.join([sl[indent+4:]for sl in source_lines])\n \n \n \n \n want=m.group('want')\n want_lines=want.split('\\n')\n if len(want_lines)>1 and re.match(r' *$',want_lines[-1]):\n del want_lines[-1]\n self._check_prefix(want_lines,' '*indent,name,\n lineno+len(source_lines))\n want='\\n'.join([wl[indent:]for wl in want_lines])\n \n \n m=self._EXCEPTION_RE.match(want)\n if m:\n exc_msg=m.group('msg')\n else :\n exc_msg=None\n \n \n options=self._find_options(source,name,lineno)\n \n return source,options,want,exc_msg\n \n \n \n \n \n \n \n \n _OPTION_DIRECTIVE_RE=re.compile(r'#\\s*doctest:\\s*([^\\n\\'\"]*)$',\n re.MULTILINE)\n \n def _find_options(self,source,name,lineno):\n ''\n\n\n\n\n\n \n options={}\n \n for m in self._OPTION_DIRECTIVE_RE.finditer(source):\n option_strings=m.group(1).replace(',',' ').split()\n for option in option_strings:\n if (option[0]not in '+-'or\n option[1:]not in OPTIONFLAGS_BY_NAME):\n raise ValueError('line %r of the doctest for %s '\n 'has an invalid option: %r'%\n (lineno+1,name,option))\n flag=OPTIONFLAGS_BY_NAME[option[1:]]\n options[flag]=(option[0]=='+')\n if options and self._IS_BLANK_OR_COMMENT(source):\n raise ValueError('line %r of the doctest for %s has an option '\n 'directive on a line with no example: %r'%\n (lineno,name,source))\n return options\n \n \n \n _INDENT_RE=re.compile('^([ ]*)(?=\\S)',re.MULTILINE)\n \n def _min_indent(self,s):\n ''\n indents=[len(indent)for indent in self._INDENT_RE.findall(s)]\n if len(indents)>0:\n return min(indents)\n else :\n return 0\n \n def _check_prompt_blank(self,lines,indent,name,lineno):\n ''\n\n\n\n\n \n for i,line in enumerate(lines):\n if len(line)>=indent+4 and line[indent+3]!=' ':\n raise ValueError('line %r of the docstring for %s '\n 'lacks blank after %s: %r'%\n (lineno+i+1,name,\n line[indent:indent+3],line))\n \n def _check_prefix(self,lines,prefix,name,lineno):\n ''\n\n\n \n for i,line in enumerate(lines):\n if line and not line.startswith(prefix):\n raise ValueError('line %r of the docstring for %s has '\n 'inconsistent leading whitespace: %r'%\n (lineno+i+1,name,line))\n \n \n \n \n \n \nclass DocTestFinder:\n ''\n\n\n\n\n\n \n \n def __init__(self,verbose=False ,parser=DocTestParser(),\n recurse=True ,exclude_empty=True ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self._parser=parser\n self._verbose=verbose\n self._recurse=recurse\n self._exclude_empty=exclude_empty\n \n def find(self,obj,name=None ,module=None ,globs=None ,extraglobs=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if name is None :\n name=getattr(obj,'__name__',None )\n if name is None :\n raise ValueError(\"DocTestFinder.find: name must be given \"\n \"when obj.__name__ doesn't exist: %r\"%\n (type(obj),))\n \n \n \n \n if module is False :\n module=None\n elif module is None :\n module=inspect.getmodule(obj)\n \n \n \n \n try :\n file=inspect.getsourcefile(obj)\n except TypeError:\n source_lines=None\n else :\n if not file:\n \n \n file=inspect.getfile(obj)\n if not file[0]+file[-2:]=='<]>':file=None\n if file is None :\n source_lines=None\n else :\n if module is not None :\n \n \n \n source_lines=linecache.getlines(file,module.__dict__)\n else :\n \n \n source_lines=linecache.getlines(file)\n if not source_lines:\n source_lines=None\n \n \n if globs is None :\n if module is None :\n globs={}\n else :\n globs=module.__dict__.copy()\n else :\n globs=globs.copy()\n if extraglobs is not None :\n globs.update(extraglobs)\n if '__name__'not in globs:\n globs['__name__']='__main__'\n \n \n tests=[]\n self._find(tests,obj,name,module,source_lines,globs,{})\n \n \n \n \n tests.sort()\n return tests\n \n def _from_module(self,module,object):\n ''\n\n\n \n if module is None :\n return True\n elif inspect.getmodule(object)is not None :\n return module is inspect.getmodule(object)\n elif inspect.isfunction(object):\n return module.__dict__ is object.__globals__\n elif inspect.ismethoddescriptor(object):\n if hasattr(object,'__objclass__'):\n obj_mod=object.__objclass__.__module__\n elif hasattr(object,'__module__'):\n obj_mod=object.__module__\n else :\n return True\n return module.__name__ ==obj_mod\n elif inspect.isclass(object):\n return module.__name__ ==object.__module__\n elif hasattr(object,'__module__'):\n return module.__name__ ==object.__module__\n elif isinstance(object,property):\n return True\n else :\n raise ValueError(\"object must be a class or function\")\n \n def _find(self,tests,obj,name,module,source_lines,globs,seen):\n ''\n\n\n \n if self._verbose:\n print('Finding tests in %s'%name)\n \n \n if id(obj)in seen:\n return\n seen[id(obj)]=1\n \n \n test=self._get_test(obj,name,module,globs,source_lines)\n if test is not None :\n tests.append(test)\n \n \n if inspect.ismodule(obj)and self._recurse:\n for valname,val in obj.__dict__.items():\n valname='%s.%s'%(name,valname)\n \n if ((inspect.isroutine(val)or inspect.isclass(val))and\n self._from_module(module,val)):\n self._find(tests,val,valname,module,source_lines,\n globs,seen)\n \n \n if inspect.ismodule(obj)and self._recurse:\n for valname,val in getattr(obj,'__test__',{}).items():\n if not isinstance(valname,str):\n raise ValueError(\"DocTestFinder.find: __test__ keys \"\n \"must be strings: %r\"%\n (type(valname),))\n if not (inspect.isroutine(val)or inspect.isclass(val)or\n inspect.ismodule(val)or isinstance(val,str)):\n raise ValueError(\"DocTestFinder.find: __test__ values \"\n \"must be strings, functions, methods, \"\n \"classes, or modules: %r\"%\n (type(val),))\n valname='%s.__test__.%s'%(name,valname)\n self._find(tests,val,valname,module,source_lines,\n globs,seen)\n \n \n if inspect.isclass(obj)and self._recurse:\n for valname,val in obj.__dict__.items():\n \n if isinstance(val,staticmethod):\n val=getattr(obj,valname)\n if isinstance(val,classmethod):\n val=getattr(obj,valname).__func__\n \n \n if ((inspect.isroutine(val)or inspect.isclass(val)or\n isinstance(val,property))and\n self._from_module(module,val)):\n valname='%s.%s'%(name,valname)\n self._find(tests,val,valname,module,source_lines,\n globs,seen)\n \n def _get_test(self,obj,name,module,globs,source_lines):\n ''\n\n\n \n \n \n if isinstance(obj,str):\n docstring=obj\n else :\n try :\n if obj.__doc__ is None :\n docstring=''\n else :\n docstring=obj.__doc__\n if not isinstance(docstring,str):\n docstring=str(docstring)\n except (TypeError,AttributeError):\n docstring=''\n \n \n lineno=self._find_lineno(obj,source_lines)\n \n \n if self._exclude_empty and not docstring:\n return None\n \n \n if module is None :\n filename=None\n else :\n filename=getattr(module,'__file__',module.__name__)\n if filename[-4:]in (\".pyc\",\".pyo\"):\n filename=filename[:-1]\n return self._parser.get_doctest(docstring,globs,name,\n filename,lineno)\n \n def _find_lineno(self,obj,source_lines):\n ''\n\n\n \n lineno=None\n \n \n if inspect.ismodule(obj):\n lineno=0\n \n \n \n \n if inspect.isclass(obj):\n if source_lines is None :\n return None\n pat=re.compile(r'^\\s*class\\s*%s\\b'%\n getattr(obj,'__name__','-'))\n for i,line in enumerate(source_lines):\n if pat.match(line):\n lineno=i\n break\n \n \n if inspect.ismethod(obj):obj=obj.__func__\n if inspect.isfunction(obj):obj=obj.__code__\n if inspect.istraceback(obj):obj=obj.tb_frame\n if inspect.isframe(obj):obj=obj.f_code\n if inspect.iscode(obj):\n lineno=getattr(obj,'co_firstlineno',None )-1\n \n \n \n \n \n \n if lineno is not None :\n if source_lines is None :\n return lineno+1\n pat=re.compile('(^|.*:)\\s*\\w*(\"|\\')')\n for lineno in range(lineno,len(source_lines)):\n if pat.match(source_lines[lineno]):\n return lineno\n \n \n return None\n \n \n \n \n \nclass DocTestRunner:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n DIVIDER=\"*\"*70\n \n def __init__(self,checker=None ,verbose=None ,optionflags=0):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self._checker=checker or OutputChecker()\n if verbose is None :\n verbose='-v'in sys.argv\n self._verbose=verbose\n self.optionflags=optionflags\n self.original_optionflags=optionflags\n \n \n self.tries=0\n self.failures=0\n self._name2ft={}\n \n \n self._fakeout=_SpoofOut()\n \n \n \n \n \n def report_start(self,out,test,example):\n ''\n\n\n \n if self._verbose:\n if example.want:\n out('Trying:\\n'+_indent(example.source)+\n 'Expecting:\\n'+_indent(example.want))\n else :\n out('Trying:\\n'+_indent(example.source)+\n 'Expecting nothing\\n')\n \n def report_success(self,out,test,example,got):\n ''\n\n\n \n if self._verbose:\n out(\"ok\\n\")\n \n def report_failure(self,out,test,example,got):\n ''\n\n \n out(self._failure_header(test,example)+\n self._checker.output_difference(example,got,self.optionflags))\n \n def report_unexpected_exception(self,out,test,example,exc_info):\n ''\n\n \n out(self._failure_header(test,example)+\n 'Exception raised:\\n'+_indent(_exception_traceback(exc_info)))\n \n def _failure_header(self,test,example):\n out=[self.DIVIDER]\n if test.filename:\n if test.lineno is not None and example.lineno is not None :\n lineno=test.lineno+example.lineno+1\n else :\n lineno='?'\n out.append('File \"%s\", line %s, in %s'%\n (test.filename,lineno,test.name))\n else :\n out.append('Line %s, in %s'%(example.lineno+1,test.name))\n out.append('Failed example:')\n source=example.source\n out.append(_indent(source))\n return '\\n'.join(out)\n \n \n \n \n \n def __run(self,test,compileflags,out):\n ''\n\n\n\n\n\n\n\n \n \n failures=tries=0\n \n \n \n original_optionflags=self.optionflags\n \n SUCCESS,FAILURE,BOOM=range(3)\n \n check=self._checker.check_output\n \n \n for examplenum,example in enumerate(test.examples):\n \n \n \n quiet=(self.optionflags&REPORT_ONLY_FIRST_FAILURE and\n failures >0)\n \n \n self.optionflags=original_optionflags\n if example.options:\n for (optionflag,val)in example.options.items():\n if val:\n self.optionflags |=optionflag\n else :\n self.optionflags &=~optionflag\n \n \n if self.optionflags&SKIP:\n continue\n \n \n tries +=1\n if not quiet:\n self.report_start(out,test,example)\n \n \n \n \n filename=''%(test.name,examplenum)\n \n \n \n \n try :\n \n exec(compile(example.source,filename,\"single\",\n compileflags,1),test.globs)\n self.debugger.set_continue()\n exception=None\n except KeyboardInterrupt:\n raise\n except :\n exception=sys.exc_info()\n self.debugger.set_continue()\n \n got=self._fakeout.getvalue()\n self._fakeout.truncate(0)\n outcome=FAILURE\n \n \n \n if exception is None :\n if check(example.want,got,self.optionflags):\n outcome=SUCCESS\n \n \n else :\n exc_msg=traceback.format_exception_only(*exception[:2])[-1]\n if not quiet:\n got +=_exception_traceback(exception)\n \n \n \n if example.exc_msg is None :\n outcome=BOOM\n \n \n elif check(example.exc_msg,exc_msg,self.optionflags):\n outcome=SUCCESS\n \n \n elif self.optionflags&IGNORE_EXCEPTION_DETAIL:\n if check(_strip_exception_details(example.exc_msg),\n _strip_exception_details(exc_msg),\n self.optionflags):\n outcome=SUCCESS\n \n \n if outcome is SUCCESS:\n if not quiet:\n self.report_success(out,test,example,got)\n elif outcome is FAILURE:\n if not quiet:\n self.report_failure(out,test,example,got)\n failures +=1\n elif outcome is BOOM:\n if not quiet:\n self.report_unexpected_exception(out,test,example,\n exception)\n failures +=1\n else :\n assert False ,(\"unknown outcome\",outcome)\n \n if failures and self.optionflags&FAIL_FAST:\n break\n \n \n self.optionflags=original_optionflags\n \n \n self.__record_outcome(test,failures,tries)\n return TestResults(failures,tries)\n \n def __record_outcome(self,test,f,t):\n ''\n\n\n \n f2,t2=self._name2ft.get(test.name,(0,0))\n self._name2ft[test.name]=(f+f2,t+t2)\n self.failures +=f\n self.tries +=t\n \n __LINECACHE_FILENAME_RE=re.compile(r'.+)'\n r'\\[(?P\\d+)\\]>$')\n def __patched_linecache_getlines(self,filename,module_globals=None ):\n m=self.__LINECACHE_FILENAME_RE.match(filename)\n if m and m.group('name')==self.test.name:\n example=self.test.examples[int(m.group('examplenum'))]\n return example.source.splitlines(keepends=True )\n else :\n return self.save_linecache_getlines(filename,module_globals)\n \n def run(self,test,compileflags=None ,out=None ,clear_globs=True ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.test=test\n \n if compileflags is None :\n compileflags=_extract_future_flags(test.globs)\n \n save_stdout=sys.stdout\n if out is None :\n encoding=save_stdout.encoding\n if encoding is None or encoding.lower()=='utf-8':\n out=save_stdout.write\n else :\n \n def out(s):\n s=str(s.encode(encoding,'backslashreplace'),encoding)\n save_stdout.write(s)\n sys.stdout=self._fakeout\n \n \n \n \n \n \n save_trace=sys.gettrace()\n save_set_trace=pdb.set_trace\n self.debugger=_OutputRedirectingPdb(save_stdout)\n self.debugger.reset()\n pdb.set_trace=self.debugger.set_trace\n \n \n \n self.save_linecache_getlines=linecache.getlines\n linecache.getlines=self.__patched_linecache_getlines\n \n \n save_displayhook=sys.displayhook\n sys.displayhook=sys.__displayhook__\n \n try :\n return self.__run(test,compileflags,out)\n finally :\n sys.stdout=save_stdout\n pdb.set_trace=save_set_trace\n sys.settrace(save_trace)\n linecache.getlines=self.save_linecache_getlines\n sys.displayhook=save_displayhook\n if clear_globs:\n test.globs.clear()\n import builtins\n builtins._=None\n \n \n \n \n def summarize(self,verbose=None ):\n ''\n\n\n\n\n\n\n\n\n \n if verbose is None :\n verbose=self._verbose\n notests=[]\n passed=[]\n failed=[]\n totalt=totalf=0\n for x in self._name2ft.items():\n name,(f,t)=x\n assert f <=t\n totalt +=t\n totalf +=f\n if t ==0:\n notests.append(name)\n elif f ==0:\n passed.append((name,t))\n else :\n failed.append(x)\n if verbose:\n if notests:\n print(len(notests),\"items had no tests:\")\n notests.sort()\n for thing in notests:\n print(\" \",thing)\n if passed:\n print(len(passed),\"items passed all tests:\")\n passed.sort()\n for thing,count in passed:\n print(\" %3d tests in %s\"%(count,thing))\n if failed:\n print(self.DIVIDER)\n print(len(failed),\"items had failures:\")\n failed.sort()\n for thing,(f,t)in failed:\n print(\" %3d of %3d in %s\"%(f,t,thing))\n if verbose:\n print(totalt,\"tests in\",len(self._name2ft),\"items.\")\n print(totalt -totalf,\"passed and\",totalf,\"failed.\")\n if totalf:\n print(\"***Test Failed***\",totalf,\"failures.\")\n elif verbose:\n print(\"Test passed.\")\n return TestResults(totalf,totalt)\n \n \n \n \n def merge(self,other):\n d=self._name2ft\n for name,(f,t)in other._name2ft.items():\n if name in d:\n \n \n \n \n f2,t2=d[name]\n f=f+f2\n t=t+t2\n d[name]=f,t\n \nclass OutputChecker:\n ''\n\n\n\n\n\n \n def _toAscii(self,s):\n ''\n\n \n return str(s.encode('ASCII','backslashreplace'),\"ASCII\")\n \n def check_output(self,want,got,optionflags):\n ''\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n got=self._toAscii(got)\n want=self._toAscii(want)\n \n \n \n if got ==want:\n return True\n \n \n \n if not (optionflags&DONT_ACCEPT_TRUE_FOR_1):\n if (got,want)==(\"True\\n\",\"1\\n\"):\n return True\n if (got,want)==(\"False\\n\",\"0\\n\"):\n return True\n \n \n \n if not (optionflags&DONT_ACCEPT_BLANKLINE):\n \n want=re.sub('(?m)^%s\\s*?$'%re.escape(BLANKLINE_MARKER),\n '',want)\n \n \n got=re.sub('(?m)^\\s*?$','',got)\n if got ==want:\n return True\n \n \n \n \n if optionflags&NORMALIZE_WHITESPACE:\n got=' '.join(got.split())\n want=' '.join(want.split())\n if got ==want:\n return True\n \n \n \n if optionflags&ELLIPSIS:\n if _ellipsis_match(want,got):\n return True\n \n \n return False\n \n \n def _do_a_fancy_diff(self,want,got,optionflags):\n \n if not optionflags&(REPORT_UDIFF |\n REPORT_CDIFF |\n REPORT_NDIFF):\n return False\n \n \n \n \n \n \n \n \n \n \n \n if optionflags&REPORT_NDIFF:\n return True\n \n \n return want.count('\\n')>2 and got.count('\\n')>2\n \n def output_difference(self,example,got,optionflags):\n ''\n\n\n\n\n \n want=example.want\n \n \n if not (optionflags&DONT_ACCEPT_BLANKLINE):\n got=re.sub('(?m)^[ ]*(?=\\n)',BLANKLINE_MARKER,got)\n \n \n if self._do_a_fancy_diff(want,got,optionflags):\n \n want_lines=want.splitlines(keepends=True )\n got_lines=got.splitlines(keepends=True )\n \n if optionflags&REPORT_UDIFF:\n diff=difflib.unified_diff(want_lines,got_lines,n=2)\n diff=list(diff)[2:]\n kind='unified diff with -expected +actual'\n elif optionflags&REPORT_CDIFF:\n diff=difflib.context_diff(want_lines,got_lines,n=2)\n diff=list(diff)[2:]\n kind='context diff with expected followed by actual'\n elif optionflags&REPORT_NDIFF:\n engine=difflib.Differ(charjunk=difflib.IS_CHARACTER_JUNK)\n diff=list(engine.compare(want_lines,got_lines))\n kind='ndiff with -expected +actual'\n else :\n assert 0,'Bad diff option'\n \n diff=[line.rstrip()+'\\n'for line in diff]\n return 'Differences (%s):\\n'%kind+_indent(''.join(diff))\n \n \n \n if want and got:\n return 'Expected:\\n%sGot:\\n%s'%(_indent(want),_indent(got))\n elif want:\n return 'Expected:\\n%sGot nothing\\n'%_indent(want)\n elif got:\n return 'Expected nothing\\nGot:\\n%s'%_indent(got)\n else :\n return 'Expected nothing\\nGot nothing\\n'\n \nclass DocTestFailure(Exception):\n ''\n\n\n\n\n\n\n\n\n \n def __init__(self,test,example,got):\n self.test=test\n self.example=example\n self.got=got\n \n def __str__(self):\n return str(self.test)\n \nclass UnexpectedException(Exception):\n ''\n\n\n\n\n\n\n\n\n \n def __init__(self,test,example,exc_info):\n self.test=test\n self.example=example\n self.exc_info=exc_info\n \n def __str__(self):\n return str(self.test)\n \nclass DebugRunner(DocTestRunner):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def run(self,test,compileflags=None ,out=None ,clear_globs=True ):\n r=DocTestRunner.run(self,test,compileflags,out,False )\n if clear_globs:\n test.globs.clear()\n return r\n \n def report_unexpected_exception(self,out,test,example,exc_info):\n raise UnexpectedException(test,example,exc_info)\n \n def report_failure(self,out,test,example,got):\n raise DocTestFailure(test,example,got)\n \n \n \n \n \n \n \n \nmaster=None\n\ndef testmod(m=None ,name=None ,globs=None ,verbose=None ,\nreport=True ,optionflags=0,extraglobs=None ,\nraise_on_error=False ,exclude_empty=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global master\n \n \n if m is None :\n \n \n \n m=sys.modules.get('__main__')\n \n \n if not inspect.ismodule(m):\n raise TypeError(\"testmod: module required; %r\"%(m,))\n \n \n if name is None :\n name=m.__name__\n \n \n finder=DocTestFinder(exclude_empty=exclude_empty)\n \n if raise_on_error:\n runner=DebugRunner(verbose=verbose,optionflags=optionflags)\n else :\n runner=DocTestRunner(verbose=verbose,optionflags=optionflags)\n \n for test in finder.find(m,name,globs=globs,extraglobs=extraglobs):\n runner.run(test)\n \n if report:\n runner.summarize()\n \n if master is None :\n master=runner\n else :\n master.merge(runner)\n \n return TestResults(runner.failures,runner.tries)\n \ndef testfile(filename,module_relative=True ,name=None ,package=None ,\nglobs=None ,verbose=None ,report=True ,optionflags=0,\nextraglobs=None ,raise_on_error=False ,parser=DocTestParser(),\nencoding=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global master\n \n if package and not module_relative:\n raise ValueError(\"Package may only be specified for module-\"\n \"relative paths.\")\n \n \n text,filename=_load_testfile(filename,package,module_relative,\n encoding or \"utf-8\")\n \n \n if name is None :\n name=os.path.basename(filename)\n \n \n if globs is None :\n globs={}\n else :\n globs=globs.copy()\n if extraglobs is not None :\n globs.update(extraglobs)\n if '__name__'not in globs:\n globs['__name__']='__main__'\n \n if raise_on_error:\n runner=DebugRunner(verbose=verbose,optionflags=optionflags)\n else :\n runner=DocTestRunner(verbose=verbose,optionflags=optionflags)\n \n \n test=parser.get_doctest(text,globs,name,filename,0)\n runner.run(test)\n \n if report:\n runner.summarize()\n \n if master is None :\n master=runner\n else :\n master.merge(runner)\n \n return TestResults(runner.failures,runner.tries)\n \ndef run_docstring_examples(f,globs,verbose=False ,name=\"NoName\",\ncompileflags=None ,optionflags=0):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n finder=DocTestFinder(verbose=verbose,recurse=False )\n runner=DocTestRunner(verbose=verbose,optionflags=optionflags)\n for test in finder.find(f,name,globs=globs):\n runner.run(test,compileflags=compileflags)\n \n \n \n \n \n_unittest_reportflags=0\n\ndef set_unittest_reportflags(flags):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _unittest_reportflags\n \n if (flags&REPORTING_FLAGS)!=flags:\n raise ValueError(\"Only reporting flags allowed\",flags)\n old=_unittest_reportflags\n _unittest_reportflags=flags\n return old\n \n \nclass DocTestCase(unittest.TestCase):\n\n def __init__(self,test,optionflags=0,setUp=None ,tearDown=None ,\n checker=None ):\n \n unittest.TestCase.__init__(self)\n self._dt_optionflags=optionflags\n self._dt_checker=checker\n self._dt_test=test\n self._dt_setUp=setUp\n self._dt_tearDown=tearDown\n \n def setUp(self):\n test=self._dt_test\n \n if self._dt_setUp is not None :\n self._dt_setUp(test)\n \n def tearDown(self):\n test=self._dt_test\n \n if self._dt_tearDown is not None :\n self._dt_tearDown(test)\n \n test.globs.clear()\n \n def runTest(self):\n test=self._dt_test\n old=sys.stdout\n new=StringIO()\n optionflags=self._dt_optionflags\n \n if not (optionflags&REPORTING_FLAGS):\n \n \n optionflags |=_unittest_reportflags\n \n runner=DocTestRunner(optionflags=optionflags,\n checker=self._dt_checker,verbose=False )\n \n try :\n runner.DIVIDER=\"-\"*70\n failures,tries=runner.run(\n test,out=new.write,clear_globs=False )\n finally :\n sys.stdout=old\n \n if failures:\n raise self.failureException(self.format_failure(new.getvalue()))\n \n def format_failure(self,err):\n test=self._dt_test\n if test.lineno is None :\n lineno='unknown line number'\n else :\n lineno='%s'%test.lineno\n lname='.'.join(test.name.split('.')[-1:])\n return ('Failed doctest test for %s\\n'\n ' File \"%s\", line %s, in %s\\n\\n%s'\n %(test.name,test.filename,lineno,lname,err)\n )\n \n def debug(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n self.setUp()\n runner=DebugRunner(optionflags=self._dt_optionflags,\n checker=self._dt_checker,verbose=False )\n runner.run(self._dt_test,clear_globs=False )\n self.tearDown()\n \n def id(self):\n return self._dt_test.name\n \n def __eq__(self,other):\n if type(self)is not type(other):\n return NotImplemented\n \n return self._dt_test ==other._dt_test and\\\n self._dt_optionflags ==other._dt_optionflags and\\\n self._dt_setUp ==other._dt_setUp and\\\n self._dt_tearDown ==other._dt_tearDown and\\\n self._dt_checker ==other._dt_checker\n \n def __hash__(self):\n return hash((self._dt_optionflags,self._dt_setUp,self._dt_tearDown,\n self._dt_checker))\n \n def __repr__(self):\n name=self._dt_test.name.split('.')\n return \"%s (%s)\"%(name[-1],'.'.join(name[:-1]))\n \n __str__=__repr__\n \n def shortDescription(self):\n return \"Doctest: \"+self._dt_test.name\n \nclass SkipDocTestCase(DocTestCase):\n def __init__(self,module):\n self.module=module\n DocTestCase.__init__(self,None )\n \n def setUp(self):\n self.skipTest(\"DocTestSuite will not work with -O2 and above\")\n \n def test_skip(self):\n pass\n \n def shortDescription(self):\n return \"Skipping tests from %s\"%self.module.__name__\n \n __str__=shortDescription\n \n \nclass _DocTestSuite(unittest.TestSuite):\n\n def _removeTestAtIndex(self,index):\n pass\n \n \ndef DocTestSuite(module=None ,globs=None ,extraglobs=None ,test_finder=None ,\n**options):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if test_finder is None :\n test_finder=DocTestFinder()\n \n module=_normalize_module(module)\n tests=test_finder.find(module,globs=globs,extraglobs=extraglobs)\n \n if not tests and sys.flags.optimize >=2:\n \n suite=_DocTestSuite()\n suite.addTest(SkipDocTestCase(module))\n return suite\n elif not tests:\n \n \n \n \n \n \n \n raise ValueError(module,\"has no docstrings\")\n \n tests.sort()\n suite=_DocTestSuite()\n \n for test in tests:\n if len(test.examples)==0:\n continue\n if not test.filename:\n filename=module.__file__\n if filename[-4:]in (\".pyc\",\".pyo\"):\n filename=filename[:-1]\n test.filename=filename\n suite.addTest(DocTestCase(test,**options))\n \n return suite\n \nclass DocFileCase(DocTestCase):\n\n def id(self):\n return '_'.join(self._dt_test.name.split('.'))\n \n def __repr__(self):\n return self._dt_test.filename\n __str__=__repr__\n \n def format_failure(self,err):\n return ('Failed doctest test for %s\\n File \"%s\", line 0\\n\\n%s'\n %(self._dt_test.name,self._dt_test.filename,err)\n )\n \ndef DocFileTest(path,module_relative=True ,package=None ,\nglobs=None ,parser=DocTestParser(),\nencoding=None ,**options):\n if globs is None :\n globs={}\n else :\n globs=globs.copy()\n \n if package and not module_relative:\n raise ValueError(\"Package may only be specified for module-\"\n \"relative paths.\")\n \n \n doc,path=_load_testfile(path,package,module_relative,\n encoding or \"utf-8\")\n \n if \"__file__\"not in globs:\n globs[\"__file__\"]=path\n \n \n name=os.path.basename(path)\n \n \n test=parser.get_doctest(doc,globs,name,path,0)\n return DocFileCase(test,**options)\n \ndef DocFileSuite(*paths,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n suite=_DocTestSuite()\n \n \n \n \n if kw.get('module_relative',True ):\n kw['package']=_normalize_module(kw.get('package'))\n \n for path in paths:\n suite.addTest(DocFileTest(path,**kw))\n \n return suite\n \n \n \n \n \ndef script_from_examples(s):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n output=[]\n for piece in DocTestParser().parse(s):\n if isinstance(piece,Example):\n \n output.append(piece.source[:-1])\n \n want=piece.want\n if want:\n output.append('# Expected:')\n output +=['## '+l for l in want.split('\\n')[:-1]]\n else :\n \n output +=[_comment_line(l)\n for l in piece.split('\\n')[:-1]]\n \n \n while output and output[-1]=='#':\n output.pop()\n while output and output[0]=='#':\n output.pop(0)\n \n \n return '\\n'.join(output)+'\\n'\n \ndef testsource(module,name):\n ''\n\n\n\n\n \n module=_normalize_module(module)\n tests=DocTestFinder().find(module)\n test=[t for t in tests if t.name ==name]\n if not test:\n raise ValueError(name,\"not found in tests\")\n test=test[0]\n testsrc=script_from_examples(test.docstring)\n return testsrc\n \ndef debug_src(src,pm=False ,globs=None ):\n ''\n testsrc=script_from_examples(src)\n debug_script(testsrc,pm,globs)\n \ndef debug_script(src,pm=False ,globs=None ):\n ''\n import pdb\n \n if globs:\n globs=globs.copy()\n else :\n globs={}\n \n if pm:\n try :\n exec(src,globs,globs)\n except :\n print(sys.exc_info()[1])\n p=pdb.Pdb(nosigint=True )\n p.reset()\n p.interaction(None ,sys.exc_info()[2])\n else :\n pdb.Pdb(nosigint=True ).run(\"exec(%r)\"%src,globs,globs)\n \ndef debug(module,name,pm=False ):\n ''\n\n\n\n\n \n module=_normalize_module(module)\n testsrc=testsource(module,name)\n debug_script(testsrc,pm,module.__dict__)\n \n \n \n \nclass _TestClass:\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,val):\n ''\n\n\n\n\n \n \n self.val=val\n \n def square(self):\n ''\n\n\n\n \n \n self.val=self.val **2\n return self\n \n def get(self):\n ''\n\n\n\n\n \n \n return self.val\n \n__test__={\"_TestClass\":_TestClass,\n\"string\":r\"\"\"\n Example of a string object, searched as-is.\n >>> x = 1; y = 2\n >>> x + y, x * y\n (3, 2)\n \"\"\",\n\n\"bool-int equivalence\":r\"\"\"\n In 2.2, boolean expressions displayed\n 0 or 1. By default, we still accept\n them. This can be disabled by passing\n DONT_ACCEPT_TRUE_FOR_1 to the new\n optionflags argument.\n >>> 4 == 4\n 1\n >>> 4 == 4\n True\n >>> 4 > 4\n 0\n >>> 4 > 4\n False\n \"\"\",\n\n\"blank lines\":r\"\"\"\n Blank lines can be marked with :\n >>> print('foo\\n\\nbar\\n')\n foo\n \n bar\n \n \"\"\",\n\n\"ellipsis\":r\"\"\"\n If the ellipsis flag is used, then '...' can be used to\n elide substrings in the desired output:\n >>> print(list(range(1000))) #doctest: +ELLIPSIS\n [0, 1, 2, ..., 999]\n \"\"\",\n\n\"whitespace normalization\":r\"\"\"\n If the whitespace normalization flag is used, then\n differences in whitespace are ignored.\n >>> print(list(range(30))) #doctest: +NORMALIZE_WHITESPACE\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,\n 27, 28, 29]\n \"\"\",\n}\n\n\ndef _test():\n parser=argparse.ArgumentParser(description=\"doctest runner\")\n parser.add_argument('-v','--verbose',action='store_true',default=False ,\n help='print very verbose output for all tests')\n parser.add_argument('-o','--option',action='append',\n choices=OPTIONFLAGS_BY_NAME.keys(),default=[],\n help=('specify a doctest option flag to apply'\n ' to the test run; may be specified more'\n ' than once to apply multiple options'))\n parser.add_argument('-f','--fail-fast',action='store_true',\n help=('stop running tests after first failure (this'\n ' is a shorthand for -o FAIL_FAST, and is'\n ' in addition to any other -o options)'))\n parser.add_argument('file',nargs='+',\n help='file containing the tests to run')\n args=parser.parse_args()\n testfiles=args.file\n \n \n verbose=args.verbose\n options=0\n for option in args.option:\n options |=OPTIONFLAGS_BY_NAME[option]\n if args.fail_fast:\n options |=FAIL_FAST\n for filename in testfiles:\n if filename.endswith(\".py\"):\n \n \n \n dirname,filename=os.path.split(filename)\n sys.path.insert(0,dirname)\n m=__import__(filename[:-3])\n del sys.path[0]\n failures,_=testmod(m,verbose=verbose,optionflags=options)\n else :\n failures,_=testfile(filename,module_relative=False ,\n verbose=verbose,optionflags=options)\n if failures:\n return 1\n return 0\n \n \nif __name__ ==\"__main__\":\n sys.exit(_test())\n",["__future__","argparse","builtins","collections","difflib","inspect","io","linecache","os","pdb","re","sys","traceback","unittest"]],enum:[".py","import sys\nfrom types import MappingProxyType,DynamicClassAttribute\n\n\n__all__=[\n'EnumMeta',\n'Enum','IntEnum','Flag','IntFlag',\n'auto','unique',\n]\n\n\ndef _is_descriptor(obj):\n ''\n return (\n hasattr(obj,'__get__')or\n hasattr(obj,'__set__')or\n hasattr(obj,'__delete__'))\n \n \ndef _is_dunder(name):\n ''\n return (name[:2]==name[-2:]=='__'and\n name[2:3]!='_'and\n name[-3:-2]!='_'and\n len(name)>4)\n \n \ndef _is_sunder(name):\n ''\n return (name[0]==name[-1]=='_'and\n name[1:2]!='_'and\n name[-2:-1]!='_'and\n len(name)>2)\n \ndef _make_class_unpicklable(cls):\n ''\n def _break_on_call_reduce(self,proto):\n raise TypeError('%r cannot be pickled'%self)\n cls.__reduce_ex__=_break_on_call_reduce\n cls.__module__=''\n \n_auto_null=object()\nclass auto:\n ''\n\n \n value=_auto_null\n \n \nclass _EnumDict(dict):\n ''\n\n\n\n\n \n def __init__(self):\n super().__init__()\n self._member_names=[]\n self._last_values=[]\n self._ignore=[]\n \n def __setitem__(self,key,value):\n ''\n\n\n\n\n\n\n \n if _is_sunder(key):\n if key not in (\n '_order_','_create_pseudo_member_',\n '_generate_next_value_','_missing_','_ignore_',\n ):\n raise ValueError('_names_ are reserved for future Enum use')\n if key =='_generate_next_value_':\n setattr(self,'_generate_next_value',value)\n elif key =='_ignore_':\n if isinstance(value,str):\n value=value.replace(',',' ').split()\n else :\n value=list(value)\n self._ignore=value\n already=set(value)&set(self._member_names)\n if already:\n raise ValueError('_ignore_ cannot specify already set names: %r'%(already,))\n elif _is_dunder(key):\n if key =='__order__':\n key='_order_'\n elif key in self._member_names:\n \n raise TypeError('Attempted to reuse key: %r'%key)\n elif key in self._ignore:\n pass\n elif not _is_descriptor(value):\n if key in self:\n \n raise TypeError('%r already defined as: %r'%(key,self[key]))\n if isinstance(value,auto):\n if value.value ==_auto_null:\n value.value=self._generate_next_value(key,1,len(self._member_names),self._last_values[:])\n value=value.value\n self._member_names.append(key)\n self._last_values.append(value)\n super().__setitem__(key,value)\n \n \n \n \n \nEnum=None\n\n\nclass EnumMeta(type):\n ''\n @classmethod\n def __prepare__(metacls,cls,bases):\n \n enum_dict=_EnumDict()\n \n member_type,first_enum=metacls._get_mixins_(bases)\n if first_enum is not None :\n enum_dict['_generate_next_value_']=getattr(first_enum,'_generate_next_value_',None )\n return enum_dict\n \n def __new__(metacls,cls,bases,classdict):\n \n \n \n \n \n \n classdict.setdefault('_ignore_',[]).append('_ignore_')\n ignore=classdict['_ignore_']\n for key in ignore:\n classdict.pop(key,None )\n member_type,first_enum=metacls._get_mixins_(bases)\n __new__,save_new,use_args=metacls._find_new_(classdict,member_type,\n first_enum)\n \n \n \n enum_members={k:classdict[k]for k in classdict._member_names}\n for name in classdict._member_names:\n del classdict[name]\n \n \n _order_=classdict.pop('_order_',None )\n \n \n invalid_names=set(enum_members)&{'mro',}\n if invalid_names:\n raise ValueError('Invalid enum member name: {0}'.format(\n ','.join(invalid_names)))\n \n \n if '__doc__'not in classdict:\n classdict['__doc__']='An enumeration.'\n \n \n enum_class=super().__new__(metacls,cls,bases,classdict)\n enum_class._member_names_=[]\n enum_class._member_map_={}\n enum_class._member_type_=member_type\n \n \n \n base_attributes={a for b in enum_class.mro()for a in b.__dict__}\n \n \n enum_class._value2member_map_={}\n \n \n \n \n \n \n \n \n \n \n \n if '__reduce_ex__'not in classdict:\n if member_type is not object:\n methods=('__getnewargs_ex__','__getnewargs__',\n '__reduce_ex__','__reduce__')\n if not any(m in member_type.__dict__ for m in methods):\n _make_class_unpicklable(enum_class)\n \n \n \n \n \n for member_name in classdict._member_names:\n value=enum_members[member_name]\n if not isinstance(value,tuple):\n args=(value,)\n else :\n args=value\n if member_type is tuple:\n args=(args,)\n if not use_args:\n enum_member=__new__(enum_class)\n if not hasattr(enum_member,'_value_'):\n enum_member._value_=value\n else :\n enum_member=__new__(enum_class,*args)\n if not hasattr(enum_member,'_value_'):\n if member_type is object:\n enum_member._value_=value\n else :\n enum_member._value_=member_type(*args)\n value=enum_member._value_\n enum_member._name_=member_name\n enum_member.__objclass__=enum_class\n enum_member.__init__(*args)\n \n \n for name,canonical_member in enum_class._member_map_.items():\n if canonical_member._value_ ==enum_member._value_:\n enum_member=canonical_member\n break\n else :\n \n enum_class._member_names_.append(member_name)\n \n \n if member_name not in base_attributes:\n setattr(enum_class,member_name,enum_member)\n \n enum_class._member_map_[member_name]=enum_member\n try :\n \n \n \n enum_class._value2member_map_[value]=enum_member\n except TypeError:\n pass\n \n \n \n for name in ('__repr__','__str__','__format__','__reduce_ex__'):\n class_method=getattr(enum_class,name)\n obj_method=getattr(member_type,name,None )\n enum_method=getattr(first_enum,name,None )\n if obj_method is not None and obj_method is class_method:\n setattr(enum_class,name,enum_method)\n \n \n \n if Enum is not None :\n \n \n if save_new:\n enum_class.__new_member__=__new__\n enum_class.__new__=Enum.__new__\n \n \n if _order_ is not None :\n if isinstance(_order_,str):\n _order_=_order_.replace(',',' ').split()\n if _order_ !=enum_class._member_names_:\n raise TypeError('member order does not match _order_')\n \n return enum_class\n \n def __bool__(self):\n ''\n\n \n return True\n \n def __call__(cls,value,names=None ,*,module=None ,qualname=None ,type=None ,start=1):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if names is None :\n return cls.__new__(cls,value)\n \n return cls._create_(value,names,module=module,qualname=qualname,type=type,start=start)\n \n def __contains__(cls,member):\n return isinstance(member,cls)and member._name_ in cls._member_map_\n \n def __delattr__(cls,attr):\n \n \n if attr in cls._member_map_:\n raise AttributeError(\n \"%s: cannot delete Enum member.\"%cls.__name__)\n super().__delattr__(attr)\n \n def __dir__(self):\n return (['__class__','__doc__','__members__','__module__']+\n self._member_names_)\n \n def __getattr__(cls,name):\n ''\n\n\n\n\n\n\n \n if _is_dunder(name):\n raise AttributeError(name)\n try :\n return cls._member_map_[name]\n except KeyError:\n raise AttributeError(name)from None\n \n def __getitem__(cls,name):\n return cls._member_map_[name]\n \n def __iter__(cls):\n return (cls._member_map_[name]for name in cls._member_names_)\n \n def __len__(cls):\n return len(cls._member_names_)\n \n @property\n def __members__(cls):\n ''\n\n\n\n\n \n return MappingProxyType(cls._member_map_)\n \n def __repr__(cls):\n return \"\"%cls.__name__\n \n def __reversed__(cls):\n return (cls._member_map_[name]for name in reversed(cls._member_names_))\n \n def __setattr__(cls,name,value):\n ''\n\n\n\n\n\n \n member_map=cls.__dict__.get('_member_map_',{})\n if name in member_map:\n raise AttributeError('Cannot reassign members.')\n super().__setattr__(name,value)\n \n def _create_(cls,class_name,names,*,module=None ,qualname=None ,type=None ,start=1):\n ''\n\n\n\n\n\n\n\n\n\n \n metacls=cls.__class__\n bases=(cls,)if type is None else (type,cls)\n _,first_enum=cls._get_mixins_(bases)\n classdict=metacls.__prepare__(class_name,bases)\n \n \n if isinstance(names,str):\n names=names.replace(',',' ').split()\n if isinstance(names,(tuple,list))and names and isinstance(names[0],str):\n original_names,names=names,[]\n last_values=[]\n for count,name in enumerate(original_names):\n value=first_enum._generate_next_value_(name,start,count,last_values[:])\n last_values.append(value)\n names.append((name,value))\n \n \n for item in names:\n if isinstance(item,str):\n member_name,member_value=item,names[item]\n else :\n member_name,member_value=item\n classdict[member_name]=member_value\n enum_class=metacls.__new__(metacls,class_name,bases,classdict)\n \n \n \n if module is None :\n try :\n module=sys._getframe(2).f_globals['__name__']\n except (AttributeError,ValueError)as exc:\n pass\n if module is None :\n _make_class_unpicklable(enum_class)\n else :\n enum_class.__module__=module\n if qualname is not None :\n enum_class.__qualname__=qualname\n \n return enum_class\n \n @staticmethod\n def _get_mixins_(bases):\n ''\n\n\n\n\n \n if not bases:\n return object,Enum\n \n \n \n \n member_type=first_enum=None\n for base in bases:\n if (base is not Enum and\n issubclass(base,Enum)and\n base._member_names_):\n raise TypeError(\"Cannot extend enumerations\")\n \n if not issubclass(base,Enum):\n raise TypeError(\"new enumerations must be created as \"\n \"`ClassName([mixin_type,] enum_type)`\")\n \n \n \n if not issubclass(bases[0],Enum):\n member_type=bases[0]\n first_enum=bases[-1]\n else :\n for base in bases[0].__mro__:\n \n \n \n \n if issubclass(base,Enum):\n if first_enum is None :\n first_enum=base\n else :\n if member_type is None :\n member_type=base\n \n return member_type,first_enum\n \n @staticmethod\n def _find_new_(classdict,member_type,first_enum):\n ''\n\n\n\n\n\n \n \n \n \n __new__=classdict.get('__new__',None )\n \n \n save_new=__new__ is not None\n \n if __new__ is None :\n \n \n for method in ('__new_member__','__new__'):\n for possible in (member_type,first_enum):\n target=getattr(possible,method,None )\n if target not in {\n None ,\n None .__new__,\n object.__new__,\n Enum.__new__,\n }:\n __new__=target\n break\n if __new__ is not None :\n break\n else :\n __new__=object.__new__\n \n \n \n \n if __new__ is object.__new__:\n use_args=False\n else :\n use_args=True\n \n return __new__,save_new,use_args\n \n \nclass Enum(metaclass=EnumMeta):\n ''\n\n\n\n \n def __new__(cls,value):\n \n \n \n if type(value)is cls:\n \n return value\n \n \n try :\n if value in cls._value2member_map_:\n return cls._value2member_map_[value]\n except TypeError:\n \n for member in cls._member_map_.values():\n if member._value_ ==value:\n return member\n \n return cls._missing_(value)\n \n def _generate_next_value_(name,start,count,last_values):\n for last_value in reversed(last_values):\n try :\n return last_value+1\n except TypeError:\n pass\n else :\n return start\n \n @classmethod\n def _missing_(cls,value):\n raise ValueError(\"%r is not a valid %s\"%(value,cls.__name__))\n \n def __repr__(self):\n return \"<%s.%s: %r>\"%(\n self.__class__.__name__,self._name_,self._value_)\n \n def __str__(self):\n return \"%s.%s\"%(self.__class__.__name__,self._name_)\n \n def __dir__(self):\n added_behavior=[\n m\n for cls in self.__class__.mro()\n for m in cls.__dict__\n if m[0]!='_'and m not in self._member_map_\n ]\n return (['__class__','__doc__','__module__']+added_behavior)\n \n def __format__(self,format_spec):\n \n \n \n \n \n if self._member_type_ is object:\n cls=str\n val=str(self)\n \n else :\n cls=self._member_type_\n val=self._value_\n return cls.__format__(val,format_spec)\n \n def __hash__(self):\n return hash(self._name_)\n \n def __reduce_ex__(self,proto):\n return self.__class__,(self._value_,)\n \n \n \n \n \n \n \n \n @DynamicClassAttribute\n def name(self):\n ''\n return self._name_\n \n @DynamicClassAttribute\n def value(self):\n ''\n return self._value_\n \n @classmethod\n def _convert(cls,name,module,filter,source=None ):\n ''\n\n \n \n \n \n \n \n module_globals=vars(sys.modules[module])\n if source:\n source=vars(source)\n else :\n source=module_globals\n \n \n \n members=[\n (name,value)\n for name,value in source.items()\n if filter(name)]\n try :\n \n members.sort(key=lambda t:(t[1],t[0]))\n except TypeError:\n \n members.sort(key=lambda t:t[0])\n cls=cls(name,members,module=module)\n cls.__reduce_ex__=_reduce_ex_by_name\n module_globals.update(cls.__members__)\n module_globals[name]=cls\n return cls\n \n \nclass IntEnum(int,Enum):\n ''\n \n \ndef _reduce_ex_by_name(self,proto):\n return self.name\n \nclass Flag(Enum):\n ''\n \n def _generate_next_value_(name,start,count,last_values):\n ''\n\n\n\n\n\n\n \n if not count:\n return start if start is not None else 1\n for last_value in reversed(last_values):\n try :\n high_bit=_high_bit(last_value)\n break\n except Exception:\n raise TypeError('Invalid Flag value: %r'%last_value)from None\n return 2 **(high_bit+1)\n \n @classmethod\n def _missing_(cls,value):\n original_value=value\n if value <0:\n value=~value\n possible_member=cls._create_pseudo_member_(value)\n if original_value <0:\n possible_member=~possible_member\n return possible_member\n \n @classmethod\n def _create_pseudo_member_(cls,value):\n ''\n\n \n pseudo_member=cls._value2member_map_.get(value,None )\n if pseudo_member is None :\n \n _,extra_flags=_decompose(cls,value)\n if extra_flags:\n raise ValueError(\"%r is not a valid %s\"%(value,cls.__name__))\n \n pseudo_member=object.__new__(cls)\n pseudo_member._name_=None\n pseudo_member._value_=value\n \n \n pseudo_member=cls._value2member_map_.setdefault(value,pseudo_member)\n return pseudo_member\n \n def __contains__(self,other):\n if not isinstance(other,self.__class__):\n return NotImplemented\n return other._value_&self._value_ ==other._value_\n \n def __repr__(self):\n cls=self.__class__\n if self._name_ is not None :\n return '<%s.%s: %r>'%(cls.__name__,self._name_,self._value_)\n members,uncovered=_decompose(cls,self._value_)\n return '<%s.%s: %r>'%(\n cls.__name__,\n '|'.join([str(m._name_ or m._value_)for m in members]),\n self._value_,\n )\n \n def __str__(self):\n cls=self.__class__\n if self._name_ is not None :\n return '%s.%s'%(cls.__name__,self._name_)\n members,uncovered=_decompose(cls,self._value_)\n if len(members)==1 and members[0]._name_ is None :\n return '%s.%r'%(cls.__name__,members[0]._value_)\n else :\n return '%s.%s'%(\n cls.__name__,\n '|'.join([str(m._name_ or m._value_)for m in members]),\n )\n \n def __bool__(self):\n return bool(self._value_)\n \n def __or__(self,other):\n if not isinstance(other,self.__class__):\n return NotImplemented\n return self.__class__(self._value_ |other._value_)\n \n def __and__(self,other):\n if not isinstance(other,self.__class__):\n return NotImplemented\n return self.__class__(self._value_&other._value_)\n \n def __xor__(self,other):\n if not isinstance(other,self.__class__):\n return NotImplemented\n return self.__class__(self._value_ ^other._value_)\n \n def __invert__(self):\n members,uncovered=_decompose(self.__class__,self._value_)\n inverted=self.__class__(0)\n for m in self.__class__:\n if m not in members and not (m._value_&self._value_):\n inverted=inverted |m\n return self.__class__(inverted)\n \n \nclass IntFlag(int,Flag):\n ''\n \n @classmethod\n def _missing_(cls,value):\n if not isinstance(value,int):\n raise ValueError(\"%r is not a valid %s\"%(value,cls.__name__))\n new_member=cls._create_pseudo_member_(value)\n return new_member\n \n @classmethod\n def _create_pseudo_member_(cls,value):\n pseudo_member=cls._value2member_map_.get(value,None )\n if pseudo_member is None :\n need_to_create=[value]\n \n _,extra_flags=_decompose(cls,value)\n \n while extra_flags:\n \n bit=_high_bit(extra_flags)\n flag_value=2 **bit\n if (flag_value not in cls._value2member_map_ and\n flag_value not in need_to_create\n ):\n need_to_create.append(flag_value)\n if extra_flags ==-flag_value:\n extra_flags=0\n else :\n extra_flags ^=flag_value\n for value in reversed(need_to_create):\n \n pseudo_member=int.__new__(cls,value)\n pseudo_member._name_=None\n pseudo_member._value_=value\n \n \n pseudo_member=cls._value2member_map_.setdefault(value,pseudo_member)\n return pseudo_member\n \n def __or__(self,other):\n if not isinstance(other,(self.__class__,int)):\n return NotImplemented\n result=self.__class__(self._value_ |self.__class__(other)._value_)\n return result\n \n def __and__(self,other):\n if not isinstance(other,(self.__class__,int)):\n return NotImplemented\n return self.__class__(self._value_&self.__class__(other)._value_)\n \n def __xor__(self,other):\n if not isinstance(other,(self.__class__,int)):\n return NotImplemented\n return self.__class__(self._value_ ^self.__class__(other)._value_)\n \n __ror__=__or__\n __rand__=__and__\n __rxor__=__xor__\n \n def __invert__(self):\n result=self.__class__(~self._value_)\n return result\n \n \ndef _high_bit(value):\n ''\n return value.bit_length()-1\n \ndef unique(enumeration):\n ''\n duplicates=[]\n for name,member in enumeration.__members__.items():\n if name !=member.name:\n duplicates.append((name,member.name))\n if duplicates:\n alias_details=', '.join(\n [\"%s -> %s\"%(alias,name)for (alias,name)in duplicates])\n raise ValueError('duplicate values found in %r: %s'%\n (enumeration,alias_details))\n return enumeration\n \ndef _decompose(flag,value):\n ''\n \n not_covered=value\n negative=value <0\n \n \n \n if negative:\n \n flags_to_check=[\n (m,v)\n for v,m in list(flag._value2member_map_.items())\n if m.name is not None\n ]\n else :\n \n flags_to_check=[\n (m,v)\n for v,m in list(flag._value2member_map_.items())\n if m.name is not None or _power_of_two(v)\n ]\n members=[]\n for member,member_value in flags_to_check:\n if member_value and member_value&value ==member_value:\n members.append(member)\n not_covered &=~member_value\n if not members and value in flag._value2member_map_:\n members.append(flag._value2member_map_[value])\n members.sort(key=lambda m:m._value_,reverse=True )\n if len(members)>1 and members[0].value ==value:\n \n members.pop(0)\n return members,not_covered\n \ndef _power_of_two(value):\n if value <1:\n return False\n return value ==2 **_high_bit(value)\n",["sys","types"]],errno:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\nE2BIG=7\n\nEACCES=13\n\nEADDRINUSE=10048\n\nEADDRNOTAVAIL=10049\n\nEAFNOSUPPORT=10047\n\nEAGAIN=11\n\nEALREADY=10037\n\nEBADF=9\n\nEBADMSG=104\n\nEBUSY=16\n\nECANCELED=105\n\nECHILD=10\n\nECONNABORTED=10053\n\nECONNREFUSED=10061\n\nECONNRESET=10054\n\nEDEADLK=36\n\nEDEADLOCK=36\n\nEDESTADDRREQ=10039\n\nEDOM=33\n\nEDQUOT=10069\n\nEEXIST=17\n\nEFAULT=14\n\nEFBIG=27\n\nEHOSTDOWN=10064\n\nEHOSTUNREACH=10065\n\nEIDRM=111\n\nEILSEQ=42\n\nEINPROGRESS=10036\n\nEINTR=4\n\nEINVAL=22\n\nEIO=5\n\nEISCONN=10056\n\nEISDIR=21\n\nELOOP=10062\n\nEMFILE=24\n\nEMLINK=31\n\nEMSGSIZE=10040\n\nENAMETOOLONG=38\n\nENETDOWN=10050\n\nENETRESET=10052\n\nENETUNREACH=10051\n\nENFILE=23\n\nENOBUFS=10055\n\nENODATA=120\n\nENODEV=19\n\nENOENT=2\n\nENOEXEC=8\n\nENOLCK=39\n\nENOLINK=121\n\nENOMEM=12\n\nENOMSG=122\n\nENOPROTOOPT=10042\n\nENOSPC=28\n\nENOSR=124\n\nENOSTR=125\n\nENOSYS=40\n\nENOTCONN=10057\n\nENOTDIR=20\n\nENOTEMPTY=41\n\nENOTRECOVERABLE=127\n\nENOTSOCK=10038\n\nENOTSUP=129\n\nENOTTY=25\n\nENXIO=6\n\nEOPNOTSUPP=10045\n\nEOVERFLOW=132\n\nEOWNERDEAD=133\n\nEPERM=1\n\nEPFNOSUPPORT=10046\n\nEPIPE=32\n\nEPROTO=134\n\nEPROTONOSUPPORT=10043\n\nEPROTOTYPE=10041\n\nERANGE=34\n\nEREMOTE=10071\n\nEROFS=30\n\nESHUTDOWN=10058\n\nESOCKTNOSUPPORT=10044\n\nESPIPE=29\n\nESRCH=3\n\nESTALE=10070\n\nETIME=137\n\nETIMEDOUT=10060\n\nETOOMANYREFS=10059\n\nETXTBSY=139\n\nEUSERS=10068\n\nEWOULDBLOCK=10035\n\nEXDEV=18\n\nWSABASEERR=10000\n\nWSAEACCES=10013\n\nWSAEADDRINUSE=10048\n\nWSAEADDRNOTAVAIL=10049\n\nWSAEAFNOSUPPORT=10047\n\nWSAEALREADY=10037\n\nWSAEBADF=10009\n\nWSAECONNABORTED=10053\n\nWSAECONNREFUSED=10061\n\nWSAECONNRESET=10054\n\nWSAEDESTADDRREQ=10039\n\nWSAEDISCON=10101\n\nWSAEDQUOT=10069\n\nWSAEFAULT=10014\n\nWSAEHOSTDOWN=10064\n\nWSAEHOSTUNREACH=10065\n\nWSAEINPROGRESS=10036\n\nWSAEINTR=10004\n\nWSAEINVAL=10022\n\nWSAEISCONN=10056\n\nWSAELOOP=10062\n\nWSAEMFILE=10024\n\nWSAEMSGSIZE=10040\n\nWSAENAMETOOLONG=10063\n\nWSAENETDOWN=10050\n\nWSAENETRESET=10052\n\nWSAENETUNREACH=10051\n\nWSAENOBUFS=10055\n\nWSAENOPROTOOPT=10042\n\nWSAENOTCONN=10057\n\nWSAENOTEMPTY=10066\n\nWSAENOTSOCK=10038\n\nWSAEOPNOTSUPP=10045\n\nWSAEPFNOSUPPORT=10046\n\nWSAEPROCLIM=10067\n\nWSAEPROTONOSUPPORT=10043\n\nWSAEPROTOTYPE=10041\n\nWSAEREMOTE=10071\n\nWSAESHUTDOWN=10058\n\nWSAESOCKTNOSUPPORT=10044\n\nWSAESTALE=10070\n\nWSAETIMEDOUT=10060\n\nWSAETOOMANYREFS=10059\n\nWSAEUSERS=10068\n\nWSAEWOULDBLOCK=10035\n\nWSANOTINITIALISED=10093\n\nWSASYSNOTREADY=10091\n\nWSAVERNOTSUPPORTED=10092\n\nclass __loader__(object):\n ''\n\n\n\n\n \n \n \n __delattr__=\"\"\n \n __dict__=\"{'__module__': '_frozen_importlib', '__doc__': 'Meta path import for built-in modules.\\n\\n All methods are either class or static methods to avoid the need to\\n instantiate the class.\\n\\n ', 'module_repr': , 'find_spec': , 'find_module': , 'create_module': , 'exec_module': , 'get_code': , 'get_source': , 'is_package': , 'load_module': , '__dict__': , '__weakref__': }\"\n \n __dir__=\"\"\n \n __eq__=\"\"\n \n __format__=\"\"\n \n __ge__=\"\"\n \n __getattribute__=\"\"\n \n __gt__=\"\"\n \n __hash__=\"\"\n \n __init__=\"\"\n \n def __init_subclass__(*args,**kw):\n ''\n\n\n \n pass\n \n __le__=\"\"\n \n __lt__=\"\"\n \n __module__=\"\"\"_frozen_importlib\"\"\"\n \n __ne__=\"\"\n \n def __new__(*args,**kw):\n ''\n pass\n \n __reduce__=\"\"\n \n __reduce_ex__=\"\"\n \n __repr__=\"\"\n \n __setattr__=\"\"\n \n __sizeof__=\"\"\n \n __str__=\"\"\n \n def __subclasshook__(*args,**kw):\n ''\n\n\n\n\n \n pass\n \n __weakref__=\"\"\n \n create_module=\">\"\n \n exec_module=\">\"\n \n find_module=\">\"\n \n find_spec=\">\"\n \n get_code=\">\"\n \n get_source=\">\"\n \n is_package=\">\"\n \n load_module=\">\"\n \n def module_repr(*args,**kw):\n ''\n\n\n \n pass\n__spec__=\"ModuleSpec(name='errno', loader=, origin='built-in')\"\n\nerrorcode={v:k for (k,v)in globals().items()if k ==k.upper()}\n",[]],external_import:[".py","import os\nfrom browser import doc\nimport urllib.request\n\n\n\n\n\nclass ModuleFinder:\n def __init__(self,path_entry):\n print(\"external_import here..\")\n \n self._module=None\n if path_entry.startswith('http://'):\n self.path_entry=path_entry\n else :\n raise ImportError()\n \n def __str__(self):\n return '<%s for \"%s\">'%(self.__class__.__name__,self.path_entry)\n \n def find_module(self,fullname,path=None ):\n path=path or self.path_entry\n \n for _ext in ['js','pyj','py']:\n _fp,_url,_headers=urllib.request.urlopen(path+'/'+'%s.%s'%(fullname,_ext))\n self._module=_fp.read()\n _fp.close()\n if self._module is not None :\n print(\"module found at %s:%s\"%(path,fullname))\n return ModuleLoader(path,fullname,self._module)\n \n print('module %s not found'%fullname)\n raise ImportError()\n return None\n \nclass ModuleLoader:\n ''\n \n def __init__(self,filepath,name,module_source):\n self._filepath=filepath\n self._name=name\n self._module_source=module_source\n \n def get_source(self):\n return self._module_source\n \n def is_package(self):\n return '.'in self._name\n \n def load_module(self):\n if self._name in sys.modules:\n \n mod=sys.modules[self._name]\n return mod\n \n _src=self.get_source()\n if self._filepath.endswith('.js'):\n mod=JSObject(import_js_module(_src,self._filepath,self._name))\n elif self._filepath.endswith('.py'):\n mod=JSObject(import_py_module(_src,self._filepath,self._name))\n elif self._filepath.endswith('.pyj'):\n mod=JSObject(import_pyj_module(_src,self._filepath,self._name))\n else :\n raise ImportError('Invalid Module: %s'%self._filepath)\n \n \n mod.__file__=self._filepath\n mod.__name__=self._name\n mod.__path__=os.path.abspath(self._filepath)\n mod.__loader__=self\n mod.__package__='.'.join(self._name.split('.')[:-1])\n \n if self.is_package():\n print('adding path for package')\n \n \n mod.__path__=[self._filepath]\n else :\n print('imported as regular module')\n \n print('creating a new module object for \"%s\"'%self._name)\n sys.modules.setdefault(self._name,mod)\n JSObject(__BRYTHON__.imported)[self._name]=mod\n \n return mod\n",["browser","os","urllib.request"]],fnmatch:[".py","''\n\n\n\n\n\n\n\n\n\n\nimport os\nimport posixpath\nimport re\nimport functools\n\n__all__=[\"filter\",\"fnmatch\",\"fnmatchcase\",\"translate\"]\n\ndef fnmatch(name,pat):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n name=os.path.normcase(name)\n pat=os.path.normcase(pat)\n return fnmatchcase(name,pat)\n \n@functools.lru_cache(maxsize=256,typed=True )\ndef _compile_pattern(pat):\n if isinstance(pat,bytes):\n pat_str=str(pat,'ISO-8859-1')\n res_str=translate(pat_str)\n res=bytes(res_str,'ISO-8859-1')\n else :\n res=translate(pat)\n return re.compile(res).match\n \ndef filter(names,pat):\n ''\n result=[]\n pat=os.path.normcase(pat)\n match=_compile_pattern(pat)\n if os.path is posixpath:\n \n for name in names:\n if match(name):\n result.append(name)\n else :\n for name in names:\n if match(os.path.normcase(name)):\n result.append(name)\n return result\n \ndef fnmatchcase(name,pat):\n ''\n\n\n\n \n match=_compile_pattern(pat)\n return match(name)is not None\n \n \ndef translate(pat):\n ''\n\n\n \n \n i,n=0,len(pat)\n res=''\n while i =n:\n res=res+'\\\\['\n else :\n stuff=pat[i:j].replace('\\\\','\\\\\\\\')\n i=j+1\n if stuff[0]=='!':\n stuff='^'+stuff[1:]\n elif stuff[0]=='^':\n stuff='\\\\'+stuff\n res='%s[%s]'%(res,stuff)\n else :\n res=res+re.escape(c)\n return res+'\\Z(?ms)'\n",["functools","os","posixpath","re"]],formatter:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport sys\n\n\nAS_IS=None\n\n\nclass NullFormatter:\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,writer=None ):\n if writer is None :\n writer=NullWriter()\n self.writer=writer\n def end_paragraph(self,blankline):pass\n def add_line_break(self):pass\n def add_hor_rule(self,*args,**kw):pass\n def add_label_data(self,format,counter,blankline=None ):pass\n def add_flowing_data(self,data):pass\n def add_literal_data(self,data):pass\n def flush_softspace(self):pass\n def push_alignment(self,align):pass\n def pop_alignment(self):pass\n def push_font(self,x):pass\n def pop_font(self):pass\n def push_margin(self,margin):pass\n def pop_margin(self):pass\n def set_spacing(self,spacing):pass\n def push_style(self,*styles):pass\n def pop_style(self,n=1):pass\n def assert_line_data(self,flag=1):pass\n \n \nclass AbstractFormatter:\n ''\n\n\n\n\n\n \n \n \n \n \n \n \n def __init__(self,writer):\n self.writer=writer\n self.align=None\n self.align_stack=[]\n self.font_stack=[]\n self.margin_stack=[]\n self.spacing=None\n self.style_stack=[]\n self.nospace=1\n self.softspace=0\n self.para_end=1\n self.parskip=0\n self.hard_break=1\n self.have_label=0\n \n def end_paragraph(self,blankline):\n if not self.hard_break:\n self.writer.send_line_break()\n self.have_label=0\n if self.parskip 0:\n label=label+self.format_letter(c,counter)\n elif c in 'iI':\n if counter >0:\n label=label+self.format_roman(c,counter)\n else :\n label=label+c\n return label\n \n def format_letter(self,case,counter):\n label=''\n while counter >0:\n counter,x=divmod(counter -1,26)\n \n \n \n s=chr(ord(case)+x)\n label=s+label\n return label\n \n def format_roman(self,case,counter):\n ones=['i','x','c','m']\n fives=['v','l','d']\n label,index='',0\n \n while counter >0:\n counter,x=divmod(counter,10)\n if x ==9:\n label=ones[index]+ones[index+1]+label\n elif x ==4:\n label=ones[index]+fives[index]+label\n else :\n if x >=5:\n s=fives[index]\n x=x -5\n else :\n s=''\n s=s+ones[index]*x\n label=s+label\n index=index+1\n if case =='I':\n return label.upper()\n return label\n \n def add_flowing_data(self,data):\n if not data:return\n prespace=data[:1].isspace()\n postspace=data[-1:].isspace()\n data=\" \".join(data.split())\n if self.nospace and not data:\n return\n elif prespace or self.softspace:\n if not data:\n if not self.nospace:\n self.softspace=1\n self.parskip=0\n return\n if not self.nospace:\n data=' '+data\n self.hard_break=self.nospace=self.para_end=\\\n self.parskip=self.have_label=0\n self.softspace=postspace\n self.writer.send_flowing_data(data)\n \n def add_literal_data(self,data):\n if not data:return\n if self.softspace:\n self.writer.send_flowing_data(\" \")\n self.hard_break=data[-1:]=='\\n'\n self.nospace=self.para_end=self.softspace=\\\n self.parskip=self.have_label=0\n self.writer.send_literal_data(data)\n \n def flush_softspace(self):\n if self.softspace:\n self.hard_break=self.para_end=self.parskip=\\\n self.have_label=self.softspace=0\n self.nospace=1\n self.writer.send_flowing_data(' ')\n \n def push_alignment(self,align):\n if align and align !=self.align:\n self.writer.new_alignment(align)\n self.align=align\n self.align_stack.append(align)\n else :\n self.align_stack.append(self.align)\n \n def pop_alignment(self):\n if self.align_stack:\n del self.align_stack[-1]\n if self.align_stack:\n self.align=align=self.align_stack[-1]\n self.writer.new_alignment(align)\n else :\n self.align=None\n self.writer.new_alignment(None )\n \n def push_font(self,font):\n size,i,b,tt=font\n if self.softspace:\n self.hard_break=self.para_end=self.softspace=0\n self.nospace=1\n self.writer.send_flowing_data(' ')\n if self.font_stack:\n csize,ci,cb,ctt=self.font_stack[-1]\n if size is AS_IS:size=csize\n if i is AS_IS:i=ci\n if b is AS_IS:b=cb\n if tt is AS_IS:tt=ctt\n font=(size,i,b,tt)\n self.font_stack.append(font)\n self.writer.new_font(font)\n \n def pop_font(self):\n if self.font_stack:\n del self.font_stack[-1]\n if self.font_stack:\n font=self.font_stack[-1]\n else :\n font=None\n self.writer.new_font(font)\n \n def push_margin(self,margin):\n self.margin_stack.append(margin)\n fstack=[m for m in self.margin_stack if m]\n if not margin and fstack:\n margin=fstack[-1]\n self.writer.new_margin(margin,len(fstack))\n \n def pop_margin(self):\n if self.margin_stack:\n del self.margin_stack[-1]\n fstack=[m for m in self.margin_stack if m]\n if fstack:\n margin=fstack[-1]\n else :\n margin=None\n self.writer.new_margin(margin,len(fstack))\n \n def set_spacing(self,spacing):\n self.spacing=spacing\n self.writer.new_spacing(spacing)\n \n def push_style(self,*styles):\n if self.softspace:\n self.hard_break=self.para_end=self.softspace=0\n self.nospace=1\n self.writer.send_flowing_data(' ')\n for style in styles:\n self.style_stack.append(style)\n self.writer.new_styles(tuple(self.style_stack))\n \n def pop_style(self,n=1):\n del self.style_stack[-n:]\n self.writer.new_styles(tuple(self.style_stack))\n \n def assert_line_data(self,flag=1):\n self.nospace=self.hard_break=not flag\n self.para_end=self.parskip=self.have_label=0\n \n \nclass NullWriter:\n ''\n\n\n\n\n\n \n def __init__(self):pass\n def flush(self):pass\n def new_alignment(self,align):pass\n def new_font(self,font):pass\n def new_margin(self,margin,level):pass\n def new_spacing(self,spacing):pass\n def new_styles(self,styles):pass\n def send_paragraph(self,blankline):pass\n def send_line_break(self):pass\n def send_hor_rule(self,*args,**kw):pass\n def send_label_data(self,data):pass\n def send_flowing_data(self,data):pass\n def send_literal_data(self,data):pass\n \n \nclass AbstractWriter(NullWriter):\n ''\n\n\n\n\n \n \n def new_alignment(self,align):\n print(\"new_alignment(%r)\"%(align,))\n \n def new_font(self,font):\n print(\"new_font(%r)\"%(font,))\n \n def new_margin(self,margin,level):\n print(\"new_margin(%r, %d)\"%(margin,level))\n \n def new_spacing(self,spacing):\n print(\"new_spacing(%r)\"%(spacing,))\n \n def new_styles(self,styles):\n print(\"new_styles(%r)\"%(styles,))\n \n def send_paragraph(self,blankline):\n print(\"send_paragraph(%r)\"%(blankline,))\n \n def send_line_break(self):\n print(\"send_line_break()\")\n \n def send_hor_rule(self,*args,**kw):\n print(\"send_hor_rule()\")\n \n def send_label_data(self,data):\n print(\"send_label_data(%r)\"%(data,))\n \n def send_flowing_data(self,data):\n print(\"send_flowing_data(%r)\"%(data,))\n \n def send_literal_data(self,data):\n print(\"send_literal_data(%r)\"%(data,))\n \n \nclass DumbWriter(NullWriter):\n ''\n\n\n\n\n\n \n \n def __init__(self,file=None ,maxcol=72):\n self.file=file or sys.stdout\n self.maxcol=maxcol\n NullWriter.__init__(self)\n self.reset()\n \n def reset(self):\n self.col=0\n self.atbreak=0\n \n def send_paragraph(self,blankline):\n self.file.write('\\n'*blankline)\n self.col=0\n self.atbreak=0\n \n def send_line_break(self):\n self.file.write('\\n')\n self.col=0\n self.atbreak=0\n \n def send_hor_rule(self,*args,**kw):\n self.file.write('\\n')\n self.file.write('-'*self.maxcol)\n self.file.write('\\n')\n self.col=0\n self.atbreak=0\n \n def send_literal_data(self,data):\n self.file.write(data)\n i=data.rfind('\\n')\n if i >=0:\n self.col=0\n data=data[i+1:]\n data=data.expandtabs()\n self.col=self.col+len(data)\n self.atbreak=0\n \n def send_flowing_data(self,data):\n if not data:return\n atbreak=self.atbreak or data[0].isspace()\n col=self.col\n maxcol=self.maxcol\n write=self.file.write\n for word in data.split():\n if atbreak:\n if col+len(word)>=maxcol:\n write('\\n')\n col=0\n else :\n write(' ')\n col=col+1\n write(word)\n col=col+len(word)\n atbreak=1\n self.col=col\n self.atbreak=data[-1].isspace()\n \n \ndef test(file=None ):\n w=DumbWriter()\n f=AbstractFormatter(w)\n if file is not None :\n fp=open(file)\n elif sys.argv[1:]:\n fp=open(sys.argv[1])\n else :\n fp=sys.stdin\n for line in fp:\n if line =='\\n':\n f.end_paragraph(1)\n else :\n f.add_flowing_data(line)\n f.end_paragraph(0)\n \n \nif __name__ =='__main__':\n test()\n",["sys"]],fractions:[".py","\n\n\n\"\"\"Fraction, infinite-precision, real numbers.\"\"\"\n\nfrom decimal import Decimal\nimport math\nimport numbers\nimport operator\nimport re\nimport sys\n\n__all__=['Fraction','gcd']\n\n\n\ndef gcd(a,b):\n ''\n\n\n\n \n while b:\n a,b=b,a %b\n return a\n \n \n \n_PyHASH_MODULUS=sys.hash_info.modulus\n\n\n_PyHASH_INF=sys.hash_info.inf\n\n_RATIONAL_FORMAT=re.compile(r\"\"\"\n \\A\\s* # optional whitespace at the start, then\n (?P[-+]?) # an optional sign, then\n (?=\\d|\\.\\d) # lookahead for digit or .digit\n (?P\\d*) # numerator (possibly empty)\n (?: # followed by\n (?:/(?P\\d+))? # an optional denominator\n | # or\n (?:\\.(?P\\d*))? # an optional fractional part\n (?:E(?P[-+]?\\d+))? # and optional exponent\n )\n \\s*\\Z # and optional whitespace to finish\n\"\"\",re.VERBOSE |re.IGNORECASE)\n\n\nclass Fraction(numbers.Rational):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __slots__=('_numerator','_denominator')\n \n \n def __new__(cls,numerator=0,denominator=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self=super(Fraction,cls).__new__(cls)\n \n if denominator is None :\n if isinstance(numerator,numbers.Rational):\n self._numerator=numerator.numerator\n self._denominator=numerator.denominator\n return self\n \n elif isinstance(numerator,float):\n \n value=Fraction.from_float(numerator)\n self._numerator=value._numerator\n self._denominator=value._denominator\n return self\n \n elif isinstance(numerator,Decimal):\n value=Fraction.from_decimal(numerator)\n self._numerator=value._numerator\n self._denominator=value._denominator\n return self\n \n elif isinstance(numerator,str):\n \n m=_RATIONAL_FORMAT.match(numerator)\n if m is None :\n raise ValueError('Invalid literal for Fraction: %r'%\n numerator)\n numerator=int(m.group('num')or '0')\n denom=m.group('denom')\n if denom:\n denominator=int(denom)\n else :\n denominator=1\n decimal=m.group('decimal')\n if decimal:\n scale=10 **len(decimal)\n numerator=numerator *scale+int(decimal)\n denominator *=scale\n exp=m.group('exp')\n if exp:\n exp=int(exp)\n if exp >=0:\n numerator *=10 **exp\n else :\n denominator *=10 **-exp\n if m.group('sign')=='-':\n numerator=-numerator\n \n else :\n raise TypeError(\"argument should be a string \"\n \"or a Rational instance\")\n \n elif (isinstance(numerator,numbers.Rational)and\n isinstance(denominator,numbers.Rational)):\n numerator,denominator=(\n numerator.numerator *denominator.denominator,\n denominator.numerator *numerator.denominator\n )\n else :\n raise TypeError(\"both arguments should be \"\n \"Rational instances\")\n \n if denominator ==0:\n raise ZeroDivisionError('Fraction(%s, 0)'%numerator)\n g=gcd(numerator,denominator)\n self._numerator=numerator //g\n self._denominator=denominator //g\n return self\n \n @classmethod\n def from_float(cls,f):\n ''\n\n\n\n \n if isinstance(f,numbers.Integral):\n return cls(f)\n elif not isinstance(f,float):\n raise TypeError(\"%s.from_float() only takes floats, not %r (%s)\"%\n (cls.__name__,f,type(f).__name__))\n if math.isnan(f):\n raise ValueError(\"Cannot convert %r to %s.\"%(f,cls.__name__))\n if math.isinf(f):\n raise OverflowError(\"Cannot convert %r to %s.\"%(f,cls.__name__))\n return cls(*f.as_integer_ratio())\n \n @classmethod\n def from_decimal(cls,dec):\n ''\n from decimal import Decimal\n if isinstance(dec,numbers.Integral):\n dec=Decimal(int(dec))\n elif not isinstance(dec,Decimal):\n raise TypeError(\n \"%s.from_decimal() only takes Decimals, not %r (%s)\"%\n (cls.__name__,dec,type(dec).__name__))\n if dec.is_infinite():\n raise OverflowError(\n \"Cannot convert %s to %s.\"%(dec,cls.__name__))\n if dec.is_nan():\n raise ValueError(\"Cannot convert %s to %s.\"%(dec,cls.__name__))\n sign,digits,exp=dec.as_tuple()\n digits=int(''.join(map(str,digits)))\n if sign:\n digits=-digits\n if exp >=0:\n return cls(digits *10 **exp)\n else :\n return cls(digits,10 **-exp)\n \n def limit_denominator(self,max_denominator=1000000):\n ''\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n if max_denominator <1:\n raise ValueError(\"max_denominator should be at least 1\")\n if self._denominator <=max_denominator:\n return Fraction(self)\n \n p0,q0,p1,q1=0,1,1,0\n n,d=self._numerator,self._denominator\n while True :\n a=n //d\n q2=q0+a *q1\n if q2 >max_denominator:\n break\n p0,q0,p1,q1=p1,q1,p0+a *p1,q2\n n,d=d,n -a *d\n \n k=(max_denominator -q0)//q1\n bound1=Fraction(p0+k *p1,q0+k *q1)\n bound2=Fraction(p1,q1)\n if abs(bound2 -self)<=abs(bound1 -self):\n return bound2\n else :\n return bound1\n \n @property\n def numerator(a):\n return a._numerator\n \n @property\n def denominator(a):\n return a._denominator\n \n def __repr__(self):\n ''\n return ('Fraction(%s, %s)'%(self._numerator,self._denominator))\n \n def __str__(self):\n ''\n if self._denominator ==1:\n return str(self._numerator)\n else :\n return '%s/%s'%(self._numerator,self._denominator)\n \n def _operator_fallbacks(monomorphic_operator,fallback_operator):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def forward(a,b):\n if isinstance(b,(int,Fraction)):\n return monomorphic_operator(a,b)\n elif isinstance(b,float):\n return fallback_operator(float(a),b)\n elif isinstance(b,complex):\n return fallback_operator(complex(a),b)\n else :\n return NotImplemented\n forward.__name__='__'+fallback_operator.__name__+'__'\n forward.__doc__=monomorphic_operator.__doc__\n \n def reverse(b,a):\n if isinstance(a,numbers.Rational):\n \n return monomorphic_operator(a,b)\n elif isinstance(a,numbers.Real):\n return fallback_operator(float(a),float(b))\n elif isinstance(a,numbers.Complex):\n return fallback_operator(complex(a),complex(b))\n else :\n return NotImplemented\n reverse.__name__='__r'+fallback_operator.__name__+'__'\n reverse.__doc__=monomorphic_operator.__doc__\n \n return forward,reverse\n \n def _add(a,b):\n ''\n return Fraction(a.numerator *b.denominator+\n b.numerator *a.denominator,\n a.denominator *b.denominator)\n \n __add__,__radd__=_operator_fallbacks(_add,operator.add)\n \n def _sub(a,b):\n ''\n return Fraction(a.numerator *b.denominator -\n b.numerator *a.denominator,\n a.denominator *b.denominator)\n \n __sub__,__rsub__=_operator_fallbacks(_sub,operator.sub)\n \n def _mul(a,b):\n ''\n return Fraction(a.numerator *b.numerator,a.denominator *b.denominator)\n \n __mul__,__rmul__=_operator_fallbacks(_mul,operator.mul)\n \n def _div(a,b):\n ''\n return Fraction(a.numerator *b.denominator,\n a.denominator *b.numerator)\n \n __truediv__,__rtruediv__=_operator_fallbacks(_div,operator.truediv)\n \n def __floordiv__(a,b):\n ''\n return math.floor(a /b)\n \n def __rfloordiv__(b,a):\n ''\n return math.floor(a /b)\n \n def __mod__(a,b):\n ''\n div=a //b\n return a -b *div\n \n def __rmod__(b,a):\n ''\n div=a //b\n return a -b *div\n \n def __pow__(a,b):\n ''\n\n\n\n\n\n \n if isinstance(b,numbers.Rational):\n if b.denominator ==1:\n power=b.numerator\n if power >=0:\n return Fraction(a._numerator **power,\n a._denominator **power)\n else :\n return Fraction(a._denominator **-power,\n a._numerator **-power)\n else :\n \n \n return float(a)**float(b)\n else :\n return float(a)**b\n \n def __rpow__(b,a):\n ''\n if b._denominator ==1 and b._numerator >=0:\n \n return a **b._numerator\n \n if isinstance(a,numbers.Rational):\n return Fraction(a.numerator,a.denominator)**b\n \n if b._denominator ==1:\n return a **b._numerator\n \n return a **float(b)\n \n def __pos__(a):\n ''\n return Fraction(a._numerator,a._denominator)\n \n def __neg__(a):\n ''\n return Fraction(-a._numerator,a._denominator)\n \n def __abs__(a):\n ''\n return Fraction(abs(a._numerator),a._denominator)\n \n def __trunc__(a):\n ''\n if a._numerator <0:\n return -(-a._numerator //a._denominator)\n else :\n return a._numerator //a._denominator\n \n def __floor__(a):\n ''\n return a.numerator //a.denominator\n \n def __ceil__(a):\n ''\n \n return -(-a.numerator //a.denominator)\n \n def __round__(self,ndigits=None ):\n ''\n\n\n \n if ndigits is None :\n floor,remainder=divmod(self.numerator,self.denominator)\n if remainder *2 self.denominator:\n return floor+1\n \n elif floor %2 ==0:\n return floor\n else :\n return floor+1\n shift=10 **abs(ndigits)\n \n \n \n if ndigits >0:\n return Fraction(round(self *shift),shift)\n else :\n return Fraction(round(self /shift)*shift)\n \n def __hash__(self):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n dinv=pow(self._denominator,_PyHASH_MODULUS -2,_PyHASH_MODULUS)\n if not dinv:\n hash_=_PyHASH_INF\n else :\n hash_=abs(self._numerator)*dinv %_PyHASH_MODULUS\n result=hash_ if self >=0 else -hash_\n return -2 if result ==-1 else result\n \n def __eq__(a,b):\n ''\n if isinstance(b,numbers.Rational):\n return (a._numerator ==b.numerator and\n a._denominator ==b.denominator)\n if isinstance(b,numbers.Complex)and b.imag ==0:\n b=b.real\n if isinstance(b,float):\n if math.isnan(b)or math.isinf(b):\n \n \n return 0.0 ==b\n else :\n return a ==a.from_float(b)\n else :\n \n \n return NotImplemented\n \n def _richcmp(self,other,op):\n ''\n\n\n\n\n\n\n\n \n \n if isinstance(other,numbers.Rational):\n return op(self._numerator *other.denominator,\n self._denominator *other.numerator)\n if isinstance(other,float):\n if math.isnan(other)or math.isinf(other):\n return op(0.0,other)\n else :\n return op(self,self.from_float(other))\n else :\n return NotImplemented\n \n def __lt__(a,b):\n ''\n return a._richcmp(b,operator.lt)\n \n def __gt__(a,b):\n ''\n return a._richcmp(b,operator.gt)\n \n def __le__(a,b):\n ''\n return a._richcmp(b,operator.le)\n \n def __ge__(a,b):\n ''\n return a._richcmp(b,operator.ge)\n \n def __bool__(a):\n ''\n return a._numerator !=0\n \n \n \n def __reduce__(self):\n return (self.__class__,(str(self),))\n \n def __copy__(self):\n if type(self)==Fraction:\n return self\n return self.__class__(self._numerator,self._denominator)\n \n def __deepcopy__(self,memo):\n if type(self)==Fraction:\n return self\n return self.__class__(self._numerator,self._denominator)\n",["decimal","math","numbers","operator","re","sys"]],functools:[".py","''\n\n\n\n\n\n\n\n\n\n__all__=['update_wrapper','wraps','WRAPPER_ASSIGNMENTS','WRAPPER_UPDATES',\n'total_ordering','cmp_to_key','lru_cache','reduce','partial']\n\nfrom _functools import partial,reduce\nfrom collections import namedtuple\ntry :\n from _thread import RLock\nexcept :\n class RLock:\n ''\n def __enter__(self):pass\n def __exit__(self,exctype,excinst,exctb):pass\n \n \n \n \n \n \n \n \n \nWRAPPER_ASSIGNMENTS=('__module__','__name__','__qualname__','__doc__',\n'__annotations__')\nWRAPPER_UPDATES=('__dict__',)\ndef update_wrapper(wrapper,\nwrapped,\nassigned=WRAPPER_ASSIGNMENTS,\nupdated=WRAPPER_UPDATES):\n ''\n\n\n\n\n\n\n\n\n\n \n wrapper.__wrapped__=wrapped\n for attr in assigned:\n try :\n value=getattr(wrapped,attr)\n except AttributeError:\n pass\n else :\n setattr(wrapper,attr,value)\n for attr in updated:\n getattr(wrapper,attr).update(getattr(wrapped,attr,{}))\n \n return wrapper\n \ndef wraps(wrapped,\nassigned=WRAPPER_ASSIGNMENTS,\nupdated=WRAPPER_UPDATES):\n ''\n\n\n\n\n\n\n \n return partial(update_wrapper,wrapped=wrapped,\n assigned=assigned,updated=updated)\n \n \n \n \n \n \ndef total_ordering(cls):\n ''\n convert={\n '__lt__':[('__gt__',lambda self,other:not (self other or self ==other)),\n ('__ge__',lambda self,other:self >other or self ==other),\n ('__le__',lambda self,other:not self >other)],\n '__ge__':[('__le__',lambda self,other:(not self >=other)or self ==other),\n ('__gt__',lambda self,other:self >=other and not self ==other),\n ('__lt__',lambda self,other:not self >=other)]\n }\n \n roots=[op for op in convert if getattr(cls,op,None )is not getattr(object,op,None )]\n if not roots:\n raise ValueError('must define at least one ordering operation: < > <= >=')\n root=max(roots)\n for opname,opfunc in convert[root]:\n if opname not in roots:\n opfunc.__name__=opname\n opfunc.__doc__=getattr(int,opname).__doc__\n setattr(cls,opname,opfunc)\n return cls\n \n \n \n \n \n \ndef cmp_to_key(mycmp):\n ''\n class K(object):\n __slots__=['obj']\n def __init__(self,obj):\n self.obj=obj\n def __lt__(self,other):\n return mycmp(self.obj,other.obj)<0\n def __gt__(self,other):\n return mycmp(self.obj,other.obj)>0\n def __eq__(self,other):\n return mycmp(self.obj,other.obj)==0\n def __le__(self,other):\n return mycmp(self.obj,other.obj)<=0\n def __ge__(self,other):\n return mycmp(self.obj,other.obj)>=0\n def __ne__(self,other):\n return mycmp(self.obj,other.obj)!=0\n __hash__=None\n return K\n \ntry :\n from _functools import cmp_to_key\nexcept ImportError:\n pass\n \n \n \n \n \n \n_CacheInfo=namedtuple(\"CacheInfo\",[\"hits\",\"misses\",\"maxsize\",\"currsize\"])\n\nclass _HashedSeq(list):\n ''\n\n\n\n \n \n __slots__='hashvalue'\n \n def __init__(self,tup,hash=hash):\n self[:]=tup\n self.hashvalue=hash(tup)\n \n def __hash__(self):\n return self.hashvalue\n \ndef _make_key(args,kwds,typed,\nkwd_mark=(object(),),\nfasttypes={int,str,frozenset,type(None )},\nsorted=sorted,tuple=tuple,type=type,len=len):\n ''\n\n\n\n\n\n\n\n\n \n key=args\n if kwds:\n sorted_items=sorted(kwds.items())\n key +=kwd_mark\n for item in sorted_items:\n key +=item\n if typed:\n key +=tuple(type(v)for v in args)\n if kwds:\n key +=tuple(type(v)for k,v in sorted_items)\n elif len(key)==1 and type(key[0])in fasttypes:\n return key[0]\n return _HashedSeq(key)\n \ndef lru_cache(maxsize=128,typed=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n sentinel=object()\n make_key=_make_key\n PREV,NEXT,KEY,RESULT=0,1,2,3\n \n def decorating_function(user_function):\n \n cache={}\n hits=misses=0\n full=False\n cache_get=cache.get\n lock=RLock()\n root=[]\n root[:]=[root,root,None ,None ]\n \n if maxsize ==0:\n \n def wrapper(*args,**kwds):\n \n nonlocal misses\n result=user_function(*args,**kwds)\n misses +=1\n return result\n \n elif maxsize is None :\n \n def wrapper(*args,**kwds):\n \n nonlocal hits,misses\n key=make_key(args,kwds,typed)\n result=cache_get(key,sentinel)\n if result is not sentinel:\n hits +=1\n return result\n result=user_function(*args,**kwds)\n cache[key]=result\n misses +=1\n return result\n \n else :\n \n def wrapper(*args,**kwds):\n \n nonlocal root,hits,misses,full\n key=make_key(args,kwds,typed)\n with lock:\n link=cache_get(key)\n if link is not None :\n \n link_prev,link_next,_key,result=link\n link_prev[NEXT]=link_next\n link_next[PREV]=link_prev\n last=root[PREV]\n last[NEXT]=root[PREV]=link\n link[PREV]=last\n link[NEXT]=root\n hits +=1\n return result\n result=user_function(*args,**kwds)\n with lock:\n if key in cache:\n \n \n \n \n pass\n elif full:\n \n oldroot=root\n oldroot[KEY]=key\n oldroot[RESULT]=result\n \n \n \n \n \n \n root=oldroot[NEXT]\n oldkey=root[KEY]\n oldresult=root[RESULT]\n root[KEY]=root[RESULT]=None\n \n del cache[oldkey]\n \n \n \n cache[key]=oldroot\n else :\n \n last=root[PREV]\n link=[last,root,key,result]\n last[NEXT]=root[PREV]=cache[key]=link\n full=(len(cache)>=maxsize)\n misses +=1\n return result\n \n def cache_info():\n ''\n with lock:\n return _CacheInfo(hits,misses,maxsize,len(cache))\n \n def cache_clear():\n ''\n nonlocal hits,misses,full\n with lock:\n cache.clear()\n root[:]=[root,root,None ,None ]\n hits=misses=0\n full=False\n \n wrapper.cache_info=cache_info\n wrapper.cache_clear=cache_clear\n return update_wrapper(wrapper,user_function)\n \n return decorating_function\n",["_functools","_thread","collections"]],gc:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDEBUG_COLLECTABLE=2\n\nDEBUG_LEAK=38\n\nDEBUG_SAVEALL=32\n\nDEBUG_STATS=1\n\nDEBUG_UNCOLLECTABLE=4\n\nclass __loader__:\n pass\n \ncallbacks=[]\n\ndef collect(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef disable(*args,**kw):\n ''\n\n \n pass\n \ndef enable(*args,**kw):\n ''\n\n \n pass\n \ngarbage=[]\n\ndef get_count(*args,**kw):\n ''\n\n \n pass\n \ndef get_debug(*args,**kw):\n ''\n\n \n pass\n \ndef get_objects(*args,**kw):\n ''\n\n\n \n pass\n \ndef get_referents(*args,**kw):\n ''\n pass\n \ndef get_referrers(*args,**kw):\n ''\n pass\n \ndef get_threshold(*args,**kw):\n ''\n\n \n pass\n \ndef is_tracked(*args,**kw):\n ''\n\n\n \n pass\n \ndef isenabled(*args,**kw):\n ''\n\n \n pass\n \ndef set_debug(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef set_threshold(*args,**kw):\n ''\n\n\n \n pass\n",[]],genericpath:[".py","''\n\n\n\n\nimport os\n\n__all__=['commonprefix','exists','getatime','getctime','getmtime',\n'getsize','isdir','isfile']\n\n\n\n\ndef exists(path):\n ''\n try :\n os.stat(path)\n except os.error:\n return False\n return True\n \n \n \n \ndef isfile(path):\n ''\n try :\n st=os.stat(path)\n except os.error:\n return False\n import stat\n return stat.S_ISREG(st.st_mode)\n \n \n \n \n \ndef isdir(s):\n ''\n try :\n st=os.stat(s)\n except os.error:\n return False\n import stat\n return stat.S_ISDIR(st.st_mode)\n \n \ndef getsize(filename):\n ''\n return os.stat(filename).st_size\n \n \ndef getmtime(filename):\n ''\n return os.stat(filename).st_mtime\n \n \ndef getatime(filename):\n ''\n return os.stat(filename).st_atime\n \n \ndef getctime(filename):\n ''\n return os.stat(filename).st_ctime\n \n \n \ndef commonprefix(m):\n ''\n if not m:return ''\n s1=min(m)\n s2=max(m)\n for i,c in enumerate(s1):\n if c !=s2[i]:\n return s1[:i]\n return s1\n \n \n \n \n \n \n \n \ndef _splitext(p,sep,altsep,extsep):\n ''\n\n\n \n \n \n sepIndex=p.rfind(sep)\n if altsep:\n altsepIndex=p.rfind(altsep)\n sepIndex=max(sepIndex,altsepIndex)\n \n dotIndex=p.rfind(extsep)\n if dotIndex >sepIndex:\n \n filenameIndex=sepIndex+1\n while filenameIndex =0:\n modifier=loc[pos:]\n loc=loc[:pos]\n mask |=COMPONENT_MODIFIER\n else :\n modifier=''\n pos=loc.find('.')\n if pos >=0:\n codeset=loc[pos:]\n loc=loc[:pos]\n mask |=COMPONENT_CODESET\n else :\n codeset=''\n pos=loc.find('_')\n if pos >=0:\n territory=loc[pos:]\n loc=loc[:pos]\n mask |=COMPONENT_TERRITORY\n else :\n territory=''\n language=loc\n ret=[]\n for i in range(mask+1):\n if not (i&~mask):\n val=language\n if i&COMPONENT_TERRITORY:val +=territory\n if i&COMPONENT_CODESET:val +=codeset\n if i&COMPONENT_MODIFIER:val +=modifier\n ret.append(val)\n ret.reverse()\n return ret\n \n \n \nclass NullTranslations:\n def __init__(self,fp=None ):\n self._info={}\n self._charset=None\n self._output_charset=None\n self._fallback=None\n if fp is not None :\n self._parse(fp)\n \n def _parse(self,fp):\n pass\n \n def add_fallback(self,fallback):\n if self._fallback:\n self._fallback.add_fallback(fallback)\n else :\n self._fallback=fallback\n \n def gettext(self,message):\n if self._fallback:\n return self._fallback.gettext(message)\n return message\n \n def lgettext(self,message):\n if self._fallback:\n return self._fallback.lgettext(message)\n return message\n \n def ngettext(self,msgid1,msgid2,n):\n if self._fallback:\n return self._fallback.ngettext(msgid1,msgid2,n)\n if n ==1:\n return msgid1\n else :\n return msgid2\n \n def lngettext(self,msgid1,msgid2,n):\n if self._fallback:\n return self._fallback.lngettext(msgid1,msgid2,n)\n if n ==1:\n return msgid1\n else :\n return msgid2\n \n def info(self):\n return self._info\n \n def charset(self):\n return self._charset\n \n def output_charset(self):\n return self._output_charset\n \n def set_output_charset(self,charset):\n self._output_charset=charset\n \n def install(self,names=None ):\n import builtins\n builtins.__dict__['_']=self.gettext\n if hasattr(names,\"__contains__\"):\n if \"gettext\"in names:\n builtins.__dict__['gettext']=builtins.__dict__['_']\n if \"ngettext\"in names:\n builtins.__dict__['ngettext']=self.ngettext\n if \"lgettext\"in names:\n builtins.__dict__['lgettext']=self.lgettext\n if \"lngettext\"in names:\n builtins.__dict__['lngettext']=self.lngettext\n \n \nclass GNUTranslations(NullTranslations):\n\n LE_MAGIC=0x950412de\n BE_MAGIC=0xde120495\n \n def _parse(self,fp):\n ''\n unpack=struct.unpack\n filename=getattr(fp,'name','')\n \n \n self._catalog=catalog={}\n self.plural=lambda n:int(n !=1)\n buf=fp.read()\n buflen=len(buf)\n \n magic=unpack('4I',buf[4:20])\n ii='>II'\n else :\n raise OSError(0,'Bad magic number',filename)\n \n \n for i in range(0,msgcount):\n mlen,moff=unpack(ii,buf[masteridx:masteridx+8])\n mend=moff+mlen\n tlen,toff=unpack(ii,buf[transidx:transidx+8])\n tend=toff+tlen\n if mend startpos:\n parentpos=(pos -1)>>1\n parent=heap[parentpos]\n if newitem startpos:\n parentpos=(pos -1)>>1\n parent=heap[parentpos]\n if parent 1:\n try :\n while True :\n v,itnum,next=s=h[0]\n yield v\n s[0]=next()\n _heapreplace(h,s)\n except _StopIteration:\n _heappop(h)\n if h:\n \n v,itnum,next=h[0]\n yield v\n yield from next.__self__\n \n \n_nsmallest=nsmallest\ndef nsmallest(n,iterable,key=None ):\n ''\n\n\n \n \n if n ==1:\n it=iter(iterable)\n head=list(islice(it,1))\n if not head:\n return []\n if key is None :\n return [min(chain(head,it))]\n return [min(chain(head,it),key=key)]\n \n \n try :\n size=len(iterable)\n except (TypeError,AttributeError):\n pass\n else :\n if n >=size:\n return sorted(iterable,key=key)[:n]\n \n \n if key is None :\n it=zip(iterable,count())\n result=_nsmallest(n,it)\n return [r[0]for r in result]\n \n \n in1,in2=tee(iterable)\n it=zip(map(key,in1),count(),in2)\n result=_nsmallest(n,it)\n return [r[2]for r in result]\n \n_nlargest=nlargest\ndef nlargest(n,iterable,key=None ):\n ''\n\n\n \n \n \n if n ==1:\n it=iter(iterable)\n head=list(islice(it,1))\n if not head:\n return []\n if key is None :\n return [max(chain(head,it))]\n return [max(chain(head,it),key=key)]\n \n \n try :\n size=len(iterable)\n except (TypeError,AttributeError):\n pass\n else :\n if n >=size:\n return sorted(iterable,key=key,reverse=True )[:n]\n \n \n if key is None :\n it=zip(iterable,count(0,-1))\n result=_nlargest(n,it)\n return [r[0]for r in result]\n \n \n in1,in2=tee(iterable)\n it=zip(map(key,in1),count(0,-1),in2)\n result=_nlargest(n,it)\n return [r[2]for r in result]\n \nif __name__ ==\"__main__\":\n\n heap=[]\n data=[1,3,5,7,9,2,4,6,8,0]\n for item in data:\n heappush(heap,item)\n sort=[]\n while heap:\n sort.append(heappop(heap))\n print(sort)\n \n import doctest\n doctest.testmod()\n",["doctest","itertools"]],imp:[".py","''\n\n\n\n\n\n\n\nfrom _imp import (lock_held,acquire_lock,release_lock,\nget_frozen_object,is_frozen_package,\ninit_builtin,init_frozen,is_builtin,is_frozen,\n_fix_co_filename)\ntry :\n from _imp import load_dynamic\nexcept ImportError:\n\n load_dynamic=None\n \n \nfrom importlib._bootstrap import new_module\nfrom importlib._bootstrap import cache_from_source,source_from_cache\n\n\nfrom importlib import _bootstrap\n\n\nimport importlib.machinery as machinery\nimport os\nimport sys\nimport tokenize\nimport warnings\n\n\n\nSEARCH_ERROR=0\nPY_SOURCE=1\nPY_COMPILED=2\nC_EXTENSION=3\nPY_RESOURCE=4\nPKG_DIRECTORY=5\nC_BUILTIN=6\nPY_FROZEN=7\nPY_CODERESOURCE=8\nIMP_HOOK=9\n\n\ndef get_magic():\n ''\n return _bootstrap._MAGIC_BYTES\n \n \ndef get_tag():\n ''\n return sys.implementation.cache_tag\n \n \ndef get_suffixes():\n warnings.warn('imp.get_suffixes() is deprecated; use the constants '\n 'defined on importlib.machinery instead',\n DeprecationWarning,2)\n extensions=[(s,'rb',C_EXTENSION)for s in machinery.EXTENSION_SUFFIXES]\n source=[(s,'U',PY_SOURCE)for s in machinery.SOURCE_SUFFIXES]\n bytecode=[(s,'rb',PY_COMPILED)for s in machinery.BYTECODE_SUFFIXES]\n \n return extensions+source+bytecode\n \n \nclass NullImporter:\n\n ''\n \n def __init__(self,path):\n if path =='':\n raise ImportError('empty pathname',path='')\n elif os.path.isdir(path):\n raise ImportError('existing directory',path=path)\n \n def find_module(self,fullname):\n ''\n return None\n \n \nclass _HackedGetData:\n\n ''\n \n \n def __init__(self,fullname,path,file=None ):\n super().__init__(fullname,path)\n self.file=file\n \n def get_data(self,path):\n ''\n if self.file and path ==self.path:\n if not self.file.closed:\n file=self.file\n else :\n self.file=file=open(self.path,'r')\n \n with file:\n \n \n \n \n \n return file.read()\n else :\n return super().get_data(path)\n \n \nclass _LoadSourceCompatibility(_HackedGetData,_bootstrap.SourceFileLoader):\n\n ''\n \n pass\n \ndef load_source(name,pathname,file=None ):\n msg=('imp.load_source() is deprecated; use '\n 'importlib.machinery.SourceFileLoader(name, pathname).load_module()'\n ' instead')\n warnings.warn(msg,DeprecationWarning,2)\n _LoadSourceCompatibility(name,pathname,file).load_module(name)\n module=sys.modules[name]\n \n \n module.__loader__=_bootstrap.SourceFileLoader(name,pathname)\n return module\n \n \nclass _LoadCompiledCompatibility(_HackedGetData,\n_bootstrap.SourcelessFileLoader):\n\n ''\n \n pass\n \ndef load_compiled(name,pathname,file=None ):\n msg=('imp.load_compiled() is deprecated; use '\n 'importlib.machinery.SourcelessFileLoader(name, pathname).'\n 'load_module() instead ')\n warnings.warn(msg,DeprecationWarning,2)\n _LoadCompiledCompatibility(name,pathname,file).load_module(name)\n module=sys.modules[name]\n \n \n module.__loader__=_bootstrap.SourcelessFileLoader(name,pathname)\n return module\n \n \ndef load_package(name,path):\n msg=('imp.load_package() is deprecated; use either '\n 'importlib.machinery.SourceFileLoader() or '\n 'importlib.machinery.SourcelessFileLoader() instead')\n warnings.warn(msg,DeprecationWarning,2)\n if os.path.isdir(path):\n extensions=(machinery.SOURCE_SUFFIXES[:]+\n machinery.BYTECODE_SUFFIXES[:])\n for extension in extensions:\n path=os.path.join(path,'__init__'+extension)\n if os.path.exists(path):\n break\n else :\n raise ValueError('{!r} is not a package'.format(path))\n return _bootstrap.SourceFileLoader(name,path).load_module(name)\n \n \ndef load_module(name,file,filename,details):\n ''\n\n\n\n\n\n \n suffix,mode,type_=details\n with warnings.catch_warnings():\n warnings.simplefilter('ignore')\n if mode and (not mode.startswith(('r','U'))or '+'in mode):\n raise ValueError('invalid file open mode {!r}'.format(mode))\n elif file is None and type_ in {PY_SOURCE,PY_COMPILED}:\n msg='file object required for import (type code {})'.format(type_)\n raise ValueError(msg)\n elif type_ ==PY_SOURCE:\n return load_source(name,filename,file)\n elif type_ ==PY_COMPILED:\n return load_compiled(name,filename,file)\n elif type_ ==C_EXTENSION and load_dynamic is not None :\n if file is None :\n with open(filename,'rb')as opened_file:\n return load_dynamic(name,filename,opened_file)\n else :\n return load_dynamic(name,filename,file)\n elif type_ ==PKG_DIRECTORY:\n return load_package(name,filename)\n elif type_ ==C_BUILTIN:\n return init_builtin(name)\n elif type_ ==PY_FROZEN:\n return init_frozen(name)\n else :\n msg=\"Don't know how to import {} (type code {})\".format(name,type_)\n raise ImportError(msg,name=name)\n \n \ndef find_module(name,path=None ):\n ''\n\n\n\n\n\n\n\n\n \n if not isinstance(name,str):\n raise TypeError(\"'name' must be a str, not {}\".format(type(name)))\n elif not isinstance(path,(type(None ),list)):\n \n raise RuntimeError(\"'list' must be None or a list, \"\n \"not {}\".format(type(name)))\n \n if path is None :\n if is_builtin(name):\n return None ,None ,('','',C_BUILTIN)\n elif is_frozen(name):\n return None ,None ,('','',PY_FROZEN)\n else :\n path=sys.path\n \n for entry in path:\n package_directory=os.path.join(entry,name)\n for suffix in ['.py',machinery.BYTECODE_SUFFIXES[0]]:\n package_file_name='__init__'+suffix\n file_path=os.path.join(package_directory,package_file_name)\n if os.path.isfile(file_path):\n return None ,package_directory,('','',PKG_DIRECTORY)\n with warnings.catch_warnings():\n warnings.simplefilter('ignore')\n for suffix,mode,type_ in get_suffixes():\n file_name=name+suffix\n file_path=os.path.join(entry,file_name)\n if os.path.isfile(file_path):\n break\n else :\n continue\n break\n else :\n raise ImportError(_bootstrap._ERR_MSG.format(name),name=name)\n \n encoding=None\n if mode =='U':\n with open(file_path,'rb')as file:\n encoding=tokenize.detect_encoding(file.readline)[0]\n file=open(file_path,mode,encoding=encoding)\n return file,file_path,(suffix,mode,type_)\n \n \n_RELOADING={}\n\ndef reload(module):\n ''\n\n\n\n \n if not module or type(module)!=type(sys):\n raise TypeError(\"reload() argument must be module\")\n name=module.__name__\n if name not in sys.modules:\n msg=\"module {} not in sys.modules\"\n raise ImportError(msg.format(name),name=name)\n if name in _RELOADING:\n return _RELOADING[name]\n _RELOADING[name]=module\n try :\n parent_name=name.rpartition('.')[0]\n if parent_name and parent_name not in sys.modules:\n msg=\"parent {!r} not in sys.modules\"\n raise ImportError(msg.format(parent_name),name=parent_name)\n module.__loader__.load_module(name)\n \n return sys.modules[module.__name__]\n finally :\n try :\n del _RELOADING[name]\n except KeyError:\n pass\n",["_imp","importlib","importlib._bootstrap","importlib.machinery","os","sys","tokenize","warnings"]],inspect:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__author__=('Ka-Ping Yee ',\n'Yury Selivanov ')\n\nimport imp\nimport importlib.machinery\nimport itertools\nimport linecache\nimport os\nimport re\nimport sys\nimport tokenize\nimport types\nimport warnings\nimport functools\nimport builtins\nfrom operator import attrgetter\nfrom collections import namedtuple,OrderedDict\n\n\n\n\ntry :\n from dis import COMPILER_FLAG_NAMES as _flag_names\nexcept ImportError:\n CO_OPTIMIZED,CO_NEWLOCALS=0x1,0x2\n CO_VARARGS,CO_VARKEYWORDS=0x4,0x8\n CO_NESTED,CO_GENERATOR,CO_NOFREE=0x10,0x20,0x40\nelse :\n mod_dict=globals()\n for k,v in _flag_names.items():\n mod_dict[\"CO_\"+v]=k\n \n \nTPFLAGS_IS_ABSTRACT=1 <<20\n\n\ndef ismodule(object):\n ''\n\n\n\n\n \n return isinstance(object,types.ModuleType)\n \ndef isclass(object):\n ''\n\n\n\n \n return isinstance(object,type)\n \ndef ismethod(object):\n ''\n\n\n\n\n\n \n return isinstance(object,types.MethodType)\n \ndef ismethoddescriptor(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if isclass(object)or ismethod(object)or isfunction(object):\n \n return False\n tp=type(object)\n return hasattr(tp,\"__get__\")and not hasattr(tp,\"__set__\")\n \ndef isdatadescriptor(object):\n ''\n\n\n\n\n\n \n if isclass(object)or ismethod(object)or isfunction(object):\n \n return False\n tp=type(object)\n return hasattr(tp,\"__set__\")and hasattr(tp,\"__get__\")\n \nif hasattr(types,'MemberDescriptorType'):\n\n def ismemberdescriptor(object):\n ''\n\n\n \n return isinstance(object,types.MemberDescriptorType)\nelse :\n\n def ismemberdescriptor(object):\n ''\n\n\n \n return False\n \nif hasattr(types,'GetSetDescriptorType'):\n\n def isgetsetdescriptor(object):\n ''\n\n\n \n return isinstance(object,types.GetSetDescriptorType)\nelse :\n\n def isgetsetdescriptor(object):\n ''\n\n\n \n return False\n \ndef isfunction(object):\n ''\n\n\n\n\n\n\n\n\n \n return isinstance(object,types.FunctionType)\n \ndef isgeneratorfunction(object):\n ''\n\n\n\n \n return bool((isfunction(object)or ismethod(object))and\n object.__code__.co_flags&CO_GENERATOR)\n \ndef isgenerator(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n return isinstance(object,types.GeneratorType)\n \ndef istraceback(object):\n ''\n\n\n\n\n\n \n return isinstance(object,types.TracebackType)\n \ndef isframe(object):\n ''\n\n\n\n\n\n\n\n\n\n \n return isinstance(object,types.FrameType)\n \ndef iscode(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return isinstance(object,types.CodeType)\n \ndef isbuiltin(object):\n ''\n\n\n\n\n \n return isinstance(object,types.BuiltinFunctionType)\n \ndef isroutine(object):\n ''\n return (isbuiltin(object)\n or isfunction(object)\n or ismethod(object)\n or ismethoddescriptor(object))\n \ndef isabstract(object):\n ''\n return bool(isinstance(object,type)and object.__flags__&TPFLAGS_IS_ABSTRACT)\n \ndef getmembers(object,predicate=None ):\n ''\n \n if isclass(object):\n mro=(object,)+getmro(object)\n else :\n mro=()\n results=[]\n for key in dir(object):\n \n \n for base in mro:\n if key in base.__dict__:\n value=base.__dict__[key]\n break\n else :\n try :\n value=getattr(object,key)\n except AttributeError:\n continue\n if not predicate or predicate(value):\n results.append((key,value))\n results.sort()\n return results\n \nAttribute=namedtuple('Attribute','name kind defining_class object')\n\ndef classify_class_attrs(cls):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n mro=getmro(cls)\n names=dir(cls)\n result=[]\n for name in names:\n \n \n \n \n \n \n homecls=None\n for base in (cls,)+mro:\n if name in base.__dict__:\n obj=base.__dict__[name]\n homecls=base\n break\n else :\n obj=getattr(cls,name)\n homecls=getattr(obj,\"__objclass__\",homecls)\n \n \n if isinstance(obj,staticmethod):\n kind=\"static method\"\n elif isinstance(obj,classmethod):\n kind=\"class method\"\n elif isinstance(obj,property):\n kind=\"property\"\n elif ismethoddescriptor(obj):\n kind=\"method\"\n elif isdatadescriptor(obj):\n kind=\"data\"\n else :\n obj_via_getattr=getattr(cls,name)\n if (isfunction(obj_via_getattr)or\n ismethoddescriptor(obj_via_getattr)):\n kind=\"method\"\n else :\n kind=\"data\"\n obj=obj_via_getattr\n \n result.append(Attribute(name,kind,homecls,obj))\n \n return result\n \n \n \ndef getmro(cls):\n ''\n return cls.__mro__\n \n \ndef indentsize(line):\n ''\n expline=line.expandtabs()\n return len(expline)-len(expline.lstrip())\n \ndef getdoc(object):\n ''\n\n\n\n \n try :\n doc=object.__doc__\n except AttributeError:\n return None\n if not isinstance(doc,str):\n return None\n return cleandoc(doc)\n \ndef cleandoc(doc):\n ''\n\n\n \n try :\n lines=doc.expandtabs().split('\\n')\n except UnicodeError:\n return None\n else :\n \n margin=sys.maxsize\n for line in lines[1:]:\n content=len(line.lstrip())\n if content:\n indent=len(line)-content\n margin=min(margin,indent)\n \n if lines:\n lines[0]=lines[0].lstrip()\n if margin 0:\n if pat.match(lines[lnum]):break\n lnum=lnum -1\n return lines,lnum\n raise IOError('could not find code object')\n \ndef getcomments(object):\n ''\n\n\n \n try :\n lines,lnum=findsource(object)\n except (IOError,TypeError):\n return None\n \n if ismodule(object):\n \n start=0\n if lines and lines[0][:2]=='#!':start=1\n while start 0:\n indent=indentsize(lines[lnum])\n end=lnum -1\n if end >=0 and lines[end].lstrip()[:1]=='#'and\\\n indentsize(lines[end])==indent:\n comments=[lines[end].expandtabs().lstrip()]\n if end >0:\n end=end -1\n comment=lines[end].expandtabs().lstrip()\n while comment[:1]=='#'and indentsize(lines[end])==indent:\n comments[:0]=[comment]\n end=end -1\n if end <0:break\n comment=lines[end].expandtabs().lstrip()\n while comments and comments[0].strip()=='#':\n comments[:1]=[]\n while comments and comments[-1].strip()=='#':\n comments[-1:]=[]\n return ''.join(comments)\n \nclass EndOfBlock(Exception):pass\n\nclass BlockFinder:\n ''\n def __init__(self):\n self.indent=0\n self.islambda=False\n self.started=False\n self.passline=False\n self.last=1\n \n def tokeneater(self,type,token,srowcol,erowcol,line):\n if not self.started:\n \n if token in (\"def\",\"class\",\"lambda\"):\n if token ==\"lambda\":\n self.islambda=True\n self.started=True\n self.passline=True\n elif type ==tokenize.NEWLINE:\n self.passline=False\n self.last=srowcol[0]\n if self.islambda:\n raise EndOfBlock\n elif self.passline:\n pass\n elif type ==tokenize.INDENT:\n self.indent=self.indent+1\n self.passline=True\n elif type ==tokenize.DEDENT:\n self.indent=self.indent -1\n \n \n \n if self.indent <=0:\n raise EndOfBlock\n elif self.indent ==0 and type not in (tokenize.COMMENT,tokenize.NL):\n \n \n raise EndOfBlock\n \ndef getblock(lines):\n ''\n blockfinder=BlockFinder()\n try :\n tokens=tokenize.generate_tokens(iter(lines).__next__)\n for _token in tokens:\n blockfinder.tokeneater(*_token)\n except (EndOfBlock,IndentationError):\n pass\n return lines[:blockfinder.last]\n \ndef getsourcelines(object):\n ''\n\n\n\n\n\n \n lines,lnum=findsource(object)\n \n if ismodule(object):return lines,0\n else :return getblock(lines[lnum:]),lnum+1\n \ndef getsource(object):\n ''\n\n\n\n \n lines,lnum=getsourcelines(object)\n return ''.join(lines)\n \n \ndef walktree(classes,children,parent):\n ''\n results=[]\n classes.sort(key=attrgetter('__module__','__name__'))\n for c in classes:\n results.append((c,c.__bases__))\n if c in children:\n results.append(walktree(children[c],children,c))\n return results\n \ndef getclasstree(classes,unique=False ):\n ''\n\n\n\n\n\n\n \n children={}\n roots=[]\n for c in classes:\n if c.__bases__:\n for parent in c.__bases__:\n if not parent in children:\n children[parent]=[]\n if c not in children[parent]:\n children[parent].append(c)\n if unique and parent in classes:break\n elif c not in roots:\n roots.append(c)\n for parent in children:\n if parent not in classes:\n roots.append(parent)\n return walktree(roots,children,None )\n \n \nArguments=namedtuple('Arguments','args, varargs, varkw')\n\ndef getargs(co):\n ''\n\n\n\n\n \n args,varargs,kwonlyargs,varkw=_getfullargs(co)\n return Arguments(args+kwonlyargs,varargs,varkw)\n \ndef _getfullargs(co):\n ''\n\n\n\n \n \n if not iscode(co):\n raise TypeError('{!r} is not a code object'.format(co))\n \n nargs=co.co_argcount\n names=co.co_varnames\n nkwargs=co.co_kwonlyargcount\n args=list(names[:nargs])\n kwonlyargs=list(names[nargs:nargs+nkwargs])\n step=0\n \n nargs +=nkwargs\n varargs=None\n if co.co_flags&CO_VARARGS:\n varargs=co.co_varnames[nargs]\n nargs=nargs+1\n varkw=None\n if co.co_flags&CO_VARKEYWORDS:\n varkw=co.co_varnames[nargs]\n return args,varargs,kwonlyargs,varkw\n \n \nArgSpec=namedtuple('ArgSpec','args varargs keywords defaults')\n\ndef getargspec(func):\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n args,varargs,varkw,defaults,kwonlyargs,kwonlydefaults,ann=\\\n getfullargspec(func)\n if kwonlyargs or ann:\n raise ValueError(\"Function has keyword-only arguments or annotations\"\n \", use getfullargspec() API which can support them\")\n return ArgSpec(args,varargs,varkw,defaults)\n \nFullArgSpec=namedtuple('FullArgSpec',\n'args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations')\n\ndef getfullargspec(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if ismethod(func):\n func=func.__func__\n if not isfunction(func):\n raise TypeError('{!r} is not a Python function'.format(func))\n args,varargs,kwonlyargs,varkw=_getfullargs(func.__code__)\n return FullArgSpec(args,varargs,varkw,func.__defaults__,\n kwonlyargs,func.__kwdefaults__,func.__annotations__)\n \nArgInfo=namedtuple('ArgInfo','args varargs keywords locals')\n\ndef getargvalues(frame):\n ''\n\n\n\n\n \n args,varargs,varkw=getargs(frame.f_code)\n return ArgInfo(args,varargs,varkw,frame.f_locals)\n \ndef formatannotation(annotation,base_module=None ):\n if isinstance(annotation,type):\n if annotation.__module__ in ('builtins',base_module):\n return annotation.__name__\n return annotation.__module__+'.'+annotation.__name__\n return repr(annotation)\n \ndef formatannotationrelativeto(object):\n module=getattr(object,'__module__',None )\n def _formatannotation(annotation):\n return formatannotation(annotation,module)\n return _formatannotation\n \n \ndef formatargspec(args,varargs=None ,varkw=None ,defaults=None ,\nkwonlyargs=(),kwonlydefaults={},annotations={},\nformatarg=str,\nformatvarargs=lambda name:'*'+name,\nformatvarkw=lambda name:'**'+name,\nformatvalue=lambda value:'='+repr(value),\nformatreturns=lambda text:' -> '+text,\nformatannotation=formatannotation):\n ''\n\n\n\n\n\n\n \n def formatargandannotation(arg):\n result=formatarg(arg)\n if arg in annotations:\n result +=': '+formatannotation(annotations[arg])\n return result\n specs=[]\n if defaults:\n firstdefault=len(args)-len(defaults)\n for i,arg in enumerate(args):\n spec=formatargandannotation(arg)\n if defaults and i >=firstdefault:\n spec=spec+formatvalue(defaults[i -firstdefault])\n specs.append(spec)\n if varargs is not None :\n specs.append(formatvarargs(formatargandannotation(varargs)))\n else :\n if kwonlyargs:\n specs.append('*')\n if kwonlyargs:\n for kwonlyarg in kwonlyargs:\n spec=formatargandannotation(kwonlyarg)\n if kwonlydefaults and kwonlyarg in kwonlydefaults:\n spec +=formatvalue(kwonlydefaults[kwonlyarg])\n specs.append(spec)\n if varkw is not None :\n specs.append(formatvarkw(formatargandannotation(varkw)))\n result='('+', '.join(specs)+')'\n if 'return'in annotations:\n result +=formatreturns(formatannotation(annotations['return']))\n return result\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \ndef _missing_arguments(f_name,argnames,pos,values):\n names=[repr(name)for name in argnames if name not in values]\n missing=len(names)\n if missing ==1:\n s=names[0]\n elif missing ==2:\n s=\"{} and {}\".format(*names)\n else :\n tail=\", {} and {}\".format(names[-2:])\n del names[-2:]\n s=\", \".join(names)+tail\n raise TypeError(\"%s() missing %i required %s argument%s: %s\"%\n (f_name,missing,\n \"positional\"if pos else \"keyword-only\",\n \"\"if missing ==1 else \"s\",s))\n \ndef _too_many(f_name,args,kwonly,varargs,defcount,given,values):\n atleast=len(args)-defcount\n kwonly_given=len([arg for arg in kwonly if arg in values])\n if varargs:\n plural=atleast !=1\n sig=\"at least %d\"%(atleast,)\n elif defcount:\n plural=True\n sig=\"from %d to %d\"%(atleast,len(args))\n else :\n plural=len(args)!=1\n sig=str(len(args))\n kwonly_sig=\"\"\n if kwonly_given:\n msg=\" positional argument%s (and %d keyword-only argument%s)\"\n kwonly_sig=(msg %(\"s\"if given !=1 else \"\",kwonly_given,\n \"s\"if kwonly_given !=1 else \"\"))\n raise TypeError(\"%s() takes %s positional argument%s but %d%s %s given\"%\n (f_name,sig,\"s\"if plural else \"\",given,kwonly_sig,\n \"was\"if given ==1 and not kwonly_given else \"were\"))\n \ndef getcallargs(func,*positional,**named):\n ''\n\n\n\n \n spec=getfullargspec(func)\n args,varargs,varkw,defaults,kwonlyargs,kwonlydefaults,ann=spec\n f_name=func.__name__\n arg2value={}\n \n \n if ismethod(func)and func.__self__ is not None :\n \n positional=(func.__self__,)+positional\n num_pos=len(positional)\n num_args=len(args)\n num_defaults=len(defaults)if defaults else 0\n \n n=min(num_pos,num_args)\n for i in range(n):\n arg2value[args[i]]=positional[i]\n if varargs:\n arg2value[varargs]=tuple(positional[n:])\n possible_kwargs=set(args+kwonlyargs)\n if varkw:\n arg2value[varkw]={}\n for kw,value in named.items():\n if kw not in possible_kwargs:\n if not varkw:\n raise TypeError(\"%s() got an unexpected keyword argument %r\"%\n (f_name,kw))\n arg2value[varkw][kw]=value\n continue\n if kw in arg2value:\n raise TypeError(\"%s() got multiple values for argument %r\"%\n (f_name,kw))\n arg2value[kw]=value\n if num_pos >num_args and not varargs:\n _too_many(f_name,args,kwonlyargs,varargs,num_defaults,\n num_pos,arg2value)\n if num_pos 0:\n start=lineno -1 -context //2\n try :\n lines,lnum=findsource(frame)\n except IOError:\n lines=index=None\n else :\n start=max(start,1)\n start=max(0,min(start,len(lines)-context))\n lines=lines[start:start+context]\n index=lineno -1 -start\n else :\n lines=index=None\n \n return Traceback(filename,lineno,frame.f_code.co_name,lines,index)\n \ndef getlineno(frame):\n ''\n \n return frame.f_lineno\n \ndef getouterframes(frame,context=1):\n ''\n\n\n \n framelist=[]\n while frame:\n framelist.append((frame,)+getframeinfo(frame,context))\n frame=frame.f_back\n return framelist\n \ndef getinnerframes(tb,context=1):\n ''\n\n\n \n framelist=[]\n while tb:\n framelist.append((tb.tb_frame,)+getframeinfo(tb,context))\n tb=tb.tb_next\n return framelist\n \ndef currentframe():\n ''\n return sys._getframe(1)if hasattr(sys,\"_getframe\")else None\n \ndef stack(context=1):\n ''\n return getouterframes(sys._getframe(1),context)\n \ndef trace(context=1):\n ''\n return getinnerframes(sys.exc_info()[2],context)\n \n \n \n \n_sentinel=object()\n\ndef _static_getmro(klass):\n return type.__dict__['__mro__'].__get__(klass)\n \ndef _check_instance(obj,attr):\n instance_dict={}\n try :\n instance_dict=object.__getattribute__(obj,\"__dict__\")\n except AttributeError:\n pass\n return dict.get(instance_dict,attr,_sentinel)\n \n \ndef _check_class(klass,attr):\n for entry in _static_getmro(klass):\n if _shadowed_dict(type(entry))is _sentinel:\n try :\n return entry.__dict__[attr]\n except KeyError:\n pass\n return _sentinel\n \ndef _is_type(obj):\n try :\n _static_getmro(obj)\n except TypeError:\n return False\n return True\n \ndef _shadowed_dict(klass):\n dict_attr=type.__dict__[\"__dict__\"]\n for entry in _static_getmro(klass):\n try :\n class_dict=dict_attr.__get__(entry)[\"__dict__\"]\n except KeyError:\n pass\n else :\n if not (type(class_dict)is types.GetSetDescriptorType and\n class_dict.__name__ ==\"__dict__\"and\n class_dict.__objclass__ is entry):\n return class_dict\n return _sentinel\n \ndef getattr_static(obj,attr,default=_sentinel):\n ''\n\n\n\n\n\n\n\n\n \n instance_result=_sentinel\n if not _is_type(obj):\n klass=type(obj)\n dict_attr=_shadowed_dict(klass)\n if (dict_attr is _sentinel or\n type(dict_attr)is types.MemberDescriptorType):\n instance_result=_check_instance(obj,attr)\n else :\n klass=obj\n \n klass_result=_check_class(klass,attr)\n \n if instance_result is not _sentinel and klass_result is not _sentinel:\n if (_check_class(type(klass_result),'__get__')is not _sentinel and\n _check_class(type(klass_result),'__set__')is not _sentinel):\n return klass_result\n \n if instance_result is not _sentinel:\n return instance_result\n if klass_result is not _sentinel:\n return klass_result\n \n if obj is klass:\n \n for entry in _static_getmro(type(klass)):\n if _shadowed_dict(type(entry))is _sentinel:\n try :\n return entry.__dict__[attr]\n except KeyError:\n pass\n if default is not _sentinel:\n return default\n raise AttributeError(attr)\n \n \n \n \nGEN_CREATED='GEN_CREATED'\nGEN_RUNNING='GEN_RUNNING'\nGEN_SUSPENDED='GEN_SUSPENDED'\nGEN_CLOSED='GEN_CLOSED'\n\ndef getgeneratorstate(generator):\n ''\n\n\n\n\n\n\n \n if generator.gi_running:\n return GEN_RUNNING\n if generator.gi_frame is None :\n return GEN_CLOSED\n if generator.gi_frame.f_lasti ==-1:\n return GEN_CREATED\n return GEN_SUSPENDED\n \n \ndef getgeneratorlocals(generator):\n ''\n\n\n\n \n \n if not isgenerator(generator):\n raise TypeError(\"'{!r}' is not a Python generator\".format(generator))\n \n frame=getattr(generator,\"gi_frame\",None )\n if frame is not None :\n return generator.gi_frame.f_locals\n else :\n return {}\n \n \n \n \n \n \n_WrapperDescriptor=type(type.__call__)\n_MethodWrapper=type(all.__call__)\n\n_NonUserDefinedCallables=(_WrapperDescriptor,\n_MethodWrapper,\ntypes.BuiltinFunctionType)\n\n\ndef _get_user_defined_method(cls,method_name):\n try :\n meth=getattr(cls,method_name)\n except AttributeError:\n return\n else :\n if not isinstance(meth,_NonUserDefinedCallables):\n \n \n return meth\n \n \ndef signature(obj):\n ''\n \n if not callable(obj):\n raise TypeError('{!r} is not a callable object'.format(obj))\n \n if isinstance(obj,types.MethodType):\n \n \n sig=signature(obj.__func__)\n return sig.replace(parameters=tuple(sig.parameters.values())[1:])\n \n try :\n sig=obj.__signature__\n except AttributeError:\n pass\n else :\n if sig is not None :\n return sig\n \n try :\n \n wrapped=obj.__wrapped__\n except AttributeError:\n pass\n else :\n return signature(wrapped)\n \n if isinstance(obj,types.FunctionType):\n return Signature.from_function(obj)\n \n if isinstance(obj,functools.partial):\n sig=signature(obj.func)\n \n new_params=OrderedDict(sig.parameters.items())\n \n partial_args=obj.args or ()\n partial_keywords=obj.keywords or {}\n try :\n ba=sig.bind_partial(*partial_args,**partial_keywords)\n except TypeError as ex:\n msg='partial object {!r} has incorrect arguments'.format(obj)\n raise ValueError(msg)from ex\n \n for arg_name,arg_value in ba.arguments.items():\n param=new_params[arg_name]\n if arg_name in partial_keywords:\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n new_params[arg_name]=param.replace(default=arg_value,\n _partial_kwarg=True )\n \n elif (param.kind not in (_VAR_KEYWORD,_VAR_POSITIONAL)and\n not param._partial_kwarg):\n new_params.pop(arg_name)\n \n return sig.replace(parameters=new_params.values())\n \n sig=None\n if isinstance(obj,type):\n \n \n \n \n call=_get_user_defined_method(type(obj),'__call__')\n if call is not None :\n sig=signature(call)\n else :\n \n new=_get_user_defined_method(obj,'__new__')\n if new is not None :\n sig=signature(new)\n else :\n \n init=_get_user_defined_method(obj,'__init__')\n if init is not None :\n sig=signature(init)\n elif not isinstance(obj,_NonUserDefinedCallables):\n \n \n \n \n call=_get_user_defined_method(type(obj),'__call__')\n if call is not None :\n sig=signature(call)\n \n if sig is not None :\n \n \n return sig.replace(parameters=tuple(sig.parameters.values())[1:])\n \n if isinstance(obj,types.BuiltinFunctionType):\n \n msg='no signature found for builtin function {!r}'.format(obj)\n raise ValueError(msg)\n \n raise ValueError('callable {!r} is not supported by signature'.format(obj))\n \n \nclass _void:\n ''\n \n \nclass _empty:\n pass\n \n \nclass _ParameterKind(int):\n def __new__(self,*args,name):\n obj=int.__new__(self,*args)\n obj._name=name\n return obj\n \n def __str__(self):\n return self._name\n \n def __repr__(self):\n return '<_ParameterKind: {!r}>'.format(self._name)\n \n \n_POSITIONAL_ONLY=_ParameterKind(0,name='POSITIONAL_ONLY')\n_POSITIONAL_OR_KEYWORD=_ParameterKind(1,name='POSITIONAL_OR_KEYWORD')\n_VAR_POSITIONAL=_ParameterKind(2,name='VAR_POSITIONAL')\n_KEYWORD_ONLY=_ParameterKind(3,name='KEYWORD_ONLY')\n_VAR_KEYWORD=_ParameterKind(4,name='VAR_KEYWORD')\n\n\nclass Parameter:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __slots__=('_name','_kind','_default','_annotation','_partial_kwarg')\n \n POSITIONAL_ONLY=_POSITIONAL_ONLY\n POSITIONAL_OR_KEYWORD=_POSITIONAL_OR_KEYWORD\n VAR_POSITIONAL=_VAR_POSITIONAL\n KEYWORD_ONLY=_KEYWORD_ONLY\n VAR_KEYWORD=_VAR_KEYWORD\n \n empty=_empty\n \n def __init__(self,name,kind,*,default=_empty,annotation=_empty,\n _partial_kwarg=False ):\n \n if kind not in (_POSITIONAL_ONLY,_POSITIONAL_OR_KEYWORD,\n _VAR_POSITIONAL,_KEYWORD_ONLY,_VAR_KEYWORD):\n raise ValueError(\"invalid value for 'Parameter.kind' attribute\")\n self._kind=kind\n \n if default is not _empty:\n if kind in (_VAR_POSITIONAL,_VAR_KEYWORD):\n msg='{} parameters cannot have default values'.format(kind)\n raise ValueError(msg)\n self._default=default\n self._annotation=annotation\n \n if name is None :\n if kind !=_POSITIONAL_ONLY:\n raise ValueError(\"None is not a valid name for a \"\n \"non-positional-only parameter\")\n self._name=name\n else :\n name=str(name)\n if kind !=_POSITIONAL_ONLY and not name.isidentifier():\n msg='{!r} is not a valid parameter name'.format(name)\n raise ValueError(msg)\n self._name=name\n \n self._partial_kwarg=_partial_kwarg\n \n @property\n def name(self):\n return self._name\n \n @property\n def default(self):\n return self._default\n \n @property\n def annotation(self):\n return self._annotation\n \n @property\n def kind(self):\n return self._kind\n \n def replace(self,*,name=_void,kind=_void,annotation=_void,\n default=_void,_partial_kwarg=_void):\n ''\n \n if name is _void:\n name=self._name\n \n if kind is _void:\n kind=self._kind\n \n if annotation is _void:\n annotation=self._annotation\n \n if default is _void:\n default=self._default\n \n if _partial_kwarg is _void:\n _partial_kwarg=self._partial_kwarg\n \n return type(self)(name,kind,default=default,annotation=annotation,\n _partial_kwarg=_partial_kwarg)\n \n def __str__(self):\n kind=self.kind\n \n formatted=self._name\n if kind ==_POSITIONAL_ONLY:\n if formatted is None :\n formatted=''\n formatted='<{}>'.format(formatted)\n \n \n if self._annotation is not _empty:\n formatted='{}:{}'.format(formatted,\n formatannotation(self._annotation))\n \n if self._default is not _empty:\n formatted='{}={}'.format(formatted,repr(self._default))\n \n if kind ==_VAR_POSITIONAL:\n formatted='*'+formatted\n elif kind ==_VAR_KEYWORD:\n formatted='**'+formatted\n \n return formatted\n \n def __repr__(self):\n return '<{} at {:#x} {!r}>'.format(self.__class__.__name__,\n id(self),self.name)\n \n def __eq__(self,other):\n return (issubclass(other.__class__,Parameter)and\n self._name ==other._name and\n self._kind ==other._kind and\n self._default ==other._default and\n self._annotation ==other._annotation)\n \n def __ne__(self,other):\n return not self.__eq__(other)\n \n \nclass BoundArguments:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,signature,arguments):\n self.arguments=arguments\n self._signature=signature\n \n @property\n def signature(self):\n return self._signature\n \n @property\n def args(self):\n args=[]\n for param_name,param in self._signature.parameters.items():\n if (param.kind in (_VAR_KEYWORD,_KEYWORD_ONLY)or\n param._partial_kwarg):\n \n \n \n \n break\n \n try :\n arg=self.arguments[param_name]\n except KeyError:\n \n \n break\n else :\n if param.kind ==_VAR_POSITIONAL:\n \n args.extend(arg)\n else :\n \n args.append(arg)\n \n return tuple(args)\n \n @property\n def kwargs(self):\n kwargs={}\n kwargs_started=False\n for param_name,param in self._signature.parameters.items():\n if not kwargs_started:\n if (param.kind in (_VAR_KEYWORD,_KEYWORD_ONLY)or\n param._partial_kwarg):\n kwargs_started=True\n else :\n if param_name not in self.arguments:\n kwargs_started=True\n continue\n \n if not kwargs_started:\n continue\n \n try :\n arg=self.arguments[param_name]\n except KeyError:\n pass\n else :\n if param.kind ==_VAR_KEYWORD:\n \n kwargs.update(arg)\n else :\n \n kwargs[param_name]=arg\n \n return kwargs\n \n def __eq__(self,other):\n return (issubclass(other.__class__,BoundArguments)and\n self.signature ==other.signature and\n self.arguments ==other.arguments)\n \n def __ne__(self,other):\n return not self.__eq__(other)\n \n \nclass Signature:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __slots__=('_return_annotation','_parameters')\n \n _parameter_cls=Parameter\n _bound_arguments_cls=BoundArguments\n \n empty=_empty\n \n def __init__(self,parameters=None ,*,return_annotation=_empty,\n __validate_parameters__=True ):\n ''\n\n \n \n if parameters is None :\n params=OrderedDict()\n else :\n if __validate_parameters__:\n params=OrderedDict()\n top_kind=_POSITIONAL_ONLY\n \n for idx,param in enumerate(parameters):\n kind=param.kind\n if kind =0:\n if self.pos+length slen:\n self.buflist.append(self.zero_char *(spos -slen))\n slen=spos\n newpos=spos+len(s)\n if spos slen:\n slen=newpos\n else :\n self.buflist.append(s)\n slen=newpos\n self.len=slen\n self.pos=newpos\n \n def writelines(self,iterable):\n ''\n\n\n\n\n\n \n write=self.write\n for line in iterable:\n write(line)\n \n def flush(self):\n ''\n \n _complain_ifclosed(self.closed)\n \n def getvalue(self):\n ''\n\n\n\n\n\n\n\n\n \n _complain_ifclosed(self.closed)\n if self.buflist:\n self.buf +=self.empty_char.join(self.buflist)\n self.buflist=[]\n return self.buf\n \nclass TextIOBase(IOBase):\n pass\n \nclass StringIO(TextIOBase):\n pass\n \nTextIOWrapper=StringIO\n\n\nclass RawIOBase:\n\n def read(self,n=-1):\n pass\n def readall(self):\n pass\n def readinto(self,b):\n pass\n def write(self,b):\n pass\n \n \nBufferedIOBase=RawIOBase\nBufferedReader=RawIOBase\n\nclass BytesIO(IOBase):\n\n def __init__(self,buf=b''):\n super().__init__(buf)\n self.empty_char=b''\n self.zero_char=b'\\0'\n self.newline=b'\\n'\n \n \n \n",["builtins"]],ipaddress:[".py","\n\n\n\"\"\"A fast, lightweight IPv4/IPv6 manipulation library in Python.\n\nThis library is used to create/poke/manipulate IPv4 and IPv6 addresses\nand networks.\n\n\"\"\"\n\n__version__='1.0'\n\n\nimport functools\n\nIPV4LENGTH=32\nIPV6LENGTH=128\n\nclass AddressValueError(ValueError):\n ''\n \n \nclass NetmaskValueError(ValueError):\n ''\n \n \ndef ip_address(address):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n return IPv4Address(address)\n except (AddressValueError,NetmaskValueError):\n pass\n \n try :\n return IPv6Address(address)\n except (AddressValueError,NetmaskValueError):\n pass\n \n raise ValueError('%r does not appear to be an IPv4 or IPv6 address'%\n address)\n \n \ndef ip_network(address,strict=True ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n return IPv4Network(address,strict)\n except (AddressValueError,NetmaskValueError):\n pass\n \n try :\n return IPv6Network(address,strict)\n except (AddressValueError,NetmaskValueError):\n pass\n \n raise ValueError('%r does not appear to be an IPv4 or IPv6 network'%\n address)\n \n \ndef ip_interface(address):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n return IPv4Interface(address)\n except (AddressValueError,NetmaskValueError):\n pass\n \n try :\n return IPv6Interface(address)\n except (AddressValueError,NetmaskValueError):\n pass\n \n raise ValueError('%r does not appear to be an IPv4 or IPv6 interface'%\n address)\n \n \ndef v4_int_to_packed(address):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n return address.to_bytes(4,'big')\n except OverflowError:\n raise ValueError(\"Address negative or too large for IPv4\")\n \n \ndef v6_int_to_packed(address):\n ''\n\n\n\n\n\n\n\n \n try :\n return address.to_bytes(16,'big')\n except OverflowError:\n raise ValueError(\"Address negative or too large for IPv6\")\n \n \ndef _split_optional_netmask(address):\n ''\n addr=str(address).split('/')\n if len(addr)>2:\n raise AddressValueError(\"Only one '/' permitted in %r\"%address)\n return addr\n \n \ndef _find_address_range(addresses):\n ''\n\n\n\n\n\n\n\n \n it=iter(addresses)\n first=last=next(it)\n for ip in it:\n if ip._ip !=last._ip+1:\n yield first,last\n first=ip\n last=ip\n yield first,last\n \n \ndef _count_righthand_zero_bits(number,bits):\n ''\n\n\n\n\n\n\n\n\n \n if number ==0:\n return bits\n return min(bits,(~number&(number -1)).bit_length())\n \n \ndef summarize_address_range(first,last):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if (not (isinstance(first,_BaseAddress)and\n isinstance(last,_BaseAddress))):\n raise TypeError('first and last must be IP addresses, not networks')\n if first.version !=last.version:\n raise TypeError(\"%s and %s are not of the same version\"%(\n first,last))\n if first >last:\n raise ValueError('last IP address must be greater than first')\n \n if first.version ==4:\n ip=IPv4Network\n elif first.version ==6:\n ip=IPv6Network\n else :\n raise ValueError('unknown IP version')\n \n ip_bits=first._max_prefixlen\n first_int=first._ip\n last_int=last._ip\n while first_int <=last_int:\n nbits=min(_count_righthand_zero_bits(first_int,ip_bits),\n (last_int -first_int+1).bit_length()-1)\n net=ip((first_int,ip_bits -nbits))\n yield net\n first_int +=1 <=net.broadcast_address:\n continue\n yield net\n last=net\n \n \ndef collapse_addresses(addresses):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n addrs=[]\n ips=[]\n nets=[]\n \n \n for ip in addresses:\n if isinstance(ip,_BaseAddress):\n if ips and ips[-1]._version !=ip._version:\n raise TypeError(\"%s and %s are not of the same version\"%(\n ip,ips[-1]))\n ips.append(ip)\n elif ip._prefixlen ==ip._max_prefixlen:\n if ips and ips[-1]._version !=ip._version:\n raise TypeError(\"%s and %s are not of the same version\"%(\n ip,ips[-1]))\n try :\n ips.append(ip.ip)\n except AttributeError:\n ips.append(ip.network_address)\n else :\n if nets and nets[-1]._version !=ip._version:\n raise TypeError(\"%s and %s are not of the same version\"%(\n ip,nets[-1]))\n nets.append(ip)\n \n \n ips=sorted(set(ips))\n \n \n if ips:\n for first,last in _find_address_range(ips):\n addrs.extend(summarize_address_range(first,last))\n \n return _collapse_addresses_internal(addrs+nets)\n \n \ndef get_mixed_type_key(obj):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if isinstance(obj,_BaseNetwork):\n return obj._get_networks_key()\n elif isinstance(obj,_BaseAddress):\n return obj._get_address_key()\n return NotImplemented\n \n \nclass _IPAddressBase:\n\n ''\n \n __slots__=()\n \n @property\n def exploded(self):\n ''\n return self._explode_shorthand_ip_string()\n \n @property\n def compressed(self):\n ''\n return str(self)\n \n @property\n def reverse_pointer(self):\n ''\n\n\n\n\n\n \n return self._reverse_pointer()\n \n @property\n def version(self):\n msg='%200s has no version specified'%(type(self),)\n raise NotImplementedError(msg)\n \n def _check_int_address(self,address):\n if address <0:\n msg=\"%d (< 0) is not permitted as an IPv%d address\"\n raise AddressValueError(msg %(address,self._version))\n if address >self._ALL_ONES:\n msg=\"%d (>= 2**%d) is not permitted as an IPv%d address\"\n raise AddressValueError(msg %(address,self._max_prefixlen,\n self._version))\n \n def _check_packed_address(self,address,expected_len):\n address_len=len(address)\n if address_len !=expected_len:\n msg=\"%r (len %d != %d) is not permitted as an IPv%d address\"\n raise AddressValueError(msg %(address,address_len,\n expected_len,self._version))\n \n @classmethod\n def _ip_int_from_prefix(cls,prefixlen):\n ''\n\n\n\n\n\n\n\n \n return cls._ALL_ONES ^(cls._ALL_ONES >>prefixlen)\n \n @classmethod\n def _prefix_from_ip_int(cls,ip_int):\n ''\n\n\n\n\n\n\n\n\n\n \n trailing_zeroes=_count_righthand_zero_bits(ip_int,\n cls._max_prefixlen)\n prefixlen=cls._max_prefixlen -trailing_zeroes\n leading_ones=ip_int >>trailing_zeroes\n all_ones=(1 <=0:\n if network+n >broadcast:\n raise IndexError('address out of range')\n return self._address_class(network+n)\n else :\n n +=1\n if broadcast+n =self.network_address and\n other.broadcast_address <=self.broadcast_address):\n raise ValueError('%s not contained in %s'%(other,self))\n if other ==self:\n return\n \n \n other=other.__class__('%s/%s'%(other.network_address,\n other.prefixlen))\n \n s1,s2=self.subnets()\n while s1 !=other and s2 !=other:\n if (other.network_address >=s1.network_address and\n other.broadcast_address <=s1.broadcast_address):\n yield s2\n s1,s2=s1.subnets()\n elif (other.network_address >=s2.network_address and\n other.broadcast_address <=s2.broadcast_address):\n yield s1\n s1,s2=s2.subnets()\n else :\n \n raise AssertionError('Error performing exclusion: '\n 's1: %s s2: %s other: %s'%\n (s1,s2,other))\n if s1 ==other:\n yield s2\n elif s2 ==other:\n yield s1\n else :\n \n raise AssertionError('Error performing exclusion: '\n 's1: %s s2: %s other: %s'%\n (s1,s2,other))\n \n def compare_networks(self,other):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if self._version !=other._version:\n raise TypeError('%s and %s are not of the same type'%(\n self,other))\n \n if self.network_address other.network_address:\n return 1\n \n if self.netmask other.netmask:\n return 1\n return 0\n \n def _get_networks_key(self):\n ''\n\n\n\n\n\n \n return (self._version,self.network_address,self.netmask)\n \n def subnets(self,prefixlen_diff=1,new_prefix=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if self._prefixlen ==self._max_prefixlen:\n yield self\n return\n \n if new_prefix is not None :\n if new_prefix 0')\n new_prefixlen=self._prefixlen+prefixlen_diff\n \n if new_prefixlen >self._max_prefixlen:\n raise ValueError(\n 'prefix length diff %d is invalid for netblock %s'%(\n new_prefixlen,self))\n \n start=int(self.network_address)\n end=int(self.broadcast_address)+1\n step=(int(self.hostmask)+1)>>prefixlen_diff\n for new_addr in range(start,end,step):\n current=self.__class__((new_addr,new_prefixlen))\n yield current\n \n def supernet(self,prefixlen_diff=1,new_prefix=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if self._prefixlen ==0:\n return self\n \n if new_prefix is not None :\n if new_prefix >self._prefixlen:\n raise ValueError('new prefix must be shorter')\n if prefixlen_diff !=1:\n raise ValueError('cannot set prefixlen_diff and new_prefix')\n prefixlen_diff=self._prefixlen -new_prefix\n \n new_prefixlen=self.prefixlen -prefixlen_diff\n if new_prefixlen <0:\n raise ValueError(\n 'current prefixlen is %d, cannot have a prefixlen_diff of %d'%\n (self.prefixlen,prefixlen_diff))\n return self.__class__((\n int(self.network_address)&(int(self.netmask)<3:\n msg=\"At most 3 characters permitted in %r\"\n raise ValueError(msg %octet_str)\n \n octet_int=int(octet_str,10)\n \n \n \n if octet_int >7 and octet_str[0]=='0':\n msg=\"Ambiguous (octal/decimal) value in %r not permitted\"\n raise ValueError(msg %octet_str)\n if octet_int >255:\n raise ValueError(\"Octet %d (> 255) not permitted\"%octet_int)\n return octet_int\n \n @classmethod\n def _string_from_ip_int(cls,ip_int):\n ''\n\n\n\n\n\n\n\n \n return '.'.join(map(str,ip_int.to_bytes(4,'big')))\n \n def _is_valid_netmask(self,netmask):\n ''\n\n\n\n\n\n\n\n\n\n \n mask=netmask.split('.')\n if len(mask)==4:\n try :\n for x in mask:\n if int(x)not in self._valid_mask_octets:\n return False\n except ValueError:\n \n return False\n for idx,y in enumerate(mask):\n if idx >0 and y >mask[idx -1]:\n return False\n return True\n try :\n netmask=int(netmask)\n except ValueError:\n return False\n return 0 <=netmask <=self._max_prefixlen\n \n def _is_hostmask(self,ip_str):\n ''\n\n\n\n\n\n\n\n \n bits=ip_str.split('.')\n try :\n parts=[x for x in map(int,bits)if x in self._valid_mask_octets]\n except ValueError:\n return False\n if len(parts)!=len(bits):\n return False\n if parts[0]1:\n self._prefixlen=int(address[1])\n else :\n self._prefixlen=self._max_prefixlen\n \n self.network=IPv4Network(address,strict=False )\n self.netmask=self.network.netmask\n self.hostmask=self.network.hostmask\n return\n \n addr=_split_optional_netmask(address)\n IPv4Address.__init__(self,addr[0])\n \n self.network=IPv4Network(address,strict=False )\n self._prefixlen=self.network._prefixlen\n \n self.netmask=self.network.netmask\n self.hostmask=self.network.hostmask\n \n def __str__(self):\n return '%s/%d'%(self._string_from_ip_int(self._ip),\n self.network.prefixlen)\n \n def __eq__(self,other):\n address_equal=IPv4Address.__eq__(self,other)\n if not address_equal or address_equal is NotImplemented:\n return address_equal\n try :\n return self.network ==other.network\n except AttributeError:\n \n \n \n return False\n \n def __lt__(self,other):\n address_less=IPv4Address.__lt__(self,other)\n if address_less is NotImplemented:\n return NotImplemented\n try :\n return self.network 1:\n arg=address[1]\n else :\n \n arg=self._max_prefixlen\n self.network_address=IPv4Address(address[0])\n self.netmask,self._prefixlen=self._make_netmask(arg)\n packed=int(self.network_address)\n if packed&int(self.netmask)!=packed:\n if strict:\n raise ValueError('%s has host bits set'%self)\n else :\n self.network_address=IPv4Address(packed&\n int(self.netmask))\n return\n \n \n \n addr=_split_optional_netmask(address)\n self.network_address=IPv4Address(self._ip_int_from_string(addr[0]))\n \n if len(addr)==2:\n arg=addr[1]\n else :\n arg=self._max_prefixlen\n self.netmask,self._prefixlen=self._make_netmask(arg)\n \n if strict:\n if (IPv4Address(int(self.network_address)&int(self.netmask))!=\n self.network_address):\n raise ValueError('%s has host bits set'%self)\n self.network_address=IPv4Address(int(self.network_address)&\n int(self.netmask))\n \n if self._prefixlen ==(self._max_prefixlen -1):\n self.hosts=self.__iter__\n \n @property\n @functools.lru_cache()\n def is_global(self):\n ''\n\n\n\n\n\n \n return (not (self.network_address in IPv4Network('100.64.0.0/10')and\n self.broadcast_address in IPv4Network('100.64.0.0/10'))and\n not self.is_private)\n \n \nclass _IPv4Constants:\n _linklocal_network=IPv4Network('169.254.0.0/16')\n \n _loopback_network=IPv4Network('127.0.0.0/8')\n \n _multicast_network=IPv4Network('224.0.0.0/4')\n \n _public_network=IPv4Network('100.64.0.0/10')\n \n _private_networks=[\n IPv4Network('0.0.0.0/8'),\n IPv4Network('10.0.0.0/8'),\n IPv4Network('127.0.0.0/8'),\n IPv4Network('169.254.0.0/16'),\n IPv4Network('172.16.0.0/12'),\n IPv4Network('192.0.0.0/29'),\n IPv4Network('192.0.0.170/31'),\n IPv4Network('192.0.2.0/24'),\n IPv4Network('192.168.0.0/16'),\n IPv4Network('198.18.0.0/15'),\n IPv4Network('198.51.100.0/24'),\n IPv4Network('203.0.113.0/24'),\n IPv4Network('240.0.0.0/4'),\n IPv4Network('255.255.255.255/32'),\n ]\n \n _reserved_network=IPv4Network('240.0.0.0/4')\n \n _unspecified_address=IPv4Address('0.0.0.0')\n \n \nIPv4Address._constants=_IPv4Constants\n\n\nclass _BaseV6:\n\n ''\n\n\n\n\n \n \n __slots__=()\n _version=6\n _ALL_ONES=(2 **IPV6LENGTH)-1\n _HEXTET_COUNT=8\n _HEX_DIGITS=frozenset('0123456789ABCDEFabcdef')\n _max_prefixlen=IPV6LENGTH\n \n \n \n _netmask_cache={}\n \n @classmethod\n def _make_netmask(cls,arg):\n ''\n\n\n\n\n\n \n if arg not in cls._netmask_cache:\n if isinstance(arg,int):\n prefixlen=arg\n else :\n prefixlen=cls._prefix_from_prefix_string(arg)\n netmask=IPv6Address(cls._ip_int_from_prefix(prefixlen))\n cls._netmask_cache[arg]=netmask,prefixlen\n return cls._netmask_cache[arg]\n \n @classmethod\n def _ip_int_from_string(cls,ip_str):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if not ip_str:\n raise AddressValueError('Address cannot be empty')\n \n if ip_str in str2int:\n return str2int[ip_str]\n \n parts=ip_str.split(':')\n \n \n _min_parts=3\n if len(parts)<_min_parts:\n msg=\"At least %d parts expected in %r\"%(_min_parts,ip_str)\n raise AddressValueError(msg)\n \n \n if '.'in parts[-1]:\n try :\n ipv4_int=IPv4Address(parts.pop())._ip\n except AddressValueError as exc:\n raise AddressValueError(\"%s in %r\"%(exc,ip_str))from None\n parts.append('%x'%((ipv4_int >>16)&0xFFFF))\n parts.append('%x'%(ipv4_int&0xFFFF))\n \n \n \n \n _max_parts=cls._HEXTET_COUNT+1\n if len(parts)>_max_parts:\n msg=\"At most %d colons permitted in %r\"%(_max_parts -1,ip_str)\n raise AddressValueError(msg)\n \n \n \n skip_index=None\n for i in range(1,len(parts)-1):\n if not parts[i]:\n if skip_index is not None :\n \n msg=\"At most one '::' permitted in %r\"%ip_str\n raise AddressValueError(msg)\n skip_index=i\n \n \n \n if skip_index is not None :\n \n parts_hi=skip_index\n parts_lo=len(parts)-skip_index -1\n if not parts[0]:\n parts_hi -=1\n if parts_hi:\n msg=\"Leading ':' only permitted as part of '::' in %r\"\n raise AddressValueError(msg %ip_str)\n if not parts[-1]:\n parts_lo -=1\n if parts_lo:\n msg=\"Trailing ':' only permitted as part of '::' in %r\"\n raise AddressValueError(msg %ip_str)\n parts_skipped=cls._HEXTET_COUNT -(parts_hi+parts_lo)\n if parts_skipped <1:\n msg=\"Expected at most %d other parts with '::' in %r\"\n raise AddressValueError(msg %(cls._HEXTET_COUNT -1,ip_str))\n else :\n \n \n \n if len(parts)!=cls._HEXTET_COUNT:\n msg=\"Exactly %d parts expected without '::' in %r\"\n raise AddressValueError(msg %(cls._HEXTET_COUNT,ip_str))\n if not parts[0]:\n msg=\"Leading ':' only permitted as part of '::' in %r\"\n raise AddressValueError(msg %ip_str)\n if not parts[-1]:\n msg=\"Trailing ':' only permitted as part of '::' in %r\"\n raise AddressValueError(msg %ip_str)\n parts_hi=len(parts)\n parts_lo=0\n parts_skipped=0\n \n try :\n \n ip_int=0\n for i in range(parts_hi):\n ip_int <<=16\n ip_int |=cls._parse_hextet(parts[i])\n ip_int <<=16 *parts_skipped\n for i in range(-parts_lo,0):\n ip_int <<=16\n ip_int |=cls._parse_hextet(parts[i])\n return ip_int\n except ValueError as exc:\n raise AddressValueError(\"%s in %r\"%(exc,ip_str))from None\n \n @classmethod\n def _parse_hextet(cls,hextet_str):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not cls._HEX_DIGITS.issuperset(hextet_str):\n raise ValueError(\"Only hex digits permitted in %r\"%hextet_str)\n \n \n if len(hextet_str)>4:\n msg=\"At most 4 characters permitted in %r\"\n raise ValueError(msg %hextet_str)\n \n return int(hextet_str,16)\n \n @classmethod\n def _compress_hextets(cls,hextets):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n best_doublecolon_start=-1\n best_doublecolon_len=0\n doublecolon_start=-1\n doublecolon_len=0\n for index,hextet in enumerate(hextets):\n if hextet =='0':\n doublecolon_len +=1\n if doublecolon_start ==-1:\n \n doublecolon_start=index\n if doublecolon_len >best_doublecolon_len:\n \n best_doublecolon_len=doublecolon_len\n best_doublecolon_start=doublecolon_start\n else :\n doublecolon_len=0\n doublecolon_start=-1\n \n if best_doublecolon_len >1:\n best_doublecolon_end=(best_doublecolon_start+\n best_doublecolon_len)\n \n if best_doublecolon_end ==len(hextets):\n hextets +=['']\n hextets[best_doublecolon_start:best_doublecolon_end]=['']\n \n if best_doublecolon_start ==0:\n hextets=['']+hextets\n \n return hextets\n \n @classmethod\n def _string_from_ip_int(cls,ip_int=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if ip_int is None :\n ip_int=int(cls._ip)\n \n if ip_int >cls._ALL_ONES:\n raise ValueError('IPv6 address is too large')\n \n hex_str='%032x'%ip_int\n hextets=['%x'%int(hex_str[x:x+4],16)for x in range(0,32,4)]\n \n hextets=cls._compress_hextets(hextets)\n return ':'.join(hextets)\n \n def _explode_shorthand_ip_string(self):\n ''\n\n\n\n\n\n\n\n \n if isinstance(self,IPv6Network):\n ip_str=str(self.network_address)\n elif isinstance(self,IPv6Interface):\n ip_str=str(self.ip)\n else :\n ip_str=str(self)\n \n ip_int=self._ip_int_from_string(ip_str)\n hex_str='%032x'%ip_int\n parts=[hex_str[x:x+4]for x in range(0,32,4)]\n if isinstance(self,(_BaseNetwork,IPv6Interface)):\n return '%s/%d'%(':'.join(parts),self._prefixlen)\n return ':'.join(parts)\n \n def _reverse_pointer(self):\n ''\n\n\n\n \n reverse_chars=self.exploded[::-1].replace(':','')\n return '.'.join(reverse_chars)+'.ip6.arpa'\n \n @property\n def max_prefixlen(self):\n return self._max_prefixlen\n \n @property\n def version(self):\n return self._version\n \n \nclass IPv6Address(_BaseV6,_BaseAddress):\n\n ''\n \n __slots__=('_ip','__weakref__')\n \n def __init__(self,address):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if isinstance(address,int):\n self._check_int_address(address)\n self._ip=address\n return\n \n \n if isinstance(address,bytes):\n self._check_packed_address(address,16)\n self._ip=int.from_bytes(address,'big')\n return\n \n \n \n addr_str=str(address)\n if '/'in addr_str:\n raise AddressValueError(\"Unexpected '/' in %r\"%address)\n self._ip=self._ip_int_from_string(addr_str)\n \n @property\n def packed(self):\n ''\n return v6_int_to_packed(self._ip)\n \n @property\n def is_multicast(self):\n ''\n\n\n\n\n\n \n return self in self._constants._multicast_network\n \n @property\n def is_reserved(self):\n ''\n\n\n\n\n\n \n return any(self in x for x in self._constants._reserved_networks)\n \n @property\n def is_link_local(self):\n ''\n\n\n\n\n \n return self in self._constants._linklocal_network\n \n @property\n def is_site_local(self):\n ''\n\n\n\n\n\n\n\n\n \n return self in self._constants._sitelocal_network\n \n @property\n @functools.lru_cache()\n def is_private(self):\n ''\n\n\n\n\n\n \n return any(self in net for net in self._constants._private_networks)\n \n @property\n def is_global(self):\n ''\n\n\n\n\n\n \n return not self.is_private\n \n @property\n def is_unspecified(self):\n ''\n\n\n\n\n\n \n return self._ip ==0\n \n @property\n def is_loopback(self):\n ''\n\n\n\n\n\n \n return self._ip ==1\n \n @property\n def ipv4_mapped(self):\n ''\n\n\n\n\n\n \n if (self._ip >>32)!=0xFFFF:\n return None\n return IPv4Address(self._ip&0xFFFFFFFF)\n \n @property\n def teredo(self):\n ''\n\n\n\n\n\n\n \n if (self._ip >>96)!=0x20010000:\n return None\n return (IPv4Address((self._ip >>64)&0xFFFFFFFF),\n IPv4Address(~self._ip&0xFFFFFFFF))\n \n @property\n def sixtofour(self):\n ''\n\n\n\n\n\n \n if (self._ip >>112)!=0x2002:\n return None\n return IPv4Address((self._ip >>80)&0xFFFFFFFF)\n \n \nclass IPv6Interface(IPv6Address):\n\n def __init__(self,address):\n if isinstance(address,(bytes,int)):\n IPv6Address.__init__(self,address)\n self.network=IPv6Network(self._ip)\n self._prefixlen=self._max_prefixlen\n return\n if isinstance(address,tuple):\n IPv6Address.__init__(self,address[0])\n if len(address)>1:\n self._prefixlen=int(address[1])\n else :\n self._prefixlen=self._max_prefixlen\n self.network=IPv6Network(address,strict=False )\n self.netmask=self.network.netmask\n self.hostmask=self.network.hostmask\n return\n \n addr=_split_optional_netmask(address)\n IPv6Address.__init__(self,addr[0])\n self.network=IPv6Network(address,strict=False )\n self.netmask=self.network.netmask\n self._prefixlen=self.network._prefixlen\n self.hostmask=self.network.hostmask\n \n def __str__(self):\n return '%s/%d'%(self._string_from_ip_int(self._ip),\n self.network.prefixlen)\n \n def __eq__(self,other):\n address_equal=IPv6Address.__eq__(self,other)\n if not address_equal or address_equal is NotImplemented:\n return address_equal\n try :\n return self.network ==other.network\n except AttributeError:\n \n \n \n return False\n \n def __lt__(self,other):\n address_less=IPv6Address.__lt__(self,other)\n if address_less is NotImplemented:\n return NotImplemented\n try :\n return self.network 1:\n arg=address[1]\n else :\n arg=self._max_prefixlen\n self.netmask,self._prefixlen=self._make_netmask(arg)\n self.network_address=IPv6Address(address[0])\n packed=int(self.network_address)\n if packed&int(self.netmask)!=packed:\n if strict:\n raise ValueError('%s has host bits set'%self)\n else :\n self.network_address=IPv6Address(packed&\n int(self.netmask))\n return\n \n \n \n addr=_split_optional_netmask(address)\n \n self.network_address=IPv6Address(self._ip_int_from_string(addr[0]))\n \n if len(addr)==2:\n arg=addr[1]\n else :\n arg=self._max_prefixlen\n self.netmask,self._prefixlen=self._make_netmask(arg)\n \n if strict:\n if (IPv6Address(int(self.network_address)&int(self.netmask))!=\n self.network_address):\n raise ValueError('%s has host bits set'%self)\n self.network_address=IPv6Address(int(self.network_address)&\n int(self.netmask))\n \n if self._prefixlen ==(self._max_prefixlen -1):\n self.hosts=self.__iter__\n \n def hosts(self):\n ''\n\n\n\n\n \n network=int(self.network_address)\n broadcast=int(self.broadcast_address)\n for x in range(network+1,broadcast+1):\n yield self._address_class(x)\n \n @property\n def is_site_local(self):\n ''\n\n\n\n\n\n\n\n\n \n return (self.network_address.is_site_local and\n self.broadcast_address.is_site_local)\n \n \n \n \nstr2int={\n\"fe80::\":338288524927261089654018896841347694592,\n\"ff00::\":338953138925153547590470800371487866880,\n\"::1\":1,\n\"::\":0,\n\"::ffff:0:0\":281470681743360,\n\"100::\":1329227995784915872903807060280344576,\n\"2001::\":42540488161975842760550356425300246528,\n\"2001:2::\":42540488320432167789079031612388147200,\n\"2001:db8::\":42540766411282592856903984951653826560,\n\"2001:10::\":42540489429626442988779757922003451904,\n\"fc00::\":334965454937798799971759379190646833152,\n\"fe80::\":338288524927261089654018896841347694592,\n\"::\":0,\n\"100::\":1329227995784915872903807060280344576,\n\"200::\":2658455991569831745807614120560689152,\n\"400::\":5316911983139663491615228241121378304,\n\"800::\":10633823966279326983230456482242756608,\n\"1000::\":21267647932558653966460912964485513216,\n\"4000::\":85070591730234615865843651857942052864,\n\"6000::\":127605887595351923798765477786913079296,\n\"8000::\":170141183460469231731687303715884105728,\n\"A000::\":212676479325586539664609129644855132160,\n\"C000::\":255211775190703847597530955573826158592,\n\"E000::\":297747071055821155530452781502797185024,\n\"F000::\":319014718988379809496913694467282698240,\n\"F800::\":329648542954659136480144150949525454848,\n\"FE00::\":337623910929368631717566993311207522304,\n\"fec0::\":338620831926207318622244848606417780736\n}\n\nclass _IPv6Constants:\n\n _linklocal_network=IPv6Network('fe80::/10')\n \n _multicast_network=IPv6Network('ff00::/8')\n \n _private_networks=[\n IPv6Network('::1/128'),\n IPv6Network('::/128'),\n IPv6Network('::ffff:0:0/96'),\n IPv6Network('100::/64'),\n IPv6Network('2001::/23'),\n IPv6Network('2001:2::/48'),\n IPv6Network('2001:db8::/32'),\n IPv6Network('2001:10::/28'),\n IPv6Network('fc00::/7'),\n IPv6Network('fe80::/10'),\n ]\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \nIPv6Address._constants=_IPv6Constants\n",["functools"]],itertools:[".py",'import operator\n\nclass accumulate:\n def __init__(self,iterable,func=operator.add):\n self.it=iter(iterable)\n self._total=None\n self.func=func\n \n def __iter__(self):\n return self\n \n def __next__(self):\n if not self._total:\n self._total=next(self.it)\n return self._total\n else :\n element=next(self.it)\n try :\n self._total=self.func(self._total,element)\n except :\n raise TypeError("unsupported operand type")\n return self._total\n \n \n \nclass chain:\n def __init__(self,*iterables):\n self._iterables_iter=iter(map(iter,iterables))\n \n self._cur_iterable_iter=iter([])\n \n def __iter__(self):\n return self\n \n def __next__(self):\n while True :\n try :\n return next(self._cur_iterable_iter)\n except StopIteration:\n self._cur_iterable_iter=next(self._iterables_iter)\n \n @classmethod\n def from_iterable(cls,iterable):\n for it in iterable:\n for element in it:\n yield element\n \nclass combinations:\n def __init__(self,iterable,r):\n self.pool=tuple(iterable)\n self.n=len(self.pool)\n self.r=r\n self.indices=list(range(self.r))\n self.zero=False\n \n def __iter__(self):\n return self\n \n def __next__(self):\n if self.r >self.n:\n raise StopIteration\n if not self.zero:\n self.zero=True\n return tuple(self.pool[i]for i in self.indices)\n else :\n try :\n for i in reversed(range(self.r)):\n if self.indices[i]!=i+self.n -self.r:\n break\n self.indices[i]+=1\n for j in range(i+1,self.r):\n self.indices[j]=self.indices[j -1]+1\n return tuple(self.pool[i]for i in self.indices)\n except :\n raise StopIteration\n \nclass combinations_with_replacement:\n def __init__(self,iterable,r):\n self.pool=tuple(iterable)\n self.n=len(self.pool)\n self.r=r\n self.indices=[0]*self.r\n self.zero=False\n \n def __iter__(self):\n return self\n \n def __next__(self):\n if not self.n and self.r:\n raise StopIteration\n if not self.zero:\n self.zero=True\n return tuple(self.pool[i]for i in self.indices)\n else :\n try :\n for i in reversed(range(self.r)):\n if self.indices[i]!=self.n -1:\n break\n self.indices[i:]=[self.indices[i]+1]*(self.r -i)\n return tuple(self.pool[i]for i in self.indices)\n except :\n raise StopIteration\n \n \n \nclass compress:\n def __init__(self,data,selectors):\n self.data=iter(data)\n self.selectors=iter(selectors)\n \n def __iter__(self):\n return self\n \n def __next__(self):\n while True :\n next_item=next(self.data)\n next_selector=next(self.selectors)\n if bool(next_selector):\n return next_item\n \n \n \n \nclass count:\n \'\'\n\n\n\n \n def __init__(self,start=0,step=1):\n if not isinstance(start,(int,float)):\n raise TypeError(\'a number is required\')\n self.times=start -step\n self.step=step\n \n def __iter__(self):\n return self\n \n def __next__(self):\n self.times +=self.step\n return self.times\n \n def __repr__(self):\n return \'count(%d)\'%(self.times+self.step)\n \n \n \nclass cycle:\n def __init__(self,iterable):\n self._cur_iter=iter(iterable)\n self._saved=[]\n self._must_save=True\n \n def __iter__(self):\n return self\n \n def __next__(self):\n try :\n next_elt=next(self._cur_iter)\n if self._must_save:\n self._saved.append(next_elt)\n except StopIteration:\n self._cur_iter=iter(self._saved)\n next_elt=next(self._cur_iter)\n self._must_save=False\n return next_elt\n \n \n \nclass dropwhile:\n def __init__(self,predicate,iterable):\n self._predicate=predicate\n self._iter=iter(iterable)\n self._dropped=False\n \n def __iter__(self):\n return self\n \n def __next__(self):\n value=next(self._iter)\n if self._dropped:\n return value\n while self._predicate(value):\n value=next(self._iter)\n self._dropped=True\n return value\n \n \n \nclass filterfalse:\n def __init__(self,predicate,iterable):\n \n self._iter=iter(iterable)\n if predicate is None :\n self._predicate=bool\n else :\n self._predicate=predicate\n \n def __iter__(self):\n return self\n def __next__(self):\n next_elt=next(self._iter)\n while True :\n if not self._predicate(next_elt):\n return next_elt\n next_elt=next(self._iter)\n \nclass groupby:\n\n\n def __init__(self,iterable,key=None ):\n if key is None :\n key=lambda x:x\n self.keyfunc=key\n self.it=iter(iterable)\n self.tgtkey=self.currkey=self.currvalue=object()\n def __iter__(self):\n return self\n def __next__(self):\n while self.currkey ==self.tgtkey:\n self.currvalue=next(self.it)\n self.currkey=self.keyfunc(self.currvalue)\n self.tgtkey=self.currkey\n return (self.currkey,self._grouper(self.tgtkey))\n def _grouper(self,tgtkey):\n while self.currkey ==tgtkey:\n yield self.currvalue\n self.currvalue=next(self.it)\n self.currkey=self.keyfunc(self.currvalue)\n \n \n \nclass islice:\n def __init__(self,iterable,*args):\n s=slice(*args)\n self.start,self.stop,self.step=s.start or 0,s.stop,s.step\n if not isinstance(self.start,int):\n raise ValueError("Start argument must be an integer")\n if self.stop !=None and not isinstance(self.stop,int):\n raise ValueError("Stop argument must be an integer or None")\n if self.step is None :\n self.step=1\n if self.start <0 or (self.stop !=None and self.stop <0\n )or self.step <=0:\n raise ValueError("indices for islice() must be positive")\n self.it=iter(iterable)\n self.donext=None\n self.cnt=0\n \n def __iter__(self):\n return self\n \n def __next__(self):\n nextindex=self.start\n if self.stop !=None and nextindex >=self.stop:\n raise StopIteration\n while self.cnt <=nextindex:\n nextitem=next(self.it)\n self.cnt +=1\n self.start +=self.step\n return nextitem\n \nclass permutations:\n def __init__(self,iterable,r=None ):\n self.pool=tuple(iterable)\n self.n=len(self.pool)\n self.r=self.n if r is None else r\n self.indices=list(range(self.n))\n self.cycles=list(range(self.n,self.n -self.r,-1))\n self.zero=False\n self.stop=False\n \n def __iter__(self):\n return self\n \n def __next__(self):\n indices=self.indices\n if self.r >self.n:\n raise StopIteration\n if not self.zero:\n self.zero=True\n return tuple(self.pool[i]for i in indices[:self.r])\n \n i=self.r -1\n while i >=0:\n j=self.cycles[i]-1\n if j >0:\n self.cycles[i]=j\n indices[i],indices[-j]=indices[-j],indices[i]\n return tuple(self.pool[i]for i in indices[:self.r])\n self.cycles[i]=len(indices)-i\n n1=len(indices)-1\n assert n1 >=0\n num=indices[i]\n for k in range(i,n1):\n indices[k]=indices[k+1]\n indices[n1]=num\n i -=1\n raise StopIteration\n \n \ndef product(*args,repeat=1):\n\n\n pools=[tuple(pool)for pool in args]*repeat\n result=[[]]\n for pool in pools:\n result=[x+[y]for x in result for y in pool]\n for prod in result:\n yield tuple(prod)\n \n \n \n \n \n \n \n \nclass _product:\n def __init__(self,*args,**kw):\n if len(kw)>1:\n raise TypeError("product() takes at most 1 argument (%d given)"%\n len(kw))\n self.repeat=kw.get(\'repeat\',1)\n if not isinstance(self.repeat,int):\n raise TypeError("integer argument expected, got %s"%\n type(self.repeat))\n self.gears=[x for x in args]*self.repeat\n self.num_gears=len(self.gears)\n \n self.indicies=[(0,len(self.gears[x]))\n for x in range(0,self.num_gears)]\n self.cont=True\n self.zero=False\n \n def roll_gears(self):\n \n \n \n should_carry=True\n for n in range(0,self.num_gears):\n nth_gear=self.num_gears -n -1\n if should_carry:\n count,lim=self.indicies[nth_gear]\n count +=1\n if count ==lim and nth_gear ==0:\n self.cont=False\n if count ==lim:\n should_carry=True\n count=0\n else :\n should_carry=False\n self.indicies[nth_gear]=(count,lim)\n else :\n break\n \n def __iter__(self):\n return self\n \n def __next__(self):\n if self.zero:\n raise StopIteration\n if self.repeat >0:\n if not self.cont:\n raise StopIteration\n l=[]\n for x in range(0,self.num_gears):\n index,limit=self.indicies[x]\n print(\'itertools 353\',self.gears,x,index)\n l.append(self.gears[x][index])\n self.roll_gears()\n return tuple(l)\n elif self.repeat ==0:\n self.zero=True\n return ()\n else :\n raise ValueError("repeat argument cannot be negative")\n \n \n \nclass repeat:\n def __init__(self,obj,times=None ):\n self._obj=obj\n if times is not None :\n range(times)\n if times <0:\n times=0\n self._times=times\n \n def __iter__(self):\n return self\n \n def __next__(self):\n \n if self._times is not None :\n if self._times <=0:\n raise StopIteration()\n self._times -=1\n return self._obj\n \n def __repr__(self):\n if self._times is not None :\n return \'repeat(%r, %r)\'%(self._obj,self._times)\n else :\n return \'repeat(%r)\'%(self._obj,)\n \n def __len__(self):\n if self._times ==-1 or self._times is None :\n raise TypeError("len() of uniszed object")\n return self._times\n \n \n \nclass starmap(object):\n def __init__(self,function,iterable):\n self._func=function\n self._iter=iter(iterable)\n \n def __iter__(self):\n return self\n \n def __next__(self):\n t=next(self._iter)\n return self._func(*t)\n \n \n \nclass takewhile(object):\n def __init__(self,predicate,iterable):\n self._predicate=predicate\n self._iter=iter(iterable)\n \n def __iter__(self):\n return self\n \n def __next__(self):\n value=next(self._iter)\n if not self._predicate(value):\n raise StopIteration()\n return value\n \n \n \nclass TeeData(object):\n def __init__(self,iterator):\n self.data=[]\n self._iter=iterator\n \n def __getitem__(self,i):\n \n while i >=len(self.data):\n self.data.append(next(self._iter))\n return self.data[i]\n \n \nclass TeeObject(object):\n def __init__(self,iterable=None ,tee_data=None ):\n if tee_data:\n self.tee_data=tee_data\n self.pos=0\n \n elif isinstance(iterable,TeeObject):\n self.tee_data=iterable.tee_data\n self.pos=iterable.pos\n else :\n self.tee_data=TeeData(iter(iterable))\n self.pos=0\n \n def __next__(self):\n data=self.tee_data[self.pos]\n self.pos +=1\n return data\n \n def __iter__(self):\n return self\n \n \ndef tee(iterable,n=2):\n if isinstance(iterable,TeeObject):\n return tuple([iterable]+\n [TeeObject(tee_data=iterable.tee_data)for i in range(n -1)])\n tee_data=TeeData(iter(iterable))\n return tuple([TeeObject(tee_data=tee_data)for i in range(n)])\n \nclass zip_longest:\n def __init__(self,*args,fillvalue=None ):\n self.args=[iter(arg)for arg in args]\n self.fillvalue=fillvalue\n self.units=len(args)\n \n def __iter__(self):\n return self\n \n def __next__(self):\n temp=[]\n nb=0\n for i in range(self.units):\n try :\n temp.append(next(self.args[i]))\n nb +=1\n except StopIteration:\n temp.append(self.fillvalue)\n if nb ==0:\n raise StopIteration\n return tuple(temp)\n',["operator"]],keyword:[".py","#! /usr/bin/env python3\n\n\"\"\"Keywords (from \"graminit.c\")\n\nThis file is automatically generated; please don't muck it up!\n\nTo update the symbols in this file, 'cd' to the top directory of\nthe python source tree after building the interpreter and run:\n\n ./python Lib/keyword.py\n\"\"\"\n\n__all__=[\"iskeyword\",\"kwlist\"]\n\nkwlist=[\n\n'False',\n'None',\n'True',\n'and',\n'as',\n'assert',\n'break',\n'class',\n'continue',\n'def',\n'del',\n'elif',\n'else',\n'except',\n'finally',\n'for',\n'from',\n'global',\n'if',\n'import',\n'in',\n'is',\n'lambda',\n'nonlocal',\n'not',\n'or',\n'pass',\n'raise',\n'return',\n'try',\n'while',\n'with',\n'yield',\n\n]\n\niskeyword=frozenset(kwlist).__contains__\n\ndef main():\n import sys,re\n \n args=sys.argv[1:]\n iptfile=args and args[0]or \"Python/graminit.c\"\n if len(args)>1:optfile=args[1]\n else :optfile=\"Lib/keyword.py\"\n \n \n with open(iptfile)as fp:\n strprog=re.compile('\"([^\"]+)\"')\n lines=[]\n for line in fp:\n if '{1, \"'in line:\n match=strprog.search(line)\n if match:\n lines.append(\" '\"+match.group(1)+\"',\\n\")\n lines.sort()\n \n \n with open(optfile)as fp:\n format=fp.readlines()\n \n \n try :\n start=format.index(\"#--start keywords--\\n\")+1\n end=format.index(\"#--end keywords--\\n\")\n format[start:end]=lines\n except ValueError:\n sys.stderr.write(\"target does not contain format markers\\n\")\n sys.exit(1)\n \n \n fp=open(optfile,'w')\n fp.write(''.join(format))\n fp.close()\n \nif __name__ ==\"__main__\":\n main()\n",["re","sys"]],linecache:[".py","''\n\n\n\n\n\n\nimport sys\nimport os\nimport tokenize\n\n__all__=[\"getline\",\"clearcache\",\"checkcache\"]\n\ndef getline(filename,lineno,module_globals=None ):\n lines=getlines(filename,module_globals)\n if 1 <=lineno <=len(lines):\n return lines[lineno -1]\n else :\n return ''\n \n \n \n \ncache={}\n\n\ndef clearcache():\n ''\n \n global cache\n cache={}\n \n \ndef getlines(filename,module_globals=None ):\n ''\n \n \n if filename in cache:\n return cache[filename][2]\n else :\n return updatecache(filename,module_globals)\n \n \ndef checkcache(filename=None ):\n ''\n \n \n if filename is None :\n filenames=list(cache.keys())\n else :\n if filename in cache:\n filenames=[filename]\n else :\n return\n \n for filename in filenames:\n size,mtime,lines,fullname=cache[filename]\n if mtime is None :\n continue\n try :\n stat=os.stat(fullname)\n except os.error:\n del cache[filename]\n continue\n if size !=stat.st_size or mtime !=stat.st_mtime:\n del cache[filename]\n \n \ndef updatecache(filename,module_globals=None ):\n ''\n\n \n \n if filename in cache:\n del cache[filename]\n if not filename or (filename.startswith('<')and filename.endswith('>')):\n return []\n \n fullname=filename\n try :\n stat=os.stat(fullname)\n except OSError:\n basename=filename\n \n \n if module_globals and '__loader__'in module_globals:\n name=module_globals.get('__name__')\n loader=module_globals['__loader__']\n get_source=getattr(loader,'get_source',None )\n \n if name and get_source:\n try :\n data=get_source(name)\n except (ImportError,IOError):\n pass\n else :\n if data is None :\n \n \n return []\n cache[filename]=(\n len(data),None ,\n [line+'\\n'for line in data.splitlines()],fullname\n )\n return cache[filename][2]\n \n \n \n if os.path.isabs(filename):\n return []\n \n for dirname in sys.path:\n try :\n fullname=os.path.join(dirname,basename)\n except (TypeError,AttributeError):\n \n continue\n try :\n stat=os.stat(fullname)\n break\n except os.error:\n pass\n else :\n return []\n try :\n with tokenize.open(fullname)as fp:\n lines=fp.readlines()\n except IOError:\n return []\n if lines and not lines[-1].endswith('\\n'):\n lines[-1]+='\\n'\n size,mtime=stat.st_size,stat.st_mtime\n cache[filename]=size,mtime,lines,fullname\n return lines\n",["os","sys","tokenize"]],locale:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\nimport sys\nimport encodings\nimport encodings.aliases\nimport re\nimport collections\nfrom builtins import str as _builtin_str\nimport functools\n\n\n\n\n\n\n\n__all__=[\"getlocale\",\"getdefaultlocale\",\"getpreferredencoding\",\"Error\",\n\"setlocale\",\"resetlocale\",\"localeconv\",\"strcoll\",\"strxfrm\",\n\"str\",\"atof\",\"atoi\",\"format\",\"format_string\",\"currency\",\n\"normalize\",\"LC_CTYPE\",\"LC_COLLATE\",\"LC_TIME\",\"LC_MONETARY\",\n\"LC_NUMERIC\",\"LC_ALL\",\"CHAR_MAX\"]\n\ndef _strcoll(a,b):\n ''\n\n \n return (a >b)-(a .*?)\\))?'\nr'(?P[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')\n\ndef format(percent,value,grouping=False ,monetary=False ,*additional):\n ''\n\n\n\n \n \n match=_percent_re.match(percent)\n if not match or len(match.group())!=len(percent):\n raise ValueError((\"format() must be given exactly one %%char \"\n \"format specifier, %s not valid\")%repr(percent))\n return _format(percent,value,grouping,monetary,*additional)\n \ndef _format(percent,value,grouping=False ,monetary=False ,*additional):\n if additional:\n formatted=percent %((value,)+additional)\n else :\n formatted=percent %value\n \n if percent[-1]in 'eEfFgG':\n seps=0\n parts=formatted.split('.')\n if grouping:\n parts[0],seps=_group(parts[0],monetary=monetary)\n decimal_point=localeconv()[monetary and 'mon_decimal_point'\n or 'decimal_point']\n formatted=decimal_point.join(parts)\n if seps:\n formatted=_strip_padding(formatted,seps)\n elif percent[-1]in 'diu':\n seps=0\n if grouping:\n formatted,seps=_group(formatted,monetary=monetary)\n if seps:\n formatted=_strip_padding(formatted,seps)\n return formatted\n \ndef format_string(f,val,grouping=False ):\n ''\n\n \n percents=list(_percent_re.finditer(f))\n new_f=_percent_re.sub('%s',f)\n \n if isinstance(val,collections.Mapping):\n new_val=[]\n for perc in percents:\n if perc.group()[-1]=='%':\n new_val.append('%')\n else :\n new_val.append(format(perc.group(),val,grouping))\n else :\n if not isinstance(val,tuple):\n val=(val,)\n new_val=[]\n i=0\n for perc in percents:\n if perc.group()[-1]=='%':\n new_val.append('%')\n else :\n starcount=perc.group('modifiers').count('*')\n new_val.append(_format(perc.group(),\n val[i],\n grouping,\n False ,\n *val[i+1:i+1+starcount]))\n i +=(1+starcount)\n val=tuple(new_val)\n \n return new_f %val\n \ndef currency(val,symbol=True ,grouping=False ,international=False ):\n ''\n \n conv=localeconv()\n \n \n digits=conv[international and 'int_frac_digits'or 'frac_digits']\n if digits ==127:\n raise ValueError(\"Currency formatting is not possible using \"\n \"the 'C' locale.\")\n \n s=format('%%.%if'%digits,abs(val),grouping,monetary=True )\n \n s='<'+s+'>'\n \n if symbol:\n smb=conv[international and 'int_curr_symbol'or 'currency_symbol']\n precedes=conv[val <0 and 'n_cs_precedes'or 'p_cs_precedes']\n separated=conv[val <0 and 'n_sep_by_space'or 'p_sep_by_space']\n \n if precedes:\n s=smb+(separated and ' 'or '')+s\n else :\n s=s+(separated and ' 'or '')+smb\n \n sign_pos=conv[val <0 and 'n_sign_posn'or 'p_sign_posn']\n sign=conv[val <0 and 'negative_sign'or 'positive_sign']\n \n if sign_pos ==0:\n s='('+s+')'\n elif sign_pos ==1:\n s=sign+s\n elif sign_pos ==2:\n s=s+sign\n elif sign_pos ==3:\n s=s.replace('<',sign)\n elif sign_pos ==4:\n s=s.replace('>',sign)\n else :\n \n \n s=sign+s\n \n return s.replace('<','').replace('>','')\n \ndef str(val):\n ''\n return format(\"%.12g\",val)\n \ndef atof(string,func=float):\n ''\n \n ts=localeconv()['thousands_sep']\n if ts:\n string=string.replace(ts,'')\n \n dd=localeconv()['decimal_point']\n if dd:\n string=string.replace(dd,'.')\n \n return func(string)\n \ndef atoi(str):\n ''\n return atof(str,int)\n \ndef _test():\n setlocale(LC_ALL,\"\")\n \n s1=format(\"%d\",123456789,1)\n print(s1,\"is\",atoi(s1))\n \n s1=str(3.14)\n print(s1,\"is\",atof(s1))\n \n \n \n \n \n \n \n \n_setlocale=setlocale\n\ndef _replace_encoding(code,encoding):\n if '.'in code:\n langname=code[:code.index('.')]\n else :\n langname=code\n \n norm_encoding=encodings.normalize_encoding(encoding)\n \n norm_encoding=encodings.aliases.aliases.get(norm_encoding.lower(),\n norm_encoding)\n \n encoding=norm_encoding\n norm_encoding=norm_encoding.lower()\n if norm_encoding in locale_encoding_alias:\n encoding=locale_encoding_alias[norm_encoding]\n else :\n norm_encoding=norm_encoding.replace('_','')\n norm_encoding=norm_encoding.replace('-','')\n if norm_encoding in locale_encoding_alias:\n encoding=locale_encoding_alias[norm_encoding]\n \n return langname+'.'+encoding\n \ndef _append_modifier(code,modifier):\n if modifier =='euro':\n if '.'not in code:\n return code+'.ISO8859-15'\n _,_,encoding=code.partition('.')\n if encoding in ('ISO8859-15','UTF-8'):\n return code\n if encoding =='ISO8859-1':\n return _replace_encoding(code,'ISO8859-15')\n return code+'@'+modifier\n \ndef normalize(localename):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n code=localename.lower()\n if ':'in code:\n \n code=code.replace(':','.')\n if '@'in code:\n code,modifier=code.split('@',1)\n else :\n modifier=''\n if '.'in code:\n langname,encoding=code.split('.')[:2]\n else :\n langname=code\n encoding=''\n \n \n lang_enc=langname\n if encoding:\n norm_encoding=encoding.replace('-','')\n norm_encoding=norm_encoding.replace('_','')\n lang_enc +='.'+norm_encoding\n lookup_name=lang_enc\n if modifier:\n lookup_name +='@'+modifier\n code=locale_alias.get(lookup_name,None )\n if code is not None :\n return code\n \n \n if modifier:\n \n code=locale_alias.get(lang_enc,None )\n if code is not None :\n \n if '@'not in code:\n return _append_modifier(code,modifier)\n if code.split('@',1)[1].lower()==modifier:\n return code\n \n \n if encoding:\n \n lookup_name=langname\n if modifier:\n lookup_name +='@'+modifier\n code=locale_alias.get(lookup_name,None )\n if code is not None :\n \n if '@'not in code:\n return _replace_encoding(code,encoding)\n code,modifier=code.split('@',1)\n return _replace_encoding(code,encoding)+'@'+modifier\n \n if modifier:\n \n code=locale_alias.get(langname,None )\n if code is not None :\n \n if '@'not in code:\n code=_replace_encoding(code,encoding)\n return _append_modifier(code,modifier)\n code,defmod=code.split('@',1)\n if defmod.lower()==modifier:\n return _replace_encoding(code,encoding)+'@'+defmod\n \n return localename\n \ndef _parse_localename(localename):\n\n ''\n\n\n\n\n\n\n\n\n\n\n \n code=normalize(localename)\n if '@'in code:\n \n code,modifier=code.split('@',1)\n if modifier =='euro'and '.'not in code:\n \n \n \n return code,'iso-8859-15'\n \n if '.'in code:\n return tuple(code.split('.')[:2])\n elif code =='C':\n return None ,None\n raise ValueError('unknown locale: %s'%localename)\n \ndef _build_localename(localetuple):\n\n ''\n\n\n\n\n \n try :\n language,encoding=localetuple\n \n if language is None :\n language='C'\n if encoding is None :\n return language\n else :\n return language+'.'+encoding\n except (TypeError,ValueError):\n raise TypeError('Locale must be None, a string, or an iterable of two strings -- language code, encoding.')\n \ndef getdefaultlocale(envvars=('LC_ALL','LC_CTYPE','LANG','LANGUAGE')):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n import os\n lookup=os.environ.get\n for variable in envvars:\n localename=lookup(variable,None )\n if localename:\n if variable =='LANGUAGE':\n localename=localename.split(':')[0]\n break\n else :\n localename='C'\n return _parse_localename(localename)\n \n \ndef getlocale(category=LC_CTYPE):\n\n ''\n\n\n\n\n\n\n\n\n\n \n localename=_setlocale(category)\n if category ==LC_ALL and ';'in localename:\n raise TypeError('category LC_ALL is not supported')\n return _parse_localename(localename)\n \ndef setlocale(category,locale=None ):\n\n ''\n\n\n\n\n\n\n\n\n \n if locale and not isinstance(locale,_builtin_str):\n \n locale=normalize(_build_localename(locale))\n return _setlocale(category,locale)\n \ndef resetlocale(category=LC_ALL):\n\n ''\n\n\n\n\n \n _setlocale(category,_build_localename(getdefaultlocale()))\n \nif sys.platform.startswith(\"win\"):\n\n def getpreferredencoding(do_setlocale=True ):\n ''\n import _bootlocale\n return _bootlocale.getpreferredencoding(False )\nelse :\n\n try :\n CODESET\n except NameError:\n \n def getpreferredencoding(do_setlocale=True ):\n ''\n \n res=getdefaultlocale()[1]\n if res is None :\n \n res='ascii'\n return res\n else :\n def getpreferredencoding(do_setlocale=True ):\n ''\n \n import _bootlocale\n if do_setlocale:\n oldloc=setlocale(LC_CTYPE)\n try :\n setlocale(LC_CTYPE,\"\")\n except Error:\n pass\n result=_bootlocale.getpreferredencoding(False )\n if do_setlocale:\n setlocale(LC_CTYPE,oldloc)\n return result\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nlocale_encoding_alias={\n\n\n'437':'C',\n'c':'C',\n'en':'ISO8859-1',\n'jis':'JIS7',\n'jis7':'JIS7',\n'ajec':'eucJP',\n'koi8c':'KOI8-C',\n'microsoftcp1251':'CP1251',\n'microsoftcp1255':'CP1255',\n'microsoftcp1256':'CP1256',\n'88591':'ISO8859-1',\n'88592':'ISO8859-2',\n'88595':'ISO8859-5',\n'885915':'ISO8859-15',\n\n\n'ascii':'ISO8859-1',\n'latin_1':'ISO8859-1',\n'iso8859_1':'ISO8859-1',\n'iso8859_10':'ISO8859-10',\n'iso8859_11':'ISO8859-11',\n'iso8859_13':'ISO8859-13',\n'iso8859_14':'ISO8859-14',\n'iso8859_15':'ISO8859-15',\n'iso8859_16':'ISO8859-16',\n'iso8859_2':'ISO8859-2',\n'iso8859_3':'ISO8859-3',\n'iso8859_4':'ISO8859-4',\n'iso8859_5':'ISO8859-5',\n'iso8859_6':'ISO8859-6',\n'iso8859_7':'ISO8859-7',\n'iso8859_8':'ISO8859-8',\n'iso8859_9':'ISO8859-9',\n'iso2022_jp':'JIS7',\n'shift_jis':'SJIS',\n'tactis':'TACTIS',\n'euc_jp':'eucJP',\n'euc_kr':'eucKR',\n'utf_8':'UTF-8',\n'koi8_r':'KOI8-R',\n'koi8_u':'KOI8-U',\n'cp1251':'CP1251',\n'cp1255':'CP1255',\n'cp1256':'CP1256',\n\n\n\n}\n\nfor k,v in sorted(locale_encoding_alias.items()):\n k=k.replace('_','')\n locale_encoding_alias.setdefault(k,v)\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nlocale_alias={\n'a3':'az_AZ.KOI8-C',\n'a3_az':'az_AZ.KOI8-C',\n'a3_az.koic':'az_AZ.KOI8-C',\n'aa_dj':'aa_DJ.ISO8859-1',\n'aa_er':'aa_ER.UTF-8',\n'aa_et':'aa_ET.UTF-8',\n'af':'af_ZA.ISO8859-1',\n'af_za':'af_ZA.ISO8859-1',\n'am':'am_ET.UTF-8',\n'am_et':'am_ET.UTF-8',\n'american':'en_US.ISO8859-1',\n'an_es':'an_ES.ISO8859-15',\n'ar':'ar_AA.ISO8859-6',\n'ar_aa':'ar_AA.ISO8859-6',\n'ar_ae':'ar_AE.ISO8859-6',\n'ar_bh':'ar_BH.ISO8859-6',\n'ar_dz':'ar_DZ.ISO8859-6',\n'ar_eg':'ar_EG.ISO8859-6',\n'ar_in':'ar_IN.UTF-8',\n'ar_iq':'ar_IQ.ISO8859-6',\n'ar_jo':'ar_JO.ISO8859-6',\n'ar_kw':'ar_KW.ISO8859-6',\n'ar_lb':'ar_LB.ISO8859-6',\n'ar_ly':'ar_LY.ISO8859-6',\n'ar_ma':'ar_MA.ISO8859-6',\n'ar_om':'ar_OM.ISO8859-6',\n'ar_qa':'ar_QA.ISO8859-6',\n'ar_sa':'ar_SA.ISO8859-6',\n'ar_sd':'ar_SD.ISO8859-6',\n'ar_sy':'ar_SY.ISO8859-6',\n'ar_tn':'ar_TN.ISO8859-6',\n'ar_ye':'ar_YE.ISO8859-6',\n'arabic':'ar_AA.ISO8859-6',\n'as':'as_IN.UTF-8',\n'as_in':'as_IN.UTF-8',\n'ast_es':'ast_ES.ISO8859-15',\n'ayc_pe':'ayc_PE.UTF-8',\n'az':'az_AZ.ISO8859-9E',\n'az_az':'az_AZ.ISO8859-9E',\n'az_az.iso88599e':'az_AZ.ISO8859-9E',\n'be':'be_BY.CP1251',\n'be@latin':'be_BY.UTF-8@latin',\n'be_bg.utf8':'bg_BG.UTF-8',\n'be_by':'be_BY.CP1251',\n'be_by@latin':'be_BY.UTF-8@latin',\n'bem_zm':'bem_ZM.UTF-8',\n'ber_dz':'ber_DZ.UTF-8',\n'ber_ma':'ber_MA.UTF-8',\n'bg':'bg_BG.CP1251',\n'bg_bg':'bg_BG.CP1251',\n'bho_in':'bho_IN.UTF-8',\n'bn_bd':'bn_BD.UTF-8',\n'bn_in':'bn_IN.UTF-8',\n'bo_cn':'bo_CN.UTF-8',\n'bo_in':'bo_IN.UTF-8',\n'bokmal':'nb_NO.ISO8859-1',\n'bokm\\xe5l':'nb_NO.ISO8859-1',\n'br':'br_FR.ISO8859-1',\n'br_fr':'br_FR.ISO8859-1',\n'brx_in':'brx_IN.UTF-8',\n'bs':'bs_BA.ISO8859-2',\n'bs_ba':'bs_BA.ISO8859-2',\n'bulgarian':'bg_BG.CP1251',\n'byn_er':'byn_ER.UTF-8',\n'c':'C',\n'c-french':'fr_CA.ISO8859-1',\n'c.ascii':'C',\n'c.en':'C',\n'c.iso88591':'en_US.ISO8859-1',\n'c.utf8':'en_US.UTF-8',\n'c_c':'C',\n'c_c.c':'C',\n'ca':'ca_ES.ISO8859-1',\n'ca_ad':'ca_AD.ISO8859-1',\n'ca_es':'ca_ES.ISO8859-1',\n'ca_es@valencia':'ca_ES.ISO8859-15@valencia',\n'ca_fr':'ca_FR.ISO8859-1',\n'ca_it':'ca_IT.ISO8859-1',\n'catalan':'ca_ES.ISO8859-1',\n'cextend':'en_US.ISO8859-1',\n'chinese-s':'zh_CN.eucCN',\n'chinese-t':'zh_TW.eucTW',\n'crh_ua':'crh_UA.UTF-8',\n'croatian':'hr_HR.ISO8859-2',\n'cs':'cs_CZ.ISO8859-2',\n'cs_cs':'cs_CZ.ISO8859-2',\n'cs_cz':'cs_CZ.ISO8859-2',\n'csb_pl':'csb_PL.UTF-8',\n'cv_ru':'cv_RU.UTF-8',\n'cy':'cy_GB.ISO8859-1',\n'cy_gb':'cy_GB.ISO8859-1',\n'cz':'cs_CZ.ISO8859-2',\n'cz_cz':'cs_CZ.ISO8859-2',\n'czech':'cs_CZ.ISO8859-2',\n'da':'da_DK.ISO8859-1',\n'da_dk':'da_DK.ISO8859-1',\n'danish':'da_DK.ISO8859-1',\n'dansk':'da_DK.ISO8859-1',\n'de':'de_DE.ISO8859-1',\n'de_at':'de_AT.ISO8859-1',\n'de_be':'de_BE.ISO8859-1',\n'de_ch':'de_CH.ISO8859-1',\n'de_de':'de_DE.ISO8859-1',\n'de_li.utf8':'de_LI.UTF-8',\n'de_lu':'de_LU.ISO8859-1',\n'deutsch':'de_DE.ISO8859-1',\n'doi_in':'doi_IN.UTF-8',\n'dutch':'nl_NL.ISO8859-1',\n'dutch.iso88591':'nl_BE.ISO8859-1',\n'dv_mv':'dv_MV.UTF-8',\n'dz_bt':'dz_BT.UTF-8',\n'ee':'ee_EE.ISO8859-4',\n'ee_ee':'ee_EE.ISO8859-4',\n'eesti':'et_EE.ISO8859-1',\n'el':'el_GR.ISO8859-7',\n'el_cy':'el_CY.ISO8859-7',\n'el_gr':'el_GR.ISO8859-7',\n'el_gr@euro':'el_GR.ISO8859-15',\n'en':'en_US.ISO8859-1',\n'en_ag':'en_AG.UTF-8',\n'en_au':'en_AU.ISO8859-1',\n'en_be':'en_BE.ISO8859-1',\n'en_bw':'en_BW.ISO8859-1',\n'en_ca':'en_CA.ISO8859-1',\n'en_dk':'en_DK.ISO8859-1',\n'en_dl.utf8':'en_DL.UTF-8',\n'en_gb':'en_GB.ISO8859-1',\n'en_hk':'en_HK.ISO8859-1',\n'en_ie':'en_IE.ISO8859-1',\n'en_in':'en_IN.ISO8859-1',\n'en_ng':'en_NG.UTF-8',\n'en_nz':'en_NZ.ISO8859-1',\n'en_ph':'en_PH.ISO8859-1',\n'en_sg':'en_SG.ISO8859-1',\n'en_uk':'en_GB.ISO8859-1',\n'en_us':'en_US.ISO8859-1',\n'en_us@euro@euro':'en_US.ISO8859-15',\n'en_za':'en_ZA.ISO8859-1',\n'en_zm':'en_ZM.UTF-8',\n'en_zw':'en_ZW.ISO8859-1',\n'en_zw.utf8':'en_ZS.UTF-8',\n'eng_gb':'en_GB.ISO8859-1',\n'english':'en_EN.ISO8859-1',\n'english_uk':'en_GB.ISO8859-1',\n'english_united-states':'en_US.ISO8859-1',\n'english_united-states.437':'C',\n'english_us':'en_US.ISO8859-1',\n'eo':'eo_XX.ISO8859-3',\n'eo.utf8':'eo.UTF-8',\n'eo_eo':'eo_EO.ISO8859-3',\n'eo_us.utf8':'eo_US.UTF-8',\n'eo_xx':'eo_XX.ISO8859-3',\n'es':'es_ES.ISO8859-1',\n'es_ar':'es_AR.ISO8859-1',\n'es_bo':'es_BO.ISO8859-1',\n'es_cl':'es_CL.ISO8859-1',\n'es_co':'es_CO.ISO8859-1',\n'es_cr':'es_CR.ISO8859-1',\n'es_cu':'es_CU.UTF-8',\n'es_do':'es_DO.ISO8859-1',\n'es_ec':'es_EC.ISO8859-1',\n'es_es':'es_ES.ISO8859-1',\n'es_gt':'es_GT.ISO8859-1',\n'es_hn':'es_HN.ISO8859-1',\n'es_mx':'es_MX.ISO8859-1',\n'es_ni':'es_NI.ISO8859-1',\n'es_pa':'es_PA.ISO8859-1',\n'es_pe':'es_PE.ISO8859-1',\n'es_pr':'es_PR.ISO8859-1',\n'es_py':'es_PY.ISO8859-1',\n'es_sv':'es_SV.ISO8859-1',\n'es_us':'es_US.ISO8859-1',\n'es_uy':'es_UY.ISO8859-1',\n'es_ve':'es_VE.ISO8859-1',\n'estonian':'et_EE.ISO8859-1',\n'et':'et_EE.ISO8859-15',\n'et_ee':'et_EE.ISO8859-15',\n'eu':'eu_ES.ISO8859-1',\n'eu_es':'eu_ES.ISO8859-1',\n'eu_fr':'eu_FR.ISO8859-1',\n'fa':'fa_IR.UTF-8',\n'fa_ir':'fa_IR.UTF-8',\n'fa_ir.isiri3342':'fa_IR.ISIRI-3342',\n'ff_sn':'ff_SN.UTF-8',\n'fi':'fi_FI.ISO8859-15',\n'fi_fi':'fi_FI.ISO8859-15',\n'fil_ph':'fil_PH.UTF-8',\n'finnish':'fi_FI.ISO8859-1',\n'fo':'fo_FO.ISO8859-1',\n'fo_fo':'fo_FO.ISO8859-1',\n'fr':'fr_FR.ISO8859-1',\n'fr_be':'fr_BE.ISO8859-1',\n'fr_ca':'fr_CA.ISO8859-1',\n'fr_ch':'fr_CH.ISO8859-1',\n'fr_fr':'fr_FR.ISO8859-1',\n'fr_lu':'fr_LU.ISO8859-1',\n'fran\\xe7ais':'fr_FR.ISO8859-1',\n'fre_fr':'fr_FR.ISO8859-1',\n'french':'fr_FR.ISO8859-1',\n'french.iso88591':'fr_CH.ISO8859-1',\n'french_france':'fr_FR.ISO8859-1',\n'fur_it':'fur_IT.UTF-8',\n'fy_de':'fy_DE.UTF-8',\n'fy_nl':'fy_NL.UTF-8',\n'ga':'ga_IE.ISO8859-1',\n'ga_ie':'ga_IE.ISO8859-1',\n'galego':'gl_ES.ISO8859-1',\n'galician':'gl_ES.ISO8859-1',\n'gd':'gd_GB.ISO8859-1',\n'gd_gb':'gd_GB.ISO8859-1',\n'ger_de':'de_DE.ISO8859-1',\n'german':'de_DE.ISO8859-1',\n'german.iso88591':'de_CH.ISO8859-1',\n'german_germany':'de_DE.ISO8859-1',\n'gez_er':'gez_ER.UTF-8',\n'gez_et':'gez_ET.UTF-8',\n'gl':'gl_ES.ISO8859-1',\n'gl_es':'gl_ES.ISO8859-1',\n'greek':'el_GR.ISO8859-7',\n'gu_in':'gu_IN.UTF-8',\n'gv':'gv_GB.ISO8859-1',\n'gv_gb':'gv_GB.ISO8859-1',\n'ha_ng':'ha_NG.UTF-8',\n'he':'he_IL.ISO8859-8',\n'he_il':'he_IL.ISO8859-8',\n'hebrew':'he_IL.ISO8859-8',\n'hi':'hi_IN.ISCII-DEV',\n'hi_in':'hi_IN.ISCII-DEV',\n'hi_in.isciidev':'hi_IN.ISCII-DEV',\n'hne':'hne_IN.UTF-8',\n'hne_in':'hne_IN.UTF-8',\n'hr':'hr_HR.ISO8859-2',\n'hr_hr':'hr_HR.ISO8859-2',\n'hrvatski':'hr_HR.ISO8859-2',\n'hsb_de':'hsb_DE.ISO8859-2',\n'ht_ht':'ht_HT.UTF-8',\n'hu':'hu_HU.ISO8859-2',\n'hu_hu':'hu_HU.ISO8859-2',\n'hungarian':'hu_HU.ISO8859-2',\n'hy_am':'hy_AM.UTF-8',\n'hy_am.armscii8':'hy_AM.ARMSCII_8',\n'ia':'ia.UTF-8',\n'ia_fr':'ia_FR.UTF-8',\n'icelandic':'is_IS.ISO8859-1',\n'id':'id_ID.ISO8859-1',\n'id_id':'id_ID.ISO8859-1',\n'ig_ng':'ig_NG.UTF-8',\n'ik_ca':'ik_CA.UTF-8',\n'in':'id_ID.ISO8859-1',\n'in_id':'id_ID.ISO8859-1',\n'is':'is_IS.ISO8859-1',\n'is_is':'is_IS.ISO8859-1',\n'iso-8859-1':'en_US.ISO8859-1',\n'iso-8859-15':'en_US.ISO8859-15',\n'iso8859-1':'en_US.ISO8859-1',\n'iso8859-15':'en_US.ISO8859-15',\n'iso_8859_1':'en_US.ISO8859-1',\n'iso_8859_15':'en_US.ISO8859-15',\n'it':'it_IT.ISO8859-1',\n'it_ch':'it_CH.ISO8859-1',\n'it_it':'it_IT.ISO8859-1',\n'italian':'it_IT.ISO8859-1',\n'iu':'iu_CA.NUNACOM-8',\n'iu_ca':'iu_CA.NUNACOM-8',\n'iu_ca.nunacom8':'iu_CA.NUNACOM-8',\n'iw':'he_IL.ISO8859-8',\n'iw_il':'he_IL.ISO8859-8',\n'iw_il.utf8':'iw_IL.UTF-8',\n'ja':'ja_JP.eucJP',\n'ja_jp':'ja_JP.eucJP',\n'ja_jp.euc':'ja_JP.eucJP',\n'ja_jp.mscode':'ja_JP.SJIS',\n'ja_jp.pck':'ja_JP.SJIS',\n'japan':'ja_JP.eucJP',\n'japanese':'ja_JP.eucJP',\n'japanese-euc':'ja_JP.eucJP',\n'japanese.euc':'ja_JP.eucJP',\n'jp_jp':'ja_JP.eucJP',\n'ka':'ka_GE.GEORGIAN-ACADEMY',\n'ka_ge':'ka_GE.GEORGIAN-ACADEMY',\n'ka_ge.georgianacademy':'ka_GE.GEORGIAN-ACADEMY',\n'ka_ge.georgianps':'ka_GE.GEORGIAN-PS',\n'ka_ge.georgianrs':'ka_GE.GEORGIAN-ACADEMY',\n'kk_kz':'kk_KZ.RK1048',\n'kl':'kl_GL.ISO8859-1',\n'kl_gl':'kl_GL.ISO8859-1',\n'km_kh':'km_KH.UTF-8',\n'kn':'kn_IN.UTF-8',\n'kn_in':'kn_IN.UTF-8',\n'ko':'ko_KR.eucKR',\n'ko_kr':'ko_KR.eucKR',\n'ko_kr.euc':'ko_KR.eucKR',\n'kok_in':'kok_IN.UTF-8',\n'korean':'ko_KR.eucKR',\n'korean.euc':'ko_KR.eucKR',\n'ks':'ks_IN.UTF-8',\n'ks_in':'ks_IN.UTF-8',\n'ks_in@devanagari.utf8':'ks_IN.UTF-8@devanagari',\n'ku_tr':'ku_TR.ISO8859-9',\n'kw':'kw_GB.ISO8859-1',\n'kw_gb':'kw_GB.ISO8859-1',\n'ky':'ky_KG.UTF-8',\n'ky_kg':'ky_KG.UTF-8',\n'lb_lu':'lb_LU.UTF-8',\n'lg_ug':'lg_UG.ISO8859-10',\n'li_be':'li_BE.UTF-8',\n'li_nl':'li_NL.UTF-8',\n'lij_it':'lij_IT.UTF-8',\n'lithuanian':'lt_LT.ISO8859-13',\n'lo':'lo_LA.MULELAO-1',\n'lo_la':'lo_LA.MULELAO-1',\n'lo_la.cp1133':'lo_LA.IBM-CP1133',\n'lo_la.ibmcp1133':'lo_LA.IBM-CP1133',\n'lo_la.mulelao1':'lo_LA.MULELAO-1',\n'lt':'lt_LT.ISO8859-13',\n'lt_lt':'lt_LT.ISO8859-13',\n'lv':'lv_LV.ISO8859-13',\n'lv_lv':'lv_LV.ISO8859-13',\n'mag_in':'mag_IN.UTF-8',\n'mai':'mai_IN.UTF-8',\n'mai_in':'mai_IN.UTF-8',\n'mg_mg':'mg_MG.ISO8859-15',\n'mhr_ru':'mhr_RU.UTF-8',\n'mi':'mi_NZ.ISO8859-1',\n'mi_nz':'mi_NZ.ISO8859-1',\n'mk':'mk_MK.ISO8859-5',\n'mk_mk':'mk_MK.ISO8859-5',\n'ml':'ml_IN.UTF-8',\n'ml_in':'ml_IN.UTF-8',\n'mn_mn':'mn_MN.UTF-8',\n'mni_in':'mni_IN.UTF-8',\n'mr':'mr_IN.UTF-8',\n'mr_in':'mr_IN.UTF-8',\n'ms':'ms_MY.ISO8859-1',\n'ms_my':'ms_MY.ISO8859-1',\n'mt':'mt_MT.ISO8859-3',\n'mt_mt':'mt_MT.ISO8859-3',\n'my_mm':'my_MM.UTF-8',\n'nan_tw@latin':'nan_TW.UTF-8@latin',\n'nb':'nb_NO.ISO8859-1',\n'nb_no':'nb_NO.ISO8859-1',\n'nds_de':'nds_DE.UTF-8',\n'nds_nl':'nds_NL.UTF-8',\n'ne_np':'ne_NP.UTF-8',\n'nhn_mx':'nhn_MX.UTF-8',\n'niu_nu':'niu_NU.UTF-8',\n'niu_nz':'niu_NZ.UTF-8',\n'nl':'nl_NL.ISO8859-1',\n'nl_aw':'nl_AW.UTF-8',\n'nl_be':'nl_BE.ISO8859-1',\n'nl_nl':'nl_NL.ISO8859-1',\n'nn':'nn_NO.ISO8859-1',\n'nn_no':'nn_NO.ISO8859-1',\n'no':'no_NO.ISO8859-1',\n'no@nynorsk':'ny_NO.ISO8859-1',\n'no_no':'no_NO.ISO8859-1',\n'no_no.iso88591@bokmal':'no_NO.ISO8859-1',\n'no_no.iso88591@nynorsk':'no_NO.ISO8859-1',\n'norwegian':'no_NO.ISO8859-1',\n'nr':'nr_ZA.ISO8859-1',\n'nr_za':'nr_ZA.ISO8859-1',\n'nso':'nso_ZA.ISO8859-15',\n'nso_za':'nso_ZA.ISO8859-15',\n'ny':'ny_NO.ISO8859-1',\n'ny_no':'ny_NO.ISO8859-1',\n'nynorsk':'nn_NO.ISO8859-1',\n'oc':'oc_FR.ISO8859-1',\n'oc_fr':'oc_FR.ISO8859-1',\n'om_et':'om_ET.UTF-8',\n'om_ke':'om_KE.ISO8859-1',\n'or':'or_IN.UTF-8',\n'or_in':'or_IN.UTF-8',\n'os_ru':'os_RU.UTF-8',\n'pa':'pa_IN.UTF-8',\n'pa_in':'pa_IN.UTF-8',\n'pa_pk':'pa_PK.UTF-8',\n'pap_an':'pap_AN.UTF-8',\n'pd':'pd_US.ISO8859-1',\n'pd_de':'pd_DE.ISO8859-1',\n'pd_us':'pd_US.ISO8859-1',\n'ph':'ph_PH.ISO8859-1',\n'ph_ph':'ph_PH.ISO8859-1',\n'pl':'pl_PL.ISO8859-2',\n'pl_pl':'pl_PL.ISO8859-2',\n'polish':'pl_PL.ISO8859-2',\n'portuguese':'pt_PT.ISO8859-1',\n'portuguese_brazil':'pt_BR.ISO8859-1',\n'posix':'C',\n'posix-utf2':'C',\n'pp':'pp_AN.ISO8859-1',\n'pp_an':'pp_AN.ISO8859-1',\n'ps_af':'ps_AF.UTF-8',\n'pt':'pt_PT.ISO8859-1',\n'pt_br':'pt_BR.ISO8859-1',\n'pt_pt':'pt_PT.ISO8859-1',\n'ro':'ro_RO.ISO8859-2',\n'ro_ro':'ro_RO.ISO8859-2',\n'romanian':'ro_RO.ISO8859-2',\n'ru':'ru_RU.UTF-8',\n'ru_ru':'ru_RU.UTF-8',\n'ru_ua':'ru_UA.KOI8-U',\n'rumanian':'ro_RO.ISO8859-2',\n'russian':'ru_RU.ISO8859-5',\n'rw':'rw_RW.ISO8859-1',\n'rw_rw':'rw_RW.ISO8859-1',\n'sa_in':'sa_IN.UTF-8',\n'sat_in':'sat_IN.UTF-8',\n'sc_it':'sc_IT.UTF-8',\n'sd':'sd_IN.UTF-8',\n'sd_in':'sd_IN.UTF-8',\n'sd_in@devanagari.utf8':'sd_IN.UTF-8@devanagari',\n'sd_pk':'sd_PK.UTF-8',\n'se_no':'se_NO.UTF-8',\n'serbocroatian':'sr_RS.UTF-8@latin',\n'sh':'sr_RS.UTF-8@latin',\n'sh_ba.iso88592@bosnia':'sr_CS.ISO8859-2',\n'sh_hr':'sh_HR.ISO8859-2',\n'sh_hr.iso88592':'hr_HR.ISO8859-2',\n'sh_sp':'sr_CS.ISO8859-2',\n'sh_yu':'sr_RS.UTF-8@latin',\n'shs_ca':'shs_CA.UTF-8',\n'si':'si_LK.UTF-8',\n'si_lk':'si_LK.UTF-8',\n'sid_et':'sid_ET.UTF-8',\n'sinhala':'si_LK.UTF-8',\n'sk':'sk_SK.ISO8859-2',\n'sk_sk':'sk_SK.ISO8859-2',\n'sl':'sl_SI.ISO8859-2',\n'sl_cs':'sl_CS.ISO8859-2',\n'sl_si':'sl_SI.ISO8859-2',\n'slovak':'sk_SK.ISO8859-2',\n'slovene':'sl_SI.ISO8859-2',\n'slovenian':'sl_SI.ISO8859-2',\n'so_dj':'so_DJ.ISO8859-1',\n'so_et':'so_ET.UTF-8',\n'so_ke':'so_KE.ISO8859-1',\n'so_so':'so_SO.ISO8859-1',\n'sp':'sr_CS.ISO8859-5',\n'sp_yu':'sr_CS.ISO8859-5',\n'spanish':'es_ES.ISO8859-1',\n'spanish_spain':'es_ES.ISO8859-1',\n'sq':'sq_AL.ISO8859-2',\n'sq_al':'sq_AL.ISO8859-2',\n'sq_mk':'sq_MK.UTF-8',\n'sr':'sr_RS.UTF-8',\n'sr@cyrillic':'sr_RS.UTF-8',\n'sr@latn':'sr_CS.UTF-8@latin',\n'sr_cs':'sr_CS.UTF-8',\n'sr_cs.iso88592@latn':'sr_CS.ISO8859-2',\n'sr_cs@latn':'sr_CS.UTF-8@latin',\n'sr_me':'sr_ME.UTF-8',\n'sr_rs':'sr_RS.UTF-8',\n'sr_rs@latn':'sr_RS.UTF-8@latin',\n'sr_sp':'sr_CS.ISO8859-2',\n'sr_yu':'sr_RS.UTF-8@latin',\n'sr_yu.cp1251@cyrillic':'sr_CS.CP1251',\n'sr_yu.iso88592':'sr_CS.ISO8859-2',\n'sr_yu.iso88595':'sr_CS.ISO8859-5',\n'sr_yu.iso88595@cyrillic':'sr_CS.ISO8859-5',\n'sr_yu.microsoftcp1251@cyrillic':'sr_CS.CP1251',\n'sr_yu.utf8':'sr_RS.UTF-8',\n'sr_yu.utf8@cyrillic':'sr_RS.UTF-8',\n'sr_yu@cyrillic':'sr_RS.UTF-8',\n'ss':'ss_ZA.ISO8859-1',\n'ss_za':'ss_ZA.ISO8859-1',\n'st':'st_ZA.ISO8859-1',\n'st_za':'st_ZA.ISO8859-1',\n'sv':'sv_SE.ISO8859-1',\n'sv_fi':'sv_FI.ISO8859-1',\n'sv_se':'sv_SE.ISO8859-1',\n'sw_ke':'sw_KE.UTF-8',\n'sw_tz':'sw_TZ.UTF-8',\n'swedish':'sv_SE.ISO8859-1',\n'szl_pl':'szl_PL.UTF-8',\n'ta':'ta_IN.TSCII-0',\n'ta_in':'ta_IN.TSCII-0',\n'ta_in.tscii':'ta_IN.TSCII-0',\n'ta_in.tscii0':'ta_IN.TSCII-0',\n'ta_lk':'ta_LK.UTF-8',\n'te':'te_IN.UTF-8',\n'te_in':'te_IN.UTF-8',\n'tg':'tg_TJ.KOI8-C',\n'tg_tj':'tg_TJ.KOI8-C',\n'th':'th_TH.ISO8859-11',\n'th_th':'th_TH.ISO8859-11',\n'th_th.tactis':'th_TH.TIS620',\n'th_th.tis620':'th_TH.TIS620',\n'thai':'th_TH.ISO8859-11',\n'ti_er':'ti_ER.UTF-8',\n'ti_et':'ti_ET.UTF-8',\n'tig_er':'tig_ER.UTF-8',\n'tk_tm':'tk_TM.UTF-8',\n'tl':'tl_PH.ISO8859-1',\n'tl_ph':'tl_PH.ISO8859-1',\n'tn':'tn_ZA.ISO8859-15',\n'tn_za':'tn_ZA.ISO8859-15',\n'tr':'tr_TR.ISO8859-9',\n'tr_cy':'tr_CY.ISO8859-9',\n'tr_tr':'tr_TR.ISO8859-9',\n'ts':'ts_ZA.ISO8859-1',\n'ts_za':'ts_ZA.ISO8859-1',\n'tt':'tt_RU.TATAR-CYR',\n'tt_ru':'tt_RU.TATAR-CYR',\n'tt_ru.tatarcyr':'tt_RU.TATAR-CYR',\n'tt_ru@iqtelif':'tt_RU.UTF-8@iqtelif',\n'turkish':'tr_TR.ISO8859-9',\n'ug_cn':'ug_CN.UTF-8',\n'uk':'uk_UA.KOI8-U',\n'uk_ua':'uk_UA.KOI8-U',\n'univ':'en_US.utf',\n'universal':'en_US.utf',\n'universal.utf8@ucs4':'en_US.UTF-8',\n'unm_us':'unm_US.UTF-8',\n'ur':'ur_PK.CP1256',\n'ur_in':'ur_IN.UTF-8',\n'ur_pk':'ur_PK.CP1256',\n'uz':'uz_UZ.UTF-8',\n'uz_uz':'uz_UZ.UTF-8',\n'uz_uz@cyrillic':'uz_UZ.UTF-8',\n've':'ve_ZA.UTF-8',\n've_za':'ve_ZA.UTF-8',\n'vi':'vi_VN.TCVN',\n'vi_vn':'vi_VN.TCVN',\n'vi_vn.tcvn':'vi_VN.TCVN',\n'vi_vn.tcvn5712':'vi_VN.TCVN',\n'vi_vn.viscii':'vi_VN.VISCII',\n'vi_vn.viscii111':'vi_VN.VISCII',\n'wa':'wa_BE.ISO8859-1',\n'wa_be':'wa_BE.ISO8859-1',\n'wae_ch':'wae_CH.UTF-8',\n'wal_et':'wal_ET.UTF-8',\n'wo_sn':'wo_SN.UTF-8',\n'xh':'xh_ZA.ISO8859-1',\n'xh_za':'xh_ZA.ISO8859-1',\n'yi':'yi_US.CP1255',\n'yi_us':'yi_US.CP1255',\n'yo_ng':'yo_NG.UTF-8',\n'yue_hk':'yue_HK.UTF-8',\n'zh':'zh_CN.eucCN',\n'zh_cn':'zh_CN.gb2312',\n'zh_cn.big5':'zh_TW.big5',\n'zh_cn.euc':'zh_CN.eucCN',\n'zh_hk':'zh_HK.big5hkscs',\n'zh_hk.big5hk':'zh_HK.big5hkscs',\n'zh_sg':'zh_SG.GB2312',\n'zh_sg.gbk':'zh_SG.GBK',\n'zh_tw':'zh_TW.big5',\n'zh_tw.euc':'zh_TW.eucTW',\n'zh_tw.euctw':'zh_TW.eucTW',\n'zu':'zu_ZA.ISO8859-1',\n'zu_za':'zu_ZA.ISO8859-1',\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nwindows_locale={\n0x0436:\"af_ZA\",\n0x041c:\"sq_AL\",\n0x0484:\"gsw_FR\",\n0x045e:\"am_ET\",\n0x0401:\"ar_SA\",\n0x0801:\"ar_IQ\",\n0x0c01:\"ar_EG\",\n0x1001:\"ar_LY\",\n0x1401:\"ar_DZ\",\n0x1801:\"ar_MA\",\n0x1c01:\"ar_TN\",\n0x2001:\"ar_OM\",\n0x2401:\"ar_YE\",\n0x2801:\"ar_SY\",\n0x2c01:\"ar_JO\",\n0x3001:\"ar_LB\",\n0x3401:\"ar_KW\",\n0x3801:\"ar_AE\",\n0x3c01:\"ar_BH\",\n0x4001:\"ar_QA\",\n0x042b:\"hy_AM\",\n0x044d:\"as_IN\",\n0x042c:\"az_AZ\",\n0x082c:\"az_AZ\",\n0x046d:\"ba_RU\",\n0x042d:\"eu_ES\",\n0x0423:\"be_BY\",\n0x0445:\"bn_IN\",\n0x201a:\"bs_BA\",\n0x141a:\"bs_BA\",\n0x047e:\"br_FR\",\n0x0402:\"bg_BG\",\n\n0x0403:\"ca_ES\",\n0x0004:\"zh_CHS\",\n0x0404:\"zh_TW\",\n0x0804:\"zh_CN\",\n0x0c04:\"zh_HK\",\n0x1004:\"zh_SG\",\n0x1404:\"zh_MO\",\n0x7c04:\"zh_CHT\",\n0x0483:\"co_FR\",\n0x041a:\"hr_HR\",\n0x101a:\"hr_BA\",\n0x0405:\"cs_CZ\",\n0x0406:\"da_DK\",\n0x048c:\"gbz_AF\",\n0x0465:\"div_MV\",\n0x0413:\"nl_NL\",\n0x0813:\"nl_BE\",\n0x0409:\"en_US\",\n0x0809:\"en_GB\",\n0x0c09:\"en_AU\",\n0x1009:\"en_CA\",\n0x1409:\"en_NZ\",\n0x1809:\"en_IE\",\n0x1c09:\"en_ZA\",\n0x2009:\"en_JA\",\n0x2409:\"en_CB\",\n0x2809:\"en_BZ\",\n0x2c09:\"en_TT\",\n0x3009:\"en_ZW\",\n0x3409:\"en_PH\",\n0x4009:\"en_IN\",\n0x4409:\"en_MY\",\n0x4809:\"en_IN\",\n0x0425:\"et_EE\",\n0x0438:\"fo_FO\",\n0x0464:\"fil_PH\",\n0x040b:\"fi_FI\",\n0x040c:\"fr_FR\",\n0x080c:\"fr_BE\",\n0x0c0c:\"fr_CA\",\n0x100c:\"fr_CH\",\n0x140c:\"fr_LU\",\n0x180c:\"fr_MC\",\n0x0462:\"fy_NL\",\n0x0456:\"gl_ES\",\n0x0437:\"ka_GE\",\n0x0407:\"de_DE\",\n0x0807:\"de_CH\",\n0x0c07:\"de_AT\",\n0x1007:\"de_LU\",\n0x1407:\"de_LI\",\n0x0408:\"el_GR\",\n0x046f:\"kl_GL\",\n0x0447:\"gu_IN\",\n0x0468:\"ha_NG\",\n0x040d:\"he_IL\",\n0x0439:\"hi_IN\",\n0x040e:\"hu_HU\",\n0x040f:\"is_IS\",\n0x0421:\"id_ID\",\n0x045d:\"iu_CA\",\n0x085d:\"iu_CA\",\n0x083c:\"ga_IE\",\n0x0410:\"it_IT\",\n0x0810:\"it_CH\",\n0x0411:\"ja_JP\",\n0x044b:\"kn_IN\",\n0x043f:\"kk_KZ\",\n0x0453:\"kh_KH\",\n0x0486:\"qut_GT\",\n0x0487:\"rw_RW\",\n0x0457:\"kok_IN\",\n0x0412:\"ko_KR\",\n0x0440:\"ky_KG\",\n0x0454:\"lo_LA\",\n0x0426:\"lv_LV\",\n0x0427:\"lt_LT\",\n0x082e:\"dsb_DE\",\n0x046e:\"lb_LU\",\n0x042f:\"mk_MK\",\n0x043e:\"ms_MY\",\n0x083e:\"ms_BN\",\n0x044c:\"ml_IN\",\n0x043a:\"mt_MT\",\n0x0481:\"mi_NZ\",\n0x047a:\"arn_CL\",\n0x044e:\"mr_IN\",\n0x047c:\"moh_CA\",\n0x0450:\"mn_MN\",\n0x0850:\"mn_CN\",\n0x0461:\"ne_NP\",\n0x0414:\"nb_NO\",\n0x0814:\"nn_NO\",\n0x0482:\"oc_FR\",\n0x0448:\"or_IN\",\n0x0463:\"ps_AF\",\n0x0429:\"fa_IR\",\n0x0415:\"pl_PL\",\n0x0416:\"pt_BR\",\n0x0816:\"pt_PT\",\n0x0446:\"pa_IN\",\n0x046b:\"quz_BO\",\n0x086b:\"quz_EC\",\n0x0c6b:\"quz_PE\",\n0x0418:\"ro_RO\",\n0x0417:\"rm_CH\",\n0x0419:\"ru_RU\",\n0x243b:\"smn_FI\",\n0x103b:\"smj_NO\",\n0x143b:\"smj_SE\",\n0x043b:\"se_NO\",\n0x083b:\"se_SE\",\n0x0c3b:\"se_FI\",\n0x203b:\"sms_FI\",\n0x183b:\"sma_NO\",\n0x1c3b:\"sma_SE\",\n0x044f:\"sa_IN\",\n0x0c1a:\"sr_SP\",\n0x1c1a:\"sr_BA\",\n0x081a:\"sr_SP\",\n0x181a:\"sr_BA\",\n0x045b:\"si_LK\",\n0x046c:\"ns_ZA\",\n0x0432:\"tn_ZA\",\n0x041b:\"sk_SK\",\n0x0424:\"sl_SI\",\n0x040a:\"es_ES\",\n0x080a:\"es_MX\",\n0x0c0a:\"es_ES\",\n0x100a:\"es_GT\",\n0x140a:\"es_CR\",\n0x180a:\"es_PA\",\n0x1c0a:\"es_DO\",\n0x200a:\"es_VE\",\n0x240a:\"es_CO\",\n0x280a:\"es_PE\",\n0x2c0a:\"es_AR\",\n0x300a:\"es_EC\",\n0x340a:\"es_CL\",\n0x380a:\"es_UR\",\n0x3c0a:\"es_PY\",\n0x400a:\"es_BO\",\n0x440a:\"es_SV\",\n0x480a:\"es_HN\",\n0x4c0a:\"es_NI\",\n0x500a:\"es_PR\",\n0x540a:\"es_US\",\n\n0x0441:\"sw_KE\",\n0x041d:\"sv_SE\",\n0x081d:\"sv_FI\",\n0x045a:\"syr_SY\",\n0x0428:\"tg_TJ\",\n0x085f:\"tmz_DZ\",\n0x0449:\"ta_IN\",\n0x0444:\"tt_RU\",\n0x044a:\"te_IN\",\n0x041e:\"th_TH\",\n0x0851:\"bo_BT\",\n0x0451:\"bo_CN\",\n0x041f:\"tr_TR\",\n0x0442:\"tk_TM\",\n0x0480:\"ug_CN\",\n0x0422:\"uk_UA\",\n0x042e:\"wen_DE\",\n0x0420:\"ur_PK\",\n0x0820:\"ur_IN\",\n0x0443:\"uz_UZ\",\n0x0843:\"uz_UZ\",\n0x042a:\"vi_VN\",\n0x0452:\"cy_GB\",\n0x0488:\"wo_SN\",\n0x0434:\"xh_ZA\",\n0x0485:\"sah_RU\",\n0x0478:\"ii_CN\",\n0x046a:\"yo_NG\",\n0x0435:\"zu_ZA\",\n}\n\ndef _print_locale():\n\n ''\n \n categories={}\n def _init_categories(categories=categories):\n for k,v in globals().items():\n if k[:3]=='LC_':\n categories[k]=v\n _init_categories()\n del categories['LC_ALL']\n \n print('Locale defaults as determined by getdefaultlocale():')\n print('-'*72)\n lang,enc=getdefaultlocale()\n print('Language: ',lang or '(undefined)')\n print('Encoding: ',enc or '(undefined)')\n print()\n \n print('Locale settings on startup:')\n print('-'*72)\n for name,category in categories.items():\n print(name,'...')\n lang,enc=getlocale(category)\n print(' Language: ',lang or '(undefined)')\n print(' Encoding: ',enc or '(undefined)')\n print()\n \n print()\n print('Locale settings after calling resetlocale():')\n print('-'*72)\n resetlocale()\n for name,category in categories.items():\n print(name,'...')\n lang,enc=getlocale(category)\n print(' Language: ',lang or '(undefined)')\n print(' Encoding: ',enc or '(undefined)')\n print()\n \n try :\n setlocale(LC_ALL,\"\")\n except :\n print('NOTE:')\n print('setlocale(LC_ALL, \"\") does not support the default locale')\n print('given in the OS environment variables.')\n else :\n print()\n print('Locale settings after calling setlocale(LC_ALL, \"\"):')\n print('-'*72)\n for name,category in categories.items():\n print(name,'...')\n lang,enc=getlocale(category)\n print(' Language: ',lang or '(undefined)')\n print(' Encoding: ',enc or '(undefined)')\n print()\n \n \n \ntry :\n LC_MESSAGES\nexcept NameError:\n pass\nelse :\n __all__.append(\"LC_MESSAGES\")\n \nif __name__ =='__main__':\n print('Locale aliasing:')\n print()\n _print_locale()\n print()\n print('Number formatting:')\n print()\n _test()\n",["_bootlocale","builtins","collections","encodings","encodings.aliases","functools","os","re","sys"]],marshal:[".py","from json import *\n",["json"]],numbers:[".py","\n\n\n\"\"\"Abstract Base Classes (ABCs) for numbers, according to PEP 3141.\n\nTODO: Fill out more detailed documentation on the operators.\"\"\"\n\nfrom abc import ABCMeta,abstractmethod\n\n__all__=[\"Number\",\"Complex\",\"Real\",\"Rational\",\"Integral\"]\n\nclass Number(metaclass=ABCMeta):\n ''\n\n\n\n \n __slots__=()\n \n \n __hash__=None\n \n \n \n \n \n \n \n \n \n \nclass Complex(Number):\n ''\n\n\n\n\n\n\n\n \n \n __slots__=()\n \n @abstractmethod\n def __complex__(self):\n ''\n \n def __bool__(self):\n ''\n return self !=0\n \n @property\n @abstractmethod\n def real(self):\n ''\n\n\n \n raise NotImplementedError\n \n @property\n @abstractmethod\n def imag(self):\n ''\n\n\n \n raise NotImplementedError\n \n @abstractmethod\n def __add__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __radd__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __neg__(self):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __pos__(self):\n ''\n raise NotImplementedError\n \n def __sub__(self,other):\n ''\n return self+-other\n \n def __rsub__(self,other):\n ''\n return -self+other\n \n @abstractmethod\n def __mul__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __rmul__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __truediv__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __rtruediv__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __pow__(self,exponent):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __rpow__(self,base):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __abs__(self):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def conjugate(self):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __eq__(self,other):\n ''\n raise NotImplementedError\n \n def __ne__(self,other):\n ''\n \n return not (self ==other)\n \nComplex.register(complex)\n\n\nclass Real(Complex):\n ''\n\n\n\n\n\n \n \n __slots__=()\n \n @abstractmethod\n def __float__(self):\n ''\n\n \n raise NotImplementedError\n \n @abstractmethod\n def __trunc__(self):\n ''\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \n @abstractmethod\n def __floor__(self):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __ceil__(self):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __round__(self,ndigits=None ):\n ''\n\n\n\n \n raise NotImplementedError\n \n def __divmod__(self,other):\n ''\n\n\n\n \n return (self //other,self %other)\n \n def __rdivmod__(self,other):\n ''\n\n\n\n \n return (other //self,other %self)\n \n @abstractmethod\n def __floordiv__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __rfloordiv__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __mod__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __rmod__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __lt__(self,other):\n ''\n\n \n raise NotImplementedError\n \n @abstractmethod\n def __le__(self,other):\n ''\n raise NotImplementedError\n \n \n def __complex__(self):\n ''\n return complex(float(self))\n \n @property\n def real(self):\n ''\n return +self\n \n @property\n def imag(self):\n ''\n return 0\n \n def conjugate(self):\n ''\n return +self\n \nReal.register(float)\n\n\nclass Rational(Real):\n ''\n \n __slots__=()\n \n @property\n @abstractmethod\n def numerator(self):\n raise NotImplementedError\n \n @property\n @abstractmethod\n def denominator(self):\n raise NotImplementedError\n \n \n def __float__(self):\n ''\n\n\n\n\n\n \n return self.numerator /self.denominator\n \n \nclass Integral(Rational):\n ''\n \n __slots__=()\n \n @abstractmethod\n def __int__(self):\n ''\n raise NotImplementedError\n \n def __index__(self):\n ''\n return int(self)\n \n @abstractmethod\n def __pow__(self,exponent,modulus=None ):\n ''\n\n\n\n\n\n \n raise NotImplementedError\n \n @abstractmethod\n def __lshift__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __rlshift__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __rshift__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __rrshift__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __and__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __rand__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __xor__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __rxor__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __or__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __ror__(self,other):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def __invert__(self):\n ''\n raise NotImplementedError\n \n \n def __float__(self):\n ''\n return float(int(self))\n \n @property\n def numerator(self):\n ''\n return +self\n \n @property\n def denominator(self):\n ''\n return 1\n \nIntegral.register(int)\n",["abc"]],opcode:[".py","\n\"\"\"\nopcode module - potentially shared between dis and other modules which\noperate on bytecodes (e.g. peephole optimizers).\n\"\"\"\n\n__all__=[\"cmp_op\",\"hasconst\",\"hasname\",\"hasjrel\",\"hasjabs\",\n\"haslocal\",\"hascompare\",\"hasfree\",\"opname\",\"opmap\",\n\"HAVE_ARGUMENT\",\"EXTENDED_ARG\",\"hasnargs\"]\n\n\n\n\n\n\n\n\ntry :\n from _opcode import stack_effect\n __all__.append('stack_effect')\nexcept ImportError:\n pass\n \ncmp_op=('<','<=','==','!=','>','>=','in','not in','is',\n'is not','exception match','BAD')\n\nhasconst=[]\nhasname=[]\nhasjrel=[]\nhasjabs=[]\nhaslocal=[]\nhascompare=[]\nhasfree=[]\nhasnargs=[]\n\nopmap={}\nopname=['']*256\nfor op in range(256):opname[op]='<%r>'%(op,)\ndel op\n\ndef def_op(name,op):\n opname[op]=name\n opmap[name]=op\n \ndef name_op(name,op):\n def_op(name,op)\n hasname.append(op)\n \ndef jrel_op(name,op):\n def_op(name,op)\n hasjrel.append(op)\n \ndef jabs_op(name,op):\n def_op(name,op)\n hasjabs.append(op)\n \n \n \n \ndef_op('POP_TOP',1)\ndef_op('ROT_TWO',2)\ndef_op('ROT_THREE',3)\ndef_op('DUP_TOP',4)\ndef_op('DUP_TOP_TWO',5)\n\ndef_op('NOP',9)\ndef_op('UNARY_POSITIVE',10)\ndef_op('UNARY_NEGATIVE',11)\ndef_op('UNARY_NOT',12)\n\ndef_op('UNARY_INVERT',15)\n\ndef_op('BINARY_POWER',19)\ndef_op('BINARY_MULTIPLY',20)\n\ndef_op('BINARY_MODULO',22)\ndef_op('BINARY_ADD',23)\ndef_op('BINARY_SUBTRACT',24)\ndef_op('BINARY_SUBSCR',25)\ndef_op('BINARY_FLOOR_DIVIDE',26)\ndef_op('BINARY_TRUE_DIVIDE',27)\ndef_op('INPLACE_FLOOR_DIVIDE',28)\ndef_op('INPLACE_TRUE_DIVIDE',29)\n\ndef_op('STORE_MAP',54)\ndef_op('INPLACE_ADD',55)\ndef_op('INPLACE_SUBTRACT',56)\ndef_op('INPLACE_MULTIPLY',57)\n\ndef_op('INPLACE_MODULO',59)\ndef_op('STORE_SUBSCR',60)\ndef_op('DELETE_SUBSCR',61)\ndef_op('BINARY_LSHIFT',62)\ndef_op('BINARY_RSHIFT',63)\ndef_op('BINARY_AND',64)\ndef_op('BINARY_XOR',65)\ndef_op('BINARY_OR',66)\ndef_op('INPLACE_POWER',67)\ndef_op('GET_ITER',68)\n\ndef_op('PRINT_EXPR',70)\ndef_op('LOAD_BUILD_CLASS',71)\ndef_op('YIELD_FROM',72)\n\ndef_op('INPLACE_LSHIFT',75)\ndef_op('INPLACE_RSHIFT',76)\ndef_op('INPLACE_AND',77)\ndef_op('INPLACE_XOR',78)\ndef_op('INPLACE_OR',79)\ndef_op('BREAK_LOOP',80)\ndef_op('WITH_CLEANUP',81)\n\ndef_op('RETURN_VALUE',83)\ndef_op('IMPORT_STAR',84)\n\ndef_op('YIELD_VALUE',86)\ndef_op('POP_BLOCK',87)\ndef_op('END_FINALLY',88)\ndef_op('POP_EXCEPT',89)\n\nHAVE_ARGUMENT=90\n\nname_op('STORE_NAME',90)\nname_op('DELETE_NAME',91)\ndef_op('UNPACK_SEQUENCE',92)\njrel_op('FOR_ITER',93)\ndef_op('UNPACK_EX',94)\nname_op('STORE_ATTR',95)\nname_op('DELETE_ATTR',96)\nname_op('STORE_GLOBAL',97)\nname_op('DELETE_GLOBAL',98)\ndef_op('LOAD_CONST',100)\nhasconst.append(100)\nname_op('LOAD_NAME',101)\ndef_op('BUILD_TUPLE',102)\ndef_op('BUILD_LIST',103)\ndef_op('BUILD_SET',104)\ndef_op('BUILD_MAP',105)\nname_op('LOAD_ATTR',106)\ndef_op('COMPARE_OP',107)\nhascompare.append(107)\nname_op('IMPORT_NAME',108)\nname_op('IMPORT_FROM',109)\n\njrel_op('JUMP_FORWARD',110)\njabs_op('JUMP_IF_FALSE_OR_POP',111)\njabs_op('JUMP_IF_TRUE_OR_POP',112)\njabs_op('JUMP_ABSOLUTE',113)\njabs_op('POP_JUMP_IF_FALSE',114)\njabs_op('POP_JUMP_IF_TRUE',115)\n\nname_op('LOAD_GLOBAL',116)\n\njabs_op('CONTINUE_LOOP',119)\njrel_op('SETUP_LOOP',120)\njrel_op('SETUP_EXCEPT',121)\njrel_op('SETUP_FINALLY',122)\n\ndef_op('LOAD_FAST',124)\nhaslocal.append(124)\ndef_op('STORE_FAST',125)\nhaslocal.append(125)\ndef_op('DELETE_FAST',126)\nhaslocal.append(126)\n\ndef_op('RAISE_VARARGS',130)\ndef_op('CALL_FUNCTION',131)\nhasnargs.append(131)\ndef_op('MAKE_FUNCTION',132)\ndef_op('BUILD_SLICE',133)\ndef_op('MAKE_CLOSURE',134)\ndef_op('LOAD_CLOSURE',135)\nhasfree.append(135)\ndef_op('LOAD_DEREF',136)\nhasfree.append(136)\ndef_op('STORE_DEREF',137)\nhasfree.append(137)\ndef_op('DELETE_DEREF',138)\nhasfree.append(138)\n\ndef_op('CALL_FUNCTION_VAR',140)\nhasnargs.append(140)\ndef_op('CALL_FUNCTION_KW',141)\nhasnargs.append(141)\ndef_op('CALL_FUNCTION_VAR_KW',142)\nhasnargs.append(142)\n\njrel_op('SETUP_WITH',143)\n\ndef_op('LIST_APPEND',145)\ndef_op('SET_ADD',146)\ndef_op('MAP_ADD',147)\n\ndef_op('LOAD_CLASSDEREF',148)\nhasfree.append(148)\n\ndef_op('EXTENDED_ARG',144)\nEXTENDED_ARG=144\n\ndel def_op,name_op,jrel_op,jabs_op\n",["_opcode"]],operator:[".py","#!/usr/bin/env python3\n''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndef lt(a,b):\n ''\n return a =b\n__ge__=ge\n\ndef gt(a,b):\n ''\n return a >b\n__gt__=gt\n\ndef not_(a):\n ''\n return not a\n__not__=not_\n\ndef truth(a):\n ''\n \n return bool(a)\n \ndef is_(a,b):\n ''\n return a is b\n \n \n \n \n \n \n \n \n \n \n \n__abs__=abs\nabs=abs\n\n\ndef add(a,b):\n ''\n return a+b\n__add__=add\n\ndef and_(a,b):\n ''\n return a&b\n__and__=and_\n\ndef floordiv(a,b):\n ''\n return a //b\n__floordiv__=floordiv\n\ndef index(a):\n ''\n return a.__index__()\n__index__=index\n\ndef inv(a):\n ''\n return ~a\n \ninvert=__inv__=__invert__=inv\n\ndef lshift(a,b):\n ''\n return a <>b\n__rshift__=rshift\n\ndef sub(a,b):\n ''\n return a -b\n__sub__=sub\n\ndef truediv(a,b):\n ''\n return a /b\n__truediv__=truediv\n\ndef xor(a,b):\n ''\n return a ^b\n__xor__=xor\n\ndef concat(a,b):\n ''\n if not (hasattr(a,'__getitem__')and hasattr(b,'__getitem__')):\n raise TypeError('a and b must be sequences')\n return a+b\n__concat__=concat\n\ndef contains(a,b):\n ''\n return b in a\n__contains__=contains\n\ndef countOf(a,b):\n ''\n count=0\n for i in a:\n if i ==b:\n count +=1\n return count\n \ndef delitem(a,b):\n ''\n del a[b]\n__delitem__=delitem\n\ndef getitem(a,b):\n ''\n return a[b]\n__getitem__=getitem\n\n\ndef indexOf(a,b):\n ''\n \n for i,j in enumerate(a):\n if j ==b:\n return i\n else :\n raise ValueError('b not found in a')\n \ndef setitem(a,b,c):\n ''\n a[b]=c\n__setitem__=setitem\n\n\n\nclass attrgetter:\n ''\n\n\n\n\n\n \n def __init__(self,attr,*attrs):\n self._attrs=(attr,)\n self._attrs +=attrs\n if any(not isinstance(attr,str)for attr in self._attrs):\n raise TypeError('attribute name must be a string')\n \n @staticmethod\n def _resolve_attr(obj,attr):\n for name in attr.split('.'):\n \n obj=getattr(obj,name)\n return obj\n \n def __call__(self,obj):\n if len(self._attrs)==1:\n return self._resolve_attr(obj,self._attrs[0])\n return tuple(self._resolve_attr(obj,attr)for attr in self._attrs)\n \nclass itemgetter:\n ''\n\n\n\n \n def __init__(self,item,*items):\n self._items=(item,)\n self._items +=items\n \n def __call__(self,obj):\n if len(self._items)==1:\n return obj[self._items[0]]\n return tuple(obj[item]for item in self._items)\n \nclass methodcaller:\n ''\n\n\n\n\n \n \n def __init__(self,name,*args,**kwargs):\n self._name=name\n self._args=args\n self._kwargs=kwargs\n \n def __call__(self,obj):\n return getattr(obj,self._name)(*self._args,**self._kwargs)\n \n \ndef iadd(a,b):\n ''\n a +=b\n return a\n__iadd__=iadd\n\ndef iand(a,b):\n ''\n a &=b\n return a\n__iand__=iand\n\ndef iconcat(a,b):\n ''\n if not (hasattr(a,'__getitem__')and hasattr(b,'__getitem__')):\n raise TypeError('a and b must be sequences')\n a +=b\n return a\n__iconcat__=iconcat\n\ndef ifloordiv(a,b):\n ''\n a //=b\n return a\n__ifloordiv__=ifloordiv\n\ndef ilshift(a,b):\n ''\n a <<=b\n return a\n__ilshift__=ilshift\n\ndef imod(a,b):\n ''\n a %=b\n return a\n__imod__=imod\n\ndef imul(a,b):\n ''\n a *=b\n return a\n__imul__=imul\n\ndef ior(a,b):\n ''\n a |=b\n return a\n__ior__=ior\n\ndef ipow(a,b):\n ''\n a **=b\n return a\n__ipow__=ipow\n\ndef irshift(a,b):\n ''\n a >>=b\n return a\n__irshift__=irshift\n\ndef isub(a,b):\n ''\n a -=b\n return a\n__isub__=isub\n\ndef itruediv(a,b):\n ''\n a /=b\n return a\n__itruediv__=itruediv\n\ndef ixor(a,b):\n ''\n a ^=b\n return a\n__ixor__=ixor\n\ndef length_hint(obj,default=0):\n ''\n\n\n\n\n\n\n \n try :\n return len(obj)\n except TypeError:\n try :\n val=obj.__length_hint__()\n if val is NotImplemented:\n raise TypeError\n except (AttributeError,TypeError):\n return default\n else :\n if not val >0:\n raise ValueError('default must be > 0')\n return val\n \n \n \n \n \n \n",[]],optparse:[".py",'\'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__version__="1.5.3"\n\n__all__=[\'Option\',\n\'make_option\',\n\'SUPPRESS_HELP\',\n\'SUPPRESS_USAGE\',\n\'Values\',\n\'OptionContainer\',\n\'OptionGroup\',\n\'OptionParser\',\n\'HelpFormatter\',\n\'IndentedHelpFormatter\',\n\'TitledHelpFormatter\',\n\'OptParseError\',\n\'OptionError\',\n\'OptionConflictError\',\n\'OptionValueError\',\n\'BadOptionError\']\n\n__copyright__="""\nCopyright (c) 2001-2006 Gregory P. Ward. All rights reserved.\nCopyright (c) 2002-2006 Python Software Foundation. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n * Neither the name of the author nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS\nIS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"""\n\nimport sys,os\nimport textwrap\n\ndef _repr(self):\n return "<%s at 0x%x: %s>"%(self.__class__.__name__,id(self),self)\n \n \n \n \n \n \n \n \ntry :\n from gettext import gettext,ngettext\nexcept ImportError:\n def gettext(message):\n return message\n \n def ngettext(singular,plural,n):\n if n ==1:\n return singular\n return plural\n \n_=gettext\n\n\nclass OptParseError(Exception):\n def __init__(self,msg):\n self.msg=msg\n \n def __str__(self):\n return self.msg\n \n \nclass OptionError(OptParseError):\n \'\'\n\n\n \n \n def __init__(self,msg,option):\n self.msg=msg\n self.option_id=str(option)\n \n def __str__(self):\n if self.option_id:\n return "option %s: %s"%(self.option_id,self.msg)\n else :\n return self.msg\n \nclass OptionConflictError(OptionError):\n \'\'\n\n \n \nclass OptionValueError(OptParseError):\n \'\'\n\n\n \n \nclass BadOptionError(OptParseError):\n \'\'\n\n \n def __init__(self,opt_str):\n self.opt_str=opt_str\n \n def __str__(self):\n return _("no such option: %s")%self.opt_str\n \nclass AmbiguousOptionError(BadOptionError):\n \'\'\n\n \n def __init__(self,opt_str,possibilities):\n BadOptionError.__init__(self,opt_str)\n self.possibilities=possibilities\n \n def __str__(self):\n return (_("ambiguous option: %s (%s?)")\n %(self.opt_str,", ".join(self.possibilities)))\n \n \nclass HelpFormatter:\n\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n NO_DEFAULT_VALUE="none"\n \n def __init__(self,\n indent_increment,\n max_help_position,\n width,\n short_first):\n self.parser=None\n self.indent_increment=indent_increment\n self.help_position=self.max_help_position=max_help_position\n if width is None :\n try :\n width=int(os.environ[\'COLUMNS\'])\n except (KeyError,ValueError):\n width=80\n width -=2\n self.width=width\n self.current_indent=0\n self.level=0\n self.help_width=None\n self.short_first=short_first\n self.default_tag="%default"\n self.option_strings={}\n self._short_opt_fmt="%s %s"\n self._long_opt_fmt="%s=%s"\n \n def set_parser(self,parser):\n self.parser=parser\n \n def set_short_opt_delimiter(self,delim):\n if delim not in (""," "):\n raise ValueError(\n "invalid metavar delimiter for short options: %r"%delim)\n self._short_opt_fmt="%s"+delim+"%s"\n \n def set_long_opt_delimiter(self,delim):\n if delim not in ("="," "):\n raise ValueError(\n "invalid metavar delimiter for long options: %r"%delim)\n self._long_opt_fmt="%s"+delim+"%s"\n \n def indent(self):\n self.current_indent +=self.indent_increment\n self.level +=1\n \n def dedent(self):\n self.current_indent -=self.indent_increment\n assert self.current_indent >=0,"Indent decreased below 0."\n self.level -=1\n \n def format_usage(self,usage):\n raise NotImplementedError("subclasses must implement")\n \n def format_heading(self,heading):\n raise NotImplementedError("subclasses must implement")\n \n def _format_text(self,text):\n \'\'\n\n\n \n text_width=self.width -self.current_indent\n indent=" "*self.current_indent\n return textwrap.fill(text,\n text_width,\n initial_indent=indent,\n subsequent_indent=indent)\n \n def format_description(self,description):\n if description:\n return self._format_text(description)+"\\n"\n else :\n return ""\n \n def format_epilog(self,epilog):\n if epilog:\n return "\\n"+self._format_text(epilog)+"\\n"\n else :\n return ""\n \n \n def expand_default(self,option):\n if self.parser is None or not self.default_tag:\n return option.help\n \n default_value=self.parser.defaults.get(option.dest)\n if default_value is NO_DEFAULT or default_value is None :\n default_value=self.NO_DEFAULT_VALUE\n \n return option.help.replace(self.default_tag,str(default_value))\n \n def format_option(self,option):\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n result=[]\n opts=self.option_strings[option]\n opt_width=self.help_position -self.current_indent -2\n if len(opts)>opt_width:\n opts="%*s%s\\n"%(self.current_indent,"",opts)\n indent_first=self.help_position\n else :\n opts="%*s%-*s "%(self.current_indent,"",opt_width,opts)\n indent_first=0\n result.append(opts)\n if option.help:\n help_text=self.expand_default(option)\n help_lines=textwrap.wrap(help_text,self.help_width)\n result.append("%*s%s\\n"%(indent_first,"",help_lines[0]))\n result.extend(["%*s%s\\n"%(self.help_position,"",line)\n for line in help_lines[1:]])\n elif opts[-1]!="\\n":\n result.append("\\n")\n return "".join(result)\n \n def store_option_strings(self,parser):\n self.indent()\n max_len=0\n for opt in parser.option_list:\n strings=self.format_option_strings(opt)\n self.option_strings[opt]=strings\n max_len=max(max_len,len(strings)+self.current_indent)\n self.indent()\n for group in parser.option_groups:\n for opt in group.option_list:\n strings=self.format_option_strings(opt)\n self.option_strings[opt]=strings\n max_len=max(max_len,len(strings)+self.current_indent)\n self.dedent()\n self.dedent()\n self.help_position=min(max_len+2,self.max_help_position)\n self.help_width=self.width -self.help_position\n \n def format_option_strings(self,option):\n \'\'\n if option.takes_value():\n metavar=option.metavar or option.dest.upper()\n short_opts=[self._short_opt_fmt %(sopt,metavar)\n for sopt in option._short_opts]\n long_opts=[self._long_opt_fmt %(lopt,metavar)\n for lopt in option._long_opts]\n else :\n short_opts=option._short_opts\n long_opts=option._long_opts\n \n if self.short_first:\n opts=short_opts+long_opts\n else :\n opts=long_opts+short_opts\n \n return ", ".join(opts)\n \nclass IndentedHelpFormatter(HelpFormatter):\n \'\'\n \n \n def __init__(self,\n indent_increment=2,\n max_help_position=24,\n width=None ,\n short_first=1):\n HelpFormatter.__init__(\n self,indent_increment,max_help_position,width,short_first)\n \n def format_usage(self,usage):\n return _("Usage: %s\\n")%usage\n \n def format_heading(self,heading):\n return "%*s%s:\\n"%(self.current_indent,"",heading)\n \n \nclass TitledHelpFormatter(HelpFormatter):\n \'\'\n \n \n def __init__(self,\n indent_increment=0,\n max_help_position=24,\n width=None ,\n short_first=0):\n HelpFormatter.__init__(\n self,indent_increment,max_help_position,width,short_first)\n \n def format_usage(self,usage):\n return "%s %s\\n"%(self.format_heading(_("Usage")),usage)\n \n def format_heading(self,heading):\n return "%s\\n%s\\n"%(heading,"=-"[self.level]*len(heading))\n \n \ndef _parse_num(val,type):\n if val[:2].lower()=="0x":\n radix=16\n elif val[:2].lower()=="0b":\n radix=2\n val=val[2:]or "0"\n elif val[:1]=="0":\n radix=8\n else :\n radix=10\n \n return type(val,radix)\n \ndef _parse_int(val):\n return _parse_num(val,int)\n \n_builtin_cvt={"int":(_parse_int,_("integer")),\n"long":(_parse_int,_("integer")),\n"float":(float,_("floating-point")),\n"complex":(complex,_("complex"))}\n\ndef check_builtin(option,opt,value):\n (cvt,what)=_builtin_cvt[option.type]\n try :\n return cvt(value)\n except ValueError:\n raise OptionValueError(\n _("option %s: invalid %s value: %r")%(opt,what,value))\n \ndef check_choice(option,opt,value):\n if value in option.choices:\n return value\n else :\n choices=", ".join(map(repr,option.choices))\n raise OptionValueError(\n _("option %s: invalid choice: %r (choose from %s)")\n %(opt,value,choices))\n \n \n \nNO_DEFAULT=("NO","DEFAULT")\n\n\nclass Option:\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n ATTRS=[\'action\',\n \'type\',\n \'dest\',\n \'default\',\n \'nargs\',\n \'const\',\n \'choices\',\n \'callback\',\n \'callback_args\',\n \'callback_kwargs\',\n \'help\',\n \'metavar\']\n \n \n \n ACTIONS=("store",\n "store_const",\n "store_true",\n "store_false",\n "append",\n "append_const",\n "count",\n "callback",\n "help",\n "version")\n \n \n \n \n STORE_ACTIONS=("store",\n "store_const",\n "store_true",\n "store_false",\n "append",\n "append_const",\n "count")\n \n \n \n TYPED_ACTIONS=("store",\n "append",\n "callback")\n \n \n \n ALWAYS_TYPED_ACTIONS=("store",\n "append")\n \n \n CONST_ACTIONS=("store_const",\n "append_const")\n \n \n \n TYPES=("string","int","long","float","complex","choice")\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n TYPE_CHECKER={"int":check_builtin,\n "long":check_builtin,\n "float":check_builtin,\n "complex":check_builtin,\n "choice":check_choice,\n }\n \n \n \n \n \n \n \n \n \n \n CHECK_METHODS=None\n \n \n \n \n def __init__(self,*opts,**attrs):\n \n \n self._short_opts=[]\n self._long_opts=[]\n opts=self._check_opt_strings(opts)\n self._set_opt_strings(opts)\n \n \n self._set_attrs(attrs)\n \n \n \n \n \n \n for checker in self.CHECK_METHODS:\n checker(self)\n \n def _check_opt_strings(self,opts):\n \n \n \n opts=[opt for opt in opts if opt]\n if not opts:\n raise TypeError("at least one option string must be supplied")\n return opts\n \n def _set_opt_strings(self,opts):\n for opt in opts:\n if len(opt)<2:\n raise OptionError(\n "invalid option string %r: "\n "must be at least two characters long"%opt,self)\n elif len(opt)==2:\n if not (opt[0]=="-"and opt[1]!="-"):\n raise OptionError(\n "invalid short option string %r: "\n "must be of the form -x, (x any non-dash char)"%opt,\n self)\n self._short_opts.append(opt)\n else :\n if not (opt[0:2]=="--"and opt[2]!="-"):\n raise OptionError(\n "invalid long option string %r: "\n "must start with --, followed by non-dash"%opt,\n self)\n self._long_opts.append(opt)\n \n def _set_attrs(self,attrs):\n for attr in self.ATTRS:\n if attr in attrs:\n setattr(self,attr,attrs[attr])\n del attrs[attr]\n else :\n if attr ==\'default\':\n setattr(self,attr,NO_DEFAULT)\n else :\n setattr(self,attr,None )\n if attrs:\n attrs=sorted(attrs.keys())\n raise OptionError(\n "invalid keyword arguments: %s"%", ".join(attrs),\n self)\n \n \n \n \n def _check_action(self):\n if self.action is None :\n self.action="store"\n elif self.action not in self.ACTIONS:\n raise OptionError("invalid action: %r"%self.action,self)\n \n def _check_type(self):\n if self.type is None :\n if self.action in self.ALWAYS_TYPED_ACTIONS:\n if self.choices is not None :\n \n self.type="choice"\n else :\n \n self.type="string"\n else :\n \n \n \n \n \n import builtins\n if (isinstance(self.type,type)or\n (hasattr(self.type,"__name__")and\n getattr(builtins,self.type.__name__,None )is self.type)):\n self.type=self.type.__name__\n \n if self.type =="str":\n self.type="string"\n \n if self.type not in self.TYPES:\n raise OptionError("invalid option type: %r"%self.type,self)\n if self.action not in self.TYPED_ACTIONS:\n raise OptionError(\n "must not supply a type for action %r"%self.action,self)\n \n def _check_choice(self):\n if self.type =="choice":\n if self.choices is None :\n raise OptionError(\n "must supply a list of choices for type \'choice\'",self)\n elif not isinstance(self.choices,(tuple,list)):\n raise OptionError(\n "choices must be a list of strings (\'%s\' supplied)"\n %str(type(self.choices)).split("\'")[1],self)\n elif self.choices is not None :\n raise OptionError(\n "must not supply choices for type %r"%self.type,self)\n \n def _check_dest(self):\n \n \n takes_value=(self.action in self.STORE_ACTIONS or\n self.type is not None )\n if self.dest is None and takes_value:\n \n \n \n if self._long_opts:\n \n self.dest=self._long_opts[0][2:].replace(\'-\',\'_\')\n else :\n self.dest=self._short_opts[0][1]\n \n def _check_const(self):\n if self.action not in self.CONST_ACTIONS and self.const is not None :\n raise OptionError(\n "\'const\' must not be supplied for action %r"%self.action,\n self)\n \n def _check_nargs(self):\n if self.action in self.TYPED_ACTIONS:\n if self.nargs is None :\n self.nargs=1\n elif self.nargs is not None :\n raise OptionError(\n "\'nargs\' must not be supplied for action %r"%self.action,\n self)\n \n def _check_callback(self):\n if self.action =="callback":\n if not callable(self.callback):\n raise OptionError(\n "callback not callable: %r"%self.callback,self)\n if (self.callback_args is not None and\n not isinstance(self.callback_args,tuple)):\n raise OptionError(\n "callback_args, if supplied, must be a tuple: not %r"\n %self.callback_args,self)\n if (self.callback_kwargs is not None and\n not isinstance(self.callback_kwargs,dict)):\n raise OptionError(\n "callback_kwargs, if supplied, must be a dict: not %r"\n %self.callback_kwargs,self)\n else :\n if self.callback is not None :\n raise OptionError(\n "callback supplied (%r) for non-callback option"\n %self.callback,self)\n if self.callback_args is not None :\n raise OptionError(\n "callback_args supplied for non-callback option",self)\n if self.callback_kwargs is not None :\n raise OptionError(\n "callback_kwargs supplied for non-callback option",self)\n \n \n CHECK_METHODS=[_check_action,\n _check_type,\n _check_choice,\n _check_dest,\n _check_const,\n _check_nargs,\n _check_callback]\n \n \n \n \n def __str__(self):\n return "/".join(self._short_opts+self._long_opts)\n \n __repr__=_repr\n \n def takes_value(self):\n return self.type is not None\n \n def get_opt_string(self):\n if self._long_opts:\n return self._long_opts[0]\n else :\n return self._short_opts[0]\n \n \n \n \n def check_value(self,opt,value):\n checker=self.TYPE_CHECKER.get(self.type)\n if checker is None :\n return value\n else :\n return checker(self,opt,value)\n \n def convert_value(self,opt,value):\n if value is not None :\n if self.nargs ==1:\n return self.check_value(opt,value)\n else :\n return tuple([self.check_value(opt,v)for v in value])\n \n def process(self,opt,value,values,parser):\n \n \n \n value=self.convert_value(opt,value)\n \n \n \n \n return self.take_action(\n self.action,self.dest,opt,value,values,parser)\n \n def take_action(self,action,dest,opt,value,values,parser):\n if action =="store":\n setattr(values,dest,value)\n elif action =="store_const":\n setattr(values,dest,self.const)\n elif action =="store_true":\n setattr(values,dest,True )\n elif action =="store_false":\n setattr(values,dest,False )\n elif action =="append":\n values.ensure_value(dest,[]).append(value)\n elif action =="append_const":\n values.ensure_value(dest,[]).append(self.const)\n elif action =="count":\n setattr(values,dest,values.ensure_value(dest,0)+1)\n elif action =="callback":\n args=self.callback_args or ()\n kwargs=self.callback_kwargs or {}\n self.callback(self,opt,value,parser,*args,**kwargs)\n elif action =="help":\n parser.print_help()\n parser.exit()\n elif action =="version":\n parser.print_version()\n parser.exit()\n else :\n raise ValueError("unknown action %r"%self.action)\n \n return 1\n \n \n \n \nSUPPRESS_HELP="SUPPRESS"+"HELP"\nSUPPRESS_USAGE="SUPPRESS"+"USAGE"\n\nclass Values:\n\n def __init__(self,defaults=None ):\n if defaults:\n for (attr,val)in defaults.items():\n setattr(self,attr,val)\n \n def __str__(self):\n return str(self.__dict__)\n \n __repr__=_repr\n \n def __eq__(self,other):\n if isinstance(other,Values):\n return self.__dict__ ==other.__dict__\n elif isinstance(other,dict):\n return self.__dict__ ==other\n else :\n return NotImplemented\n \n def _update_careful(self,dict):\n \'\'\n\n\n\n\n \n for attr in dir(self):\n if attr in dict:\n dval=dict[attr]\n if dval is not None :\n setattr(self,attr,dval)\n \n def _update_loose(self,dict):\n \'\'\n\n\n\n \n self.__dict__.update(dict)\n \n def _update(self,dict,mode):\n if mode =="careful":\n self._update_careful(dict)\n elif mode =="loose":\n self._update_loose(dict)\n else :\n raise ValueError("invalid update mode: %r"%mode)\n \n def read_module(self,modname,mode="careful"):\n __import__(modname)\n mod=sys.modules[modname]\n self._update(vars(mod),mode)\n \n def read_file(self,filename,mode="careful"):\n vars={}\n exec(open(filename).read(),vars)\n self._update(vars,mode)\n \n def ensure_value(self,attr,value):\n if not hasattr(self,attr)or getattr(self,attr)is None :\n setattr(self,attr,value)\n return getattr(self,attr)\n \n \nclass OptionContainer:\n\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,option_class,conflict_handler,description):\n \n \n \n \n self._create_option_list()\n \n self.option_class=option_class\n self.set_conflict_handler(conflict_handler)\n self.set_description(description)\n \n def _create_option_mappings(self):\n \n \n \n self._short_opt={}\n self._long_opt={}\n self.defaults={}\n \n \n def _share_option_mappings(self,parser):\n \n \n self._short_opt=parser._short_opt\n self._long_opt=parser._long_opt\n self.defaults=parser.defaults\n \n def set_conflict_handler(self,handler):\n if handler not in ("error","resolve"):\n raise ValueError("invalid conflict_resolution value %r"%handler)\n self.conflict_handler=handler\n \n def set_description(self,description):\n self.description=description\n \n def get_description(self):\n return self.description\n \n \n def destroy(self):\n \'\'\n del self._short_opt\n del self._long_opt\n del self.defaults\n \n \n \n \n def _check_conflict(self,option):\n conflict_opts=[]\n for opt in option._short_opts:\n if opt in self._short_opt:\n conflict_opts.append((opt,self._short_opt[opt]))\n for opt in option._long_opts:\n if opt in self._long_opt:\n conflict_opts.append((opt,self._long_opt[opt]))\n \n if conflict_opts:\n handler=self.conflict_handler\n if handler =="error":\n raise OptionConflictError(\n "conflicting option string(s): %s"\n %", ".join([co[0]for co in conflict_opts]),\n option)\n elif handler =="resolve":\n for (opt,c_option)in conflict_opts:\n if opt.startswith("--"):\n c_option._long_opts.remove(opt)\n del self._long_opt[opt]\n else :\n c_option._short_opts.remove(opt)\n del self._short_opt[opt]\n if not (c_option._short_opts or c_option._long_opts):\n c_option.container.option_list.remove(c_option)\n \n def add_option(self,*args,**kwargs):\n \'\'\n\n \n if isinstance(args[0],str):\n option=self.option_class(*args,**kwargs)\n elif len(args)==1 and not kwargs:\n option=args[0]\n if not isinstance(option,Option):\n raise TypeError("not an Option instance: %r"%option)\n else :\n raise TypeError("invalid arguments")\n \n self._check_conflict(option)\n \n self.option_list.append(option)\n option.container=self\n for opt in option._short_opts:\n self._short_opt[opt]=option\n for opt in option._long_opts:\n self._long_opt[opt]=option\n \n if option.dest is not None :\n if option.default is not NO_DEFAULT:\n self.defaults[option.dest]=option.default\n elif option.dest not in self.defaults:\n self.defaults[option.dest]=None\n \n return option\n \n def add_options(self,option_list):\n for option in option_list:\n self.add_option(option)\n \n \n \n def get_option(self,opt_str):\n return (self._short_opt.get(opt_str)or\n self._long_opt.get(opt_str))\n \n def has_option(self,opt_str):\n return (opt_str in self._short_opt or\n opt_str in self._long_opt)\n \n def remove_option(self,opt_str):\n option=self._short_opt.get(opt_str)\n if option is None :\n option=self._long_opt.get(opt_str)\n if option is None :\n raise ValueError("no such option %r"%opt_str)\n \n for opt in option._short_opts:\n del self._short_opt[opt]\n for opt in option._long_opts:\n del self._long_opt[opt]\n option.container.option_list.remove(option)\n \n \n \n \n def format_option_help(self,formatter):\n if not self.option_list:\n return ""\n result=[]\n for option in self.option_list:\n if not option.help is SUPPRESS_HELP:\n result.append(formatter.format_option(option))\n return "".join(result)\n \n def format_description(self,formatter):\n return formatter.format_description(self.get_description())\n \n def format_help(self,formatter):\n result=[]\n if self.description:\n result.append(self.format_description(formatter))\n if self.option_list:\n result.append(self.format_option_help(formatter))\n return "\\n".join(result)\n \n \nclass OptionGroup(OptionContainer):\n\n def __init__(self,parser,title,description=None ):\n self.parser=parser\n OptionContainer.__init__(\n self,parser.option_class,parser.conflict_handler,description)\n self.title=title\n \n def _create_option_list(self):\n self.option_list=[]\n self._share_option_mappings(self.parser)\n \n def set_title(self,title):\n self.title=title\n \n def destroy(self):\n \'\'\n OptionContainer.destroy(self)\n del self.option_list\n \n \n \n def format_help(self,formatter):\n result=formatter.format_heading(self.title)\n formatter.indent()\n result +=OptionContainer.format_help(self,formatter)\n formatter.dedent()\n return result\n \n \nclass OptionParser(OptionContainer):\n\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n standard_option_list=[]\n \n def __init__(self,\n usage=None ,\n option_list=None ,\n option_class=Option,\n version=None ,\n conflict_handler="error",\n description=None ,\n formatter=None ,\n add_help_option=True ,\n prog=None ,\n epilog=None ):\n OptionContainer.__init__(\n self,option_class,conflict_handler,description)\n self.set_usage(usage)\n self.prog=prog\n self.version=version\n self.allow_interspersed_args=True\n self.process_default_values=True\n if formatter is None :\n formatter=IndentedHelpFormatter()\n self.formatter=formatter\n self.formatter.set_parser(self)\n self.epilog=epilog\n \n \n \n \n \n self._populate_option_list(option_list,\n add_help=add_help_option)\n \n self._init_parsing_state()\n \n \n def destroy(self):\n \'\'\n\n\n\n\n \n OptionContainer.destroy(self)\n for group in self.option_groups:\n group.destroy()\n del self.option_list\n del self.option_groups\n del self.formatter\n \n \n \n \n \n def _create_option_list(self):\n self.option_list=[]\n self.option_groups=[]\n self._create_option_mappings()\n \n def _add_help_option(self):\n self.add_option("-h","--help",\n action="help",\n help=_("show this help message and exit"))\n \n def _add_version_option(self):\n self.add_option("--version",\n action="version",\n help=_("show program\'s version number and exit"))\n \n def _populate_option_list(self,option_list,add_help=True ):\n if self.standard_option_list:\n self.add_options(self.standard_option_list)\n if option_list:\n self.add_options(option_list)\n if self.version:\n self._add_version_option()\n if add_help:\n self._add_help_option()\n \n def _init_parsing_state(self):\n \n self.rargs=None\n self.largs=None\n self.values=None\n \n \n \n \n def set_usage(self,usage):\n if usage is None :\n self.usage=_("%prog [options]")\n elif usage is SUPPRESS_USAGE:\n self.usage=None\n \n elif usage.lower().startswith("usage: "):\n self.usage=usage[7:]\n else :\n self.usage=usage\n \n def enable_interspersed_args(self):\n \'\'\n\n\n\n \n self.allow_interspersed_args=True\n \n def disable_interspersed_args(self):\n \'\'\n\n\n\n \n self.allow_interspersed_args=False\n \n def set_process_default_values(self,process):\n self.process_default_values=process\n \n def set_default(self,dest,value):\n self.defaults[dest]=value\n \n def set_defaults(self,**kwargs):\n self.defaults.update(kwargs)\n \n def _get_all_options(self):\n options=self.option_list[:]\n for group in self.option_groups:\n options.extend(group.option_list)\n return options\n \n def get_default_values(self):\n if not self.process_default_values:\n \n return Values(self.defaults)\n \n defaults=self.defaults.copy()\n for option in self._get_all_options():\n default=defaults.get(option.dest)\n if isinstance(default,str):\n opt_str=option.get_opt_string()\n defaults[option.dest]=option.check_value(opt_str,default)\n \n return Values(defaults)\n \n \n \n \n def add_option_group(self,*args,**kwargs):\n \n if isinstance(args[0],str):\n group=OptionGroup(self,*args,**kwargs)\n elif len(args)==1 and not kwargs:\n group=args[0]\n if not isinstance(group,OptionGroup):\n raise TypeError("not an OptionGroup instance: %r"%group)\n if group.parser is not self:\n raise ValueError("invalid OptionGroup (wrong parser)")\n else :\n raise TypeError("invalid arguments")\n \n self.option_groups.append(group)\n return group\n \n def get_option_group(self,opt_str):\n option=(self._short_opt.get(opt_str)or\n self._long_opt.get(opt_str))\n if option and option.container is not self:\n return option.container\n return None\n \n \n \n \n def _get_args(self,args):\n if args is None :\n return sys.argv[1:]\n else :\n return args[:]\n \n def parse_args(self,args=None ,values=None ):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n \n rargs=self._get_args(args)\n if values is None :\n values=self.get_default_values()\n \n \n \n \n \n \n \n \n \n \n self.rargs=rargs\n self.largs=largs=[]\n self.values=values\n \n try :\n stop=self._process_args(largs,rargs,values)\n except (BadOptionError,OptionValueError)as err:\n self.error(str(err))\n \n args=largs+rargs\n return self.check_values(values,args)\n \n def check_values(self,values,args):\n \'\'\n\n\n\n\n\n\n\n\n \n return (values,args)\n \n def _process_args(self,largs,rargs,values):\n \'\'\n\n\n\n\n\n\n\n \n while rargs:\n arg=rargs[0]\n \n \n \n if arg =="--":\n del rargs[0]\n return\n elif arg[0:2]=="--":\n \n self._process_long_opt(rargs,values)\n elif arg[:1]=="-"and len(arg)>1:\n \n \n self._process_short_opts(rargs,values)\n elif self.allow_interspersed_args:\n largs.append(arg)\n del rargs[0]\n else :\n return\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n def _match_long_opt(self,opt):\n \'\'\n\n\n\n\n \n return _match_abbrev(opt,self._long_opt)\n \n def _process_long_opt(self,rargs,values):\n arg=rargs.pop(0)\n \n \n \n if "="in arg:\n (opt,next_arg)=arg.split("=",1)\n rargs.insert(0,next_arg)\n had_explicit_value=True\n else :\n opt=arg\n had_explicit_value=False\n \n opt=self._match_long_opt(opt)\n option=self._long_opt[opt]\n if option.takes_value():\n nargs=option.nargs\n if len(rargs)>> import pdb\n >>> pdb.run('')\n\nThe debugger's prompt is '(Pdb) '. This will stop in the first\nfunction call in .\n\nAlternatively, if a statement terminated with an unhandled exception,\nyou can use pdb's post-mortem facility to inspect the contents of the\ntraceback:\n\n >>> \n \n >>> import pdb\n >>> pdb.pm()\n\nThe commands recognized by the debugger are listed in the next\nsection. Most can be abbreviated as indicated; e.g., h(elp) means\nthat 'help' can be typed as 'h' or 'help' (but not as 'he' or 'hel',\nnor as 'H' or 'Help' or 'HELP'). Optional arguments are enclosed in\nsquare brackets. Alternatives in the command syntax are separated\nby a vertical bar (|).\n\nA blank line repeats the previous command literally, except for\n'list', where it lists the next 11 lines.\n\nCommands that the debugger doesn't recognize are assumed to be Python\nstatements and are executed in the context of the program being\ndebugged. Python statements can also be prefixed with an exclamation\npoint ('!'). This is a powerful way to inspect the program being\ndebugged; it is even possible to change variables or call functions.\nWhen an exception occurs in such a statement, the exception name is\nprinted but the debugger's state is not changed.\n\nThe debugger supports aliases, which can save typing. And aliases can\nhave parameters (see the alias help entry) which allows one a certain\nlevel of adaptability to the context under examination.\n\nMultiple commands may be entered on a single line, separated by the\npair ';;'. No intelligence is applied to separating the commands; the\ninput is split at the first ';;', even if it is in the middle of a\nquoted string.\n\nIf a file \".pdbrc\" exists in your home directory or in the current\ndirectory, it is read in and executed as if it had been typed at the\ndebugger prompt. This is particularly useful for aliases. If both\nfiles exist, the one in the home directory is read first and aliases\ndefined there can be overriden by the local file.\n\nAside from aliases, the debugger is not directly programmable; but it\nis implemented as a class from which you can derive your own debugger\nclass, which you can make as fancy as you like.\n\n\nDebugger commands\n=================\n\n\"\"\"\n\n\n\nimport os\nimport re\nimport sys\nimport cmd\nimport bdb\nimport dis\nimport code\nimport glob\nimport pprint\nimport signal\nimport inspect\nimport traceback\nimport linecache\n\n\nclass Restart(Exception):\n ''\n pass\n \n__all__=[\"run\",\"pm\",\"Pdb\",\"runeval\",\"runctx\",\"runcall\",\"set_trace\",\n\"post_mortem\",\"help\"]\n\ndef find_function(funcname,filename):\n cre=re.compile(r'def\\s+%s\\s*[(]'%re.escape(funcname))\n try :\n fp=open(filename)\n except OSError:\n return None\n \n with fp:\n for lineno,line in enumerate(fp,start=1):\n if cre.match(line):\n return funcname,filename,lineno\n return None\n \ndef getsourcelines(obj):\n lines,lineno=inspect.findsource(obj)\n if inspect.isframe(obj)and obj.f_globals is obj.f_locals:\n \n return lines,1\n elif inspect.ismodule(obj):\n return lines,1\n return inspect.getblock(lines[lineno:]),lineno+1\n \ndef lasti2lineno(code,lasti):\n linestarts=list(dis.findlinestarts(code))\n linestarts.reverse()\n for i,lineno in linestarts:\n if lasti >=i:\n return lineno\n return 0\n \n \nclass _rstr(str):\n ''\n def __repr__(self):\n return self\n \n \n \n \n \n \n \nline_prefix='\\n-> '\n\nclass Pdb(bdb.Bdb,cmd.Cmd):\n\n def __init__(self,completekey='tab',stdin=None ,stdout=None ,skip=None ,\n nosigint=False ):\n bdb.Bdb.__init__(self,skip=skip)\n cmd.Cmd.__init__(self,completekey,stdin,stdout)\n if stdout:\n self.use_rawinput=0\n self.prompt='(Pdb) '\n self.aliases={}\n self.displaying={}\n self.mainpyfile=''\n self._wait_for_mainpyfile=False\n self.tb_lineno={}\n \n try :\n import readline\n \n readline.set_completer_delims(' \\t\\n`@#$%^&*()=+[{]}\\\\|;:\\'\",<>?')\n except ImportError:\n pass\n self.allow_kbdint=False\n self.nosigint=nosigint\n \n \n self.rcLines=[]\n if 'HOME'in os.environ:\n envHome=os.environ['HOME']\n try :\n with open(os.path.join(envHome,\".pdbrc\"))as rcFile:\n self.rcLines.extend(rcFile)\n except OSError:\n pass\n try :\n with open(\".pdbrc\")as rcFile:\n self.rcLines.extend(rcFile)\n except OSError:\n pass\n \n self.commands={}\n self.commands_doprompt={}\n \n self.commands_silent={}\n \n self.commands_defining=False\n \n self.commands_bnum=None\n \n \n def sigint_handler(self,signum,frame):\n if self.allow_kbdint:\n raise KeyboardInterrupt\n self.message(\"\\nProgram interrupted. (Use 'cont' to resume).\")\n self.set_step()\n self.set_trace(frame)\n \n signal.signal(signal.SIGINT,self._previous_sigint_handler)\n \n def reset(self):\n bdb.Bdb.reset(self)\n self.forget()\n \n def forget(self):\n self.lineno=None\n self.stack=[]\n self.curindex=0\n self.curframe=None\n self.tb_lineno.clear()\n \n def setup(self,f,tb):\n self.forget()\n self.stack,self.curindex=self.get_stack(f,tb)\n while tb:\n \n \n \n lineno=lasti2lineno(tb.tb_frame.f_code,tb.tb_lasti)\n self.tb_lineno[tb.tb_frame]=lineno\n tb=tb.tb_next\n self.curframe=self.stack[self.curindex][0]\n \n \n \n self.curframe_locals=self.curframe.f_locals\n return self.execRcLines()\n \n \n def execRcLines(self):\n if not self.rcLines:\n return\n \n rcLines=self.rcLines\n rcLines.reverse()\n \n self.rcLines=[]\n while rcLines:\n line=rcLines.pop().strip()\n if line and line[0]!='#':\n if self.onecmd(line):\n \n \n \n self.rcLines +=reversed(rcLines)\n return True\n \n \n \n def user_call(self,frame,argument_list):\n ''\n \n if self._wait_for_mainpyfile:\n return\n if self.stop_here(frame):\n self.message('--Call--')\n self.interaction(frame,None )\n \n def user_line(self,frame):\n ''\n if self._wait_for_mainpyfile:\n if (self.mainpyfile !=self.canonic(frame.f_code.co_filename)\n or frame.f_lineno <=0):\n return\n self._wait_for_mainpyfile=False\n if self.bp_commands(frame):\n self.interaction(frame,None )\n \n def bp_commands(self,frame):\n ''\n\n\n\n \n \n if getattr(self,\"currentbp\",False )and\\\n self.currentbp in self.commands:\n currentbp=self.currentbp\n self.currentbp=0\n lastcmd_back=self.lastcmd\n self.setup(frame,None )\n for line in self.commands[currentbp]:\n self.onecmd(line)\n self.lastcmd=lastcmd_back\n if not self.commands_silent[currentbp]:\n self.print_stack_entry(self.stack[self.curindex])\n if self.commands_doprompt[currentbp]:\n self._cmdloop()\n self.forget()\n return\n return 1\n \n def user_return(self,frame,return_value):\n ''\n if self._wait_for_mainpyfile:\n return\n frame.f_locals['__return__']=return_value\n self.message('--Return--')\n self.interaction(frame,None )\n \n def user_exception(self,frame,exc_info):\n ''\n \n if self._wait_for_mainpyfile:\n return\n exc_type,exc_value,exc_traceback=exc_info\n frame.f_locals['__exception__']=exc_type,exc_value\n \n \n \n \n \n \n prefix='Internal 'if (not exc_traceback\n and exc_type is StopIteration)else ''\n self.message('%s%s'%(prefix,\n traceback.format_exception_only(exc_type,exc_value)[-1].strip()))\n self.interaction(frame,exc_traceback)\n \n \n def _cmdloop(self):\n while True :\n try :\n \n \n self.allow_kbdint=True\n self.cmdloop()\n self.allow_kbdint=False\n break\n except KeyboardInterrupt:\n self.message('--KeyboardInterrupt--')\n \n \n def preloop(self):\n displaying=self.displaying.get(self.curframe)\n if displaying:\n for expr,oldvalue in displaying.items():\n newvalue=self._getval_except(expr)\n \n \n \n if newvalue is not oldvalue and newvalue !=oldvalue:\n displaying[expr]=newvalue\n self.message('display %s: %r [old: %r]'%\n (expr,newvalue,oldvalue))\n \n def interaction(self,frame,traceback):\n if self.setup(frame,traceback):\n \n \n self.forget()\n return\n self.print_stack_entry(self.stack[self.curindex])\n self._cmdloop()\n self.forget()\n \n def displayhook(self,obj):\n ''\n\n \n \n if obj is not None :\n self.message(repr(obj))\n \n def default(self,line):\n if line[:1]=='!':line=line[1:]\n locals=self.curframe_locals\n globals=self.curframe.f_globals\n try :\n code=compile(line+'\\n','','single')\n save_stdout=sys.stdout\n save_stdin=sys.stdin\n save_displayhook=sys.displayhook\n try :\n sys.stdin=self.stdin\n sys.stdout=self.stdout\n sys.displayhook=self.displayhook\n exec(code,globals,locals)\n finally :\n sys.stdout=save_stdout\n sys.stdin=save_stdin\n sys.displayhook=save_displayhook\n except :\n exc_info=sys.exc_info()[:2]\n self.error(traceback.format_exception_only(*exc_info)[-1].strip())\n \n def precmd(self,line):\n ''\n if not line.strip():\n return line\n args=line.split()\n while args[0]in self.aliases:\n line=self.aliases[args[0]]\n ii=1\n for tmpArg in args[1:]:\n line=line.replace(\"%\"+str(ii),\n tmpArg)\n ii +=1\n line=line.replace(\"%*\",' '.join(args[1:]))\n args=line.split()\n \n \n if args[0]!='alias':\n marker=line.find(';;')\n if marker >=0:\n \n next=line[marker+2:].lstrip()\n self.cmdqueue.append(next)\n line=line[:marker].rstrip()\n return line\n \n def onecmd(self,line):\n ''\n\n\n\n\n \n if not self.commands_defining:\n return cmd.Cmd.onecmd(self,line)\n else :\n return self.handle_command_def(line)\n \n def handle_command_def(self,line):\n ''\n cmd,arg,line=self.parseline(line)\n if not cmd:\n return\n if cmd =='silent':\n self.commands_silent[self.commands_bnum]=True\n return\n elif cmd =='end':\n self.cmdqueue=[]\n return 1\n cmdlist=self.commands[self.commands_bnum]\n if arg:\n cmdlist.append(cmd+' '+arg)\n else :\n cmdlist.append(cmd)\n \n try :\n func=getattr(self,'do_'+cmd)\n except AttributeError:\n func=self.default\n \n if func.__name__ in self.commands_resuming:\n self.commands_doprompt[self.commands_bnum]=False\n self.cmdqueue=[]\n return 1\n return\n \n \n \n def message(self,msg):\n print(msg,file=self.stdout)\n \n def error(self,msg):\n print('***',msg,file=self.stdout)\n \n \n \n \n def _complete_location(self,text,line,begidx,endidx):\n \n if line.strip().endswith((':',',')):\n \n return []\n \n try :\n ret=self._complete_expression(text,line,begidx,endidx)\n except Exception:\n ret=[]\n \n globs=glob.glob(text+'*')\n for fn in globs:\n if os.path.isdir(fn):\n ret.append(fn+'/')\n elif os.path.isfile(fn)and fn.lower().endswith(('.py','.pyw')):\n ret.append(fn+':')\n return ret\n \n def _complete_bpnumber(self,text,line,begidx,endidx):\n \n \n \n return [str(i)for i,bp in enumerate(bdb.Breakpoint.bpbynumber)\n if bp is not None and str(i).startswith(text)]\n \n def _complete_expression(self,text,line,begidx,endidx):\n \n if not self.curframe:\n return []\n \n \n \n ns=self.curframe.f_globals.copy()\n ns.update(self.curframe_locals)\n if '.'in text:\n \n \n \n dotted=text.split('.')\n try :\n obj=ns[dotted[0]]\n for part in dotted[1:-1]:\n obj=getattr(obj,part)\n except (KeyError,AttributeError):\n return []\n prefix='.'.join(dotted[:-1])+'.'\n return [prefix+n for n in dir(obj)if n.startswith(dotted[-1])]\n else :\n \n return [n for n in ns.keys()if n.startswith(text)]\n \n \n \n \n \n def do_commands(self,arg):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not arg:\n bnum=len(bdb.Breakpoint.bpbynumber)-1\n else :\n try :\n bnum=int(arg)\n except :\n self.error(\"Usage: commands [bnum]\\n ...\\n end\")\n return\n self.commands_bnum=bnum\n \n if bnum in self.commands:\n old_command_defs=(self.commands[bnum],\n self.commands_doprompt[bnum],\n self.commands_silent[bnum])\n else :\n old_command_defs=None\n self.commands[bnum]=[]\n self.commands_doprompt[bnum]=True\n self.commands_silent[bnum]=False\n \n prompt_back=self.prompt\n self.prompt='(com) '\n self.commands_defining=True\n try :\n self.cmdloop()\n except KeyboardInterrupt:\n \n if old_command_defs:\n self.commands[bnum]=old_command_defs[0]\n self.commands_doprompt[bnum]=old_command_defs[1]\n self.commands_silent[bnum]=old_command_defs[2]\n else :\n del self.commands[bnum]\n del self.commands_doprompt[bnum]\n del self.commands_silent[bnum]\n self.error('command definition aborted, old commands restored')\n finally :\n self.commands_defining=False\n self.prompt=prompt_back\n \n complete_commands=_complete_bpnumber\n \n def do_break(self,arg,temporary=0):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not arg:\n if self.breaks:\n self.message(\"Num Type Disp Enb Where\")\n for bp in bdb.Breakpoint.bpbynumber:\n if bp:\n self.message(bp.bpformat())\n return\n \n \n filename=None\n lineno=None\n cond=None\n comma=arg.find(',')\n if comma >0:\n \n cond=arg[comma+1:].lstrip()\n arg=arg[:comma].rstrip()\n \n colon=arg.rfind(':')\n funcname=None\n if colon >=0:\n filename=arg[:colon].rstrip()\n f=self.lookupmodule(filename)\n if not f:\n self.error('%r not found from sys.path'%filename)\n return\n else :\n filename=f\n arg=arg[colon+1:].lstrip()\n try :\n lineno=int(arg)\n except ValueError:\n self.error('Bad lineno: %s'%arg)\n return\n else :\n \n try :\n lineno=int(arg)\n except ValueError:\n try :\n func=eval(arg,\n self.curframe.f_globals,\n self.curframe_locals)\n except :\n func=arg\n try :\n if hasattr(func,'__func__'):\n func=func.__func__\n code=func.__code__\n \n \n funcname=code.co_name\n lineno=code.co_firstlineno\n filename=code.co_filename\n except :\n \n (ok,filename,ln)=self.lineinfo(arg)\n if not ok:\n self.error('The specified object %r is not a function '\n 'or was not found along sys.path.'%arg)\n return\n funcname=ok\n lineno=int(ln)\n if not filename:\n filename=self.defaultFile()\n \n line=self.checkline(filename,lineno)\n if line:\n \n err=self.set_break(filename,line,temporary,cond,funcname)\n if err:\n self.error(err)\n else :\n bp=self.get_breaks(filename,line)[-1]\n self.message(\"Breakpoint %d at %s:%d\"%\n (bp.number,bp.file,bp.line))\n \n \n def defaultFile(self):\n ''\n filename=self.curframe.f_code.co_filename\n if filename ==''and self.mainpyfile:\n filename=self.mainpyfile\n return filename\n \n do_b=do_break\n \n complete_break=_complete_location\n complete_b=_complete_location\n \n def do_tbreak(self,arg):\n ''\n\n\n \n self.do_break(arg,1)\n \n complete_tbreak=_complete_location\n \n def lineinfo(self,identifier):\n failed=(None ,None ,None )\n \n idstring=identifier.split(\"'\")\n if len(idstring)==1:\n \n id=idstring[0].strip()\n elif len(idstring)==3:\n \n id=idstring[1].strip()\n else :\n return failed\n if id =='':return failed\n parts=id.split('.')\n \n if parts[0]=='self':\n del parts[0]\n if len(parts)==0:\n return failed\n \n fname=self.defaultFile()\n if len(parts)==1:\n item=parts[0]\n else :\n \n \n f=self.lookupmodule(parts[0])\n if f:\n fname=f\n item=parts[1]\n answer=find_function(item,fname)\n return answer or failed\n \n def checkline(self,filename,lineno):\n ''\n\n\n\n \n \n \n globs=self.curframe.f_globals if hasattr(self,'curframe')else None\n line=linecache.getline(filename,lineno,globs)\n if not line:\n self.message('End of file')\n return 0\n line=line.strip()\n \n if (not line or (line[0]=='#')or\n (line[:3]=='\"\"\"')or line[:3]==\"'''\"):\n self.error('Blank or comment')\n return 0\n return lineno\n \n def do_enable(self,arg):\n ''\n\n\n \n args=arg.split()\n for i in args:\n try :\n bp=self.get_bpbynumber(i)\n except ValueError as err:\n self.error(err)\n else :\n bp.enable()\n self.message('Enabled %s'%bp)\n \n complete_enable=_complete_bpnumber\n \n def do_disable(self,arg):\n ''\n\n\n\n\n\n \n args=arg.split()\n for i in args:\n try :\n bp=self.get_bpbynumber(i)\n except ValueError as err:\n self.error(err)\n else :\n bp.disable()\n self.message('Disabled %s'%bp)\n \n complete_disable=_complete_bpnumber\n \n def do_condition(self,arg):\n ''\n\n\n\n\n \n args=arg.split(' ',1)\n try :\n cond=args[1]\n except IndexError:\n cond=None\n try :\n bp=self.get_bpbynumber(args[0].strip())\n except IndexError:\n self.error('Breakpoint number expected')\n except ValueError as err:\n self.error(err)\n else :\n bp.cond=cond\n if not cond:\n self.message('Breakpoint %d is now unconditional.'%bp.number)\n else :\n self.message('New condition set for breakpoint %d.'%bp.number)\n \n complete_condition=_complete_bpnumber\n \n def do_ignore(self,arg):\n ''\n\n\n\n\n\n\n \n args=arg.split()\n try :\n count=int(args[1].strip())\n except :\n count=0\n try :\n bp=self.get_bpbynumber(args[0].strip())\n except IndexError:\n self.error('Breakpoint number expected')\n except ValueError as err:\n self.error(err)\n else :\n bp.ignore=count\n if count >0:\n if count >1:\n countstr='%d crossings'%count\n else :\n countstr='1 crossing'\n self.message('Will ignore next %s of breakpoint %d.'%\n (countstr,bp.number))\n else :\n self.message('Will stop next time breakpoint %d is reached.'\n %bp.number)\n \n complete_ignore=_complete_bpnumber\n \n def do_clear(self,arg):\n ''\n\n\n\n\n \n if not arg:\n try :\n reply=input('Clear all breaks? ')\n except EOFError:\n reply='no'\n reply=reply.strip().lower()\n if reply in ('y','yes'):\n bplist=[bp for bp in bdb.Breakpoint.bpbynumber if bp]\n self.clear_all_breaks()\n for bp in bplist:\n self.message('Deleted %s'%bp)\n return\n if ':'in arg:\n \n i=arg.rfind(':')\n filename=arg[:i]\n arg=arg[i+1:]\n try :\n lineno=int(arg)\n except ValueError:\n err=\"Invalid line number (%s)\"%arg\n else :\n bplist=self.get_breaks(filename,lineno)\n err=self.clear_break(filename,lineno)\n if err:\n self.error(err)\n else :\n for bp in bplist:\n self.message('Deleted %s'%bp)\n return\n numberlist=arg.split()\n for i in numberlist:\n try :\n bp=self.get_bpbynumber(i)\n except ValueError as err:\n self.error(err)\n else :\n self.clear_bpbynumber(i)\n self.message('Deleted %s'%bp)\n do_cl=do_clear\n \n complete_clear=_complete_location\n complete_cl=_complete_location\n \n def do_where(self,arg):\n ''\n\n\n\n \n self.print_stack_trace()\n do_w=do_where\n do_bt=do_where\n \n def _select_frame(self,number):\n assert 0 <=number =2:\n self.error('No help for %r; please do not run Python with -OO '\n 'if you need command help'%arg)\n return\n self.message(command.__doc__.rstrip())\n \n do_h=do_help\n \n def help_exec(self):\n ''\n\n\n\n\n\n\n\n \n self.message((self.help_exec.__doc__ or '').strip())\n \n def help_pdb(self):\n help()\n \n \n \n def lookupmodule(self,filename):\n ''\n\n\n\n \n if os.path.isabs(filename)and os.path.exists(filename):\n return filename\n f=os.path.join(sys.path[0],filename)\n if os.path.exists(f)and self.canonic(f)==self.mainpyfile:\n return f\n root,ext=os.path.splitext(filename)\n if ext =='':\n filename=filename+'.py'\n if os.path.isabs(filename):\n return filename\n for dirname in sys.path:\n while os.path.islink(dirname):\n dirname=os.readlink(dirname)\n fullname=os.path.join(dirname,filename)\n if os.path.exists(fullname):\n return fullname\n return None\n \n def _runscript(self,filename):\n \n \n \n \n \n import __main__\n __main__.__dict__.clear()\n __main__.__dict__.update({\"__name__\":\"__main__\",\n \"__file__\":filename,\n \"__builtins__\":__builtins__,\n })\n \n \n \n \n \n \n self._wait_for_mainpyfile=True\n self.mainpyfile=self.canonic(filename)\n self._user_requested_quit=False\n with open(filename,\"rb\")as fp:\n statement=\"exec(compile(%r, %r, 'exec'))\"%\\\n (fp.read(),self.mainpyfile)\n self.run(statement)\n \n \n \nif __doc__ is not None :\n\n _help_order=[\n 'help','where','down','up','break','tbreak','clear','disable',\n 'enable','ignore','condition','commands','step','next','until',\n 'jump','return','retval','run','continue','list','longlist',\n 'args','p','pp','whatis','source','display','undisplay',\n 'interact','alias','unalias','debug','quit',\n ]\n \n for _command in _help_order:\n __doc__ +=getattr(Pdb,'do_'+_command).__doc__.strip()+'\\n\\n'\n __doc__ +=Pdb.help_exec.__doc__\n \n del _help_order,_command\n \n \n \n \ndef run(statement,globals=None ,locals=None ):\n Pdb().run(statement,globals,locals)\n \ndef runeval(expression,globals=None ,locals=None ):\n return Pdb().runeval(expression,globals,locals)\n \ndef runctx(statement,globals,locals):\n\n run(statement,globals,locals)\n \ndef runcall(*args,**kwds):\n return Pdb().runcall(*args,**kwds)\n \ndef set_trace():\n Pdb().set_trace(sys._getframe().f_back)\n \n \n \ndef post_mortem(t=None ):\n\n if t is None :\n \n \n t=sys.exc_info()[2]\n if t is None :\n raise ValueError(\"A valid traceback must be passed if no \"\n \"exception is being handled\")\n \n p=Pdb()\n p.reset()\n p.interaction(None ,t)\n \ndef pm():\n post_mortem(sys.last_traceback)\n \n \n \n \nTESTCMD='import x; x.main()'\n\ndef test():\n run(TESTCMD)\n \n \ndef help():\n import pydoc\n pydoc.pager(__doc__)\n \n_usage=\"\"\"\\\nusage: pdb.py [-c command] ... pyfile [arg] ...\n\nDebug the Python program given by pyfile.\n\nInitial commands are read from .pdbrc files in your home directory\nand in the current directory, if they exist. Commands supplied with\n-c are executed after commands from .pdbrc files.\n\nTo let the script run until an exception occurs, use \"-c continue\".\nTo let the script run up to a given line X in the debugged file, use\n\"-c 'until X'\".\"\"\"\n\ndef main():\n import getopt\n \n opts,args=getopt.getopt(sys.argv[1:],'hc:',['--help','--command='])\n \n if not args:\n print(_usage)\n sys.exit(2)\n \n commands=[]\n for opt,optarg in opts:\n if opt in ['-h','--help']:\n print(_usage)\n sys.exit()\n elif opt in ['-c','--command']:\n commands.append(optarg)\n \n mainpyfile=args[0]\n if not os.path.exists(mainpyfile):\n print('Error:',mainpyfile,'does not exist')\n sys.exit(1)\n \n sys.argv[:]=args\n \n \n sys.path[0]=os.path.dirname(mainpyfile)\n \n \n \n \n \n pdb=Pdb()\n pdb.rcLines.extend(commands)\n while True :\n try :\n pdb._runscript(mainpyfile)\n if pdb._user_requested_quit:\n break\n print(\"The program finished and will be restarted\")\n except Restart:\n print(\"Restarting\",mainpyfile,\"with arguments:\")\n print(\"\\t\"+\" \".join(args))\n except SystemExit:\n \n print(\"The program exited via sys.exit(). Exit status:\",end=' ')\n print(sys.exc_info()[1])\n except :\n traceback.print_exc()\n print(\"Uncaught exception. Entering post mortem debugging\")\n print(\"Running 'cont' or 'step' will restart the program\")\n t=sys.exc_info()[2]\n pdb.interaction(None ,t)\n print(\"Post mortem debugger finished. The \"+mainpyfile+\n \" will be restarted\")\n \n \n \nif __name__ =='__main__':\n import pdb\n pdb.main()\n",["__main__","bdb","cmd","code","dis","getopt","glob","inspect","linecache","os","pdb","pprint","pydoc","re","readline","shlex","signal","sys","traceback"]],pickle:[".py","from json import load,loads\nfrom json import dumps as _dumps\n\nHIGHEST_PROTOCOL=1\n\ndef dumps(obj,*args,**kw):\n ''\n return _dumps(obj).encode('utf-8')\n",["json"]],platform:[".py","''\n\n\n\nfrom browser import window\n\ndef architecture(*args,**kw):\n return \"\",window.navigator.platform\n \ndef machine(*args,**kw):\n return ''\n \ndef node(*args,**kw):\n return ''\n \ndef platform(*args,**kw):\n return window.navigator.platform\n \ndef processor(*args,**kw):\n return ''\n \ndef python_build():\n return ('.'.join(map(str,__BRYTHON__.implementation[:-1])),\n __BRYTHON__.compiled_date)\n \ndef python_compiler():\n return ''\n \ndef python_branch():\n return ''\n \ndef python_implementation():\n return 'Brython'\n \ndef python_revision():\n return ''\n \ndef python_version():\n return '.'.join(map(str,__BRYTHON__.version_info[:3]))\n \ndef python_version_tuple():\n return __BRYTHON__.version_info[:3]\n \ndef release():\n return ''\n \ndef system():\n return window.navigator.platform\n \ndef system_alias(*args,**kw):\n return window.navigator.platform\n \ndef uname():\n from collections import namedtuple\n klass=namedtuple('uname_result',\n 'system node release version machine processor')\n return klass(window.navigator.platform,'','','','','')\n",["browser","collections"]],posix:[".py","''\n\n\n\n\nfrom browser import window\n\ndef _randint(a,b):\n return int(window.Math.random()*(b -a+1)+a)\n \nF_OK=0\n\nO_APPEND=8\n\nO_BINARY=32768\n\nO_CREAT=256\n\nO_EXCL=1024\n\nO_NOINHERIT=128\n\nO_RANDOM=16\n\nO_RDONLY=0\n\nO_RDWR=2\n\nO_SEQUENTIAL=32\n\nO_SHORT_LIVED=4096\n\nO_TEMPORARY=64\n\nO_TEXT=16384\n\nO_TRUNC=512\n\nO_WRONLY=1\n\nP_DETACH=4\n\nP_NOWAIT=1\n\nP_NOWAITO=3\n\nP_OVERLAY=2\n\nP_WAIT=0\n\nR_OK=4\n\nTMP_MAX=32767\n\nW_OK=2\n\nX_OK=1\n\nclass __loader__:\n pass\n \ndef _exit(*args,**kw):\n ''\n \n pass\n \ndef _getdiskusage(*args,**kw):\n ''\n \n pass\n \ndef _getfileinformation(*args,**kw):\n pass\n \ndef _getfinalpathname(*args,**kw):\n pass\n \ndef _getfullpathname(*args,**kw):\n pass\n \n_have_functions=['MS_WINDOWS']\n\ndef _isdir(*args,**kw):\n ''\n pass\n \ndef abort(*args,**kw):\n ''\n\n \n pass\n \ndef access(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef chdir(*args,**kw):\n ''\n\n\n\n\n \n pass\n \ndef chmod(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef close(*args,**kw):\n ''\n \n pass\n \ndef closerange(*args,**kw):\n ''\n \n pass\n \ndef device_encoding(*args,**kw):\n ''\n\n \n pass\n \ndef dup(*args,**kw):\n ''\n \n pass\n \ndef dup2(*args,**kw):\n ''\n \n pass\n \nenviron={'PYTHONUSERBASE':' '}\n\nerror=OSError\n\ndef execv(*args,**kw):\n ''\n\n\n\n \n pass\n \ndef execve(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n \n pass\n \ndef fstat(*args,**kw):\n ''\n\n \n pass\n \ndef fsync(*args,**kw):\n ''\n \n pass\n \ndef get_terminal_size(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef getcwd(*args,**kw):\n ''\n \n return __BRYTHON__.brython_path\n \ndef getcwdb(*args,**kw):\n ''\n \n pass\n \ndef getlogin(*args,**kw):\n ''\n \n pass\n \ndef getpid(*args,**kw):\n ''\n \n return 0\n \ndef getppid(*args,**kw):\n ''\n\n\n \n pass\n \ndef isatty(*args,**kw):\n ''\n\n \n pass\n \ndef kill(*args,**kw):\n ''\n \n pass\n \ndef link(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef listdir(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError(\"browser can't list files in a directory\")\n \ndef lseek(*args,**kw):\n ''\n\n \n pass\n \ndef lstat(*args,**kw):\n ''\n\n \n return stat_result()\n \ndef mkdir(*args,**kw):\n ''\n\n\n\n\n\n\n\n \n pass\n \ndef open(path,flags,mode=0o777,*args,dir_fd=None ):\n ''\n\n\n\n\n\n \n \n \n from browser.local_storage import storage\n \n class mystorage:\n def __init__(self,path,flags):\n self._path=path\n self._pos=0\n self._flags=flags\n \n if self._flags&O_RDONLY ==O_RDONLY:\n self._data=storage.get(self._path,None )\n if self._data is None :\n raise FileNotFoundError(\"%s not found\"%self._path)\n elif self._flags&O_WRONLY ==O_WRONLY:\n storage[self._path]=''\n \n def seek(self,pos):\n self._pos=pos\n \n def read(self,size=None ):\n if size is None :\n _result=self._data[self._pos:]\n self._pos=len(self._data)\n return _result\n \n assert size <=len(self._data)-self._pos\n _result=self._data[self._pos:self._pos+size]\n self._pos +=size\n return _result\n \n def write(self,data):\n storage[self._path]+=str(data)\n \n def close(self):\n pass\n \n return mystorage(path,flags)\n \ndef pipe(*args,**kw):\n ''\n \n pass\n \ndef putenv(*args,**kw):\n ''\n \n pass\n \ndef read(*args,**kw):\n ''\n \n pass\n \ndef readlink(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef remove(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef rename(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef replace(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef rmdir(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef spawnv(*args,**kw):\n ''\n\n\n\n\n \n pass\n \ndef spawnve(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef startfile(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef stat(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n return stat_result()\n \ndef stat_float_times(*args,**kw):\n ''\n\n\n\n\n \n pass\n \nclass stat_result:\n\n def __init__(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n self.st_atime=window.Date.new()\n self.st_mtime=self.st_ctime=self.st_atime_ns=\\\n self.st_mtime_ns=self.st_ctime_ns=self.st_atime\n self.st_uid=self.st_gid=self.st_ino=-1\n self.st_mode=0\n self.st_size=1\n \nclass statvfs_result:\n pass\n \ndef strerror(*args,**kw):\n ''\n \n pass\n \ndef symlink(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef system(*args,**kw):\n ''\n \n pass\n \nclass terminal_size:\n pass\n \ndef times(*args,**kw):\n ''\n\n\n \n pass\n \nclass times_result:\n pass\n \ndef umask(*args,**kw):\n ''\n \n pass\n \nclass uname_result:\n pass\n \ndef unlink(path,*args,dir_fd=None ):\n ''\n\n\n\n\n\n \n pass\n \ndef urandom(n):\n ''\n \n randbytes=[_randint(0,255)for i in range(n)]\n return bytes(randbytes)\n \ndef utime(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef waitpid(*args,**kw):\n ''\n \n pass\n \ndef write(*args,**kw):\n ''\n \n pass\n \n \n \ndef WIFSIGNALED(a):\n return False\n \ndef WTERMSIG(status):\n return 0\n \ndef WIFSIGNALED(status):\n ''\n return False\n \ndef WIFEXITED(status):\n return False\n \ndef WEXITSTATUS(status):\n pass\n \ndef WNOHANG():\n return (0,0)\n",["browser","browser.local_storage"]],posixpath:[".py","''\n\n\n\n\n\n\n\n\n\n\n\nimport os\nimport sys\nimport genericpath\nfrom genericpath import *\n\n__all__=[\"normcase\",\"isabs\",\"join\",\"splitdrive\",\"split\",\"splitext\",\n\"basename\",\"dirname\",\"commonprefix\",\"getsize\",\"getmtime\",\n\"getatime\",\"getctime\",\"islink\",\"exists\",\"lexists\",\"isdir\",\"isfile\",\n\"ismount\",\"expanduser\",\"expandvars\",\"normpath\",\"abspath\",\n\"samefile\",\"sameopenfile\",\"samestat\",\n\"curdir\",\"pardir\",\"sep\",\"pathsep\",\"defpath\",\"altsep\",\"extsep\",\n\"devnull\",\"realpath\",\"supports_unicode_filenames\",\"relpath\"]\n\n\n\ncurdir='.'\npardir='..'\nextsep='.'\nsep='/'\npathsep=':'\ndefpath=':/bin:/usr/bin'\naltsep=None\ndevnull='/dev/null'\n\ndef _get_sep(path):\n if isinstance(path,bytes):\n return b'/'\n else :\n return '/'\n \n \n \n \n \n \ndef normcase(s):\n ''\n \n if not isinstance(s,(bytes,str)):\n raise TypeError(\"normcase() argument must be str or bytes, \"\n \"not '{}'\".format(s.__class__.__name__))\n return s\n \n \n \n \n \ndef isabs(s):\n ''\n sep=_get_sep(s)\n return s.startswith(sep)\n \n \n \n \n \n \ndef join(a,*p):\n ''\n\n\n \n sep=_get_sep(a)\n path=a\n try :\n for b in p:\n if b.startswith(sep):\n path=b\n elif not path or path.endswith(sep):\n path +=b\n else :\n path +=sep+b\n except TypeError:\n valid_types=all(isinstance(s,(str,bytes,bytearray))\n for s in (a,)+p)\n if valid_types:\n \n raise TypeError(\"Can't mix strings and bytes in path \"\n \"components.\")from None\n raise\n return path\n \n \n \n \n \n \n \ndef split(p):\n ''\n \n sep=_get_sep(p)\n i=p.rfind(sep)+1\n head,tail=p[:i],p[i:]\n if head and head !=sep *len(head):\n head=head.rstrip(sep)\n return head,tail\n \n \n \n \n \n \n \ndef splitext(p):\n if isinstance(p,bytes):\n sep=b'/'\n extsep=b'.'\n else :\n sep='/'\n extsep='.'\n return genericpath._splitext(p,sep,None ,extsep)\nsplitext.__doc__=genericpath._splitext.__doc__\n\n\n\n\ndef splitdrive(p):\n ''\n \n return p[:0],p\n \n \n \n \ndef basename(p):\n ''\n sep=_get_sep(p)\n i=p.rfind(sep)+1\n return p[i:]\n \n \n \n \ndef dirname(p):\n ''\n sep=_get_sep(p)\n i=p.rfind(sep)+1\n head=p[:i]\n if head and head !=sep *len(head):\n head=head.rstrip(sep)\n return head\n \n \n \n \n \ndef islink(path):\n ''\n \n return False\n \n \n \ndef lexists(path):\n ''\n try :\n os.lstat(path)\n except os.error:\n return False\n return True\n \n \n \n \ndef samefile(f1,f2):\n ''\n s1=os.stat(f1)\n s2=os.stat(f2)\n return samestat(s1,s2)\n \n \n \n \n \ndef sameopenfile(fp1,fp2):\n ''\n s1=os.fstat(fp1)\n s2=os.fstat(fp2)\n return samestat(s1,s2)\n \n \n \n \n \ndef samestat(s1,s2):\n ''\n return s1.st_ino ==s2.st_ino and\\\n s1.st_dev ==s2.st_dev\n \n \n \n \n \ndef ismount(path):\n ''\n if islink(path):\n \n return False\n try :\n s1=os.lstat(path)\n if isinstance(path,bytes):\n parent=join(path,b'..')\n else :\n parent=join(path,'..')\n s2=os.lstat(parent)\n except os.error:\n return False\n dev1=s1.st_dev\n dev2=s2.st_dev\n if dev1 !=dev2:\n return True\n ino1=s1.st_ino\n ino2=s2.st_ino\n if ino1 ==ino2:\n return True\n return False\n \n \n \n \n \n \n \n \n \n \n \ndef expanduser(path):\n ''\n return path\n \n \n \n \n \n_varprog=None\n_varprogb=None\n\ndef expandvars(path):\n ''\n \n global _varprog,_varprogb\n if isinstance(path,bytes):\n if b'$'not in path:\n return path\n if not _varprogb:\n import re\n _varprogb=re.compile(br'\\$(\\w+|\\{[^}]*\\})',re.ASCII)\n search=_varprogb.search\n start=b'{'\n end=b'}'\n else :\n if '$'not in path:\n return path\n if not _varprog:\n import re\n _varprog=re.compile(r'\\$(\\w+|\\{[^}]*\\})',re.ASCII)\n search=_varprog.search\n start='{'\n end='}'\n i=0\n while True :\n m=search(path,i)\n if not m:\n break\n i,j=m.span(0)\n name=m.group(1)\n if name.startswith(start)and name.endswith(end):\n name=name[1:-1]\n if isinstance(name,bytes):\n name=str(name,'ASCII')\n if name in os.environ:\n tail=path[j:]\n value=os.environ[name]\n if isinstance(path,bytes):\n value=value.encode('ASCII')\n path=path[:i]+value\n i=len(path)\n path +=tail\n else :\n i=j\n return path\n \n \n \n \n \n \ndef normpath(path):\n ''\n if isinstance(path,bytes):\n sep=b'/'\n empty=b''\n dot=b'.'\n dotdot=b'..'\n else :\n sep='/'\n empty=''\n dot='.'\n dotdot='..'\n if path ==empty:\n return dot\n initial_slashes=path.startswith(sep)\n \n \n if (initial_slashes and\n path.startswith(sep *2)and not path.startswith(sep *3)):\n initial_slashes=2\n comps=path.split(sep)\n new_comps=[]\n for comp in comps:\n if comp in (empty,dot):\n continue\n if (comp !=dotdot or (not initial_slashes and not new_comps)or\n (new_comps and new_comps[-1]==dotdot)):\n new_comps.append(comp)\n elif new_comps:\n new_comps.pop()\n comps=new_comps\n path=sep.join(comps)\n if initial_slashes:\n path=sep *initial_slashes+path\n return path or dot\n \n \ndef abspath(path):\n ''\n if not isabs(path):\n if isinstance(path,bytes):\n cwd=os.getcwdb()\n else :\n cwd=os.getcwd()\n path=join(cwd,path)\n return normpath(path)\n \n \n \n \n \ndef realpath(filename):\n ''\n \n path,ok=_joinrealpath(filename[:0],filename,{})\n return abspath(path)\n \n \n \ndef _joinrealpath(path,rest,seen):\n if isinstance(path,bytes):\n sep=b'/'\n curdir=b'.'\n pardir=b'..'\n else :\n sep='/'\n curdir='.'\n pardir='..'\n \n if isabs(rest):\n rest=rest[1:]\n path=sep\n \n while rest:\n name,_,rest=rest.partition(sep)\n if not name or name ==curdir:\n \n continue\n if name ==pardir:\n \n if path:\n path,name=split(path)\n if name ==pardir:\n path=join(path,pardir,pardir)\n else :\n path=pardir\n continue\n newpath=join(path,name)\n if not islink(newpath):\n path=newpath\n continue\n \n if newpath in seen:\n \n path=seen[newpath]\n if path is not None :\n \n continue\n \n \n return join(newpath,rest),False\n seen[newpath]=None\n path,ok=_joinrealpath(path,os.readlink(newpath),seen)\n if not ok:\n return join(path,rest),False\n seen[newpath]=path\n \n return path,True\n \n \nsupports_unicode_filenames=(sys.platform =='darwin')\n\ndef relpath(path,start=None ):\n ''\n \n if not path:\n raise ValueError(\"no path specified\")\n \n if isinstance(path,bytes):\n curdir=b'.'\n sep=b'/'\n pardir=b'..'\n else :\n curdir='.'\n sep='/'\n pardir='..'\n \n if start is None :\n start=curdir\n \n start_list=[x for x in abspath(start).split(sep)if x]\n path_list=[x for x in abspath(path).split(sep)if x]\n \n \n i=len(commonprefix([start_list,path_list]))\n \n rel_list=[pardir]*(len(start_list)-i)+path_list[i:]\n if not rel_list:\n return curdir\n return join(*rel_list)\n",["genericpath","os","re","sys"]],pprint:[".py",'\n\n\n\n\n\n\n\n\n\n"""Support to pretty-print lists, tuples, & dictionaries recursively.\n\nVery simple, but useful, especially in debugging data structures.\n\nClasses\n-------\n\nPrettyPrinter()\n Handle pretty-printing operations onto a stream using a configured\n set of formatting parameters.\n\nFunctions\n---------\n\npformat()\n Format a Python object into a pretty-printed representation.\n\npprint()\n Pretty-print a Python object to a stream [default is sys.stdout].\n\nsaferepr()\n Generate a \'standard\' repr()-like value, but protect against recursive\n data structures.\n\n"""\n\nimport sys as _sys\nfrom collections import OrderedDict as _OrderedDict\nfrom io import StringIO as _StringIO\n\n__all__=["pprint","pformat","isreadable","isrecursive","saferepr",\n"PrettyPrinter"]\n\n\n_commajoin=", ".join\n_id=id\n_len=len\n_type=type\n\n\ndef pprint(object,stream=None ,indent=1,width=80,depth=None ):\n \'\'\n printer=PrettyPrinter(\n stream=stream,indent=indent,width=width,depth=depth)\n printer.pprint(object)\n \ndef pformat(object,indent=1,width=80,depth=None ):\n \'\'\n return PrettyPrinter(indent=indent,width=width,depth=depth).pformat(object)\n \ndef saferepr(object):\n \'\'\n return _safe_repr(object,{},None ,0)[0]\n \ndef isreadable(object):\n \'\'\n return _safe_repr(object,{},None ,0)[1]\n \ndef isrecursive(object):\n \'\'\n return _safe_repr(object,{},None ,0)[2]\n \nclass _safe_key:\n \'\'\n\n\n\n\n\n\n \n \n __slots__=[\'obj\']\n \n def __init__(self,obj):\n self.obj=obj\n \n def __lt__(self,other):\n try :\n rv=self.obj.__lt__(other.obj)\n except TypeError:\n rv=NotImplemented\n \n if rv is NotImplemented:\n rv=(str(type(self.obj)),id(self.obj))<\\\n (str(type(other.obj)),id(other.obj))\n return rv\n \ndef _safe_tuple(t):\n \'\'\n return _safe_key(t[0]),_safe_key(t[1])\n \nclass PrettyPrinter:\n def __init__(self,indent=1,width=80,depth=None ,stream=None ):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n indent=int(indent)\n width=int(width)\n assert indent >=0,"indent must be >= 0"\n assert depth is None or depth >0,"depth must be > 0"\n assert width,"width must be != 0"\n self._depth=depth\n self._indent_per_level=indent\n self._width=width\n if stream is not None :\n self._stream=stream\n else :\n self._stream=_sys.stdout\n \n def pprint(self,object):\n self._format(object,self._stream,0,0,{},0)\n self._stream.write("\\n")\n \n def pformat(self,object):\n sio=_StringIO()\n self._format(object,sio,0,0,{},0)\n return sio.getvalue()\n \n def isrecursive(self,object):\n return self.format(object,{},0,0)[2]\n \n def isreadable(self,object):\n s,readable,recursive=self.format(object,{},0,0)\n return readable and not recursive\n \n def _format(self,object,stream,indent,allowance,context,level):\n level=level+1\n import sys\n sys.stderr.write(str(object))\n objid=_id(object)\n if objid in context:\n stream.write(_recursion(object))\n self._recursive=True\n self._readable=False\n return\n rep=self._repr(object,context,level -1)\n typ=_type(object)\n sepLines=_len(rep)>(self._width -1 -indent -allowance)\n write=stream.write\n \n if self._depth and level >self._depth:\n write(rep)\n return\n \n if sepLines:\n r=getattr(typ,"__repr__",None )\n if issubclass(typ,dict):\n write(\'{\')\n if self._indent_per_level >1:\n write((self._indent_per_level -1)*\' \')\n length=_len(object)\n if length:\n context[objid]=1\n indent=indent+self._indent_per_level\n if issubclass(typ,_OrderedDict):\n items=list(object.items())\n else :\n items=sorted(object.items(),key=_safe_tuple)\n key,ent=items[0]\n rep=self._repr(key,context,level)\n write(rep)\n write(\': \')\n self._format(ent,stream,indent+_len(rep)+2,\n allowance+1,context,level)\n if length >1:\n for key,ent in items[1:]:\n rep=self._repr(key,context,level)\n write(\',\\n%s%s: \'%(\' \'*indent,rep))\n self._format(ent,stream,indent+_len(rep)+2,\n allowance+1,context,level)\n indent=indent -self._indent_per_level\n del context[objid]\n write(\'}\')\n return\n \n if ((issubclass(typ,list)and r is list.__repr__)or\n (issubclass(typ,tuple)and r is tuple.__repr__)or\n (issubclass(typ,set)and r is set.__repr__)or\n (issubclass(typ,frozenset)and r is frozenset.__repr__)\n ):\n length=_len(object)\n if issubclass(typ,list):\n write(\'[\')\n endchar=\']\'\n elif issubclass(typ,tuple):\n write(\'(\')\n endchar=\')\'\n else :\n if not length:\n write(rep)\n return\n if typ is set:\n write(\'{\')\n endchar=\'}\'\n else :\n write(typ.__name__)\n write(\'({\')\n endchar=\'})\'\n indent +=len(typ.__name__)+1\n object=sorted(object,key=_safe_key)\n if self._indent_per_level >1:\n write((self._indent_per_level -1)*\' \')\n if length:\n context[objid]=1\n indent=indent+self._indent_per_level\n self._format(object[0],stream,indent,allowance+1,\n context,level)\n if length >1:\n for ent in object[1:]:\n write(\',\\n\'+\' \'*indent)\n self._format(ent,stream,indent,\n allowance+1,context,level)\n indent=indent -self._indent_per_level\n del context[objid]\n if issubclass(typ,tuple)and length ==1:\n write(\',\')\n write(endchar)\n return\n \n write(rep)\n \n def _repr(self,object,context,level):\n repr,readable,recursive=self.format(object,context.copy(),\n self._depth,level)\n if not readable:\n self._readable=False\n if recursive:\n self._recursive=True\n return repr\n \n def format(self,object,context,maxlevels,level):\n \'\'\n\n\n \n return _safe_repr(object,context,maxlevels,level)\n \n \n \n \ndef _safe_repr(object,context,maxlevels,level):\n typ=_type(object)\n if typ is str:\n if \'locale\'not in _sys.modules:\n return repr(object),True ,False\n if "\'"in object and \'"\'not in object:\n closure=\'"\'\n quotes={\'"\':\'\\\\"\'}\n else :\n closure="\'"\n quotes={"\'":"\\\\\'"}\n qget=quotes.get\n sio=_StringIO()\n write=sio.write\n for char in object:\n if char.isalpha():\n write(char)\n else :\n write(qget(char,repr(char)[1:-1]))\n return ("%s%s%s"%(closure,sio.getvalue(),closure)),True ,False\n \n r=getattr(typ,"__repr__",None )\n if issubclass(typ,dict)and r is dict.__repr__:\n if not object:\n return "{}",True ,False\n objid=_id(object)\n if maxlevels and level >=maxlevels:\n return "{...}",False ,objid in context\n if objid in context:\n return _recursion(object),False ,True\n context[objid]=1\n readable=True\n recursive=False\n components=[]\n append=components.append\n level +=1\n saferepr=_safe_repr\n items=sorted(object.items(),key=_safe_tuple)\n for k,v in items:\n krepr,kreadable,krecur=saferepr(k,context,maxlevels,level)\n vrepr,vreadable,vrecur=saferepr(v,context,maxlevels,level)\n append("%s: %s"%(krepr,vrepr))\n readable=readable and kreadable and vreadable\n if krecur or vrecur:\n recursive=True\n del context[objid]\n return "{%s}"%_commajoin(components),readable,recursive\n \n if (issubclass(typ,list)and r is list.__repr__)or\\\n (issubclass(typ,tuple)and r is tuple.__repr__):\n if issubclass(typ,list):\n if not object:\n return "[]",True ,False\n format="[%s]"\n elif _len(object)==1:\n format="(%s,)"\n else :\n if not object:\n return "()",True ,False\n format="(%s)"\n objid=_id(object)\n if maxlevels and level >=maxlevels:\n return format %"...",False ,objid in context\n if objid in context:\n return _recursion(object),False ,True\n context[objid]=1\n readable=True\n recursive=False\n components=[]\n append=components.append\n level +=1\n for o in object:\n orepr,oreadable,orecur=_safe_repr(o,context,maxlevels,level)\n append(orepr)\n if not oreadable:\n readable=False\n if orecur:\n recursive=True\n del context[objid]\n return format %_commajoin(components),readable,recursive\n \n rep=repr(object)\n return rep,(rep and not rep.startswith(\'<\')),False\n \n \ndef _recursion(object):\n return (""\n %(_type(object).__name__,_id(object)))\n \n \ndef _perfcheck(object=None ):\n import time\n if object is None :\n object=[("string",(1,2),[3,4],{5:6,7:8})]*100000\n p=PrettyPrinter()\n t1=time.time()\n _safe_repr(object,{},None ,0)\n t2=time.time()\n p.pformat(object)\n t3=time.time()\n print("_safe_repr:",t2 -t1)\n print("pformat:",t3 -t2)\n \nif __name__ =="__main__":\n _perfcheck()\n',["collections","io","sys","time"]],profile:[".py","\n\n\n\n\n\n\n\"\"\"\n Module for profiling Python code run in the browser via Brython.\n\n The module tries to provide interface which is as similar to the official python\n profile module. The notable difference is that it does not allow user-defined\n timers and does not do any callibration. Methods which in the standard module\n save the data to a file save a JSON-serialized version of the data to the browser's\n local storage instead.\n\n Basic usage:\n\n from profile import Profile\n\n p = Profile()\n p.enable()\n do_something()\n do_something_else()\n p.create_stats()\n\n Which will print out something like:\n\n 1 run in 0.249 seconds\n\n Ordered by: standard name (averaged over 1 run)\n\n ncalls tottime percall cumtime var percall module.function:lineno\n 101/1 0.023 0.000 1.012 0.010 .fact:180\n\n where each line corresponds to a function and the different columns correspond to\n\n ncalls is the total number number of times the function was called\n (if the function was called non-recursively, the second number\n behind the backslash indicates how many calls were top-level calls\n in the recursion)\n\n tottime is the total time (in seconds) spent in the function not including subcalls\n\n percall is the average time spent in the function per call, not including subcalls\n\n cumtime is the total time spent in function including subcalls\n\n var percall is the average time spent in function per one non-recursive call\n\n standard name is the name of the function in the form module.function_name:line_number\n\n Optionally one can also use the following form, taking advantage of running the code\n several times and averaging it out:\n\n from profile import Profile\n\n p = Profile()\n p.call(function_to_profile,200,arg1,arg2,kwarg1=v1)\n\n which will print out something like:\n\n 200 runs in 0.249 seconds\n\n Ordered by: standard name (averaged over 1 run)\n\n ncalls tottime percall cumtime var percall module.function:lineno\n 101/1 0.023 0.000 1.012 0.010 function_to_profile:16\n\n Collected profile data can be saved to local storage for later use:\n\n p.dump_stats('run1')\n\n Profile data can also be read back:\n\n data = Stats('run1')\n\n And aggregated together\n\n data.add(p.dump_stats())\n print(data)\n\"\"\"\n\nimport _profile\nimport json\nfrom browser.local_storage import storage\n\n__all__=[\"run\",\"runctx\",\"status\",\"Stats\",\"Profile\"]\n\nclass Stats:\n @classmethod\n def current_stats(cls):\n return Stats(_profile.data,1)\n \n def __init__(self,data,nruns=None ):\n ''\n\n\n\n\n \n self._ordering=\"standard name\"\n self._reverse_order=False\n self._sk=None\n \n if isinstance(data,str):\n self.from_json(data)\n else :\n self._data=data\n self.nruns=nruns\n self.line_counts={k:data.line_counts[k]for k in dir(data.line_counts)}\n if hasattr(self._data,'profile_duration'):\n self.duration=self._data.profile_duration\n else :\n self.duration=_profile.elapsed()\n self.function_totals={k:data.call_times_proper[k]for k in dir(data.call_times_proper)}\n self.function_cumulated_totals={k:data.call_times[k]for k in dir(data.call_times)}\n self.function_counts={k:data.call_counts[k]for k in dir(data.call_counts)}\n self.function_counts_nonrec={k:data.call_counts_norec[k]for k in dir(data.call_counts)}\n self.callers={}\n for func in dir(data.callers):\n func_data=data.callers[func]\n fd={}\n for caller in dir(func_data):\n cumulated,total,count,count_norec=func_data[caller]\n fd[caller]={'cumulated':cumulated,'total':total,'count':count,'count_norec':count_norec}\n self.callers[func]=fd\n \n def __json__(self):\n return json.dumps({\n 'nruns':self.nruns,\n 'line_counts':self.line_counts,\n 'duration':self.duration,\n 'function_counts':self.function_counts,\n 'function_counts_nonrec':self.function_counts_nonrec,\n 'function_cumulated_totals':self.function_cumulated_totals,\n 'function_totals':self.function_totals,\n 'callers':self.callers\n })\n \n def from_json(self,json_data):\n self._data=None\n data=json.loads(json_data)\n self.nruns=data['nruns']\n self.line_counts=data['line_counts']\n self.duration=data['duration']\n self.function_counts=data['function_counts']\n self.function_counts_nonrec=data['function_counts_nonrec']\n self.function_cumulated_totals=data['function_cumulated_totals']\n self.function_totals=data['function_totals']\n self.callers=data['callers']\n \n \n def add(self,*stats):\n ''\n\n\n\n\n\n\n\n\n \n for s in stats:\n if isinstance(s,Stats):\n self._add_stat(s)\n else :\n if s in storage:\n st=Stats(storage[s])\n else :\n st=Stats(s)\n self._add_stat(st)\n \n def _add_stat(self,stat):\n for f in stat.function_totals.keys():\n if f not in self.function_counts.keys():\n self.function_totals[f]=0\n self.function_cumulated_totals[f]=0\n self.function_counts[f]=0\n self.function_counts_nonrec[f]=0\n self.function_totals[f]+=stat.function_totals[f]\n self.function_cumulated_totals[f]+=stat.function_cumulated_totals[f]\n self.function_counts[f]+=stat.function_counts[f]\n self.function_counts_nonrec[f]+=stat.function_counts_nonrec[f]\n for (f,callers)in stat.callers.items():\n if f not in self.callers:\n sc=self.callers[f]={}\n for (caller,values)in callers.items():\n if caller not in sc:\n sc[caller]={'cumulated':0,'total':0,'count':0,'count_norec':0}\n sc[caller]={k:sc[caller][k]+values[k]for k in ['cumulated','total','count','count_norec']}\n if self._sk is not None :\n self.sort()\n \n \n def called_by_data(self,standard_calee_name):\n ''\n\n\n\n\n\n\n\n\n \n call_data=self.callers[standard_calee_name]\n ret={}\n for key,data in call_data.items():\n if ':'in key:\n location,func_name,func_def_line=key.split(':')\n standard_caller_name=func_name+':'+func_def_line\n else :\n ln,mod=key.split(',')\n standard_caller_name=mod\n \n if not standard_caller_name in ret:\n ret[standard_caller_name]={'cumulated':0,'total':0,'count':0,'count_norec':0}\n for k,v in data.items():\n ret[standard_caller_name][k]+=v\n return ret\n \n def relative_data(self,standard_name,relative_to):\n ''\n\n\n\n\n\n \n \n baseline={\n 'total':self.function_totals[relative_to],\n 'cumulated':self.function_cumulated_totals[relative_to],\n 'counts':self.function_counts[relative_to],\n 'counts_nonrec':self.function_counts_nonrec[relative_to]\n }\n callers=self.called_by_data(standard_name)\n if relative_to in callers:\n ret={}\n data=callers[relative_to]\n for key,v in data.items():\n if baseline[key]==0:\n ret[key]=float('inf')\n else :\n ret[key]=data[key]/float(baseline[key])\n else :\n ret={'cumulated':0,'total':0,'count':0,'count_norec':0}\n return ret\n \n \n \n def sort(self,key='standard name'):\n ''\n\n\n\n\n\n\n\n\n\n\n \n self._ordering=key\n self._sk=self._sorted_keys()\n \n def _sorted_keys(self):\n if self._ordering =='standard name':\n return sorted(self.function_totals.keys())\n if self._ordering =='ncalls':\n keys=self.function_counts.items()\n elif self._ordering =='tottime':\n keys=self.function_totals.items()\n elif self._ordering =='percall':\n keys=[(k,self.function_totals[k]/self.function_counts[k])for k in self.function_counts.keys()]\n elif self._ordering =='cumtime':\n keys=self.function_cumulated_totals.items()\n elif self._ordering =='var percall':\n keys=[(k,self.function_cumulated_totals[k]/self.function_counts_nonrec[k])for k in self.function_counts_nonrec.keys()]\n return [k for k,v in sorted(keys,key=lambda x:x[1],reverse=not self._reverse_order)]\n \n def __str__(self):\n if self.nruns ==1:\n nruns=\" 1 run\"\n else :\n nruns=\" \"+str(self.nruns)+\" runs\"\n \n summary=\" \"*8+nruns+\" in \"+str(self.duration /1000)+\" seconds\"\n headers=[\" ncalls\",\" tottime\",\" percall\",\" cumtime\",\" var percall\",\" module.function:lineno\"]\n cols=[]\n if self._sk is None :\n self.sort()\n for func in self._sk:\n ncalls=\"{:.0f}\".format(self.function_counts[func]/self.nruns)\n if self.function_counts[func]>self.function_counts_nonrec[func]:\n ncalls +=\"/{:.0f}\".format(self.function_counts_nonrec[func]/self.nruns)\n tottime=self.function_totals[func]/self.nruns\n percall=(tottime /self.function_counts[func])/self.nruns\n cumtime=self.function_cumulated_totals[func]/self.nruns\n varpercall=(cumtime /self.function_counts_nonrec[func])/self.nruns\n cols.append((ncalls,\"{:.3f}\".format(tottime /1000),\"{:.3f}\".format(percall /1000),\"{:.3f}\".format(cumtime /1000),\"{:.3f}\".format(varpercall /1000),func))\n header=' '.join(headers)\n table=[summary,\"\",\"Ordered by: \"+self._ordering+\" (averaged over \"+nruns+\")\",\"\",header]\n for col in cols:\n ln=[]\n for pos in range(len(headers)):\n ln.append(col[pos].rjust(len(headers[pos])))\n table.append(' '.join(ln))\n return \"\\n\".join(table)\n \n def __repr__(self):\n return self.__str__()\n \nclass Profile:\n def __init__(self):\n self._profile=None\n \n def enable(self):\n ''\n\n \n _profile.start()\n \n def disable(self):\n ''\n\n \n _profile.pause()\n \n def clear(self):\n ''\n\n \n _profile.clear()\n \n def create_stats(self):\n ''\n\n\n \n _profile.stop()\n self._profile=Stats(_profile.data,1)\n return self._profile\n \n def status(self):\n return _profile.status()\n \n def print_stats(self,sort='standard name'):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if self._profile is None :\n print(\"No profile available. Need to collect profile data first using the enable() and disable() methods.\")\n else :\n self._profile.sort(sort)\n print(str(self._profile))\n \n def dump_stats(self,storage_key=None ):\n ''\n\n\n \n if storage_key is not None :\n storage[storage_key]=self._profile.__json__()\n else :\n return self._profile\n \n def run(self,cmd,nruns=200):\n ''\n\n\n\n \n self.runctx(cmd,globals(),locals(),ntimes=nruns)\n \n def runctx(self,cmd,globals,locals,nruns=200):\n ''\n\n\n\n \n _profile.stop()\n _profile.clear()\n _profile.start()\n for i in range(nruns):\n _profile.run(cmd,globals=globals,locals=locals)\n _profile.stop()\n self._profile=Stats(_profile.data,nruns)\n \n def runcall(self,func,ntimes,*args,**kwargs):\n ''\n\n\n\n \n _profile.stop()\n _profile.clear()\n _profile.start()\n for i in range(ntimes):\n ret=func(*args,**kwargs)\n _profile.stop()\n self._profile=Stats(_profile.data,ntimes)\n return self._profile\n \ndef run(cmd,nruns=200):\n ''\n\n\n\n\n \n return runctx(cmd,globals(),locals(),nruns=nruns)\n \ndef runctx(cmd,globals=None ,locals=None ,nruns=200):\n ''\n\n\n\n\n \n _locals=locals or {}\n _globals=globals or {}\n _profile.start()\n _profile.run(cmd,_globals,_locals,nruns)\n _profile.stop()\n return Stats(_profile.data,nruns)\n \nstatus=_profile.status\n",["_profile","browser.local_storage","json"]],pwd:[".py","\ndef getpwuid():\n pass\n",[]],pydoc:[".py","#!/usr/bin/env python3\n''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=['help']\n__author__=\"Ka-Ping Yee \"\n__date__=\"26 February 2001\"\n\n__credits__=\"\"\"Guido van Rossum, for an excellent programming language.\nTommy Burnette, the original creator of manpy.\nPaul Prescod, for all his work on onlinehelp.\nRichard Chamberlain, for the first implementation of textdoc.\n\"\"\"\n\n\n\n\n\n\n\n\n\nimport builtins\nimport imp\nimport importlib.machinery\n\nimport inspect\nimport io\nimport os\n\n\nimport platform\nimport re\nimport sys\nimport time\nimport tokenize\nimport warnings\nfrom collections import deque\nfrom reprlib import Repr\n\n\n\n\n\n\ndef pathdirs():\n ''\n dirs=[]\n normdirs=[]\n for dir in sys.path:\n dir=os.path.abspath(dir or '.')\n normdir=os.path.normcase(dir)\n if normdir not in normdirs and os.path.isdir(dir):\n dirs.append(dir)\n normdirs.append(normdir)\n return dirs\n \ndef getdoc(object):\n ''\n result=inspect.getdoc(object)or inspect.getcomments(object)\n return result and re.sub('^ *\\n','',result.rstrip())or ''\n \ndef splitdoc(doc):\n ''\n lines=doc.strip().split('\\n')\n if len(lines)==1:\n return lines[0],''\n elif len(lines)>=2 and not lines[1].rstrip():\n return lines[0],'\\n'.join(lines[2:])\n return '','\\n'.join(lines)\n \ndef classname(object,modname):\n ''\n name=object.__name__\n if object.__module__ !=modname:\n name=object.__module__+'.'+name\n return name\n \ndef isdata(object):\n ''\n return not (inspect.ismodule(object)or inspect.isclass(object)or\n inspect.isroutine(object)or inspect.isframe(object)or\n inspect.istraceback(object)or inspect.iscode(object))\n \ndef replace(text,*pairs):\n ''\n while pairs:\n text=pairs[1].join(text.split(pairs[0]))\n pairs=pairs[2:]\n return text\n \ndef cram(text,maxlen):\n ''\n if len(text)>maxlen:\n pre=max(0,(maxlen -3)//2)\n post=max(0,maxlen -3 -pre)\n return text[:pre]+'...'+text[len(text)-post:]\n return text\n \n_re_stripid=re.compile(r' at 0x[0-9a-f]{6,16}(>+)$',re.IGNORECASE)\ndef stripid(text):\n ''\n \n \n \n return text\n \ndef _is_some_method(obj):\n return (inspect.isfunction(obj)or\n inspect.ismethod(obj)or\n inspect.isbuiltin(obj)or\n inspect.ismethoddescriptor(obj))\n \ndef allmethods(cl):\n methods={}\n for key,value in inspect.getmembers(cl,_is_some_method):\n methods[key]=1\n for base in cl.__bases__:\n methods.update(allmethods(base))\n for key in methods.keys():\n methods[key]=getattr(cl,key)\n return methods\n \ndef _split_list(s,predicate):\n ''\n\n\n\n\n \n \n yes=[]\n no=[]\n for x in s:\n if predicate(x):\n yes.append(x)\n else :\n no.append(x)\n return yes,no\n \ndef visiblename(name,all=None ,obj=None ):\n ''\n \n if name in {'__author__','__builtins__','__cached__','__credits__',\n '__date__','__doc__','__file__','__initializing__',\n '__loader__','__module__','__name__','__package__',\n '__path__','__qualname__','__slots__','__version__'}:\n return 0\n \n if name.startswith('__')and name.endswith('__'):return 1\n \n if name.startswith('_')and hasattr(obj,'_fields'):\n return True\n if all is not None :\n \n return name in all\n else :\n return not name.startswith('_')\n \ndef classify_class_attrs(object):\n ''\n results=[]\n for (name,kind,cls,value)in inspect.classify_class_attrs(object):\n if inspect.isdatadescriptor(value):\n kind='data descriptor'\n results.append((name,kind,cls,value))\n return results\n \n \n \ndef ispackage(path):\n ''\n if os.path.isdir(path):\n for ext in ('.py','.pyc','.pyo'):\n if os.path.isfile(os.path.join(path,'__init__'+ext)):\n return True\n return False\n \ndef source_synopsis(file):\n line=file.readline()\n while line[:1]=='#'or not line.strip():\n line=file.readline()\n if not line:break\n line=line.strip()\n if line[:4]=='r\"\"\"':line=line[1:]\n if line[:3]=='\"\"\"':\n line=line[3:]\n if line[-1:]=='\\\\':line=line[:-1]\n while not line.strip():\n line=file.readline()\n if not line:break\n result=line.split('\"\"\"')[0].strip()\n else :result=None\n return result\n \ndef synopsis(filename,cache={}):\n ''\n mtime=os.stat(filename).st_mtime\n lastupdate,result=cache.get(filename,(None ,None ))\n if lastupdate is None or lastupdate ','>')\n \n def repr(self,object):\n return Repr.repr(self,object)\n \n def repr1(self,x,level):\n if hasattr(type(x),'__name__'):\n methodname='repr_'+'_'.join(type(x).__name__.split())\n if hasattr(self,methodname):\n return getattr(self,methodname)(x,level)\n return self.escape(cram(stripid(repr(x)),self.maxother))\n \n def repr_string(self,x,level):\n test=cram(x,self.maxstring)\n testrepr=repr(test)\n if '\\\\'in test and '\\\\'not in replace(testrepr,r'\\\\',''):\n \n \n return 'r'+testrepr[0]+self.escape(test)+testrepr[0]\n return re.sub(r'((\\\\[\\\\abfnrtv\\'\"]|\\\\[0-9]..|\\\\x..|\\\\u....)+)',\n r'\\1',\n self.escape(testrepr))\n \n repr_str=repr_string\n \n def repr_instance(self,x,level):\n try :\n return self.escape(cram(stripid(repr(x)),self.maxstring))\n except :\n return self.escape('<%s instance>'%x.__class__.__name__)\n \n repr_unicode=repr_string\n \nclass HTMLDoc(Doc):\n ''\n \n \n \n _repr_instance=HTMLRepr()\n repr=_repr_instance.repr\n escape=_repr_instance.escape\n \n def page(self,title,contents):\n ''\n return '''\\\n\nPython: %s\n\n\n%s\n'''%(title,contents)\n \n def heading(self,title,fgcol,bgcol,extras=''):\n ''\n return '''\n\n\n
 
\n 
%s
%s
\n '''%(bgcol,fgcol,title,fgcol,extras or ' ')\n \n def section(self,title,fgcol,bgcol,contents,width=6,\n prelude='',marginalia=None ,gap=' '):\n ''\n if marginalia is None :\n marginalia=''+' '*width+''\n result='''

\n\n\n\n '''%(bgcol,fgcol,title)\n if prelude:\n result=result+'''\n\n\n'''%(bgcol,marginalia,prelude,gap)\n else :\n result=result+'''\n'''%(bgcol,marginalia,gap)\n \n return result+'\\n
 
\n%s
%s%s
%s
%s%s%s
'%contents\n \n def bigsection(self,title,*args):\n ''\n title='%s'%title\n return self.section(title,*args)\n \n def preformat(self,text):\n ''\n text=self.escape(text.expandtabs())\n return replace(text,'\\n\\n','\\n \\n','\\n\\n','\\n \\n',\n ' ',' ','\\n','
\\n')\n \n def multicolumn(self,list,format,cols=4):\n ''\n result=''\n rows=(len(list)+cols -1)//cols\n for col in range(cols):\n result=result+''%(100 //cols)\n for i in range(rows *col,rows *col+rows):\n if i \\n'\n result=result+''\n return '%s
'%result\n \n def grey(self,text):return '%s'%text\n \n def namelink(self,name,*dicts):\n ''\n for dict in dicts:\n if name in dict:\n return '
%s'%(dict[name],name)\n return name\n \n def classlink(self,object,modname):\n ''\n name,module=object.__name__,sys.modules.get(object.__module__)\n if hasattr(module,name)and getattr(module,name)is object:\n return '%s'%(\n module.__name__,name,classname(object,modname))\n return classname(object,modname)\n \n def modulelink(self,object):\n ''\n return '%s'%(object.__name__,object.__name__)\n \n def modpkglink(self,modpkginfo):\n ''\n name,path,ispackage,shadowed=modpkginfo\n if shadowed:\n return self.grey(name)\n if path:\n url='%s.%s.html'%(path,name)\n else :\n url='%s.html'%name\n if ispackage:\n text='%s (package)'%name\n else :\n text=name\n return '%s'%(url,text)\n \n def filelink(self,url,path):\n ''\n return '%s'%(url,path)\n \n def markup(self,text,escape=None ,funcs={},classes={},methods={}):\n ''\n \n escape=escape or self.escape\n results=[]\n here=0\n pattern=re.compile(r'\\b((http|ftp)://\\S+[\\w/]|'\n r'RFC[- ]?(\\d+)|'\n r'PEP[- ]?(\\d+)|'\n r'(self\\.)?(\\w+))')\n while True :\n match=pattern.search(text,here)\n if not match:break\n start,end=match.span()\n results.append(escape(text[here:start]))\n \n all,scheme,rfc,pep,selfdot,name=match.groups()\n if scheme:\n url=escape(all).replace('\"','"')\n results.append('%s'%(url,url))\n elif rfc:\n url='http://www.rfc-editor.org/rfc/rfc%d.txt'%int(rfc)\n results.append('%s'%(url,escape(all)))\n elif pep:\n url='http://www.python.org/dev/peps/pep-%04d/'%int(pep)\n results.append('%s'%(url,escape(all)))\n elif text[end:end+1]=='(':\n results.append(self.namelink(name,methods,funcs,classes))\n elif selfdot:\n results.append('self.%s'%name)\n else :\n results.append(self.namelink(name,classes))\n here=end\n results.append(escape(text[here:]))\n return ''.join(results)\n \n \n \n def formattree(self,tree,modname,parent=None ):\n ''\n result=''\n for entry in tree:\n if type(entry)is type(()):\n c,bases=entry\n result=result+'

'\n result=result+self.classlink(c,modname)\n if bases and bases !=(parent,):\n parents=[]\n for base in bases:\n parents.append(self.classlink(base,modname))\n result=result+'('+', '.join(parents)+')'\n result=result+'\\n
'\n elif type(entry)is type([]):\n result=result+'
\\n%s
\\n'%self.formattree(\n entry,modname,c)\n return '
\\n%s
\\n'%result\n \n def docmodule(self,object,name=None ,mod=None ,*ignored):\n ''\n name=object.__name__\n try :\n all=object.__all__\n except AttributeError:\n all=None\n parts=name.split('.')\n links=[]\n for i in range(len(parts)-1):\n links.append(\n '%s'%\n ('.'.join(parts[:i+1]),parts[i]))\n linkedname='.'.join(links+parts[-1:])\n head='%s'%linkedname\n try :\n path=inspect.getabsfile(object)\n url=path\n if sys.platform =='win32':\n import nturl2path\n url=nturl2path.pathname2url(path)\n filelink=self.filelink(url,path)\n except TypeError:\n filelink='(built-in)'\n info=[]\n if hasattr(object,'__version__'):\n version=str(object.__version__)\n if version[:11]=='$'+'Revision: 'and version[-1:]=='$':\n version=version[11:-1].strip()\n info.append('version %s'%self.escape(version))\n if hasattr(object,'__date__'):\n info.append(self.escape(str(object.__date__)))\n if info:\n head=head+' (%s)'%', '.join(info)\n docloc=self.getdocloc(object)\n if docloc is not None :\n docloc='
Module Reference'%locals()\n else :\n docloc=''\n result=self.heading(\n head,'#ffffff','#7799ee',\n 'index
'+filelink+docloc)\n \n modules=inspect.getmembers(object,inspect.ismodule)\n \n classes,cdict=[],{}\n for key,value in inspect.getmembers(object,inspect.isclass):\n \n if (all is not None or\n (inspect.getmodule(value)or object)is object):\n if visiblename(key,all,object):\n classes.append((key,value))\n cdict[key]=cdict[value]='#'+key\n for key,value in classes:\n for base in value.__bases__:\n key,modname=base.__name__,base.__module__\n module=sys.modules.get(modname)\n if modname !=name and module and hasattr(module,key):\n if getattr(module,key)is base:\n if not key in cdict:\n cdict[key]=cdict[base]=modname+'.html#'+key\n funcs,fdict=[],{}\n for key,value in inspect.getmembers(object,inspect.isroutine):\n \n if (all is not None or\n inspect.isbuiltin(value)or inspect.getmodule(value)is object):\n if visiblename(key,all,object):\n funcs.append((key,value))\n fdict[key]='#-'+key\n if inspect.isfunction(value):fdict[value]=fdict[key]\n data=[]\n for key,value in inspect.getmembers(object,isdata):\n if visiblename(key,all,object):\n data.append((key,value))\n \n doc=self.markup(getdoc(object),self.preformat,fdict,cdict)\n doc=doc and '%s'%doc\n result=result+'

%s

\\n'%doc\n \n if hasattr(object,'__path__'):\n modpkgs=[]\n for importer,modname,ispkg in pkgutil.iter_modules(object.__path__):\n modpkgs.append((modname,name,ispkg,0))\n modpkgs.sort()\n contents=self.multicolumn(modpkgs,self.modpkglink)\n result=result+self.bigsection(\n 'Package Contents','#ffffff','#aa55cc',contents)\n elif modules:\n contents=self.multicolumn(\n modules,lambda t:self.modulelink(t[1]))\n result=result+self.bigsection(\n 'Modules','#ffffff','#aa55cc',contents)\n \n if classes:\n classlist=[value for (key,value)in classes]\n contents=[\n self.formattree(inspect.getclasstree(classlist,1),name)]\n for key,value in classes:\n contents.append(self.document(value,key,name,fdict,cdict))\n result=result+self.bigsection(\n 'Classes','#ffffff','#ee77aa',' '.join(contents))\n if funcs:\n contents=[]\n for key,value in funcs:\n contents.append(self.document(value,key,name,fdict,cdict))\n result=result+self.bigsection(\n 'Functions','#ffffff','#eeaa77',' '.join(contents))\n if data:\n contents=[]\n for key,value in data:\n contents.append(self.document(value,key))\n result=result+self.bigsection(\n 'Data','#ffffff','#55aa55','
\\n'.join(contents))\n if hasattr(object,'__author__'):\n contents=self.markup(str(object.__author__),self.preformat)\n result=result+self.bigsection(\n 'Author','#ffffff','#7799ee',contents)\n if hasattr(object,'__credits__'):\n contents=self.markup(str(object.__credits__),self.preformat)\n result=result+self.bigsection(\n 'Credits','#ffffff','#7799ee',contents)\n \n return result\n \n def docclass(self,object,name=None ,mod=None ,funcs={},classes={},\n *ignored):\n ''\n print('docclass')\n realname=object.__name__\n name=name or realname\n bases=object.__bases__\n \n contents=[]\n push=contents.append\n \n \n class HorizontalRule:\n def __init__(self):\n self.needone=0\n def maybe(self):\n if self.needone:\n push('
\\n')\n self.needone=1\n hr=HorizontalRule()\n \n \n mro=deque(inspect.getmro(object))\n if len(mro)>2:\n hr.maybe()\n push('
Method resolution order:
\\n')\n for base in mro:\n push('
%s
\\n'%self.classlink(base,\n object.__module__))\n push('
\\n')\n \n def spill(msg,attrs,predicate):\n ok,attrs=_split_list(attrs,predicate)\n if ok:\n hr.maybe()\n push(msg)\n for name,kind,homecls,value in ok:\n try :\n value=getattr(object,name)\n except Exception:\n \n \n push(self._docdescriptor(name,value,mod))\n else :\n push(self.document(value,name,mod,\n funcs,classes,mdict,object))\n push('\\n')\n return attrs\n \n def spilldescriptors(msg,attrs,predicate):\n ok,attrs=_split_list(attrs,predicate)\n if ok:\n hr.maybe()\n push(msg)\n for name,kind,homecls,value in ok:\n push(self._docdescriptor(name,value,mod))\n return attrs\n \n def spilldata(msg,attrs,predicate):\n ok,attrs=_split_list(attrs,predicate)\n if ok:\n hr.maybe()\n push(msg)\n for name,kind,homecls,value in ok:\n base=self.docother(getattr(object,name),name,mod)\n if callable(value)or inspect.isdatadescriptor(value):\n doc=getattr(value,\"__doc__\",None )\n else :\n doc=None\n if doc is None :\n push('
%s
\\n'%base)\n else :\n doc=self.markup(getdoc(value),self.preformat,\n funcs,classes,mdict)\n doc='
%s'%doc\n push('
%s%s
\\n'%(base,doc))\n push('\\n')\n return attrs\n \n attrs=[(name,kind,cls,value)\n for name,kind,cls,value in classify_class_attrs(object)\n if visiblename(name,obj=object)]\n \n mdict={}\n for key,kind,homecls,value in attrs:\n mdict[key]=anchor='#'+name+'-'+key\n try :\n value=getattr(object,name)\n except Exception:\n \n \n pass\n try :\n \n \n mdict[value]=anchor\n except TypeError:\n pass\n \n while attrs:\n if mro:\n thisclass=mro.popleft()\n else :\n thisclass=attrs[0][2]\n attrs,inherited=_split_list(attrs,lambda t:t[2]is thisclass)\n \n if thisclass is builtins.object:\n attrs=inherited\n continue\n elif thisclass is object:\n tag='defined here'\n else :\n tag='inherited from %s'%self.classlink(thisclass,\n object.__module__)\n tag +=':
\\n'\n \n \n attrs.sort(key=lambda t:t[0])\n \n \n attrs=spill('Methods %s'%tag,attrs,\n lambda t:t[1]=='method')\n attrs=spill('Class methods %s'%tag,attrs,\n lambda t:t[1]=='class method')\n attrs=spill('Static methods %s'%tag,attrs,\n lambda t:t[1]=='static method')\n attrs=spilldescriptors('Data descriptors %s'%tag,attrs,\n lambda t:t[1]=='data descriptor')\n attrs=spilldata('Data and other attributes %s'%tag,attrs,\n lambda t:t[1]=='data')\n assert attrs ==[]\n attrs=inherited\n \n contents=''.join(contents)\n \n if name ==realname:\n title='class %s'%(\n name,realname)\n else :\n title='%s = class %s'%(\n name,name,realname)\n if bases:\n parents=[]\n for base in bases:\n parents.append(self.classlink(base,object.__module__))\n title=title+'(%s)'%', '.join(parents)\n doc=self.markup(getdoc(object),self.preformat,funcs,classes,mdict)\n doc=doc and '%s
 
'%doc\n \n return self.section(title,'#000000','#ffc8d8',contents,3,doc)\n \n def formatvalue(self,object):\n ''\n return self.grey('='+self.repr(object))\n \n def docroutine(self,object,name=None ,mod=None ,\n funcs={},classes={},methods={},cl=None ):\n ''\n realname=object.__name__\n name=name or realname\n anchor=(cl and cl.__name__ or '')+'-'+name\n note=''\n skipdocs=0\n if inspect.ismethod(object):\n imclass=object.__self__.__class__\n if cl:\n if imclass is not cl:\n note=' from '+self.classlink(imclass,mod)\n else :\n if object.__self__ is not None :\n note=' method of %s instance'%self.classlink(\n object.__self__.__class__,mod)\n else :\n note=' unbound %s method'%self.classlink(imclass,mod)\n object=object.__func__\n \n if name ==realname:\n title='%s'%(anchor,realname)\n else :\n if (cl and realname in cl.__dict__ and\n cl.__dict__[realname]is object):\n reallink='%s'%(\n cl.__name__+'-'+realname,realname)\n skipdocs=1\n else :\n reallink=realname\n title='%s = %s'%(\n anchor,name,reallink)\n if inspect.isfunction(object):\n args,varargs,kwonlyargs,kwdefaults,varkw,defaults,ann=\\\n inspect.getfullargspec(object)\n argspec=inspect.formatargspec(\n args,varargs,kwonlyargs,kwdefaults,varkw,defaults,ann,\n formatvalue=self.formatvalue,\n formatannotation=inspect.formatannotationrelativeto(object))\n if realname =='':\n title='%s lambda '%name\n \n \n \n argspec=argspec[1:-1]\n else :\n argspec='(...)'\n \n decl=title+argspec+(note and self.grey(\n '%s'%note))\n \n if skipdocs:\n return '
%s
\\n'%decl\n else :\n doc=self.markup(\n getdoc(object),self.preformat,funcs,classes,methods)\n doc=doc and '
%s
'%doc\n return '
%s
%s
\\n'%(decl,doc)\n \n def _docdescriptor(self,name,value,mod):\n results=[]\n push=results.append\n \n if name:\n push('
%s
\\n'%name)\n if value.__doc__ is not None :\n doc=self.markup(getdoc(value),self.preformat)\n push('
%s
\\n'%doc)\n push('
\\n')\n \n return ''.join(results)\n \n def docproperty(self,object,name=None ,mod=None ,cl=None ):\n ''\n return self._docdescriptor(name,object,mod)\n \n def docother(self,object,name=None ,mod=None ,*ignored):\n ''\n lhs=name and '%s = '%name or ''\n return lhs+self.repr(object)\n \n def docdata(self,object,name=None ,mod=None ,cl=None ):\n ''\n return self._docdescriptor(name,object,mod)\n \n def index(self,dir,shadowed=None ):\n ''\n modpkgs=[]\n if shadowed is None :shadowed={}\n for importer,name,ispkg in pkgutil.iter_modules([dir]):\n if any((0xD800 <=ord(ch)<=0xDFFF)for ch in name):\n \n continue\n modpkgs.append((name,'',ispkg,name in shadowed))\n shadowed[name]=1\n \n modpkgs.sort()\n contents=self.multicolumn(modpkgs,self.modpkglink)\n return self.bigsection(dir,'#ffffff','#ee77aa',contents)\n \n \n \nclass TextRepr(Repr):\n ''\n def __init__(self):\n Repr.__init__(self)\n self.maxlist=self.maxtuple=20\n self.maxdict=10\n self.maxstring=self.maxother=100\n \n \n \n \n \n \n \n \n def repr_string(self,x,level):\n test=cram(x,self.maxstring)\n testrepr=repr(test)\n if '\\\\'in test and '\\\\'not in replace(testrepr,r'\\\\',''):\n \n \n return 'r'+testrepr[0]+test+testrepr[0]\n return testrepr\n \n repr_str=repr_string\n \n def repr_instance(self,x,level):\n try :\n return cram(stripid(repr(x)),self.maxstring)\n except :\n return '<%s instance>'%x.__class__.__name__\n \nclass TextDoc(Doc):\n ''\n \n \n \n _repr_instance=TextRepr()\n repr=_repr_instance.repr\n \n def bold(self,text):\n ''\n return ''.join(ch+'\\b'+ch for ch in text)\n \n def indent(self,text,prefix=' '):\n ''\n if not text:return ''\n lines=[prefix+line for line in text.split('\\n')]\n if lines:lines[-1]=lines[-1].rstrip()\n return '\\n'.join(lines)\n \n def section(self,title,contents):\n ''\n clean_contents=self.indent(contents).rstrip()\n return self.bold(title)+'\\n'+clean_contents+'\\n\\n'\n \n \n \n def formattree(self,tree,modname,parent=None ,prefix=''):\n ''\n result=''\n for entry in tree:\n if type(entry)is type(()):\n c,bases=entry\n result=result+prefix+classname(c,modname)\n if bases and bases !=(parent,):\n parents=(classname(c,modname)for c in bases)\n result=result+'(%s)'%', '.join(parents)\n result=result+'\\n'\n elif type(entry)is type([]):\n result=result+self.formattree(\n entry,modname,c,prefix+' ')\n return result\n \n def docmodule(self,object,name=None ,mod=None ):\n ''\n name=object.__name__\n synop,desc=splitdoc(getdoc(object))\n result=self.section('NAME',name+(synop and ' - '+synop))\n all=getattr(object,'__all__',None )\n docloc=self.getdocloc(object)\n if docloc is not None :\n result=result+self.section('MODULE REFERENCE',docloc+\"\"\"\n\nThe following documentation is automatically generated from the Python\nsource files. It may be incomplete, incorrect or include features that\nare considered implementation detail and may vary between Python\nimplementations. When in doubt, consult the module reference at the\nlocation listed above.\n\"\"\")\n \n if desc:\n result=result+self.section('DESCRIPTION',desc)\n \n classes=[]\n for key,value in inspect.getmembers(object,inspect.isclass):\n \n if (all is not None\n or (inspect.getmodule(value)or object)is object):\n if visiblename(key,all,object):\n classes.append((key,value))\n funcs=[]\n for key,value in inspect.getmembers(object,inspect.isroutine):\n \n if (all is not None or\n inspect.isbuiltin(value)or inspect.getmodule(value)is object):\n if visiblename(key,all,object):\n funcs.append((key,value))\n data=[]\n for key,value in inspect.getmembers(object,isdata):\n if visiblename(key,all,object):\n data.append((key,value))\n \n modpkgs=[]\n modpkgs_names=set()\n if hasattr(object,'__path__'):\n for importer,modname,ispkg in pkgutil.iter_modules(object.__path__):\n modpkgs_names.add(modname)\n if ispkg:\n modpkgs.append(modname+' (package)')\n else :\n modpkgs.append(modname)\n \n modpkgs.sort()\n result=result+self.section(\n 'PACKAGE CONTENTS','\\n'.join(modpkgs))\n \n \n submodules=[]\n for key,value in inspect.getmembers(object,inspect.ismodule):\n if value.__name__.startswith(name+'.')and key not in modpkgs_names:\n submodules.append(key)\n if submodules:\n submodules.sort()\n result=result+self.section(\n 'SUBMODULES','\\n'.join(submodules))\n \n if classes:\n classlist=[value for key,value in classes]\n contents=[self.formattree(\n inspect.getclasstree(classlist,1),name)]\n for key,value in classes:\n contents.append(self.document(value,key,name))\n result=result+self.section('CLASSES','\\n'.join(contents))\n \n if funcs:\n contents=[]\n for key,value in funcs:\n contents.append(self.document(value,key,name))\n result=result+self.section('FUNCTIONS','\\n'.join(contents))\n \n if data:\n contents=[]\n for key,value in data:\n contents.append(self.docother(value,key,name,maxlen=70))\n result=result+self.section('DATA','\\n'.join(contents))\n \n if hasattr(object,'__version__'):\n version=str(object.__version__)\n if version[:11]=='$'+'Revision: 'and version[-1:]=='$':\n version=version[11:-1].strip()\n result=result+self.section('VERSION',version)\n if hasattr(object,'__date__'):\n result=result+self.section('DATE',str(object.__date__))\n if hasattr(object,'__author__'):\n result=result+self.section('AUTHOR',str(object.__author__))\n if hasattr(object,'__credits__'):\n result=result+self.section('CREDITS',str(object.__credits__))\n try :\n file=inspect.getabsfile(object)\n except TypeError:\n file='(built-in)'\n result=result+self.section('FILE',file)\n return result\n \n def docclass(self,object,name=None ,mod=None ,*ignored):\n ''\n realname=object.__name__\n name=name or realname\n bases=object.__bases__\n \n def makename(c,m=object.__module__):\n return classname(c,m)\n \n if name ==realname:\n title='class '+self.bold(realname)\n else :\n title=self.bold(name)+' = class '+realname\n if bases:\n parents=map(makename,bases)\n title=title+'(%s)'%', '.join(parents)\n \n doc=getdoc(object)\n contents=doc and [doc+'\\n']or []\n push=contents.append\n \n \n mro=deque(inspect.getmro(object))\n if len(mro)>2:\n push(\"Method resolution order:\")\n for base in mro:\n push(' '+makename(base))\n push('')\n \n \n class HorizontalRule:\n def __init__(self):\n self.needone=0\n def maybe(self):\n if self.needone:\n push('-'*70)\n self.needone=1\n hr=HorizontalRule()\n \n def spill(msg,attrs,predicate):\n ok,attrs=_split_list(attrs,predicate)\n if ok:\n hr.maybe()\n push(msg)\n for name,kind,homecls,value in ok:\n try :\n value=getattr(object,name)\n except Exception:\n \n \n push(self._docdescriptor(name,value,mod))\n else :\n push(self.document(value,\n name,mod,object))\n return attrs\n \n def spilldescriptors(msg,attrs,predicate):\n ok,attrs=_split_list(attrs,predicate)\n if ok:\n hr.maybe()\n push(msg)\n for name,kind,homecls,value in ok:\n push(self._docdescriptor(name,value,mod))\n return attrs\n \n def spilldata(msg,attrs,predicate):\n ok,attrs=_split_list(attrs,predicate)\n if ok:\n hr.maybe()\n push(msg)\n for name,kind,homecls,value in ok:\n if callable(value)or inspect.isdatadescriptor(value):\n doc=getdoc(value)\n else :\n doc=None\n push(self.docother(getattr(object,name),\n name,mod,maxlen=70,doc=doc)+'\\n')\n return attrs\n \n attrs=[(name,kind,cls,value)\n for name,kind,cls,value in classify_class_attrs(object)\n if visiblename(name,obj=object)]\n \n while attrs:\n if mro:\n thisclass=mro.popleft()\n else :\n thisclass=attrs[0][2]\n attrs,inherited=_split_list(attrs,lambda t:t[2]is thisclass)\n \n if thisclass is builtins.object:\n attrs=inherited\n continue\n elif thisclass is object:\n tag=\"defined here\"\n else :\n tag=\"inherited from %s\"%classname(thisclass,\n object.__module__)\n \n \n attrs.sort()\n \n \n attrs=spill(\"Methods %s:\\n\"%tag,attrs,\n lambda t:t[1]=='method')\n attrs=spill(\"Class methods %s:\\n\"%tag,attrs,\n lambda t:t[1]=='class method')\n attrs=spill(\"Static methods %s:\\n\"%tag,attrs,\n lambda t:t[1]=='static method')\n attrs=spilldescriptors(\"Data descriptors %s:\\n\"%tag,attrs,\n lambda t:t[1]=='data descriptor')\n attrs=spilldata(\"Data and other attributes %s:\\n\"%tag,attrs,\n lambda t:t[1]=='data')\n assert attrs ==[]\n attrs=inherited\n \n contents='\\n'.join(contents)\n if not contents:\n return title+'\\n'\n return title+'\\n'+self.indent(contents.rstrip(),' | ')+'\\n'\n \n def formatvalue(self,object):\n ''\n return '='+self.repr(object)\n \n def docroutine(self,object,name=None ,mod=None ,cl=None ):\n ''\n realname=object.__name__\n name=name or realname\n note=''\n skipdocs=0\n if inspect.ismethod(object):\n imclass=object.__self__.__class__\n if cl:\n if imclass is not cl:\n note=' from '+classname(imclass,mod)\n else :\n if object.__self__ is not None :\n note=' method of %s instance'%classname(\n object.__self__.__class__,mod)\n else :\n note=' unbound %s method'%classname(imclass,mod)\n object=object.__func__\n \n if name ==realname:\n title=self.bold(realname)\n else :\n if (cl and realname in cl.__dict__ and\n cl.__dict__[realname]is object):\n skipdocs=1\n title=self.bold(name)+' = '+realname\n if inspect.isfunction(object):\n args,varargs,varkw,defaults,kwonlyargs,kwdefaults,ann=\\\n inspect.getfullargspec(object)\n argspec=inspect.formatargspec(\n args,varargs,varkw,defaults,kwonlyargs,kwdefaults,ann,\n formatvalue=self.formatvalue,\n formatannotation=inspect.formatannotationrelativeto(object))\n if realname =='':\n title=self.bold(name)+' lambda '\n \n \n \n argspec=argspec[1:-1]\n else :\n argspec='(...)'\n decl=title+argspec+note\n \n if skipdocs:\n return decl+'\\n'\n else :\n doc=getdoc(object)or ''\n return decl+'\\n'+(doc and self.indent(doc).rstrip()+'\\n')\n \n def _docdescriptor(self,name,value,mod):\n results=[]\n push=results.append\n \n if name:\n push(self.bold(name))\n push('\\n')\n doc=getdoc(value)or ''\n if doc:\n push(self.indent(doc))\n push('\\n')\n return ''.join(results)\n \n def docproperty(self,object,name=None ,mod=None ,cl=None ):\n ''\n return self._docdescriptor(name,object,mod)\n \n def docdata(self,object,name=None ,mod=None ,cl=None ):\n ''\n return self._docdescriptor(name,object,mod)\n \n def docother(self,object,name=None ,mod=None ,parent=None ,maxlen=None ,doc=None ):\n ''\n repr=self.repr(object)\n if maxlen:\n line=(name and name+' = 'or '')+repr\n chop=maxlen -len(line)\n if chop <0:repr=repr[:chop]+'...'\n line=(name and self.bold(name)+' = 'or '')+repr\n if doc is not None :\n line +='\\n'+self.indent(str(doc))\n return line\n \nclass _PlainTextDoc(TextDoc):\n ''\n def bold(self,text):\n return text\n \n \n \ndef pager(text):\n ''\n global pager\n pager=getpager()\n pager(text)\n \ndef getpager():\n ''\n if not hasattr(sys.stdout,\"isatty\"):\n return plainpager\n if not sys.stdin.isatty()or not sys.stdout.isatty():\n return plainpager\n if 'PAGER'in os.environ:\n if sys.platform =='win32':\n return lambda text:tempfilepager(plain(text),os.environ['PAGER'])\n elif os.environ.get('TERM')in ('dumb','emacs'):\n return lambda text:pipepager(plain(text),os.environ['PAGER'])\n else :\n return lambda text:pipepager(text,os.environ['PAGER'])\n if os.environ.get('TERM')in ('dumb','emacs'):\n return plainpager\n if sys.platform =='win32'or sys.platform.startswith('os2'):\n return lambda text:tempfilepager(plain(text),'more <')\n if hasattr(os,'system')and os.system('(less) 2>/dev/null')==0:\n return lambda text:pipepager(text,'less')\n \n import tempfile\n (fd,filename)=tempfile.mkstemp()\n os.close(fd)\n try :\n if hasattr(os,'system')and os.system('more \"%s\"'%filename)==0:\n return lambda text:pipepager(text,'more')\n else :\n return ttypager\n finally :\n os.unlink(filename)\n \ndef plain(text):\n ''\n return re.sub('.\\b','',text)\n \ndef pipepager(text,cmd):\n ''\n pipe=os.popen(cmd,'w')\n try :\n pipe.write(text)\n pipe.close()\n except IOError:\n pass\n \ndef tempfilepager(text,cmd):\n ''\n import tempfile\n filename=tempfile.mktemp()\n file=open(filename,'w')\n file.write(text)\n file.close()\n try :\n os.system(cmd+' \"'+filename+'\"')\n finally :\n os.unlink(filename)\n \ndef ttypager(text):\n ''\n lines=plain(text).split('\\n')\n try :\n import tty\n fd=sys.stdin.fileno()\n old=tty.tcgetattr(fd)\n tty.setcbreak(fd)\n getchar=lambda :sys.stdin.read(1)\n except (ImportError,AttributeError):\n tty=None\n getchar=lambda :sys.stdin.readline()[:-1][:1]\n \n try :\n r=inc=os.environ.get('LINES',25)-1\n sys.stdout.write('\\n'.join(lines[:inc])+'\\n')\n while lines[r:]:\n sys.stdout.write('-- more --')\n sys.stdout.flush()\n c=getchar()\n \n if c in ('q','Q'):\n sys.stdout.write('\\r \\r')\n break\n elif c in ('\\r','\\n'):\n sys.stdout.write('\\r \\r'+lines[r]+'\\n')\n r=r+1\n continue\n if c in ('b','B','\\x1b'):\n r=r -inc -inc\n if r <0:r=0\n sys.stdout.write('\\n'+'\\n'.join(lines[r:r+inc])+'\\n')\n r=r+inc\n \n finally :\n if tty:\n tty.tcsetattr(fd,tty.TCSAFLUSH,old)\n \ndef plainpager(text):\n ''\n sys.stdout.write(plain(text))\n \ndef describe(thing):\n ''\n if inspect.ismodule(thing):\n if thing.__name__ in sys.builtin_module_names:\n return 'built-in module '+thing.__name__\n if hasattr(thing,'__path__'):\n return 'package '+thing.__name__\n else :\n return 'module '+thing.__name__\n if inspect.isbuiltin(thing):\n return 'built-in function '+thing.__name__\n if inspect.isgetsetdescriptor(thing):\n return 'getset descriptor %s.%s.%s'%(\n thing.__objclass__.__module__,thing.__objclass__.__name__,\n thing.__name__)\n if inspect.ismemberdescriptor(thing):\n return 'member descriptor %s.%s.%s'%(\n thing.__objclass__.__module__,thing.__objclass__.__name__,\n thing.__name__)\n if inspect.isclass(thing):\n return 'class '+thing.__name__\n if inspect.isfunction(thing):\n return 'function '+thing.__name__\n if inspect.ismethod(thing):\n return 'method '+thing.__name__\n return type(thing).__name__\n \ndef locate(path,forceload=0):\n ''\n parts=[part for part in path.split('.')if part]\n module,n=None ,0\n while n >','&',\n '|','^','~','<','>','<=','>=','==','!=','<>'),\n 'COMPARISON':('<','>','<=','>=','==','!=','<>'),\n 'UNARY':('-','~'),\n 'AUGMENTEDASSIGNMENT':('+=','-=','*=','/=','%=','&=','|=',\n '^=','<<=','>>=','**=','//='),\n 'BITWISE':('<<','>>','&','|','^','~'),\n 'COMPLEX':('j','J')\n }\n symbols={\n '%':'OPERATORS FORMATTING',\n '**':'POWER',\n ',':'TUPLES LISTS FUNCTIONS',\n '.':'ATTRIBUTES FLOAT MODULES OBJECTS',\n '...':'ELLIPSIS',\n ':':'SLICINGS DICTIONARYLITERALS',\n '@':'def class',\n '\\\\':'STRINGS',\n '_':'PRIVATENAMES',\n '__':'PRIVATENAMES SPECIALMETHODS',\n '`':'BACKQUOTES',\n '(':'TUPLES FUNCTIONS CALLS',\n ')':'TUPLES FUNCTIONS CALLS',\n '[':'LISTS SUBSCRIPTS SLICINGS',\n ']':'LISTS SUBSCRIPTS SLICINGS'\n }\n for topic,symbols_ in _symbols_inverse.items():\n for symbol in symbols_:\n topics=symbols.get(symbol,topic)\n if topic not in topics:\n topics=topics+' '+topic\n symbols[symbol]=topics\n \n topics={\n 'TYPES':('types','STRINGS UNICODE NUMBERS SEQUENCES MAPPINGS '\n 'FUNCTIONS CLASSES MODULES FILES inspect'),\n 'STRINGS':('strings','str UNICODE SEQUENCES STRINGMETHODS '\n 'FORMATTING TYPES'),\n 'STRINGMETHODS':('string-methods','STRINGS FORMATTING'),\n 'FORMATTING':('formatstrings','OPERATORS'),\n 'UNICODE':('strings','encodings unicode SEQUENCES STRINGMETHODS '\n 'FORMATTING TYPES'),\n 'NUMBERS':('numbers','INTEGER FLOAT COMPLEX TYPES'),\n 'INTEGER':('integers','int range'),\n 'FLOAT':('floating','float math'),\n 'COMPLEX':('imaginary','complex cmath'),\n 'SEQUENCES':('typesseq','STRINGMETHODS FORMATTING range LISTS'),\n 'MAPPINGS':'DICTIONARIES',\n 'FUNCTIONS':('typesfunctions','def TYPES'),\n 'METHODS':('typesmethods','class def CLASSES TYPES'),\n 'CODEOBJECTS':('bltin-code-objects','compile FUNCTIONS TYPES'),\n 'TYPEOBJECTS':('bltin-type-objects','types TYPES'),\n 'FRAMEOBJECTS':'TYPES',\n 'TRACEBACKS':'TYPES',\n 'NONE':('bltin-null-object',''),\n 'ELLIPSIS':('bltin-ellipsis-object','SLICINGS'),\n 'FILES':('bltin-file-objects',''),\n 'SPECIALATTRIBUTES':('specialattrs',''),\n 'CLASSES':('types','class SPECIALMETHODS PRIVATENAMES'),\n 'MODULES':('typesmodules','import'),\n 'PACKAGES':'import',\n 'EXPRESSIONS':('operator-summary','lambda or and not in is BOOLEAN '\n 'COMPARISON BITWISE SHIFTING BINARY FORMATTING POWER '\n 'UNARY ATTRIBUTES SUBSCRIPTS SLICINGS CALLS TUPLES '\n 'LISTS DICTIONARIES'),\n 'OPERATORS':'EXPRESSIONS',\n 'PRECEDENCE':'EXPRESSIONS',\n 'OBJECTS':('objects','TYPES'),\n 'SPECIALMETHODS':('specialnames','BASICMETHODS ATTRIBUTEMETHODS '\n 'CALLABLEMETHODS SEQUENCEMETHODS MAPPINGMETHODS '\n 'NUMBERMETHODS CLASSES'),\n 'BASICMETHODS':('customization','hash repr str SPECIALMETHODS'),\n 'ATTRIBUTEMETHODS':('attribute-access','ATTRIBUTES SPECIALMETHODS'),\n 'CALLABLEMETHODS':('callable-types','CALLS SPECIALMETHODS'),\n 'SEQUENCEMETHODS':('sequence-types','SEQUENCES SEQUENCEMETHODS '\n 'SPECIALMETHODS'),\n 'MAPPINGMETHODS':('sequence-types','MAPPINGS SPECIALMETHODS'),\n 'NUMBERMETHODS':('numeric-types','NUMBERS AUGMENTEDASSIGNMENT '\n 'SPECIALMETHODS'),\n 'EXECUTION':('execmodel','NAMESPACES DYNAMICFEATURES EXCEPTIONS'),\n 'NAMESPACES':('naming','global nonlocal ASSIGNMENT DELETION DYNAMICFEATURES'),\n 'DYNAMICFEATURES':('dynamic-features',''),\n 'SCOPING':'NAMESPACES',\n 'FRAMES':'NAMESPACES',\n 'EXCEPTIONS':('exceptions','try except finally raise'),\n 'CONVERSIONS':('conversions',''),\n 'IDENTIFIERS':('identifiers','keywords SPECIALIDENTIFIERS'),\n 'SPECIALIDENTIFIERS':('id-classes',''),\n 'PRIVATENAMES':('atom-identifiers',''),\n 'LITERALS':('atom-literals','STRINGS NUMBERS TUPLELITERALS '\n 'LISTLITERALS DICTIONARYLITERALS'),\n 'TUPLES':'SEQUENCES',\n 'TUPLELITERALS':('exprlists','TUPLES LITERALS'),\n 'LISTS':('typesseq-mutable','LISTLITERALS'),\n 'LISTLITERALS':('lists','LISTS LITERALS'),\n 'DICTIONARIES':('typesmapping','DICTIONARYLITERALS'),\n 'DICTIONARYLITERALS':('dict','DICTIONARIES LITERALS'),\n 'ATTRIBUTES':('attribute-references','getattr hasattr setattr ATTRIBUTEMETHODS'),\n 'SUBSCRIPTS':('subscriptions','SEQUENCEMETHODS'),\n 'SLICINGS':('slicings','SEQUENCEMETHODS'),\n 'CALLS':('calls','EXPRESSIONS'),\n 'POWER':('power','EXPRESSIONS'),\n 'UNARY':('unary','EXPRESSIONS'),\n 'BINARY':('binary','EXPRESSIONS'),\n 'SHIFTING':('shifting','EXPRESSIONS'),\n 'BITWISE':('bitwise','EXPRESSIONS'),\n 'COMPARISON':('comparisons','EXPRESSIONS BASICMETHODS'),\n 'BOOLEAN':('booleans','EXPRESSIONS TRUTHVALUE'),\n 'ASSERTION':'assert',\n 'ASSIGNMENT':('assignment','AUGMENTEDASSIGNMENT'),\n 'AUGMENTEDASSIGNMENT':('augassign','NUMBERMETHODS'),\n 'DELETION':'del',\n 'RETURNING':'return',\n 'IMPORTING':'import',\n 'CONDITIONAL':'if',\n 'LOOPING':('compound','for while break continue'),\n 'TRUTHVALUE':('truth','if while and or not BASICMETHODS'),\n 'DEBUGGING':('debugger','pdb'),\n 'CONTEXTMANAGERS':('context-managers','with'),\n }\n \n def __init__(self,input=None ,output=None ):\n self._input=input\n self._output=output\n \n \n self.input=self._input or sys.stdin\n self.output=self._output or sys.stdout\n \n \n \n \n \n def __repr__(self):\n if inspect.stack()[1][3]=='?':\n self()\n return ''\n return ''\n \n _GoInteractive=object()\n def __call__(self,request=_GoInteractive):\n if request is not self._GoInteractive:\n self.help(request)\n else :\n self.intro()\n self.interact()\n self.output.write('''\nYou are now leaving help and returning to the Python interpreter.\nIf you want to ask for help on a particular object directly from the\ninterpreter, you can type \"help(object)\". Executing \"help('string')\"\nhas the same effect as typing a particular string at the help> prompt.\n''')\n \n def interact(self):\n self.output.write('\\n')\n while True :\n try :\n request=self.getline('help> ')\n if not request:break\n except (KeyboardInterrupt,EOFError):\n break\n request=replace(request,'\"','',\"'\",'').strip()\n if request.lower()in ('q','quit'):break\n self.help(request)\n \n def getline(self,prompt):\n ''\n if self.input is sys.stdin:\n return input(prompt)\n else :\n self.output.write(prompt)\n self.output.flush()\n return self.input.readline()\n \n def help(self,request):\n if type(request)is type(''):\n request=request.strip()\n if request =='help':self.intro()\n elif request =='keywords':self.listkeywords()\n elif request =='symbols':self.listsymbols()\n elif request =='topics':self.listtopics()\n elif request =='modules':self.listmodules()\n elif request[:8]=='modules ':\n self.listmodules(request.split()[1])\n elif request in self.symbols:self.showsymbol(request)\n elif request in ['True','False','None']:\n \n doc(eval(request),'Help on %s:')\n elif request in self.keywords:self.showtopic(request)\n elif request in self.topics:self.showtopic(request)\n elif request:doc(request,'Help on %s:',output=self._output)\n elif isinstance(request,Helper):self()\n else :doc(request,'Help on %s:',output=self._output)\n self.output.write('\\n')\n \n def intro(self):\n self.output.write('''\nWelcome to Python %s! This is the interactive help utility.\n\nIf this is your first time using Python, you should definitely check out\nthe tutorial on the Internet at http://docs.python.org/%s/tutorial/.\n\nEnter the name of any module, keyword, or topic to get help on writing\nPython programs and using Python modules. To quit this help utility and\nreturn to the interpreter, just type \"quit\".\n\nTo get a list of available modules, keywords, or topics, type \"modules\",\n\"keywords\", or \"topics\". Each module also comes with a one-line summary\nof what it does; to list the modules whose summaries contain a given word\nsuch as \"spam\", type \"modules spam\".\n'''%tuple([sys.version[:3]]*2))\n \n def list(self,items,columns=4,width=80):\n items=list(sorted(items))\n colw=width //columns\n rows=(len(items)+columns -1)//columns\n for row in range(rows):\n for col in range(columns):\n i=col *rows+row\n if i =0:\n callback(None ,modname,desc)\n \n for importer,modname,ispkg in pkgutil.walk_packages(onerror=onerror):\n if self.quit:\n break\n \n if key is None :\n callback(None ,modname,'')\n else :\n try :\n loader=importer.find_module(modname)\n except SyntaxError:\n \n continue\n if hasattr(loader,'get_source'):\n try :\n source=loader.get_source(modname)\n except Exception:\n if onerror:\n onerror(modname)\n continue\n desc=source_synopsis(io.StringIO(source))or ''\n if hasattr(loader,'get_filename'):\n path=loader.get_filename(modname)\n else :\n path=None\n else :\n try :\n module=loader.load_module(modname)\n except ImportError:\n if onerror:\n onerror(modname)\n continue\n desc=(module.__doc__ or '').splitlines()[0]\n path=getattr(module,'__file__',None )\n name=modname+' - '+desc\n if name.lower().find(key)>=0:\n callback(path,modname,desc)\n \n if completer:\n completer()\n \ndef apropos(key):\n ''\n def callback(path,modname,desc):\n if modname[-9:]=='.__init__':\n modname=modname[:-9]+' (package)'\n print(modname,desc and '- '+desc)\n def onerror(modname):\n pass\n with warnings.catch_warnings():\n warnings.filterwarnings('ignore')\n ModuleScanner().run(callback,key,onerror=onerror)\n \n \n \ndef _start_server(urlhandler,port):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n import http.server\n import email.message\n import select\n import threading\n \n class DocHandler(http.server.BaseHTTPRequestHandler):\n \n def do_GET(self):\n ''\n\n\n\n \n if self.path.endswith('.css'):\n content_type='text/css'\n else :\n content_type='text/html'\n self.send_response(200)\n self.send_header('Content-Type','%s; charset=UTF-8'%content_type)\n self.end_headers()\n self.wfile.write(self.urlhandler(\n self.path,content_type).encode('utf-8'))\n \n def log_message(self,*args):\n \n pass\n \n class DocServer(http.server.HTTPServer):\n \n def __init__(self,port,callback):\n self.host=(sys.platform =='mac')and '127.0.0.1'or 'localhost'\n self.address=('',port)\n self.callback=callback\n self.base.__init__(self,self.address,self.handler)\n self.quit=False\n \n def serve_until_quit(self):\n while not self.quit:\n rd,wr,ex=select.select([self.socket.fileno()],[],[],1)\n if rd:\n self.handle_request()\n self.server_close()\n \n def server_activate(self):\n self.base.server_activate(self)\n if self.callback:\n self.callback(self)\n \n class ServerThread(threading.Thread):\n \n def __init__(self,urlhandler,port):\n self.urlhandler=urlhandler\n self.port=int(port)\n threading.Thread.__init__(self)\n self.serving=False\n self.error=None\n \n def run(self):\n ''\n try :\n DocServer.base=http.server.HTTPServer\n DocServer.handler=DocHandler\n DocHandler.MessageClass=email.message.Message\n DocHandler.urlhandler=staticmethod(self.urlhandler)\n docsvr=DocServer(self.port,self.ready)\n self.docserver=docsvr\n docsvr.serve_until_quit()\n except Exception as e:\n self.error=e\n \n def ready(self,server):\n self.serving=True\n self.host=server.host\n self.port=server.server_port\n self.url='http://%s:%d/'%(self.host,self.port)\n \n def stop(self):\n ''\n self.docserver.quit=True\n self.serving=False\n self.url=None\n \n thread=ServerThread(urlhandler,port)\n thread.start()\n \n \n while not thread.error and not thread.serving:\n time.sleep(.01)\n return thread\n \n \ndef _url_handler(url,content_type=\"text/html\"):\n ''\n\n\n\n\n\n\n \n class _HTMLDoc(HTMLDoc):\n \n def page(self,title,contents):\n ''\n css_path=\"pydoc_data/_pydoc.css\"\n css_link=(\n ''%\n css_path)\n return '''\\\n\nPydoc: %s\n\n%s%s
%s
\n'''%(title,css_link,html_navbar(),contents)\n \n def filelink(self,url,path):\n return '%s'%(url,path)\n \n \n html=_HTMLDoc()\n \n def html_navbar():\n version=html.escape(\"%s [%s, %s]\"%(platform.python_version(),\n platform.python_build()[0],\n platform.python_compiler()))\n return \"\"\"\n
\n Python %s
%s\n
\n
\n \n
\n
\n \n \n
 \n
\n \n \n
\n
\n
\n \"\"\"%(version,html.escape(platform.platform(terse=True )))\n \n def html_index():\n ''\n \n def bltinlink(name):\n return '%s'%(name,name)\n \n heading=html.heading(\n 'Index of Modules',\n '#ffffff','#7799ee')\n names=[name for name in sys.builtin_module_names\n if name !='__main__']\n contents=html.multicolumn(names,bltinlink)\n contents=[heading,'

'+html.bigsection(\n 'Built-in Modules','#ffffff','#ee77aa',contents)]\n \n seen={}\n for dir in sys.path:\n contents.append(html.index(dir,seen))\n \n contents.append(\n '

pydoc by Ka-Ping Yee'\n '<ping@lfw.org>')\n return 'Index of Modules',''.join(contents)\n \n def html_search(key):\n ''\n \n search_result=[]\n \n def callback(path,modname,desc):\n if modname[-9:]=='.__init__':\n modname=modname[:-9]+' (package)'\n search_result.append((modname,desc and '- '+desc))\n \n with warnings.catch_warnings():\n warnings.filterwarnings('ignore')\n ModuleScanner().run(callback,key)\n \n \n def bltinlink(name):\n return '%s'%(name,name)\n \n results=[]\n heading=html.heading(\n 'Search Results',\n '#ffffff','#7799ee')\n for name,desc in search_result:\n results.append(bltinlink(name)+desc)\n contents=heading+html.bigsection(\n 'key = %s'%key,'#ffffff','#ee77aa','
'.join(results))\n return 'Search Results',contents\n \n def html_getfile(path):\n ''\n path=path.replace('%20',' ')\n with tokenize.open(path)as fp:\n lines=html.escape(fp.read())\n body='

%s
'%lines\n heading=html.heading(\n 'File Listing',\n '#ffffff','#7799ee')\n contents=heading+html.bigsection(\n 'File: %s'%path,'#ffffff','#ee77aa',body)\n return 'getfile %s'%path,contents\n \n def html_topics():\n ''\n \n def bltinlink(name):\n return '%s'%(name,name)\n \n heading=html.heading(\n 'INDEX',\n '#ffffff','#7799ee')\n names=sorted(Helper.topics.keys())\n \n contents=html.multicolumn(names,bltinlink)\n contents=heading+html.bigsection(\n 'Topics','#ffffff','#ee77aa',contents)\n return 'Topics',contents\n \n def html_keywords():\n ''\n heading=html.heading(\n 'INDEX',\n '#ffffff','#7799ee')\n names=sorted(Helper.keywords.keys())\n \n def bltinlink(name):\n return '%s'%(name,name)\n \n contents=html.multicolumn(names,bltinlink)\n contents=heading+html.bigsection(\n 'Keywords','#ffffff','#ee77aa',contents)\n return 'Keywords',contents\n \n def html_topicpage(topic):\n ''\n buf=io.StringIO()\n htmlhelp=Helper(buf,buf)\n contents,xrefs=htmlhelp._gettopic(topic)\n if topic in htmlhelp.keywords:\n title='KEYWORD'\n else :\n title='TOPIC'\n heading=html.heading(\n '%s'%title,\n '#ffffff','#7799ee')\n contents='
%s
'%html.markup(contents)\n contents=html.bigsection(topic,'#ffffff','#ee77aa',contents)\n if xrefs:\n xrefs=sorted(xrefs.split())\n \n def bltinlink(name):\n return '%s'%(name,name)\n \n xrefs=html.multicolumn(xrefs,bltinlink)\n xrefs=html.section('Related help topics: ',\n '#ffffff','#ee77aa',xrefs)\n return ('%s %s'%(title,topic),\n ''.join((heading,contents,xrefs)))\n \n def html_getobj(url):\n obj=locate(url,forceload=1)\n if obj is None and url !='None':\n raise ValueError('could not find object')\n title=describe(obj)\n content=html.document(obj,url)\n return title,content\n \n def html_error(url,exc):\n heading=html.heading(\n 'Error',\n '#ffffff','#7799ee')\n contents='
'.join(html.escape(line)for line in\n format_exception_only(type(exc),exc))\n contents=heading+html.bigsection(url,'#ffffff','#bb0000',\n contents)\n return \"Error - %s\"%url,contents\n \n def get_html_page(url):\n ''\n complete_url=url\n if url.endswith('.html'):\n url=url[:-5]\n try :\n if url in (\"\",\"index\"):\n title,content=html_index()\n elif url ==\"topics\":\n title,content=html_topics()\n elif url ==\"keywords\":\n title,content=html_keywords()\n elif '='in url:\n op,_,url=url.partition('=')\n if op ==\"search?key\":\n title,content=html_search(url)\n elif op ==\"getfile?key\":\n title,content=html_getfile(url)\n elif op ==\"topic?key\":\n \n try :\n title,content=html_topicpage(url)\n except ValueError:\n title,content=html_getobj(url)\n elif op ==\"get?key\":\n \n if url in (\"\",\"index\"):\n title,content=html_index()\n else :\n try :\n title,content=html_getobj(url)\n except ValueError:\n title,content=html_topicpage(url)\n else :\n raise ValueError('bad pydoc url')\n else :\n title,content=html_getobj(url)\n except Exception as exc:\n \n title,content=html_error(complete_url,exc)\n return html.page(title,content)\n \n if url.startswith('/'):\n url=url[1:]\n if content_type =='text/css':\n path_here=os.path.dirname(os.path.realpath(__file__))\n css_path=os.path.join(path_here,url)\n with open(css_path)as fp:\n return ''.join(fp.readlines())\n elif content_type =='text/html':\n return get_html_page(url)\n \n raise TypeError('unknown content type %r for url %s'%(content_type,url))\n \n \ndef browse(port=0,*,open_browser=True ):\n ''\n\n\n\n \n import webbrowser\n serverthread=_start_server(_url_handler,port)\n if serverthread.error:\n print(serverthread.error)\n return\n if serverthread.serving:\n server_help_msg='Server commands: [b]rowser, [q]uit'\n if open_browser:\n webbrowser.open(serverthread.url)\n try :\n print('Server ready at',serverthread.url)\n print(server_help_msg)\n while serverthread.serving:\n cmd=input('server> ')\n cmd=cmd.lower()\n if cmd =='q':\n break\n elif cmd =='b':\n webbrowser.open(serverthread.url)\n else :\n print(server_help_msg)\n except (KeyboardInterrupt,EOFError):\n print()\n finally :\n if serverthread.serving:\n serverthread.stop()\n print('Server stopped')\n \n \n \n \ndef ispath(x):\n return isinstance(x,str)and x.find(os.sep)>=0\n \ndef cli():\n ''\n import getopt\n class BadUsage(Exception):pass\n \n \n \n if ''not in sys.path:\n scriptdir=os.path.dirname(sys.argv[0])\n if scriptdir in sys.path:\n sys.path.remove(scriptdir)\n sys.path.insert(0,'.')\n \n try :\n opts,args=getopt.getopt(sys.argv[1:],'bk:p:w')\n writing=False\n start_server=False\n open_browser=False\n port=None\n for opt,val in opts:\n if opt =='-b':\n start_server=True\n open_browser=True\n if opt =='-k':\n apropos(val)\n return\n if opt =='-p':\n start_server=True\n port=val\n if opt =='-w':\n writing=True\n \n if start_server:\n if port is None :\n port=0\n browse(port,open_browser=open_browser)\n return\n \n if not args:raise BadUsage\n for arg in args:\n if ispath(arg)and not os.path.exists(arg):\n print('file %r does not exist'%arg)\n break\n try :\n if ispath(arg)and os.path.isfile(arg):\n arg=importfile(arg)\n if writing:\n if ispath(arg)and os.path.isdir(arg):\n writedocs(arg)\n else :\n writedoc(arg)\n else :\n help.help(arg)\n except ErrorDuringImport as value:\n print(value)\n \n except (getopt.error,BadUsage):\n cmd=os.path.splitext(os.path.basename(sys.argv[0]))[0]\n print(\"\"\"pydoc - the Python documentation tool\n\n{cmd} ...\n Show text documentation on something. may be the name of a\n Python keyword, topic, function, module, or package, or a dotted\n reference to a class or function within a module or module in a\n package. If contains a '{sep}', it is used as the path to a\n Python source file to document. If name is 'keywords', 'topics',\n or 'modules', a listing of these things is displayed.\n\n{cmd} -k \n Search for a keyword in the synopsis lines of all available modules.\n\n{cmd} -p \n Start an HTTP server on the given port on the local machine. Port\n number 0 can be used to get an arbitrary unused port.\n\n{cmd} -b\n Start an HTTP server on an arbitrary unused port and open a Web browser\n to interactively browse documentation. The -p option can be used with\n the -b option to explicitly specify the server port.\n\n{cmd} -w ...\n Write out the HTML documentation for a module to a file in the current\n directory. If contains a '{sep}', it is treated as a filename; if\n it names a directory, documentation is written for all the contents.\n\"\"\".format(cmd=cmd,sep=os.sep))\n \nif __name__ =='__main__':\n cli()\n",["builtins","collections","email.message","formatter","getopt","http.server","imp","importlib.machinery","inspect","io","nturl2path","os","platform","pydoc_data.topics","re","reprlib","select","sys","tempfile","threading","time","tokenize","tty","warnings","webbrowser"]],queue:[".py","''\n\ntry :\n import threading\nexcept ImportError:\n import dummy_threading as threading\nfrom collections import deque\nfrom heapq import heappush,heappop\ntry :\n from time import monotonic as time\nexcept ImportError:\n from time import time\n \n__all__=['Empty','Full','Queue','PriorityQueue','LifoQueue']\n\nclass Empty(Exception):\n ''\n pass\n \nclass Full(Exception):\n ''\n pass\n \nclass Queue:\n ''\n\n\n \n \n def __init__(self,maxsize=0):\n self.maxsize=maxsize\n self._init(maxsize)\n \n \n \n \n \n self.mutex=threading.Lock()\n \n \n \n self.not_empty=threading.Condition(self.mutex)\n \n \n \n self.not_full=threading.Condition(self.mutex)\n \n \n \n self.all_tasks_done=threading.Condition(self.mutex)\n self.unfinished_tasks=0\n \n def task_done(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n with self.all_tasks_done:\n unfinished=self.unfinished_tasks -1\n if unfinished <=0:\n if unfinished <0:\n raise ValueError('task_done() called too many times')\n self.all_tasks_done.notify_all()\n self.unfinished_tasks=unfinished\n \n def join(self):\n ''\n\n\n\n\n\n\n \n with self.all_tasks_done:\n while self.unfinished_tasks:\n self.all_tasks_done.wait()\n \n def qsize(self):\n ''\n with self.mutex:\n return self._qsize()\n \n def empty(self):\n ''\n\n\n\n\n\n\n\n\n \n with self.mutex:\n return not self._qsize()\n \n def full(self):\n ''\n\n\n\n\n\n \n with self.mutex:\n return 0 0:\n if not block:\n if self._qsize()>=self.maxsize:\n raise Full\n elif timeout is None :\n while self._qsize()>=self.maxsize:\n self.not_full.wait()\n elif timeout <0:\n raise ValueError(\"'timeout' must be a non-negative number\")\n else :\n endtime=time()+timeout\n while self._qsize()>=self.maxsize:\n remaining=endtime -time()\n if remaining <=0.0:\n raise Full\n self.not_full.wait(remaining)\n self._put(item)\n self.unfinished_tasks +=1\n self.not_empty.notify()\n \n def get(self,block=True ,timeout=None ):\n ''\n\n\n\n\n\n\n\n\n \n with self.not_empty:\n if not block:\n if not self._qsize():\n raise Empty\n elif timeout is None :\n while not self._qsize():\n self.not_empty.wait()\n elif timeout <0:\n raise ValueError(\"'timeout' must be a non-negative number\")\n else :\n endtime=time()+timeout\n while not self._qsize():\n remaining=endtime -time()\n if remaining <=0.0:\n raise Empty\n self.not_empty.wait(remaining)\n item=self._get()\n self.not_full.notify()\n return item\n \n def put_nowait(self,item):\n ''\n\n\n\n \n return self.put(item,block=False )\n \n def get_nowait(self):\n ''\n\n\n\n \n return self.get(block=False )\n \n \n \n \n \n \n def _init(self,maxsize):\n self.queue=deque()\n \n def _qsize(self):\n return len(self.queue)\n \n \n def _put(self,item):\n self.queue.append(item)\n \n \n def _get(self):\n return self.queue.popleft()\n \n \nclass PriorityQueue(Queue):\n ''\n\n\n \n \n def _init(self,maxsize):\n self.queue=[]\n \n def _qsize(self):\n return len(self.queue)\n \n def _put(self,item):\n heappush(self.queue,item)\n \n def _get(self):\n return heappop(self.queue)\n \n \nclass LifoQueue(Queue):\n ''\n \n def _init(self,maxsize):\n self.queue=[]\n \n def _qsize(self):\n return len(self.queue)\n \n def _put(self,item):\n self.queue.append(item)\n \n def _get(self):\n return self.queue.pop()\n",["collections","dummy_threading","heapq","threading","time"]],re:[".py",'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nr"""Support for regular expressions (RE).\n\nThis module provides regular expression matching operations similar to\nthose found in Perl. It supports both 8-bit and Unicode strings; both\nthe pattern and the strings being processed can contain null bytes and\ncharacters outside the US ASCII range.\n\nRegular expressions can contain both special and ordinary characters.\nMost ordinary characters, like "A", "a", or "0", are the simplest\nregular expressions; they simply match themselves. You can\nconcatenate ordinary characters, so last matches the string \'last\'.\n\nThe special characters are:\n "." Matches any character except a newline.\n "^" Matches the start of the string.\n "$" Matches the end of the string or just before the newline at\n the end of the string.\n "*" Matches 0 or more (greedy) repetitions of the preceding RE.\n Greedy means that it will match as many repetitions as possible.\n "+" Matches 1 or more (greedy) repetitions of the preceding RE.\n "?" Matches 0 or 1 (greedy) of the preceding RE.\n *?,+?,?? Non-greedy versions of the previous three special characters.\n {m,n} Matches from m to n repetitions of the preceding RE.\n {m,n}? Non-greedy version of the above.\n "\\\\" Either escapes special characters or signals a special sequence.\n [] Indicates a set of characters.\n A "^" as the first character indicates a complementing set.\n "|" A|B, creates an RE that will match either A or B.\n (...) Matches the RE inside the parentheses.\n The contents can be retrieved or matched later in the string.\n (?aiLmsux) Set the A, I, L, M, S, U, or X flag for the RE (see below).\n (?:...) Non-grouping version of regular parentheses.\n (?P...) The substring matched by the group is accessible by name.\n (?P=name) Matches the text matched earlier by the group named name.\n (?#...) A comment; ignored.\n (?=...) Matches if ... matches next, but doesn\'t consume the string.\n (?!...) Matches if ... doesn\'t match next.\n (?<=...) Matches if preceded by ... (must be fixed length).\n (?=_MAXCACHE:\n \n try :\n del _cache[next(iter(_cache))]\n except (StopIteration,RuntimeError,KeyError):\n pass\n _cache[type(pattern),pattern,flags]=p\n return p\n \n@functools.lru_cache(_MAXCACHE)\ndef _compile_repl(repl,pattern):\n\n return sre_parse.parse_template(repl,pattern)\n \ndef _expand(pattern,match,template):\n\n template=sre_parse.parse_template(template,pattern)\n return sre_parse.expand_template(template,match)\n \ndef _subx(pattern,template):\n\n template=_compile_repl(template,pattern)\n if not template[0]and len(template[1])==1:\n \n return template[1][0]\n def filter(match,template=template):\n return sre_parse.expand_template(template,match)\n return filter\n \n \n \nimport copyreg\n\ndef _pickle(p):\n return _compile,(p.pattern,p.flags)\n \ncopyreg.pickle(Pattern,_pickle,_compile)\n\n\n\n\nclass Scanner:\n def __init__(self,lexicon,flags=0):\n from sre_constants import BRANCH,SUBPATTERN\n if isinstance(flags,RegexFlag):\n flags=flags.value\n self.lexicon=lexicon\n \n p=[]\n s=sre_parse.Pattern()\n s.flags=flags\n for phrase,action in lexicon:\n gid=s.opengroup()\n p.append(sre_parse.SubPattern(s,[\n (SUBPATTERN,(gid,0,0,sre_parse.parse(phrase,flags))),\n ]))\n s.closegroup(gid,p[-1])\n p=sre_parse.SubPattern(s,[(BRANCH,(None ,p))])\n self.scanner=sre_compile.compile(p)\n def scan(self,string):\n result=[]\n append=result.append\n match=self.scanner.scanner(string).match\n i=0\n while True :\n m=match()\n if not m:\n break\n j=m.end()\n if i ==j:\n break\n action=self.lexicon[m.lastindex -1][1]\n if callable(action):\n self.match=m\n action=action(self,m.group())\n if action is not None :\n append(action)\n i=j\n return result,string[i:]\n',["copyreg","enum","functools","sre_compile","sre_constants","sre_parse"]],reprlib:[".py","''\n\n__all__=[\"Repr\",\"repr\",\"recursive_repr\"]\n\nimport builtins\nfrom itertools import islice\ntry :\n from _thread import get_ident\nexcept ImportError:\n from _dummy_thread import get_ident\n \ndef recursive_repr(fillvalue='...'):\n ''\n \n def decorating_function(user_function):\n repr_running=set()\n \n def wrapper(self):\n key=id(self),get_ident()\n if key in repr_running:\n return fillvalue\n repr_running.add(key)\n try :\n result=user_function(self)\n finally :\n repr_running.discard(key)\n return result\n \n \n wrapper.__module__=getattr(user_function,'__module__')\n wrapper.__doc__=getattr(user_function,'__doc__')\n wrapper.__name__=getattr(user_function,'__name__')\n wrapper.__annotations__=getattr(user_function,'__annotations__',{})\n return wrapper\n \n return decorating_function\n \nclass Repr:\n\n def __init__(self):\n self.maxlevel=6\n self.maxtuple=6\n self.maxlist=6\n self.maxarray=5\n self.maxdict=4\n self.maxset=6\n self.maxfrozenset=6\n self.maxdeque=6\n self.maxstring=30\n self.maxlong=40\n self.maxother=30\n \n def repr(self,x):\n return self.repr1(x,self.maxlevel)\n \n def repr1(self,x,level):\n typename=type(x).__name__\n if ' 'in typename:\n parts=typename.split()\n typename='_'.join(parts)\n if hasattr(self,'repr_'+typename):\n return getattr(self,'repr_'+typename)(x,level)\n else :\n return self.repr_instance(x,level)\n \n def _repr_iterable(self,x,level,left,right,maxiter,trail=''):\n n=len(x)\n if level <=0 and n:\n s='...'\n else :\n newlevel=level -1\n repr1=self.repr1\n pieces=[repr1(elem,newlevel)for elem in islice(x,maxiter)]\n if n >maxiter:pieces.append('...')\n s=', '.join(pieces)\n if n ==1 and trail:right=trail+right\n return '%s%s%s'%(left,s,right)\n \n def repr_tuple(self,x,level):\n return self._repr_iterable(x,level,'(',')',self.maxtuple,',')\n \n def repr_list(self,x,level):\n return self._repr_iterable(x,level,'[',']',self.maxlist)\n \n def repr_array(self,x,level):\n header=\"array('%s', [\"%x.typecode\n return self._repr_iterable(x,level,header,'])',self.maxarray)\n \n def repr_set(self,x,level):\n x=_possibly_sorted(x)\n return self._repr_iterable(x,level,'set([','])',self.maxset)\n \n def repr_frozenset(self,x,level):\n x=_possibly_sorted(x)\n return self._repr_iterable(x,level,'frozenset([','])',\n self.maxfrozenset)\n \n def repr_deque(self,x,level):\n return self._repr_iterable(x,level,'deque([','])',self.maxdeque)\n \n def repr_dict(self,x,level):\n n=len(x)\n if n ==0:return '{}'\n if level <=0:return '{...}'\n newlevel=level -1\n repr1=self.repr1\n pieces=[]\n for key in islice(_possibly_sorted(x),self.maxdict):\n keyrepr=repr1(key,newlevel)\n valrepr=repr1(x[key],newlevel)\n pieces.append('%s: %s'%(keyrepr,valrepr))\n if n >self.maxdict:pieces.append('...')\n s=', '.join(pieces)\n return '{%s}'%(s,)\n \n def repr_str(self,x,level):\n s=builtins.repr(x[:self.maxstring])\n if len(s)>self.maxstring:\n i=max(0,(self.maxstring -3)//2)\n j=max(0,self.maxstring -3 -i)\n s=builtins.repr(x[:i]+x[len(x)-j:])\n s=s[:i]+'...'+s[len(s)-j:]\n return s\n \n def repr_int(self,x,level):\n s=builtins.repr(x)\n if len(s)>self.maxlong:\n i=max(0,(self.maxlong -3)//2)\n j=max(0,self.maxlong -3 -i)\n s=s[:i]+'...'+s[len(s)-j:]\n return s\n \n def repr_instance(self,x,level):\n try :\n s=builtins.repr(x)\n \n \n except Exception:\n return '<%s instance at %x>'%(x.__class__.__name__,id(x))\n if len(s)>self.maxother:\n i=max(0,(self.maxother -3)//2)\n j=max(0,self.maxother -3 -i)\n s=s[:i]+'...'+s[len(s)-j:]\n return s\n \n \ndef _possibly_sorted(x):\n\n\n\n try :\n return sorted(x)\n except Exception:\n return list(x)\n \naRepr=Repr()\nrepr=aRepr.repr\n",["_dummy_thread","_thread","builtins","itertools"]],select:[".py","''\n\n\n\n\n\n\n\n\n\nimport errno\nimport os\nimport queue\nimport socket\n\nclass error(Exception):pass\n\nALL=None\n\n_exception_map={\n\n\n\n\n\n\n}\n\ndef _map_exception(exc,circumstance=ALL):\n try :\n mapped_exception=_exception_map[(exc.__class__,circumstance)]\n mapped_exception.java_exception=exc\n return mapped_exception\n except KeyError:\n return error(-1,'Unmapped java exception: <%s:%s>'%(exc.toString(),circumstance))\n \nPOLLIN=1\nPOLLOUT=2\n\n\n\n\n\nPOLLPRI=4\nPOLLERR=8\nPOLLHUP=16\nPOLLNVAL=32\n\ndef _getselectable(selectable_object):\n try :\n channel=selectable_object.getchannel()\n except :\n try :\n channel=selectable_object.fileno().getChannel()\n except :\n raise TypeError(\"Object '%s' is not watchable\"%selectable_object,\n errno.ENOTSOCK)\n \n if channel and not isinstance(channel,java.nio.channels.SelectableChannel):\n raise TypeError(\"Object '%s' is not watchable\"%selectable_object,\n errno.ENOTSOCK)\n return channel\n \nclass poll:\n\n def __init__(self):\n self.selector=java.nio.channels.Selector.open()\n self.chanmap={}\n self.unconnected_sockets=[]\n \n def _register_channel(self,socket_object,channel,mask):\n jmask=0\n if mask&POLLIN:\n \n if channel.validOps()&OP_ACCEPT:\n jmask=OP_ACCEPT\n else :\n jmask=OP_READ\n if mask&POLLOUT:\n if channel.validOps()&OP_WRITE:\n jmask |=OP_WRITE\n if channel.validOps()&OP_CONNECT:\n jmask |=OP_CONNECT\n selectionkey=channel.register(self.selector,jmask)\n self.chanmap[channel]=(socket_object,selectionkey)\n \n def _check_unconnected_sockets(self):\n temp_list=[]\n for socket_object,mask in self.unconnected_sockets:\n channel=_getselectable(socket_object)\n if channel is not None :\n self._register_channel(socket_object,channel,mask)\n else :\n temp_list.append((socket_object,mask))\n self.unconnected_sockets=temp_list\n \n def register(self,socket_object,mask=POLLIN |POLLOUT |POLLPRI):\n try :\n channel=_getselectable(socket_object)\n if channel is None :\n \n \n self.unconnected_sockets.append((socket_object,mask))\n return\n self._register_channel(socket_object,channel,mask)\n except BaseException:\n \n raise _map_exception(jlx)\n \n def unregister(self,socket_object):\n try :\n channel=_getselectable(socket_object)\n self.chanmap[channel][1].cancel()\n del self.chanmap[channel]\n except BaseException:\n \n raise _map_exception(jlx)\n \n def _dopoll(self,timeout):\n if timeout is None or timeout <0:\n self.selector.select()\n else :\n try :\n timeout=int(timeout)\n if not timeout:\n self.selector.selectNow()\n else :\n \n self.selector.select(timeout)\n except ValueError as vx:\n raise error(\"poll timeout must be a number of milliseconds or None\",errno.EINVAL)\n \n return self.selector.selectedKeys()\n \n def poll(self,timeout=None ):\n try :\n self._check_unconnected_sockets()\n selectedkeys=self._dopoll(timeout)\n results=[]\n for k in selectedkeys.iterator():\n jmask=k.readyOps()\n pymask=0\n if jmask&OP_READ:pymask |=POLLIN\n if jmask&OP_WRITE:pymask |=POLLOUT\n if jmask&OP_ACCEPT:pymask |=POLLIN\n if jmask&OP_CONNECT:pymask |=POLLOUT\n \n results.append((self.chanmap[k.channel()][0],pymask))\n return results\n except BaseException:\n \n raise _map_exception(jlx)\n \n def _deregister_all(self):\n try :\n for k in self.selector.keys():\n k.cancel()\n \n self.selector.selectNow()\n except BaseException:\n \n raise _map_exception(jlx)\n \n def close(self):\n try :\n self._deregister_all()\n self.selector.close()\n except BaseException:\n \n raise _map_exception(jlx)\n \ndef _calcselecttimeoutvalue(value):\n if value is None :\n return None\n try :\n floatvalue=float(value)\n except Exception as x:\n raise TypeError(\"Select timeout value must be a number or None\")\n if value <0:\n raise error(\"Select timeout value cannot be negative\",errno.EINVAL)\n if floatvalue <0.000001:\n return 0\n return int(floatvalue *1000)\n \n \n \n \nclass poll_object_cache:\n\n def __init__(self):\n self.is_windows=os.name =='nt'\n if self.is_windows:\n self.poll_object_queue=Queue.Queue()\n import atexit\n atexit.register(self.finalize)\n \n def get_poll_object(self):\n if not self.is_windows:\n return poll()\n try :\n return self.poll_object_queue.get(False )\n except Queue.Empty:\n return poll()\n \n def release_poll_object(self,pobj):\n if self.is_windows:\n pobj._deregister_all()\n self.poll_object_queue.put(pobj)\n else :\n pobj.close()\n \n def finalize(self):\n if self.is_windows:\n while True :\n try :\n p=self.poll_object_queue.get(False )\n p.close()\n except Queue.Empty:\n return\n \n_poll_object_cache=poll_object_cache()\n\ndef native_select(read_fd_list,write_fd_list,outofband_fd_list,timeout=None ):\n timeout=_calcselecttimeoutvalue(timeout)\n \n pobj=_poll_object_cache.get_poll_object()\n try :\n registered_for_read={}\n \n for fd in read_fd_list:\n pobj.register(fd,POLLIN)\n registered_for_read[fd]=1\n \n for fd in write_fd_list:\n if fd in registered_for_read:\n \n pobj.register(fd,POLLIN |POLLOUT)\n else :\n pobj.register(fd,POLLOUT)\n results=pobj.poll(timeout)\n \n read_ready_list,write_ready_list,oob_ready_list=[],[],[]\n for fd,mask in results:\n if mask&POLLIN:\n read_ready_list.append(fd)\n if mask&POLLOUT:\n write_ready_list.append(fd)\n return read_ready_list,write_ready_list,oob_ready_list\n finally :\n _poll_object_cache.release_poll_object(pobj)\n \nselect=native_select\n\ndef cpython_compatible_select(read_fd_list,write_fd_list,outofband_fd_list,timeout=None ):\n\n\n modified_channels=[]\n try :\n for socket_list in [read_fd_list,write_fd_list,outofband_fd_list]:\n for s in socket_list:\n channel=_getselectable(s)\n if channel.isBlocking():\n modified_channels.append(channel)\n channel.configureBlocking(0)\n return native_select(read_fd_list,write_fd_list,outofband_fd_list,timeout)\n finally :\n for channel in modified_channels:\n channel.configureBlocking(1)\n",["atexit","errno","os","queue","socket"]],shutil:[".py","''\n\n\n\n\n\nimport os\nimport sys\nimport stat\nfrom os.path import abspath\nimport fnmatch\nimport collections\nimport errno\nimport tarfile\n\n\"\"\"try:\n import bz2\n del bz2\n _BZ2_SUPPORTED = True\nexcept ImportError:\n _BZ2_SUPPORTED = False\"\"\"\n\n_BZ2_SUPPORTED=False\n\ntry :\n from pwd import getpwnam\nexcept ImportError:\n getpwnam=None\n \n\"\"\"try:\n from grp import getgrnam\nexcept ImportError:\n getgrnam = None\"\"\"\n\ngetgrnam=None\n\n__all__=[\"copyfileobj\",\"copyfile\",\"copymode\",\"copystat\",\"copy\",\"copy2\",\n\"copytree\",\"move\",\"rmtree\",\"Error\",\"SpecialFileError\",\n\"ExecError\",\"make_archive\",\"get_archive_formats\",\n\"register_archive_format\",\"unregister_archive_format\",\n\"get_unpack_formats\",\"register_unpack_format\",\n\"unregister_unpack_format\",\"unpack_archive\",\n\"ignore_patterns\",\"chown\",\"which\"]\n\n\nclass Error(EnvironmentError):\n pass\n \nclass SpecialFileError(EnvironmentError):\n ''\n \n \nclass ExecError(EnvironmentError):\n ''\n \nclass ReadError(EnvironmentError):\n ''\n \nclass RegistryError(Exception):\n ''\n \n \n \ntry :\n WindowsError\nexcept NameError:\n WindowsError=None\n \ndef copyfileobj(fsrc,fdst,length=16 *1024):\n ''\n while 1:\n buf=fsrc.read(length)\n if not buf:\n break\n fdst.write(buf)\n \ndef _samefile(src,dst):\n\n if hasattr(os.path,'samefile'):\n try :\n return os.path.samefile(src,dst)\n except OSError:\n return False\n \n \n return (os.path.normcase(os.path.abspath(src))==\n os.path.normcase(os.path.abspath(dst)))\n \ndef copyfile(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n \n if _samefile(src,dst):\n raise Error(\"`%s` and `%s` are the same file\"%(src,dst))\n \n for fn in [src,dst]:\n try :\n st=os.stat(fn)\n except OSError:\n \n pass\n else :\n \n if stat.S_ISFIFO(st.st_mode):\n raise SpecialFileError(\"`%s` is a named pipe\"%fn)\n \n if not follow_symlinks and os.path.islink(src):\n os.symlink(os.readlink(src),dst)\n else :\n with open(src,'rb')as fsrc:\n with open(dst,'wb')as fdst:\n copyfileobj(fsrc,fdst)\n return dst\n \ndef copymode(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n\n \n if not follow_symlinks and os.path.islink(src)and os.path.islink(dst):\n if hasattr(os,'lchmod'):\n stat_func,chmod_func=os.lstat,os.lchmod\n else :\n return\n elif hasattr(os,'chmod'):\n stat_func,chmod_func=os.stat,os.chmod\n else :\n return\n \n st=stat_func(src)\n chmod_func(dst,stat.S_IMODE(st.st_mode))\n \nif hasattr(os,'listxattr'):\n def _copyxattr(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n\n \n \n try :\n names=os.listxattr(src,follow_symlinks=follow_symlinks)\n except OSError as e:\n if e.errno not in (errno.ENOTSUP,errno.ENODATA):\n raise\n return\n for name in names:\n try :\n value=os.getxattr(src,name,follow_symlinks=follow_symlinks)\n os.setxattr(dst,name,value,follow_symlinks=follow_symlinks)\n except OSError as e:\n if e.errno not in (errno.EPERM,errno.ENOTSUP,errno.ENODATA):\n raise\nelse :\n def _copyxattr(*args,**kwargs):\n pass\n \ndef copystat(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n \n def _nop(*args,ns=None ,follow_symlinks=None ):\n pass\n \n \n follow=follow_symlinks or not (os.path.islink(src)and os.path.islink(dst))\n if follow:\n \n def lookup(name):\n return getattr(os,name,_nop)\n else :\n \n \n def lookup(name):\n fn=getattr(os,name,_nop)\n if fn in os.supports_follow_symlinks:\n return fn\n return _nop\n \n st=lookup(\"stat\")(src,follow_symlinks=follow)\n mode=stat.S_IMODE(st.st_mode)\n lookup(\"utime\")(dst,ns=(st.st_atime_ns,st.st_mtime_ns),\n follow_symlinks=follow)\n try :\n lookup(\"chmod\")(dst,mode,follow_symlinks=follow)\n except NotImplementedError:\n \n \n \n \n \n \n \n \n \n \n pass\n if hasattr(st,'st_flags'):\n try :\n lookup(\"chflags\")(dst,st.st_flags,follow_symlinks=follow)\n except OSError as why:\n for err in 'EOPNOTSUPP','ENOTSUP':\n if hasattr(errno,err)and why.errno ==getattr(errno,err):\n break\n else :\n raise\n _copyxattr(src,dst,follow_symlinks=follow)\n \ndef copy(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n\n\n \n if os.path.isdir(dst):\n dst=os.path.join(dst,os.path.basename(src))\n copyfile(src,dst,follow_symlinks=follow_symlinks)\n copymode(src,dst,follow_symlinks=follow_symlinks)\n return dst\n \ndef copy2(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n\n\n\n \n if os.path.isdir(dst):\n dst=os.path.join(dst,os.path.basename(src))\n copyfile(src,dst,follow_symlinks=follow_symlinks)\n copystat(src,dst,follow_symlinks=follow_symlinks)\n return dst\n \ndef ignore_patterns(*patterns):\n ''\n\n\n \n def _ignore_patterns(path,names):\n ignored_names=[]\n for pattern in patterns:\n ignored_names.extend(fnmatch.filter(names,pattern))\n return set(ignored_names)\n return _ignore_patterns\n \ndef copytree(src,dst,symlinks=False ,ignore=None ,copy_function=copy2,\nignore_dangling_symlinks=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n names=os.listdir(src)\n if ignore is not None :\n ignored_names=ignore(src,names)\n else :\n ignored_names=set()\n \n os.makedirs(dst)\n errors=[]\n for name in names:\n if name in ignored_names:\n continue\n srcname=os.path.join(src,name)\n dstname=os.path.join(dst,name)\n try :\n if os.path.islink(srcname):\n linkto=os.readlink(srcname)\n if symlinks:\n \n \n \n os.symlink(linkto,dstname)\n copystat(srcname,dstname,follow_symlinks=not symlinks)\n else :\n \n if not os.path.exists(linkto)and ignore_dangling_symlinks:\n continue\n \n copy_function(srcname,dstname)\n elif os.path.isdir(srcname):\n copytree(srcname,dstname,symlinks,ignore,copy_function)\n else :\n \n copy_function(srcname,dstname)\n \n \n except Error as err:\n errors.extend(err.args[0])\n except EnvironmentError as why:\n errors.append((srcname,dstname,str(why)))\n try :\n copystat(src,dst)\n except OSError as why:\n if WindowsError is not None and isinstance(why,WindowsError):\n \n pass\n else :\n errors.append((src,dst,str(why)))\n if errors:\n raise Error(errors)\n return dst\n \n \ndef _rmtree_unsafe(path,onerror):\n try :\n if os.path.islink(path):\n \n raise OSError(\"Cannot call rmtree on a symbolic link\")\n except OSError:\n onerror(os.path.islink,path,sys.exc_info())\n \n return\n names=[]\n try :\n names=os.listdir(path)\n except os.error:\n onerror(os.listdir,path,sys.exc_info())\n for name in names:\n fullname=os.path.join(path,name)\n try :\n mode=os.lstat(fullname).st_mode\n except os.error:\n mode=0\n if stat.S_ISDIR(mode):\n _rmtree_unsafe(fullname,onerror)\n else :\n try :\n os.unlink(fullname)\n except os.error:\n onerror(os.unlink,fullname,sys.exc_info())\n try :\n os.rmdir(path)\n except os.error:\n onerror(os.rmdir,path,sys.exc_info())\n \n \ndef _rmtree_safe_fd(topfd,path,onerror):\n names=[]\n try :\n names=os.listdir(topfd)\n except OSError as err:\n err.filename=path\n onerror(os.listdir,path,sys.exc_info())\n for name in names:\n fullname=os.path.join(path,name)\n try :\n orig_st=os.stat(name,dir_fd=topfd,follow_symlinks=False )\n mode=orig_st.st_mode\n except OSError:\n mode=0\n if stat.S_ISDIR(mode):\n try :\n dirfd=os.open(name,os.O_RDONLY,dir_fd=topfd)\n except OSError:\n onerror(os.open,fullname,sys.exc_info())\n else :\n try :\n if os.path.samestat(orig_st,os.fstat(dirfd)):\n _rmtree_safe_fd(dirfd,fullname,onerror)\n try :\n os.rmdir(name,dir_fd=topfd)\n except OSError:\n onerror(os.rmdir,fullname,sys.exc_info())\n else :\n try :\n \n \n \n raise OSError(\"Cannot call rmtree on a symbolic \"\n \"link\")\n except OSError:\n onerror(os.path.islink,fullname,sys.exc_info())\n finally :\n os.close(dirfd)\n else :\n try :\n os.unlink(name,dir_fd=topfd)\n except OSError:\n onerror(os.unlink,fullname,sys.exc_info())\n \n_use_fd_functions=({os.open,os.stat,os.unlink,os.rmdir}<=\nos.supports_dir_fd and\nos.listdir in os.supports_fd and\nos.stat in os.supports_follow_symlinks)\n\ndef rmtree(path,ignore_errors=False ,onerror=None ):\n ''\n\n\n\n\n\n\n\n\n \n if ignore_errors:\n def onerror(*args):\n pass\n elif onerror is None :\n def onerror(*args):\n raise\n if _use_fd_functions:\n \n if isinstance(path,bytes):\n path=os.fsdecode(path)\n \n \n try :\n orig_st=os.lstat(path)\n except Exception:\n onerror(os.lstat,path,sys.exc_info())\n return\n try :\n fd=os.open(path,os.O_RDONLY)\n except Exception:\n onerror(os.lstat,path,sys.exc_info())\n return\n try :\n if os.path.samestat(orig_st,os.fstat(fd)):\n _rmtree_safe_fd(fd,path,onerror)\n try :\n os.rmdir(path)\n except os.error:\n onerror(os.rmdir,path,sys.exc_info())\n else :\n try :\n \n raise OSError(\"Cannot call rmtree on a symbolic link\")\n except OSError:\n onerror(os.path.islink,path,sys.exc_info())\n finally :\n os.close(fd)\n else :\n return _rmtree_unsafe(path,onerror)\n \n \n \nrmtree.avoids_symlink_attacks=_use_fd_functions\n\ndef _basename(path):\n\n\n return os.path.basename(path.rstrip(os.path.sep))\n \ndef move(src,dst):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n real_dst=dst\n if os.path.isdir(dst):\n if _samefile(src,dst):\n \n \n os.rename(src,dst)\n return\n \n real_dst=os.path.join(dst,_basename(src))\n if os.path.exists(real_dst):\n raise Error(\"Destination path '%s' already exists\"%real_dst)\n try :\n os.rename(src,real_dst)\n except OSError:\n if os.path.islink(src):\n linkto=os.readlink(src)\n os.symlink(linkto,real_dst)\n os.unlink(src)\n elif os.path.isdir(src):\n if _destinsrc(src,dst):\n raise Error(\"Cannot move a directory '%s' into itself '%s'.\"%(src,dst))\n copytree(src,real_dst,symlinks=True )\n rmtree(src)\n else :\n copy2(src,real_dst)\n os.unlink(src)\n return real_dst\n \ndef _destinsrc(src,dst):\n src=abspath(src)\n dst=abspath(dst)\n if not src.endswith(os.path.sep):\n src +=os.path.sep\n if not dst.endswith(os.path.sep):\n dst +=os.path.sep\n return dst.startswith(src)\n \ndef _get_gid(name):\n ''\n if getgrnam is None or name is None :\n return None\n try :\n result=getgrnam(name)\n except KeyError:\n result=None\n if result is not None :\n return result[2]\n return None\n \ndef _get_uid(name):\n ''\n if getpwnam is None or name is None :\n return None\n try :\n result=getpwnam(name)\n except KeyError:\n result=None\n if result is not None :\n return result[2]\n return None\n \ndef _make_tarball(base_name,base_dir,compress=\"gzip\",verbose=0,dry_run=0,\nowner=None ,group=None ,logger=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n tar_compression={'gzip':'gz',None :''}\n compress_ext={'gzip':'.gz'}\n \n if _BZ2_SUPPORTED:\n tar_compression['bzip2']='bz2'\n compress_ext['bzip2']='.bz2'\n \n \n if compress is not None and compress not in compress_ext:\n raise ValueError(\"bad value for 'compress', or compression format not \"\n \"supported : {0}\".format(compress))\n \n archive_name=base_name+'.tar'+compress_ext.get(compress,'')\n archive_dir=os.path.dirname(archive_name)\n \n if not os.path.exists(archive_dir):\n if logger is not None :\n logger.info(\"creating %s\",archive_dir)\n if not dry_run:\n os.makedirs(archive_dir)\n \n \n if logger is not None :\n logger.info('Creating tar archive')\n \n uid=_get_uid(owner)\n gid=_get_gid(group)\n \n def _set_uid_gid(tarinfo):\n if gid is not None :\n tarinfo.gid=gid\n tarinfo.gname=group\n if uid is not None :\n tarinfo.uid=uid\n tarinfo.uname=owner\n return tarinfo\n \n if not dry_run:\n tar=tarfile.open(archive_name,'w|%s'%tar_compression[compress])\n try :\n tar.add(base_dir,filter=_set_uid_gid)\n finally :\n tar.close()\n \n return archive_name\n \ndef _call_external_zip(base_dir,zip_filename,verbose=False ,dry_run=False ):\n\n if verbose:\n zipoptions=\"-r\"\n else :\n zipoptions=\"-rq\"\n from distutils.errors import DistutilsExecError\n from distutils.spawn import spawn\n try :\n spawn([\"zip\",zipoptions,zip_filename,base_dir],dry_run=dry_run)\n except DistutilsExecError:\n \n \n raise ExecError(\"unable to create zip file '%s': \"\n \"could neither import the 'zipfile' module nor \"\n \"find a standalone zip utility\")%zip_filename\n \ndef _make_zipfile(base_name,base_dir,verbose=0,dry_run=0,logger=None ):\n ''\n\n\n\n\n\n\n \n zip_filename=base_name+\".zip\"\n archive_dir=os.path.dirname(base_name)\n \n if not os.path.exists(archive_dir):\n if logger is not None :\n logger.info(\"creating %s\",archive_dir)\n if not dry_run:\n os.makedirs(archive_dir)\n \n \n \n try :\n import zipfile\n except ImportError:\n zipfile=None\n \n if zipfile is None :\n _call_external_zip(base_dir,zip_filename,verbose,dry_run)\n else :\n if logger is not None :\n logger.info(\"creating '%s' and adding '%s' to it\",\n zip_filename,base_dir)\n \n if not dry_run:\n zip=zipfile.ZipFile(zip_filename,\"w\",\n compression=zipfile.ZIP_DEFLATED)\n \n for dirpath,dirnames,filenames in os.walk(base_dir):\n for name in filenames:\n path=os.path.normpath(os.path.join(dirpath,name))\n if os.path.isfile(path):\n zip.write(path,path)\n if logger is not None :\n logger.info(\"adding '%s'\",path)\n zip.close()\n \n return zip_filename\n \n_ARCHIVE_FORMATS={\n'gztar':(_make_tarball,[('compress','gzip')],\"gzip'ed tar-file\"),\n'tar':(_make_tarball,[('compress',None )],\"uncompressed tar file\"),\n'zip':(_make_zipfile,[],\"ZIP file\")\n}\n\nif _BZ2_SUPPORTED:\n _ARCHIVE_FORMATS['bztar']=(_make_tarball,[('compress','bzip2')],\n \"bzip2'ed tar-file\")\n \ndef get_archive_formats():\n ''\n\n\n \n formats=[(name,registry[2])for name,registry in\n _ARCHIVE_FORMATS.items()]\n formats.sort()\n return formats\n \ndef register_archive_format(name,function,extra_args=None ,description=''):\n ''\n\n\n\n\n\n\n \n if extra_args is None :\n extra_args=[]\n if not callable(function):\n raise TypeError('The %s object is not callable'%function)\n if not isinstance(extra_args,(tuple,list)):\n raise TypeError('extra_args needs to be a sequence')\n for element in extra_args:\n if not isinstance(element,(tuple,list))or len(element)!=2:\n raise TypeError('extra_args elements are : (arg_name, value)')\n \n _ARCHIVE_FORMATS[name]=(function,extra_args,description)\n \ndef unregister_archive_format(name):\n del _ARCHIVE_FORMATS[name]\n \ndef make_archive(base_name,format,root_dir=None ,base_dir=None ,verbose=0,\ndry_run=0,owner=None ,group=None ,logger=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n save_cwd=os.getcwd()\n if root_dir is not None :\n if logger is not None :\n logger.debug(\"changing into '%s'\",root_dir)\n base_name=os.path.abspath(base_name)\n if not dry_run:\n os.chdir(root_dir)\n \n if base_dir is None :\n base_dir=os.curdir\n \n kwargs={'dry_run':dry_run,'logger':logger}\n \n try :\n format_info=_ARCHIVE_FORMATS[format]\n except KeyError:\n raise ValueError(\"unknown archive format '%s'\"%format)\n \n func=format_info[0]\n for arg,val in format_info[1]:\n kwargs[arg]=val\n \n if format !='zip':\n kwargs['owner']=owner\n kwargs['group']=group\n \n try :\n filename=func(base_name,base_dir,**kwargs)\n finally :\n if root_dir is not None :\n if logger is not None :\n logger.debug(\"changing back to '%s'\",save_cwd)\n os.chdir(save_cwd)\n \n return filename\n \n \ndef get_unpack_formats():\n ''\n\n\n\n \n formats=[(name,info[0],info[3])for name,info in\n _UNPACK_FORMATS.items()]\n formats.sort()\n return formats\n \ndef _check_unpack_options(extensions,function,extra_args):\n ''\n \n existing_extensions={}\n for name,info in _UNPACK_FORMATS.items():\n for ext in info[0]:\n existing_extensions[ext]=name\n \n for extension in extensions:\n if extension in existing_extensions:\n msg='%s is already registered for \"%s\"'\n raise RegistryError(msg %(extension,\n existing_extensions[extension]))\n \n if not callable(function):\n raise TypeError('The registered function must be a callable')\n \n \ndef register_unpack_format(name,extensions,function,extra_args=None ,\ndescription=''):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if extra_args is None :\n extra_args=[]\n _check_unpack_options(extensions,function,extra_args)\n _UNPACK_FORMATS[name]=extensions,function,extra_args,description\n \ndef unregister_unpack_format(name):\n ''\n del _UNPACK_FORMATS[name]\n \ndef _ensure_directory(path):\n ''\n dirname=os.path.dirname(path)\n if not os.path.isdir(dirname):\n os.makedirs(dirname)\n \ndef _unpack_zipfile(filename,extract_dir):\n ''\n \n try :\n import zipfile\n except ImportError:\n raise ReadError('zlib not supported, cannot unpack this archive.')\n \n if not zipfile.is_zipfile(filename):\n raise ReadError(\"%s is not a zip file\"%filename)\n \n zip=zipfile.ZipFile(filename)\n try :\n for info in zip.infolist():\n name=info.filename\n \n \n if name.startswith('/')or '..'in name:\n continue\n \n target=os.path.join(extract_dir,*name.split('/'))\n if not target:\n continue\n \n _ensure_directory(target)\n if not name.endswith('/'):\n \n data=zip.read(info.filename)\n f=open(target,'wb')\n try :\n f.write(data)\n finally :\n f.close()\n del data\n finally :\n zip.close()\n \ndef _unpack_tarfile(filename,extract_dir):\n ''\n \n try :\n tarobj=tarfile.open(filename)\n except tarfile.TarError:\n raise ReadError(\n \"%s is not a compressed or uncompressed tar file\"%filename)\n try :\n tarobj.extractall(extract_dir)\n finally :\n tarobj.close()\n \n_UNPACK_FORMATS={\n'gztar':(['.tar.gz','.tgz'],_unpack_tarfile,[],\"gzip'ed tar-file\"),\n'tar':(['.tar'],_unpack_tarfile,[],\"uncompressed tar file\"),\n'zip':(['.zip'],_unpack_zipfile,[],\"ZIP file\")\n}\n\nif _BZ2_SUPPORTED:\n _UNPACK_FORMATS['bztar']=(['.bz2'],_unpack_tarfile,[],\n \"bzip2'ed tar-file\")\n \ndef _find_unpack_format(filename):\n for name,info in _UNPACK_FORMATS.items():\n for extension in info[0]:\n if filename.endswith(extension):\n return name\n return None\n \ndef unpack_archive(filename,extract_dir=None ,format=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n if extract_dir is None :\n extract_dir=os.getcwd()\n \n if format is not None :\n try :\n format_info=_UNPACK_FORMATS[format]\n except KeyError:\n raise ValueError(\"Unknown unpack format '{0}'\".format(format))\n \n func=format_info[1]\n func(filename,extract_dir,**dict(format_info[2]))\n else :\n \n format=_find_unpack_format(filename)\n if format is None :\n raise ReadError(\"Unknown archive format '{0}'\".format(filename))\n \n func=_UNPACK_FORMATS[format][1]\n kwargs=dict(_UNPACK_FORMATS[format][2])\n func(filename,extract_dir,**kwargs)\n \n \nif hasattr(os,'statvfs'):\n\n __all__.append('disk_usage')\n _ntuple_diskusage=collections.namedtuple('usage','total used free')\n \n def disk_usage(path):\n ''\n\n\n\n \n st=os.statvfs(path)\n free=st.f_bavail *st.f_frsize\n total=st.f_blocks *st.f_frsize\n used=(st.f_blocks -st.f_bfree)*st.f_frsize\n return _ntuple_diskusage(total,used,free)\n \nelif os.name =='nt':\n\n import nt\n __all__.append('disk_usage')\n _ntuple_diskusage=collections.namedtuple('usage','total used free')\n \n def disk_usage(path):\n ''\n\n\n\n \n total,free=nt._getdiskusage(path)\n used=total -free\n return _ntuple_diskusage(total,used,free)\n \n \ndef chown(path,user=None ,group=None ):\n ''\n\n\n\n \n \n if user is None and group is None :\n raise ValueError(\"user and/or group must be set\")\n \n _user=user\n _group=group\n \n \n if user is None :\n _user=-1\n \n elif isinstance(user,str):\n _user=_get_uid(user)\n if _user is None :\n raise LookupError(\"no such user: {!r}\".format(user))\n \n if group is None :\n _group=-1\n elif not isinstance(group,int):\n _group=_get_gid(group)\n if _group is None :\n raise LookupError(\"no such group: {!r}\".format(group))\n \n os.chown(path,_user,_group)\n \ndef get_terminal_size(fallback=(80,24)):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n try :\n columns=int(os.environ['COLUMNS'])\n except (KeyError,ValueError):\n columns=0\n \n try :\n lines=int(os.environ['LINES'])\n except (KeyError,ValueError):\n lines=0\n \n \n if columns <=0 or lines <=0:\n try :\n size=os.get_terminal_size(sys.__stdout__.fileno())\n except (NameError,OSError):\n size=os.terminal_size(fallback)\n if columns <=0:\n columns=size.columns\n if lines <=0:\n lines=size.lines\n \n return os.terminal_size((columns,lines))\n \ndef which(cmd,mode=os.F_OK |os.X_OK,path=None ):\n ''\n\n\n\n\n\n\n\n \n \n \n \n def _access_check(fn,mode):\n return (os.path.exists(fn)and os.access(fn,mode)\n and not os.path.isdir(fn))\n \n \n \n \n if os.path.dirname(cmd):\n if _access_check(cmd,mode):\n return cmd\n return None\n \n if path is None :\n path=os.environ.get(\"PATH\",os.defpath)\n if not path:\n return None\n path=path.split(os.pathsep)\n \n if sys.platform ==\"win32\":\n \n if not os.curdir in path:\n path.insert(0,os.curdir)\n \n \n pathext=os.environ.get(\"PATHEXT\",\"\").split(os.pathsep)\n \n \n \n \n if any(cmd.lower().endswith(ext.lower())for ext in pathext):\n files=[cmd]\n else :\n files=[cmd+ext for ext in pathext]\n else :\n \n \n files=[cmd]\n \n seen=set()\n for dir in path:\n normdir=os.path.normcase(dir)\n if not normdir in seen:\n seen.add(normdir)\n for thefile in files:\n name=os.path.join(dir,thefile)\n if _access_check(name,mode):\n return name\n return None\n",["collections","distutils.errors","distutils.spawn","errno","fnmatch","nt","os","os.path","pwd","stat","sys","tarfile","zipfile"]],signal:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCTRL_BREAK_EVENT=1\nCTRL_C_EVENT=0\nNSIG=23\nSIGABRT=22\nSIGBREAK=21\nSIGFPE=8\nSIGILL=4\nSIGINT=2\nSIGSEGV=11\nSIGTERM=15\nSIG_DFL=0\nSIG_IGN=1\n\ndef signal(signalnum,handler):\n pass\n",[]],site:[".py","import sys\n",["sys"]],socket:[".py",'\n\n\n"""\\\nThis module provides socket operations and some related functions.\nOn Unix, it supports IP (Internet Protocol) and Unix domain sockets.\nOn other systems, it only supports IP. Functions specific for a\nsocket are available as methods of the socket object.\n\nFunctions:\n\nsocket() -- create a new socket object\nsocketpair() -- create a pair of new socket objects [*]\nfromfd() -- create a socket object from an open file descriptor [*]\nfromshare() -- create a socket object from data received from socket.share() [*]\ngethostname() -- return the current hostname\ngethostbyname() -- map a hostname to its IP number\ngethostbyaddr() -- map an IP number or hostname to DNS info\ngetservbyname() -- map a service name and a protocol name to a port number\ngetprotobyname() -- map a protocol name (e.g. \'tcp\') to a number\nntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order\nhtons(), htonl() -- convert 16, 32 bit int from host to network byte order\ninet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format\ninet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)\nsocket.getdefaulttimeout() -- get the default timeout value\nsocket.setdefaulttimeout() -- set the default timeout value\ncreate_connection() -- connects to an address, with an optional timeout and\n optional source address.\n\n [*] not available on all platforms!\n\nSpecial objects:\n\nSocketType -- type object for socket objects\nerror -- exception raised for I/O errors\nhas_ipv6 -- boolean value indicating if IPv6 is supported\n\nInteger constants:\n\nAF_INET, AF_UNIX -- socket domains (first argument to socket() call)\nSOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)\n\nMany other constants may be defined; these may be used in calls to\nthe setsockopt() and getsockopt() methods.\n"""\n\nimport _socket\nfrom _socket import *\n\nimport os,sys,io\n\ntry :\n import errno\nexcept ImportError:\n errno=None\nEBADF=getattr(errno,\'EBADF\',9)\nEAGAIN=getattr(errno,\'EAGAIN\',11)\nEWOULDBLOCK=getattr(errno,\'EWOULDBLOCK\',11)\n\n__all__=["getfqdn","create_connection"]\n__all__.extend(os._get_exports_list(_socket))\n\n\n_realsocket=socket\n\n\nif sys.platform.lower().startswith("win"):\n errorTab={}\n errorTab[10004]="The operation was interrupted."\n errorTab[10009]="A bad file handle was passed."\n errorTab[10013]="Permission denied."\n errorTab[10014]="A fault occurred on the network??"\n errorTab[10022]="An invalid operation was attempted."\n errorTab[10035]="The socket operation would block"\n errorTab[10036]="A blocking operation is already in progress."\n errorTab[10048]="The network address is in use."\n errorTab[10054]="The connection has been reset."\n errorTab[10058]="The network has been shut down."\n errorTab[10060]="The operation timed out."\n errorTab[10061]="Connection refused."\n errorTab[10063]="The name is too long."\n errorTab[10064]="The host is down."\n errorTab[10065]="The host is unreachable."\n __all__.append("errorTab")\n \n \nclass socket(_socket.socket):\n\n \'\'\n \n __slots__=["__weakref__","_io_refs","_closed"]\n \n def __init__(self,family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None ):\n _socket.socket.__init__(self,family,type,proto,fileno)\n self._io_refs=0\n self._closed=False\n \n def __enter__(self):\n return self\n \n def __exit__(self,*args):\n if not self._closed:\n self.close()\n \n def __repr__(self):\n \'\'\n s=_socket.socket.__repr__(self)\n if s.startswith("0:\n self._io_refs -=1\n if self._closed:\n self.close()\n \n def _real_close(self,_ss=_socket.socket):\n \n _ss.close(self)\n \n def close(self):\n \n self._closed=True\n if self._io_refs <=0:\n self._real_close()\n \n def detach(self):\n \'\'\n\n\n\n\n \n self._closed=True\n return super().detach()\n \ndef fromfd(fd,family,type,proto=0):\n \'\'\n\n\n\n \n nfd=dup(fd)\n return socket(family,type,proto,nfd)\n \nif hasattr(_socket.socket,"share"):\n def fromshare(info):\n \'\'\n\n\n\n \n return socket(0,0,0,info)\n \nif hasattr(_socket,"socketpair"):\n\n def socketpair(family=None ,type=SOCK_STREAM,proto=0):\n \'\'\n\n\n\n\n\n \n if family is None :\n try :\n family=AF_UNIX\n except NameError:\n family=AF_INET\n a,b=_socket.socketpair(family,type,proto)\n a=socket(family,type,proto,a.detach())\n b=socket(family,type,proto,b.detach())\n return a,b\n \n \n_blocking_errnos={EAGAIN,EWOULDBLOCK}\n\nclass SocketIO(io.RawIOBase):\n\n \'\'\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n def __init__(self,sock,mode):\n if mode not in ("r","w","rw","rb","wb","rwb"):\n raise ValueError("invalid mode: %r"%mode)\n io.RawIOBase.__init__(self)\n self._sock=sock\n if "b"not in mode:\n mode +="b"\n self._mode=mode\n self._reading="r"in mode\n self._writing="w"in mode\n self._timeout_occurred=False\n \n def readinto(self,b):\n \'\'\n\n\n\n\n\n \n self._checkClosed()\n self._checkReadable()\n if self._timeout_occurred:\n raise IOError("cannot read from timed out object")\n while True :\n try :\n return self._sock.recv_into(b)\n except timeout:\n self._timeout_occurred=True\n raise\n except InterruptedError:\n continue\n except error as e:\n if e.args[0]in _blocking_errnos:\n return None\n raise\n \n def write(self,b):\n \'\'\n\n\n\n \n self._checkClosed()\n self._checkWritable()\n try :\n return self._sock.send(b)\n except error as e:\n \n if e.args[0]in _blocking_errnos:\n return None\n raise\n \n def readable(self):\n \'\'\n \n if self.closed:\n raise ValueError("I/O operation on closed socket.")\n return self._reading\n \n def writable(self):\n \'\'\n \n if self.closed:\n raise ValueError("I/O operation on closed socket.")\n return self._writing\n \n def seekable(self):\n \'\'\n \n if self.closed:\n raise ValueError("I/O operation on closed socket.")\n return super().seekable()\n \n def fileno(self):\n \'\'\n \n self._checkClosed()\n return self._sock.fileno()\n \n @property\n def name(self):\n if not self.closed:\n return self.fileno()\n else :\n return -1\n \n @property\n def mode(self):\n return self._mode\n \n def close(self):\n \'\'\n\n \n if self.closed:\n return\n io.RawIOBase.close(self)\n self._sock._decref_socketios()\n self._sock=None\n \n \ndef getfqdn(name=\'\'):\n \'\'\n\n\n\n\n\n\n \n name=name.strip()\n if not name or name ==\'0.0.0.0\':\n name=gethostname()\n try :\n hostname,aliases,ipaddrs=gethostbyaddr(name)\n except error:\n pass\n else :\n aliases.insert(0,hostname)\n for name in aliases:\n if \'.\'in name:\n break\n else :\n name=hostname\n return name\n \n \n_GLOBAL_DEFAULT_TIMEOUT=object()\n\ndef create_connection(address,timeout=_GLOBAL_DEFAULT_TIMEOUT,\nsource_address=None ):\n \'\'\n\n\n\n\n\n\n\n\n\n \n \n host,port=address\n err=None\n for res in getaddrinfo(host,port,0,SOCK_STREAM):\n af,socktype,proto,canonname,sa=res\n sock=None\n try :\n sock=socket(af,socktype,proto)\n if timeout is not _GLOBAL_DEFAULT_TIMEOUT:\n sock.settimeout(timeout)\n if source_address:\n sock.bind(source_address)\n sock.connect(sa)\n return sock\n \n except error as _:\n err=_\n if sock is not None :\n sock.close()\n \n if err is not None :\n raise err\n else :\n raise error("getaddrinfo returns an empty list")\n',["_socket","errno","io","os","sys"]],sre_compile:[".py",'\n\n\n\n\n\n\n\n\n\n"""Internal support module for sre"""\n\n\nimport sys\nimport _sre\nimport sre_parse\nfrom sre_constants import *\nfrom _sre import MAXREPEAT\n\n\nassert _sre.MAGIC ==MAGIC,"SRE module mismatch"\n\nif _sre.CODESIZE ==2:\n MAXCODE=65535\nelse :\n MAXCODE=0xFFFFFFFF\n \ndef _identityfunction(x):\n return x\n \n \n_LITERAL_CODES=set([LITERAL,NOT_LITERAL])\n_REPEATING_CODES=set([REPEAT,MIN_REPEAT,MAX_REPEAT])\n_SUCCESS_CODES=set([SUCCESS,FAILURE])\n_ASSERT_CODES=set([ASSERT,ASSERT_NOT])\n\ndef _compile(code,pattern,flags):\n\n emit=code.append\n _len=len\n LITERAL_CODES=_LITERAL_CODES\n REPEATING_CODES=_REPEATING_CODES\n SUCCESS_CODES=_SUCCESS_CODES\n ASSERT_CODES=_ASSERT_CODES\n for op,av in pattern:\n \n \n if op in LITERAL_CODES:\n if flags&SRE_FLAG_IGNORECASE:\n emit(OPCODES[OP_IGNORE[op]])\n emit(_sre.getlower(av,flags))\n else :\n emit(OPCODES[op])\n emit(av)\n elif op is IN:\n if flags&SRE_FLAG_IGNORECASE:\n emit(OPCODES[OP_IGNORE[op]])\n def fixup(literal,flags=flags):\n return _sre.getlower(literal,flags)\n else :\n emit(OPCODES[op])\n fixup=_identityfunction\n skip=_len(code);emit(0)\n _compile_charset(av,flags,code,fixup)\n code[skip]=_len(code)-skip\n elif op is ANY:\n if flags&SRE_FLAG_DOTALL:\n emit(OPCODES[ANY_ALL])\n else :\n emit(OPCODES[ANY])\n elif op in REPEATING_CODES:\n if flags&SRE_FLAG_TEMPLATE:\n raise error("internal: unsupported template operator")\n emit(OPCODES[REPEAT])\n skip=_len(code);emit(0)\n emit(av[0])\n emit(av[1])\n _compile(code,av[2],flags)\n emit(OPCODES[SUCCESS])\n code[skip]=_len(code)-skip\n elif _simple(av)and op is not REPEAT:\n if op is MAX_REPEAT:\n emit(OPCODES[REPEAT_ONE])\n else :\n emit(OPCODES[MIN_REPEAT_ONE])\n skip=_len(code);emit(0)\n emit(av[0])\n emit(av[1])\n _compile(code,av[2],flags)\n emit(OPCODES[SUCCESS])\n code[skip]=_len(code)-skip\n else :\n emit(OPCODES[REPEAT])\n skip=_len(code);emit(0)\n emit(av[0])\n emit(av[1])\n _compile(code,av[2],flags)\n code[skip]=_len(code)-skip\n if op is MAX_REPEAT:\n emit(OPCODES[MAX_UNTIL])\n else :\n emit(OPCODES[MIN_UNTIL])\n elif op is SUBPATTERN:\n if av[0]:\n emit(OPCODES[MARK])\n emit((av[0]-1)*2)\n \n _compile(code,av[1],flags)\n if av[0]:\n emit(OPCODES[MARK])\n emit((av[0]-1)*2+1)\n elif op in SUCCESS_CODES:\n emit(OPCODES[op])\n elif op in ASSERT_CODES:\n emit(OPCODES[op])\n skip=_len(code);emit(0)\n if av[0]>=0:\n emit(0)\n else :\n lo,hi=av[1].getwidth()\n if lo !=hi:\n raise error("look-behind requires fixed-width pattern")\n emit(lo)\n _compile(code,av[1],flags)\n emit(OPCODES[SUCCESS])\n code[skip]=_len(code)-skip\n elif op is CALL:\n emit(OPCODES[op])\n skip=_len(code);emit(0)\n _compile(code,av,flags)\n emit(OPCODES[SUCCESS])\n code[skip]=_len(code)-skip\n elif op is AT:\n emit(OPCODES[op])\n if flags&SRE_FLAG_MULTILINE:\n av=AT_MULTILINE.get(av,av)\n if flags&SRE_FLAG_LOCALE:\n av=AT_LOCALE.get(av,av)\n elif flags&SRE_FLAG_UNICODE:\n av=AT_UNICODE.get(av,av)\n emit(ATCODES[av])\n elif op is BRANCH:\n emit(OPCODES[op])\n tail=[]\n tailappend=tail.append\n for av in av[1]:\n skip=_len(code);emit(0)\n \n _compile(code,av,flags)\n emit(OPCODES[JUMP])\n tailappend(_len(code));emit(0)\n code[skip]=_len(code)-skip\n emit(0)\n for tail in tail:\n code[tail]=_len(code)-tail\n elif op is CATEGORY:\n emit(OPCODES[op])\n if flags&SRE_FLAG_LOCALE:\n av=CH_LOCALE[av]\n elif flags&SRE_FLAG_UNICODE:\n av=CH_UNICODE[av]\n emit(CHCODES[av])\n elif op is GROUPREF:\n if flags&SRE_FLAG_IGNORECASE:\n emit(OPCODES[OP_IGNORE[op]])\n else :\n emit(OPCODES[op])\n emit(av -1)\n elif op is GROUPREF_EXISTS:\n emit(OPCODES[op])\n emit(av[0]-1)\n skipyes=_len(code);emit(0)\n _compile(code,av[1],flags)\n if av[2]:\n emit(OPCODES[JUMP])\n skipno=_len(code);emit(0)\n code[skipyes]=_len(code)-skipyes+1\n _compile(code,av[2],flags)\n code[skipno]=_len(code)-skipno\n else :\n code[skipyes]=_len(code)-skipyes+1\n else :\n raise ValueError("unsupported operand type",op)\n \ndef _compile_charset(charset,flags,code,fixup=None ):\n\n emit=code.append\n if fixup is None :\n fixup=_identityfunction\n for op,av in _optimize_charset(charset,fixup):\n emit(OPCODES[op])\n if op is NEGATE:\n pass\n elif op is LITERAL:\n emit(fixup(av))\n elif op is RANGE:\n emit(fixup(av[0]))\n emit(fixup(av[1]))\n elif op is CHARSET:\n code.extend(av)\n elif op is BIGCHARSET:\n code.extend(av)\n elif op is CATEGORY:\n if flags&SRE_FLAG_LOCALE:\n emit(CHCODES[CH_LOCALE[av]])\n elif flags&SRE_FLAG_UNICODE:\n emit(CHCODES[CH_UNICODE[av]])\n else :\n emit(CHCODES[av])\n else :\n raise error("internal: unsupported set operator")\n emit(OPCODES[FAILURE])\n \n \ndef _optimize_charset(charset,fixup):\n\n out=[]\n outappend=out.append\n charmap=[0]*256\n try :\n for op,av in charset:\n if op is NEGATE:\n outappend((op,av))\n elif op is LITERAL:\n charmap[fixup(av)]=1\n elif op is RANGE:\n for i in range(fixup(av[0]),fixup(av[1])+1):\n charmap[i]=1\n elif op is CATEGORY:\n \n return charset\n except IndexError:\n \n return _optimize_unicode(charset,fixup)\n \n i=p=n=0\n runs=[]\n runsappend=runs.append\n for c in charmap:\n if c:\n if n ==0:\n p=i\n n=n+1\n elif n:\n runsappend((p,n))\n n=0\n i=i+1\n if n:\n runsappend((p,n))\n if len(runs)<=2:\n \n for p,n in runs:\n if n ==1:\n outappend((LITERAL,p))\n else :\n outappend((RANGE,(p,p+n -1)))\n if len(out)MAXCODE:\n dataappend(v)\n m,v=start\n return data\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \ndef _optimize_unicode(charset,fixup):\n try :\n import array\n except ImportError:\n return charset\n charmap=[0]*65536\n negate=0\n try :\n for op,av in charset:\n if op is NEGATE:\n negate=1\n elif op is LITERAL:\n charmap[fixup(av)]=1\n elif op is RANGE:\n for i in range(fixup(av[0]),fixup(av[1])+1):\n charmap[i]=1\n elif op is CATEGORY:\n \n return charset\n except IndexError:\n \n return charset\n if negate:\n if sys.maxunicode !=65535:\n \n \n \n return charset\n for i in range(65536):\n charmap[i]=not charmap[i]\n comps={}\n mapping=[0]*256\n block=0\n data=[]\n for i in range(256):\n chunk=tuple(charmap[i *256:(i+1)*256])\n new=comps.setdefault(chunk,block)\n mapping[i]=new\n if new ==block:\n block=block+1\n data=data+_mk_bitmap(chunk)\n header=[block]\n if _sre.CODESIZE ==2:\n code=\'H\'\n else :\n code=\'I\'\n \n mapping=array.array(\'b\',mapping).tobytes()\n \n mapping=array.array(code,mapping)\n assert mapping.itemsize ==_sre.CODESIZE\n assert len(mapping)*mapping.itemsize ==256\n header=header+mapping.tolist()\n data[0:0]=header\n return [(BIGCHARSET,data)]\n \ndef _simple(av):\n\n lo,hi=av[2].getwidth()\n if lo ==0 and hi ==MAXREPEAT:\n raise error("nothing to repeat")\n return lo ==hi ==1 and av[2][0][0]!=SUBPATTERN\n \ndef _compile_info(code,pattern,flags):\n\n\n\n lo,hi=pattern.getwidth()\n \n if lo ==0:\n return\n \n prefix=[]\n prefixappend=prefix.append\n prefix_skip=0\n charset=[]\n charsetappend=charset.append\n if not (flags&SRE_FLAG_IGNORECASE):\n \n for op,av in pattern.data:\n \n if op is LITERAL:\n if len(prefix)==prefix_skip:\n prefix_skip=prefix_skip+1\n prefixappend(av)\n elif op is SUBPATTERN and len(av[1])==1:\n op,av=av[1][0]\n if op is LITERAL:\n prefixappend(av)\n else :\n break\n else :\n break\n \n if not prefix and pattern.data:\n op,av=pattern.data[0]\n if op is SUBPATTERN and av[1]:\n op,av=av[1][0]\n if op is LITERAL:\n charsetappend((op,av))\n elif op is BRANCH:\n c=[]\n cappend=c.append\n for p in av[1]:\n if not p:\n break\n op,av=p[0]\n if op is LITERAL:\n cappend((op,av))\n else :\n break\n else :\n charset=c\n elif op is BRANCH:\n c=[]\n cappend=c.append\n for p in av[1]:\n if not p:\n break\n op,av=p[0]\n if op is LITERAL:\n cappend((op,av))\n else :\n break\n else :\n charset=c\n elif op is IN:\n charset=av\n \n \n \n \n \n \n \n emit=code.append\n emit(OPCODES[INFO])\n skip=len(code);emit(0)\n \n mask=0\n if prefix:\n mask=SRE_INFO_PREFIX\n if len(prefix)==prefix_skip ==len(pattern.data):\n mask=mask+SRE_INFO_LITERAL\n elif charset:\n mask=mask+SRE_INFO_CHARSET\n emit(mask)\n \n if lo 0 and prefix[i]!=prefix[table[i+1]-1]:\n table[i+1]=table[table[i+1]-1]+1\n code.extend(table[1:])\n elif charset:\n _compile_charset(charset,flags,code)\n code[skip]=len(code)-skip\n \ndef isstring(obj):\n return isinstance(obj,(str,bytes))\n \ndef _code(p,flags):\n\n flags=p.pattern.flags |flags\n code=[]\n \n \n _compile_info(code,p,flags)\n \n \n _compile(code,p.data,flags)\n \n code.append(OPCODES[SUCCESS])\n \n return code\n \ndef compile(p,flags=0):\n\n\n\n if isstring(p):\n pattern=p\n p=sre_parse.parse(p,flags)\n else :\n pattern=None\n \n \n code=_code(p,flags)\n \n \n \n \n \n if p.pattern.groups >100:\n raise AssertionError(\n "sorry, but this version only supports 100 named groups"\n )\n \n \n groupindex=p.pattern.groupdict\n indexgroup=[None ]*p.pattern.groups\n for k,i in groupindex.items():\n indexgroup[i]=k\n \n return _sre.compile(\n pattern,flags |p.pattern.flags,code,\n p.pattern.groups -1,\n groupindex,indexgroup\n )\n',["_sre","array","sre_constants","sre_parse","sys"]],sre_constants:[".py",'\n\n\n\n\n\n\n\n\n\n\n"""Internal support module for sre"""\n\n\n\nMAGIC=20031017\n\n\n\n\n\n\n\nclass error(Exception):\n pass\n \n \n \nFAILURE="failure"\nSUCCESS="success"\n\nANY="any"\nANY_ALL="any_all"\nASSERT="assert"\nASSERT_NOT="assert_not"\nAT="at"\nBIGCHARSET="bigcharset"\nBRANCH="branch"\nCALL="call"\nCATEGORY="category"\nCHARSET="charset"\nGROUPREF="groupref"\nGROUPREF_IGNORE="groupref_ignore"\nGROUPREF_EXISTS="groupref_exists"\nIN="in"\nIN_IGNORE="in_ignore"\nINFO="info"\nJUMP="jump"\nLITERAL="literal"\nLITERAL_IGNORE="literal_ignore"\nMARK="mark"\nMAX_REPEAT="max_repeat"\nMAX_UNTIL="max_until"\nMIN_REPEAT="min_repeat"\nMIN_UNTIL="min_until"\nNEGATE="negate"\nNOT_LITERAL="not_literal"\nNOT_LITERAL_IGNORE="not_literal_ignore"\nRANGE="range"\nREPEAT="repeat"\nREPEAT_ONE="repeat_one"\nSUBPATTERN="subpattern"\nMIN_REPEAT_ONE="min_repeat_one"\n\n\nAT_BEGINNING="at_beginning"\nAT_BEGINNING_LINE="at_beginning_line"\nAT_BEGINNING_STRING="at_beginning_string"\nAT_BOUNDARY="at_boundary"\nAT_NON_BOUNDARY="at_non_boundary"\nAT_END="at_end"\nAT_END_LINE="at_end_line"\nAT_END_STRING="at_end_string"\nAT_LOC_BOUNDARY="at_loc_boundary"\nAT_LOC_NON_BOUNDARY="at_loc_non_boundary"\nAT_UNI_BOUNDARY="at_uni_boundary"\nAT_UNI_NON_BOUNDARY="at_uni_non_boundary"\n\n\nCATEGORY_DIGIT="category_digit"\nCATEGORY_NOT_DIGIT="category_not_digit"\nCATEGORY_SPACE="category_space"\nCATEGORY_NOT_SPACE="category_not_space"\nCATEGORY_WORD="category_word"\nCATEGORY_NOT_WORD="category_not_word"\nCATEGORY_LINEBREAK="category_linebreak"\nCATEGORY_NOT_LINEBREAK="category_not_linebreak"\nCATEGORY_LOC_WORD="category_loc_word"\nCATEGORY_LOC_NOT_WORD="category_loc_not_word"\nCATEGORY_UNI_DIGIT="category_uni_digit"\nCATEGORY_UNI_NOT_DIGIT="category_uni_not_digit"\nCATEGORY_UNI_SPACE="category_uni_space"\nCATEGORY_UNI_NOT_SPACE="category_uni_not_space"\nCATEGORY_UNI_WORD="category_uni_word"\nCATEGORY_UNI_NOT_WORD="category_uni_not_word"\nCATEGORY_UNI_LINEBREAK="category_uni_linebreak"\nCATEGORY_UNI_NOT_LINEBREAK="category_uni_not_linebreak"\n\nOPCODES=[\n\n\nFAILURE,SUCCESS,\n\nANY,ANY_ALL,\nASSERT,ASSERT_NOT,\nAT,\nBRANCH,\nCALL,\nCATEGORY,\nCHARSET,BIGCHARSET,\nGROUPREF,GROUPREF_EXISTS,GROUPREF_IGNORE,\nIN,IN_IGNORE,\nINFO,\nJUMP,\nLITERAL,LITERAL_IGNORE,\nMARK,\nMAX_UNTIL,\nMIN_UNTIL,\nNOT_LITERAL,NOT_LITERAL_IGNORE,\nNEGATE,\nRANGE,\nREPEAT,\nREPEAT_ONE,\nSUBPATTERN,\nMIN_REPEAT_ONE\n\n]\n\nATCODES=[\nAT_BEGINNING,AT_BEGINNING_LINE,AT_BEGINNING_STRING,AT_BOUNDARY,\nAT_NON_BOUNDARY,AT_END,AT_END_LINE,AT_END_STRING,\nAT_LOC_BOUNDARY,AT_LOC_NON_BOUNDARY,AT_UNI_BOUNDARY,\nAT_UNI_NON_BOUNDARY\n]\n\nCHCODES=[\nCATEGORY_DIGIT,CATEGORY_NOT_DIGIT,CATEGORY_SPACE,\nCATEGORY_NOT_SPACE,CATEGORY_WORD,CATEGORY_NOT_WORD,\nCATEGORY_LINEBREAK,CATEGORY_NOT_LINEBREAK,CATEGORY_LOC_WORD,\nCATEGORY_LOC_NOT_WORD,CATEGORY_UNI_DIGIT,CATEGORY_UNI_NOT_DIGIT,\nCATEGORY_UNI_SPACE,CATEGORY_UNI_NOT_SPACE,CATEGORY_UNI_WORD,\nCATEGORY_UNI_NOT_WORD,CATEGORY_UNI_LINEBREAK,\nCATEGORY_UNI_NOT_LINEBREAK\n]\n\ndef makedict(list):\n d={}\n i=0\n for item in list:\n d[item]=i\n i=i+1\n return d\n \nOPCODES=makedict(OPCODES)\nATCODES=makedict(ATCODES)\nCHCODES=makedict(CHCODES)\n\n\nOP_IGNORE={\nGROUPREF:GROUPREF_IGNORE,\nIN:IN_IGNORE,\nLITERAL:LITERAL_IGNORE,\nNOT_LITERAL:NOT_LITERAL_IGNORE\n}\n\nAT_MULTILINE={\nAT_BEGINNING:AT_BEGINNING_LINE,\nAT_END:AT_END_LINE\n}\n\nAT_LOCALE={\nAT_BOUNDARY:AT_LOC_BOUNDARY,\nAT_NON_BOUNDARY:AT_LOC_NON_BOUNDARY\n}\n\nAT_UNICODE={\nAT_BOUNDARY:AT_UNI_BOUNDARY,\nAT_NON_BOUNDARY:AT_UNI_NON_BOUNDARY\n}\n\nCH_LOCALE={\nCATEGORY_DIGIT:CATEGORY_DIGIT,\nCATEGORY_NOT_DIGIT:CATEGORY_NOT_DIGIT,\nCATEGORY_SPACE:CATEGORY_SPACE,\nCATEGORY_NOT_SPACE:CATEGORY_NOT_SPACE,\nCATEGORY_WORD:CATEGORY_LOC_WORD,\nCATEGORY_NOT_WORD:CATEGORY_LOC_NOT_WORD,\nCATEGORY_LINEBREAK:CATEGORY_LINEBREAK,\nCATEGORY_NOT_LINEBREAK:CATEGORY_NOT_LINEBREAK\n}\n\nCH_UNICODE={\nCATEGORY_DIGIT:CATEGORY_UNI_DIGIT,\nCATEGORY_NOT_DIGIT:CATEGORY_UNI_NOT_DIGIT,\nCATEGORY_SPACE:CATEGORY_UNI_SPACE,\nCATEGORY_NOT_SPACE:CATEGORY_UNI_NOT_SPACE,\nCATEGORY_WORD:CATEGORY_UNI_WORD,\nCATEGORY_NOT_WORD:CATEGORY_UNI_NOT_WORD,\nCATEGORY_LINEBREAK:CATEGORY_UNI_LINEBREAK,\nCATEGORY_NOT_LINEBREAK:CATEGORY_UNI_NOT_LINEBREAK\n}\n\n\nSRE_FLAG_TEMPLATE=1\nSRE_FLAG_IGNORECASE=2\nSRE_FLAG_LOCALE=4\nSRE_FLAG_MULTILINE=8\nSRE_FLAG_DOTALL=16\nSRE_FLAG_UNICODE=32\nSRE_FLAG_VERBOSE=64\nSRE_FLAG_DEBUG=128\nSRE_FLAG_ASCII=256\n\n\nSRE_INFO_PREFIX=1\nSRE_INFO_LITERAL=2\nSRE_INFO_CHARSET=4\n\nif __name__ =="__main__":\n def dump(f,d,prefix):\n items=sorted(d.items(),key=lambda a:a[1])\n for k,v in items:\n f.write("#define %s_%s %s\\n"%(prefix,k.upper(),v))\n f=open("sre_constants.h","w")\n f.write("""\\\n/*\n * Secret Labs\' Regular Expression Engine\n *\n * regular expression matching engine\n *\n * NOTE: This file is generated by sre_constants.py. If you need\n * to change anything in here, edit sre_constants.py and run it.\n *\n * Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved.\n *\n * See the _sre.c file for information on usage and redistribution.\n */\n\n""")\n \n f.write("#define SRE_MAGIC %d\\n"%MAGIC)\n \n dump(f,OPCODES,"SRE_OP")\n dump(f,ATCODES,"SRE")\n dump(f,CHCODES,"SRE")\n \n f.write("#define SRE_FLAG_TEMPLATE %d\\n"%SRE_FLAG_TEMPLATE)\n f.write("#define SRE_FLAG_IGNORECASE %d\\n"%SRE_FLAG_IGNORECASE)\n f.write("#define SRE_FLAG_LOCALE %d\\n"%SRE_FLAG_LOCALE)\n f.write("#define SRE_FLAG_MULTILINE %d\\n"%SRE_FLAG_MULTILINE)\n f.write("#define SRE_FLAG_DOTALL %d\\n"%SRE_FLAG_DOTALL)\n f.write("#define SRE_FLAG_UNICODE %d\\n"%SRE_FLAG_UNICODE)\n f.write("#define SRE_FLAG_VERBOSE %d\\n"%SRE_FLAG_VERBOSE)\n \n f.write("#define SRE_INFO_PREFIX %d\\n"%SRE_INFO_PREFIX)\n f.write("#define SRE_INFO_LITERAL %d\\n"%SRE_INFO_LITERAL)\n f.write("#define SRE_INFO_CHARSET %d\\n"%SRE_INFO_CHARSET)\n \n f.close()\n print("done")\n',[]],sre_parse:[".py",'\n\n\n\n\n\n\n\n\n\n"""Internal support module for sre"""\n\n\n\nimport sys\n\nfrom sre_constants import *\nfrom _sre import MAXREPEAT\n\nSPECIAL_CHARS=".\\\\[{()*+?^$|"\nREPEAT_CHARS="*+?{"\n\nDIGITS=set("0123456789")\n\nOCTDIGITS=set("01234567")\nHEXDIGITS=set("0123456789abcdefABCDEF")\n\nWHITESPACE=set(" \\t\\n\\r\\v\\f")\n\nESCAPES={\nr"\\a":(LITERAL,ord("\\a")),\nr"\\b":(LITERAL,ord("\\b")),\nr"\\f":(LITERAL,ord("\\f")),\nr"\\n":(LITERAL,ord("\\n")),\nr"\\r":(LITERAL,ord("\\r")),\nr"\\t":(LITERAL,ord("\\t")),\nr"\\v":(LITERAL,ord("\\v")),\nr"\\\\":(LITERAL,ord("\\\\"))\n}\n\nCATEGORIES={\nr"\\A":(AT,AT_BEGINNING_STRING),\nr"\\b":(AT,AT_BOUNDARY),\nr"\\B":(AT,AT_NON_BOUNDARY),\nr"\\d":(IN,[(CATEGORY,CATEGORY_DIGIT)]),\nr"\\D":(IN,[(CATEGORY,CATEGORY_NOT_DIGIT)]),\nr"\\s":(IN,[(CATEGORY,CATEGORY_SPACE)]),\nr"\\S":(IN,[(CATEGORY,CATEGORY_NOT_SPACE)]),\nr"\\w":(IN,[(CATEGORY,CATEGORY_WORD)]),\nr"\\W":(IN,[(CATEGORY,CATEGORY_NOT_WORD)]),\nr"\\Z":(AT,AT_END_STRING),\n}\n\nFLAGS={\n\n"i":SRE_FLAG_IGNORECASE,\n"L":SRE_FLAG_LOCALE,\n"m":SRE_FLAG_MULTILINE,\n"s":SRE_FLAG_DOTALL,\n"x":SRE_FLAG_VERBOSE,\n\n"a":SRE_FLAG_ASCII,\n"t":SRE_FLAG_TEMPLATE,\n"u":SRE_FLAG_UNICODE,\n}\n\nclass Pattern:\n\n def __init__(self):\n self.flags=0\n self.open=[]\n self.groups=1\n self.groupdict={}\n def opengroup(self,name=None ):\n gid=self.groups\n self.groups=gid+1\n if name is not None :\n ogid=self.groupdict.get(name,None )\n if ogid is not None :\n raise error("redefinition of group name %s as group %d; "\n "was group %d"%(repr(name),gid,ogid))\n self.groupdict[name]=gid\n self.open.append(gid)\n return gid\n def closegroup(self,gid):\n self.open.remove(gid)\n def checkgroup(self,gid):\n return gid 0:\n print(level *" "+"or")\n a.dump(level+1);nl=1\n i=i+1\n elif isinstance(av,seqtypes):\n for a in av:\n if isinstance(a,SubPattern):\n if not nl:print()\n a.dump(level+1);nl=1\n else :\n print(a,end=\' \');nl=0\n else :\n print(av,end=\' \');nl=0\n if not nl:print()\n def __repr__(self):\n return repr(self.data)\n def __len__(self):\n return len(self.data)\n def __delitem__(self,index):\n del self.data[index]\n def __getitem__(self,index):\n if isinstance(index,slice):\n return SubPattern(self.pattern,self.data[index])\n return self.data[index]\n def __setitem__(self,index,code):\n self.data[index]=code\n def insert(self,index,code):\n self.data.insert(index,code)\n def append(self,code):\n self.data.append(code)\n def getwidth(self):\n \n if self.width:\n return self.width\n lo=hi=0\n UNITCODES=(ANY,RANGE,IN,LITERAL,NOT_LITERAL,CATEGORY)\n REPEATCODES=(MIN_REPEAT,MAX_REPEAT)\n for op,av in self.data:\n if op is BRANCH:\n i=sys.maxsize\n j=0\n for av in av[1]:\n l,h=av.getwidth()\n i=min(i,l)\n j=max(j,h)\n lo=lo+i\n hi=hi+j\n elif op is CALL:\n i,j=av.getwidth()\n lo=lo+i\n hi=hi+j\n elif op is SUBPATTERN:\n i,j=av[1].getwidth()\n lo=lo+i\n hi=hi+j\n elif op in REPEATCODES:\n i,j=av[2].getwidth()\n lo=lo+int(i)*av[0]\n hi=hi+int(j)*av[1]\n elif op in UNITCODES:\n lo=lo+1\n hi=hi+1\n elif op ==SUCCESS:\n break\n self.width=int(min(lo,sys.maxsize)),int(min(hi,sys.maxsize))\n return self.width\n \nclass Tokenizer:\n def __init__(self,string):\n self.istext=isinstance(string,str)\n self.string=string\n self.index=0\n self.__next()\n def __next(self):\n if self.index >=len(self.string):\n self.next=None\n return\n char=self.string[self.index:self.index+1]\n \n \n if char and not self.istext:\n char=chr(char[0])\n if char =="\\\\":\n try :\n c=self.string[self.index+1]\n except IndexError:\n raise error("bogus escape (end of line)")\n if not self.istext:\n c=chr(c)\n char=char+c\n self.index=self.index+len(char)\n self.next=char\n def match(self,char,skip=1):\n if char ==self.next:\n if skip:\n self.__next()\n return 1\n return 0\n def get(self):\n this=self.next\n self.__next()\n return this\n def getwhile(self,n,charset):\n result=\'\'\n for _ in range(n):\n c=self.next\n if c not in charset:\n break\n result +=c\n self.__next()\n return result\n def tell(self):\n return self.index,self.next\n def seek(self,index):\n self.index,self.next=index\n \ndef isident(char):\n return "a"<=char <="z"or "A"<=char <="Z"or char =="_"\n \ndef isdigit(char):\n return "0"<=char <="9"\n \ndef isname(name):\n\n if not isident(name[0]):\n return False\n for char in name[1:]:\n if not isident(char)and not isdigit(char):\n return False\n return True\n \ndef _class_escape(source,escape):\n\n code=ESCAPES.get(escape)\n if code:\n return code\n code=CATEGORIES.get(escape)\n if code and code[0]==IN:\n return code\n try :\n c=escape[1:2]\n if c =="x":\n \n escape +=source.getwhile(2,HEXDIGITS)\n if len(escape)!=4:\n raise ValueError\n return LITERAL,int(escape[2:],16)&0xff\n elif c =="u"and source.istext:\n \n escape +=source.getwhile(4,HEXDIGITS)\n if len(escape)!=6:\n raise ValueError\n return LITERAL,int(escape[2:],16)\n elif c =="U"and source.istext:\n \n escape +=source.getwhile(8,HEXDIGITS)\n if len(escape)!=10:\n raise ValueError\n c=int(escape[2:],16)\n chr(c)\n return LITERAL,c\n elif c in OCTDIGITS:\n \n escape +=source.getwhile(2,OCTDIGITS)\n return LITERAL,int(escape[1:],8)&0xff\n elif c in DIGITS:\n raise ValueError\n if len(escape)==2:\n return LITERAL,ord(escape[1])\n except ValueError:\n pass\n raise error("bogus escape: %s"%repr(escape))\n \ndef _escape(source,escape,state):\n\n code=CATEGORIES.get(escape)\n if code:\n return code\n code=ESCAPES.get(escape)\n if code:\n return code\n try :\n c=escape[1:2]\n if c =="x":\n \n escape +=source.getwhile(2,HEXDIGITS)\n if len(escape)!=4:\n raise ValueError\n return LITERAL,int(escape[2:],16)&0xff\n elif c =="u"and source.istext:\n \n escape +=source.getwhile(4,HEXDIGITS)\n if len(escape)!=6:\n raise ValueError\n return LITERAL,int(escape[2:],16)\n elif c =="U"and source.istext:\n \n escape +=source.getwhile(8,HEXDIGITS)\n if len(escape)!=10:\n raise ValueError\n c=int(escape[2:],16)\n chr(c)\n return LITERAL,c\n elif c =="0":\n \n escape +=source.getwhile(2,OCTDIGITS)\n return LITERAL,int(escape[1:],8)&0xff\n elif c in DIGITS:\n \n if source.next in DIGITS:\n escape=escape+source.get()\n if (escape[1]in OCTDIGITS and escape[2]in OCTDIGITS and\n source.next in OCTDIGITS):\n \n escape=escape+source.get()\n return LITERAL,int(escape[1:],8)&0xff\n \n group=int(escape[1:])\n if group =MAXREPEAT:\n raise OverflowError("the repetition number is too large")\n if hi:\n max=int(hi)\n if max >=MAXREPEAT:\n raise OverflowError("the repetition number is too large")\n if max ":\n break\n name=name+char\n group=1\n if not name:\n raise error("missing group name")\n if not isname(name):\n raise error("bad character in group name")\n elif sourcematch("="):\n \n name=""\n while 1:\n char=sourceget()\n if char is None :\n raise error("unterminated name")\n if char ==")":\n break\n name=name+char\n if not name:\n raise error("missing group name")\n if not isname(name):\n raise error("bad character in group name")\n gid=state.groupdict.get(name)\n if gid is None :\n raise error("unknown group name")\n subpatternappend((GROUPREF,gid))\n continue\n else :\n char=sourceget()\n if char is None :\n raise error("unexpected end of pattern")\n raise error("unknown specifier: ?P%s"%char)\n elif sourcematch(":"):\n \n group=2\n elif sourcematch("#"):\n \n while 1:\n if source.next is None or source.next ==")":\n break\n sourceget()\n if not sourcematch(")"):\n raise error("unbalanced parenthesis")\n continue\n elif source.next in ASSERTCHARS:\n \n char=sourceget()\n dir=1\n if char =="<":\n if source.next not in LOOKBEHINDASSERTCHARS:\n raise error("syntax error")\n dir=-1\n char=sourceget()\n p=_parse_sub(source,state)\n if not sourcematch(")"):\n raise error("unbalanced parenthesis")\n if char =="=":\n subpatternappend((ASSERT,(dir,p)))\n else :\n subpatternappend((ASSERT_NOT,(dir,p)))\n continue\n elif sourcematch("("):\n \n condname=""\n while 1:\n char=sourceget()\n if char is None :\n raise error("unterminated name")\n if char ==")":\n break\n condname=condname+char\n group=2\n if not condname:\n raise error("missing group name")\n if isname(condname):\n condgroup=state.groupdict.get(condname)\n if condgroup is None :\n raise error("unknown group name")\n else :\n try :\n condgroup=int(condname)\n except ValueError:\n raise error("bad character in group name")\n else :\n \n if not source.next in FLAGS:\n raise error("unexpected end of pattern")\n while source.next in FLAGS:\n state.flags=state.flags |FLAGS[sourceget()]\n if group:\n \n if group ==2:\n \n group=None\n else :\n group=state.opengroup(name)\n if condgroup:\n p=_parse_sub_cond(source,state,condgroup)\n else :\n p=_parse_sub(source,state)\n if not sourcematch(")"):\n raise error("unbalanced parenthesis")\n if group is not None :\n state.closegroup(group)\n subpatternappend((SUBPATTERN,(group,p)))\n else :\n while 1:\n char=sourceget()\n if char is None :\n raise error("unexpected end of pattern")\n if char ==")":\n break\n raise error("unknown extension")\n \n elif this =="^":\n subpatternappend((AT,AT_BEGINNING))\n \n elif this =="$":\n subpattern.append((AT,AT_END))\n \n elif this and this[0]=="\\\\":\n code=_escape(source,this,state)\n subpatternappend(code)\n \n else :\n raise error("parser error")\n \n return subpattern\n \ndef fix_flags(src,flags):\n\n if isinstance(src,str):\n if not flags&SRE_FLAG_ASCII:\n flags |=SRE_FLAG_UNICODE\n elif flags&SRE_FLAG_UNICODE:\n raise ValueError("ASCII and UNICODE flags are incompatible")\n else :\n if flags&SRE_FLAG_UNICODE:\n raise ValueError("can\'t use UNICODE flag with a bytes pattern")\n return flags\n \ndef parse(str,flags=0,pattern=None ):\n\n source=Tokenizer(str)\n \n if pattern is None :\n pattern=Pattern()\n pattern.flags=flags\n pattern.str=str\n p=_parse_sub(source,pattern,0)\n p.pattern.flags=fix_flags(str,p.pattern.flags)\n \n tail=source.get()\n if tail ==")":\n raise error("unbalanced parenthesis")\n elif tail:\n raise error("bogus characters at end of regular expression")\n \n if flags&SRE_FLAG_DEBUG:\n p.dump()\n \n if not (flags&SRE_FLAG_VERBOSE)and p.pattern.flags&SRE_FLAG_VERBOSE:\n \n \n return parse(str,p.pattern.flags)\n \n return p\n \ndef parse_template(source,pattern):\n\n\n s=Tokenizer(source)\n sget=s.get\n p=[]\n a=p.append\n def literal(literal,p=p,pappend=a):\n if p and p[-1][0]is LITERAL:\n p[-1]=LITERAL,p[-1][1]+literal\n else :\n pappend((LITERAL,literal))\n sep=source[:0]\n if isinstance(sep,str):\n makechar=chr\n else :\n makechar=chr\n while 1:\n this=sget()\n if this is None :\n break\n if this and this[0]=="\\\\":\n \n c=this[1:2]\n if c =="g":\n name=""\n if s.match("<"):\n while 1:\n char=sget()\n if char is None :\n raise error("unterminated group name")\n if char ==">":\n break\n name=name+char\n if not name:\n raise error("missing group name")\n try :\n index=int(name)\n if index <0:\n raise error("negative group number")\n except ValueError:\n if not isname(name):\n raise error("bad character in group name")\n try :\n index=pattern.groupindex[name]\n except KeyError:\n raise IndexError("unknown group name")\n a((MARK,index))\n elif c =="0":\n if s.next in OCTDIGITS:\n this=this+sget()\n if s.next in OCTDIGITS:\n this=this+sget()\n literal(makechar(int(this[1:],8)&0xff))\n elif c in DIGITS:\n isoctal=False\n if s.next in DIGITS:\n this=this+sget()\n if (c in OCTDIGITS and this[2]in OCTDIGITS and\n s.next in OCTDIGITS):\n this=this+sget()\n isoctal=True\n literal(makechar(int(this[1:],8)&0xff))\n if not isoctal:\n a((MARK,int(this[1:])))\n else :\n try :\n this=makechar(ESCAPES[this][1])\n except KeyError:\n pass\n literal(this)\n else :\n literal(this)\n \n i=0\n groups=[]\n groupsappend=groups.append\n literals=[None ]*len(p)\n if isinstance(source,str):\n encode=lambda x:x\n else :\n \n \n encode=lambda x:x.encode(\'latin-1\')\n for c,s in p:\n if c is MARK:\n groupsappend((i,s))\n \n else :\n literals[i]=encode(s)\n i=i+1\n return groups,literals\n \ndef expand_template(template,match):\n g=match.group\n sep=match.string[:0]\n groups,literals=template\n literals=literals[:]\n try :\n for index,group in groups:\n literals[index]=s=g(group)\n if s is None :\n raise error("unmatched group")\n except IndexError:\n raise error("invalid group reference")\n return sep.join(literals)\n \n \n',["_sre","sre_constants","sys"]],stat:[".py",'\'\'\n\n\n\n\n\n\nST_MODE=0\nST_INO=1\nST_DEV=2\nST_NLINK=3\nST_UID=4\nST_GID=5\nST_SIZE=6\nST_ATIME=7\nST_MTIME=8\nST_CTIME=9\n\n\n\ndef S_IMODE(mode):\n \'\'\n\n \n return mode&0o7777\n \ndef S_IFMT(mode):\n \'\'\n\n \n return mode&0o170000\n \n \n \n \nS_IFDIR=0o040000\nS_IFCHR=0o020000\nS_IFBLK=0o060000\nS_IFREG=0o100000\nS_IFIFO=0o010000\nS_IFLNK=0o120000\nS_IFSOCK=0o140000\n\n\n\ndef S_ISDIR(mode):\n \'\'\n return S_IFMT(mode)==S_IFDIR\n \ndef S_ISCHR(mode):\n \'\'\n return S_IFMT(mode)==S_IFCHR\n \ndef S_ISBLK(mode):\n \'\'\n return S_IFMT(mode)==S_IFBLK\n \ndef S_ISREG(mode):\n \'\'\n return S_IFMT(mode)==S_IFREG\n \ndef S_ISFIFO(mode):\n \'\'\n return S_IFMT(mode)==S_IFIFO\n \ndef S_ISLNK(mode):\n \'\'\n return S_IFMT(mode)==S_IFLNK\n \ndef S_ISSOCK(mode):\n \'\'\n return S_IFMT(mode)==S_IFSOCK\n \n \n \nS_ISUID=0o4000\nS_ISGID=0o2000\nS_ENFMT=S_ISGID\nS_ISVTX=0o1000\nS_IREAD=0o0400\nS_IWRITE=0o0200\nS_IEXEC=0o0100\nS_IRWXU=0o0700\nS_IRUSR=0o0400\nS_IWUSR=0o0200\nS_IXUSR=0o0100\nS_IRWXG=0o0070\nS_IRGRP=0o0040\nS_IWGRP=0o0020\nS_IXGRP=0o0010\nS_IRWXO=0o0007\nS_IROTH=0o0004\nS_IWOTH=0o0002\nS_IXOTH=0o0001\n\n\n\nUF_NODUMP=0x00000001\nUF_IMMUTABLE=0x00000002\nUF_APPEND=0x00000004\nUF_OPAQUE=0x00000008\nUF_NOUNLINK=0x00000010\nUF_COMPRESSED=0x00000020\nUF_HIDDEN=0x00008000\nSF_ARCHIVED=0x00010000\nSF_IMMUTABLE=0x00020000\nSF_APPEND=0x00040000\nSF_NOUNLINK=0x00100000\nSF_SNAPSHOT=0x00200000\n\n\n_filemode_table=(\n((S_IFLNK,"l"),\n(S_IFREG,"-"),\n(S_IFBLK,"b"),\n(S_IFDIR,"d"),\n(S_IFCHR,"c"),\n(S_IFIFO,"p")),\n\n((S_IRUSR,"r"),),\n((S_IWUSR,"w"),),\n((S_IXUSR |S_ISUID,"s"),\n(S_ISUID,"S"),\n(S_IXUSR,"x")),\n\n((S_IRGRP,"r"),),\n((S_IWGRP,"w"),),\n((S_IXGRP |S_ISGID,"s"),\n(S_ISGID,"S"),\n(S_IXGRP,"x")),\n\n((S_IROTH,"r"),),\n((S_IWOTH,"w"),),\n((S_IXOTH |S_ISVTX,"t"),\n(S_ISVTX,"T"),\n(S_IXOTH,"x"))\n)\n\ndef filemode(mode):\n \'\'\n perm=[]\n for table in _filemode_table:\n for bit,char in table:\n if mode&bit ==bit:\n perm.append(char)\n break\n else :\n perm.append("-")\n return "".join(perm)\n',[]],string:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport _string\n\n\nwhitespace=' \\t\\n\\r\\v\\f'\nascii_lowercase='abcdefghijklmnopqrstuvwxyz'\nascii_uppercase='ABCDEFGHIJKLMNOPQRSTUVWXYZ'\nascii_letters=ascii_lowercase+ascii_uppercase\ndigits='0123456789'\nhexdigits=digits+'abcdef'+'ABCDEF'\noctdigits='01234567'\npunctuation=\"\"\"!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\"\"\"\nprintable=digits+ascii_letters+punctuation+whitespace\n\n\n\n\ndef capwords(s,sep=None ):\n ''\n\n\n\n\n\n\n\n\n \n return (sep or ' ').join(x.capitalize()for x in s.split(sep))\n \n \n \nimport re as _re\nfrom collections import ChainMap\n\nclass _TemplateMetaclass(type):\n pattern=r\"\"\"\n %(delim)s(?:\n (?P%(delim)s) | # Escape sequence of two delimiters\n (?P%(id)s) | # delimiter and a Python identifier\n {(?P%(id)s)} | # delimiter and a braced identifier\n (?P) # Other ill-formed delimiter exprs\n )\n \"\"\"\n \n def __init__(cls,name,bases,dct):\n super(_TemplateMetaclass,cls).__init__(name,bases,dct)\n if 'pattern'in dct:\n pattern=cls.pattern\n else :\n pattern=_TemplateMetaclass.pattern %{\n 'delim':_re.escape(cls.delimiter),\n 'id':cls.idpattern,\n }\n cls.pattern=_re.compile(pattern,cls.flags |_re.VERBOSE)\n \n \nclass Template(metaclass=_TemplateMetaclass):\n ''\n \n delimiter='$'\n idpattern=r'[_a-z][_a-z0-9]*'\n flags=_re.IGNORECASE\n \n def __init__(self,template):\n self.template=template\n \n \n \n def _invalid(self,mo):\n i=mo.start('invalid')\n lines=self.template[:i].splitlines(keepends=True )\n if not lines:\n colno=1\n lineno=1\n else :\n colno=i -len(''.join(lines[:-1]))\n lineno=len(lines)\n raise ValueError('Invalid placeholder in string: line %d, col %d'%\n (lineno,colno))\n \n def substitute(self,*args,**kws):\n if len(args)>1:\n raise TypeError('Too many positional arguments')\n if not args:\n mapping=kws\n elif kws:\n mapping=ChainMap(kws,args[0])\n else :\n mapping=args[0]\n \n def convert(mo):\n \n named=mo.group('named')or mo.group('braced')\n if named is not None :\n val=mapping[named]\n \n \n return '%s'%(val,)\n if mo.group('escaped')is not None :\n return self.delimiter\n if mo.group('invalid')is not None :\n self._invalid(mo)\n raise ValueError('Unrecognized named group in pattern',\n self.pattern)\n return self.pattern.sub(convert,self.template)\n \n def safe_substitute(self,*args,**kws):\n if len(args)>1:\n raise TypeError('Too many positional arguments')\n if not args:\n mapping=kws\n elif kws:\n mapping=ChainMap(kws,args[0])\n else :\n mapping=args[0]\n \n def convert(mo):\n named=mo.group('named')or mo.group('braced')\n if named is not None :\n try :\n \n \n return '%s'%(mapping[named],)\n except KeyError:\n return mo.group()\n if mo.group('escaped')is not None :\n return self.delimiter\n if mo.group('invalid')is not None :\n return mo.group()\n raise ValueError('Unrecognized named group in pattern',\n self.pattern)\n return self.pattern.sub(convert,self.template)\n \n \n \n \n \n \n \n \n \n \n \n \n \nclass Formatter:\n def format(self,format_string,*args,**kwargs):\n return format_string.format(*args,**kwargs)\n",["_string","collections","re"]],struct:[".py","__all__=[\n\n'calcsize','pack','pack_into','unpack','unpack_from',\n\n\n'Struct',\n\n\n'error'\n]\n\nfrom _struct import *\nfrom _struct import _clearcache\nfrom _struct import __doc__\n",["_struct"]],subprocess:[".py",'\n\n\n\n\n\n\n\n\nr"""subprocess - Subprocesses with accessible I/O streams\n\nThis module allows you to spawn processes, connect to their\ninput/output/error pipes, and obtain their return codes. This module\nintends to replace several other, older modules and functions, like:\n\nos.system\nos.spawn*\n\nInformation about how the subprocess module can be used to replace these\nmodules and functions can be found below.\n\n\n\nUsing the subprocess module\n===========================\nThis module defines one class called Popen:\n\nclass Popen(args, bufsize=-1, executable=None,\n stdin=None, stdout=None, stderr=None,\n preexec_fn=None, close_fds=True, shell=False,\n cwd=None, env=None, universal_newlines=False,\n startupinfo=None, creationflags=0,\n restore_signals=True, start_new_session=False, pass_fds=()):\n\n\nArguments are:\n\nargs should be a string, or a sequence of program arguments. The\nprogram to execute is normally the first item in the args sequence or\nstring, but can be explicitly set by using the executable argument.\n\nOn POSIX, with shell=False (default): In this case, the Popen class\nuses os.execvp() to execute the child program. args should normally\nbe a sequence. A string will be treated as a sequence with the string\nas the only item (the program to execute).\n\nOn POSIX, with shell=True: If args is a string, it specifies the\ncommand string to execute through the shell. If args is a sequence,\nthe first item specifies the command string, and any additional items\nwill be treated as additional shell arguments.\n\nOn Windows: the Popen class uses CreateProcess() to execute the child\nprogram, which operates on strings. If args is a sequence, it will be\nconverted to a string using the list2cmdline method. Please note that\nnot all MS Windows applications interpret the command line the same\nway: The list2cmdline is designed for applications using the same\nrules as the MS C runtime.\n\nbufsize will be supplied as the corresponding argument to the io.open()\nfunction when creating the stdin/stdout/stderr pipe file objects:\n0 means unbuffered (read & write are one system call and can return short),\n1 means line buffered, any other positive value means use a buffer of\napproximately that size. A negative bufsize, the default, means the system\ndefault of io.DEFAULT_BUFFER_SIZE will be used.\n\nstdin, stdout and stderr specify the executed programs\' standard\ninput, standard output and standard error file handles, respectively.\nValid values are PIPE, an existing file descriptor (a positive\ninteger), an existing file object, and None. PIPE indicates that a\nnew pipe to the child should be created. With None, no redirection\nwill occur; the child\'s file handles will be inherited from the\nparent. Additionally, stderr can be STDOUT, which indicates that the\nstderr data from the applications should be captured into the same\nfile handle as for stdout.\n\nOn POSIX, if preexec_fn is set to a callable object, this object will be\ncalled in the child process just before the child is executed. The use\nof preexec_fn is not thread safe, using it in the presence of threads\ncould lead to a deadlock in the child process before the new executable\nis executed.\n\nIf close_fds is true, all file descriptors except 0, 1 and 2 will be\nclosed before the child process is executed. The default for close_fds\nvaries by platform: Always true on POSIX. True when stdin/stdout/stderr\nare None on Windows, false otherwise.\n\npass_fds is an optional sequence of file descriptors to keep open between the\nparent and child. Providing any pass_fds implicitly sets close_fds to true.\n\nif shell is true, the specified command will be executed through the\nshell.\n\nIf cwd is not None, the current directory will be changed to cwd\nbefore the child is executed.\n\nOn POSIX, if restore_signals is True all signals that Python sets to\nSIG_IGN are restored to SIG_DFL in the child process before the exec.\nCurrently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. This\nparameter does nothing on Windows.\n\nOn POSIX, if start_new_session is True, the setsid() system call will be made\nin the child process prior to executing the command.\n\nIf env is not None, it defines the environment variables for the new\nprocess.\n\nIf universal_newlines is false, the file objects stdin, stdout and stderr\nare opened as binary files, and no line ending conversion is done.\n\nIf universal_newlines is true, the file objects stdout and stderr are\nopened as a text files, but lines may be terminated by any of \'\\n\',\nthe Unix end-of-line convention, \'\\r\', the old Macintosh convention or\n\'\\r\\n\', the Windows convention. All of these external representations\nare seen as \'\\n\' by the Python program. Also, the newlines attribute\nof the file objects stdout, stdin and stderr are not updated by the\ncommunicate() method.\n\nThe startupinfo and creationflags, if given, will be passed to the\nunderlying CreateProcess() function. They can specify things such as\nappearance of the main window and priority for the new process.\n(Windows only)\n\n\nThis module also defines some shortcut functions:\n\ncall(*popenargs, **kwargs):\n Run command with arguments. Wait for command to complete, then\n return the returncode attribute.\n\n The arguments are the same as for the Popen constructor. Example:\n\n >>> retcode = subprocess.call(["ls", "-l"])\n\ncheck_call(*popenargs, **kwargs):\n Run command with arguments. Wait for command to complete. If the\n exit code was zero then return, otherwise raise\n CalledProcessError. The CalledProcessError object will have the\n return code in the returncode attribute.\n\n The arguments are the same as for the Popen constructor. Example:\n\n >>> subprocess.check_call(["ls", "-l"])\n 0\n\ngetstatusoutput(cmd):\n Return (status, output) of executing cmd in a shell.\n\n Execute the string \'cmd\' in a shell with os.popen() and return a 2-tuple\n (status, output). cmd is actually run as \'{ cmd ; } 2>&1\', so that the\n returned output will contain output or error messages. A trailing newline\n is stripped from the output. The exit status for the command can be\n interpreted according to the rules for the C function wait(). Example:\n\n >>> subprocess.getstatusoutput(\'ls /bin/ls\')\n (0, \'/bin/ls\')\n >>> subprocess.getstatusoutput(\'cat /bin/junk\')\n (256, \'cat: /bin/junk: No such file or directory\')\n >>> subprocess.getstatusoutput(\'/bin/junk\')\n (256, \'sh: /bin/junk: not found\')\n\ngetoutput(cmd):\n Return output (stdout or stderr) of executing cmd in a shell.\n\n Like getstatusoutput(), except the exit status is ignored and the return\n value is a string containing the command\'s output. Example:\n\n >>> subprocess.getoutput(\'ls /bin/ls\')\n \'/bin/ls\'\n\ncheck_output(*popenargs, **kwargs):\n Run command with arguments and return its output.\n\n If the exit code was non-zero it raises a CalledProcessError. The\n CalledProcessError object will have the return code in the returncode\n attribute and output in the output attribute.\n\n The arguments are the same as for the Popen constructor. Example:\n\n >>> output = subprocess.check_output(["ls", "-l", "/dev/null"])\n\n\nExceptions\n----------\nExceptions raised in the child process, before the new program has\nstarted to execute, will be re-raised in the parent. Additionally,\nthe exception object will have one extra attribute called\n\'child_traceback\', which is a string containing traceback information\nfrom the child\'s point of view.\n\nThe most common exception raised is OSError. This occurs, for\nexample, when trying to execute a non-existent file. Applications\nshould prepare for OSErrors.\n\nA ValueError will be raised if Popen is called with invalid arguments.\n\nExceptions defined within this module inherit from SubprocessError.\ncheck_call() and check_output() will raise CalledProcessError if the\ncalled process returns a non-zero return code. TimeoutExpired\nbe raised if a timeout was specified and expired.\n\n\nSecurity\n--------\nUnlike some other popen functions, this implementation will never call\n/bin/sh implicitly. This means that all characters, including shell\nmetacharacters, can safely be passed to child processes.\n\n\nPopen objects\n=============\nInstances of the Popen class have the following methods:\n\npoll()\n Check if child process has terminated. Returns returncode\n attribute.\n\nwait()\n Wait for child process to terminate. Returns returncode attribute.\n\ncommunicate(input=None)\n Interact with process: Send data to stdin. Read data from stdout\n and stderr, until end-of-file is reached. Wait for process to\n terminate. The optional input argument should be a string to be\n sent to the child process, or None, if no data should be sent to\n the child.\n\n communicate() returns a tuple (stdout, stderr).\n\n Note: The data read is buffered in memory, so do not use this\n method if the data size is large or unlimited.\n\nThe following attributes are also available:\n\nstdin\n If the stdin argument is PIPE, this attribute is a file object\n that provides input to the child process. Otherwise, it is None.\n\nstdout\n If the stdout argument is PIPE, this attribute is a file object\n that provides output from the child process. Otherwise, it is\n None.\n\nstderr\n If the stderr argument is PIPE, this attribute is file object that\n provides error output from the child process. Otherwise, it is\n None.\n\npid\n The process ID of the child process.\n\nreturncode\n The child return code. A None value indicates that the process\n hasn\'t terminated yet. A negative value -N indicates that the\n child was terminated by signal N (POSIX only).\n\n\nReplacing older functions with the subprocess module\n====================================================\nIn this section, "a ==> b" means that b can be used as a replacement\nfor a.\n\nNote: All functions in this section fail (more or less) silently if\nthe executed program cannot be found; this module raises an OSError\nexception.\n\nIn the following examples, we assume that the subprocess module is\nimported with "from subprocess import *".\n\n\nReplacing /bin/sh shell backquote\n---------------------------------\noutput=`mycmd myarg`\n==>\noutput = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]\n\n\nReplacing shell pipe line\n-------------------------\noutput=`dmesg | grep hda`\n==>\np1 = Popen(["dmesg"], stdout=PIPE)\np2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)\noutput = p2.communicate()[0]\n\n\nReplacing os.system()\n---------------------\nsts = os.system("mycmd" + " myarg")\n==>\np = Popen("mycmd" + " myarg", shell=True)\npid, sts = os.waitpid(p.pid, 0)\n\nNote:\n\n* Calling the program through the shell is usually not required.\n\n* It\'s easier to look at the returncode attribute than the\n exitstatus.\n\nA more real-world example would look like this:\n\ntry:\n retcode = call("mycmd" + " myarg", shell=True)\n if retcode < 0:\n print("Child was terminated by signal", -retcode, file=sys.stderr)\n else:\n print("Child returned", retcode, file=sys.stderr)\nexcept OSError as e:\n print("Execution failed:", e, file=sys.stderr)\n\n\nReplacing os.spawn*\n-------------------\nP_NOWAIT example:\n\npid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")\n==>\npid = Popen(["/bin/mycmd", "myarg"]).pid\n\n\nP_WAIT example:\n\nretcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")\n==>\nretcode = call(["/bin/mycmd", "myarg"])\n\n\nVector example:\n\nos.spawnvp(os.P_NOWAIT, path, args)\n==>\nPopen([path] + args[1:])\n\n\nEnvironment example:\n\nos.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)\n==>\nPopen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})\n"""\n\nimport sys\nmswindows=(sys.platform =="win32")\n\nimport io\nimport os\nimport time\nimport traceback\nimport gc\nimport signal\nimport builtins\nimport warnings\nimport errno\ntry :\n from time import monotonic as _time\nexcept ImportError:\n from time import time as _time\n \n \nclass SubprocessError(Exception):pass\n\n\nclass CalledProcessError(SubprocessError):\n \'\'\n\n\n\n \n def __init__(self,returncode,cmd,output=None ):\n self.returncode=returncode\n self.cmd=cmd\n self.output=output\n def __str__(self):\n return "Command \'%s\' returned non-zero exit status %d"%(self.cmd,self.returncode)\n \n \nclass TimeoutExpired(SubprocessError):\n \'\'\n\n \n def __init__(self,cmd,timeout,output=None ):\n self.cmd=cmd\n self.timeout=timeout\n self.output=output\n \n def __str__(self):\n return ("Command \'%s\' timed out after %s seconds"%\n (self.cmd,self.timeout))\n \n \nif mswindows:\n import threading\n import msvcrt\n import _winapi\n class STARTUPINFO:\n dwFlags=0\n hStdInput=None\n hStdOutput=None\n hStdError=None\n wShowWindow=0\n class pywintypes:\n error=IOError\nelse :\n import select\n _has_poll=hasattr(select,\'poll\')\n import _posixsubprocess\n _create_pipe=_posixsubprocess.cloexec_pipe\n \n \n \n \n _PIPE_BUF=getattr(select,\'PIPE_BUF\',512)\n \n \n__all__=["Popen","PIPE","STDOUT","call","check_call","getstatusoutput",\n"getoutput","check_output","CalledProcessError","DEVNULL"]\n\nif mswindows:\n from _winapi import (CREATE_NEW_CONSOLE,CREATE_NEW_PROCESS_GROUP,\n STD_INPUT_HANDLE,STD_OUTPUT_HANDLE,\n STD_ERROR_HANDLE,SW_HIDE,\n STARTF_USESTDHANDLES,STARTF_USESHOWWINDOW)\n \n __all__.extend(["CREATE_NEW_CONSOLE","CREATE_NEW_PROCESS_GROUP",\n "STD_INPUT_HANDLE","STD_OUTPUT_HANDLE",\n "STD_ERROR_HANDLE","SW_HIDE",\n "STARTF_USESTDHANDLES","STARTF_USESHOWWINDOW"])\n \n class Handle(int):\n closed=False\n \n def Close(self,CloseHandle=_winapi.CloseHandle):\n if not self.closed:\n self.closed=True\n CloseHandle(self)\n \n def Detach(self):\n if not self.closed:\n self.closed=True\n return int(self)\n raise ValueError("already closed")\n \n def __repr__(self):\n return "Handle(%d)"%int(self)\n \n __del__=Close\n __str__=__repr__\n \ntry :\n MAXFD=os.sysconf("SC_OPEN_MAX")\nexcept :\n MAXFD=256\n \n \n \n \n \n_active=[]\n\ndef _cleanup():\n for inst in _active[:]:\n res=inst._internal_poll(_deadstate=sys.maxsize)\n if res is not None :\n try :\n _active.remove(inst)\n except ValueError:\n \n \n pass\n \nPIPE=-1\nSTDOUT=-2\nDEVNULL=-3\n\n\ndef _eintr_retry_call(func,*args):\n while True :\n try :\n return func(*args)\n except InterruptedError:\n continue\n \n \n \n \n \n \ndef _args_from_interpreter_flags():\n \'\'\n \n flag_opt_map={\n \'debug\':\'d\',\n \n \n \'optimize\':\'O\',\n \'dont_write_bytecode\':\'B\',\n \'no_user_site\':\'s\',\n \'no_site\':\'S\',\n \'ignore_environment\':\'E\',\n \'verbose\':\'v\',\n \'bytes_warning\':\'b\',\n \'quiet\':\'q\',\n \'hash_randomization\':\'R\',\n }\n args=[]\n for flag,opt in flag_opt_map.items():\n v=getattr(sys.flags,flag)\n if v >0:\n args.append(\'-\'+opt *v)\n for opt in sys.warnoptions:\n args.append(\'-W\'+opt)\n return args\n \n \ndef call(*popenargs,timeout=None ,**kwargs):\n \'\'\n\n\n\n\n\n \n with Popen(*popenargs,**kwargs)as p:\n try :\n return p.wait(timeout=timeout)\n except :\n p.kill()\n p.wait()\n raise\n \n \ndef check_call(*popenargs,**kwargs):\n \'\'\n\n\n\n\n\n\n\n \n retcode=call(*popenargs,**kwargs)\n if retcode:\n cmd=kwargs.get("args")\n if cmd is None :\n cmd=popenargs[0]\n raise CalledProcessError(retcode,cmd)\n return 0\n \n \ndef check_output(*popenargs,timeout=None ,**kwargs):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if \'stdout\'in kwargs:\n raise ValueError(\'stdout argument not allowed, it will be overridden.\')\n with Popen(*popenargs,stdout=PIPE,**kwargs)as process:\n try :\n output,unused_err=process.communicate(timeout=timeout)\n except TimeoutExpired:\n process.kill()\n output,unused_err=process.communicate()\n raise TimeoutExpired(process.args,timeout,output=output)\n except :\n process.kill()\n process.wait()\n raise\n retcode=process.poll()\n if retcode:\n raise CalledProcessError(retcode,process.args,output=output)\n return output\n \n \ndef list2cmdline(seq):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n result=[]\n needquote=False\n for arg in seq:\n bs_buf=[]\n \n \n if result:\n result.append(\' \')\n \n needquote=(" "in arg)or ("\\t"in arg)or not arg\n if needquote:\n result.append(\'"\')\n \n for c in arg:\n if c ==\'\\\\\':\n \n bs_buf.append(c)\n elif c ==\'"\':\n \n result.append(\'\\\\\'*len(bs_buf)*2)\n bs_buf=[]\n result.append(\'\\\\"\')\n else :\n \n if bs_buf:\n result.extend(bs_buf)\n bs_buf=[]\n result.append(c)\n \n \n if bs_buf:\n result.extend(bs_buf)\n \n if needquote:\n result.extend(bs_buf)\n result.append(\'"\')\n \n return \'\'.join(result)\n \n \n \n \n \n \ndef getstatusoutput(cmd):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n with os.popen(\'{ \'+cmd+\'; } 2>&1\',\'r\')as pipe:\n try :\n text=pipe.read()\n sts=pipe.close()\n except :\n process=pipe._proc\n process.kill()\n process.wait()\n raise\n if sts is None :\n sts=0\n if text[-1:]==\'\\n\':\n text=text[:-1]\n return sts,text\n \n \ndef getoutput(cmd):\n \'\'\n\n\n\n\n\n\n\n \n return getstatusoutput(cmd)[1]\n \n \n_PLATFORM_DEFAULT_CLOSE_FDS=object()\n\n\nclass Popen(object):\n def __init__(self,args,bufsize=-1,executable=None ,\n stdin=None ,stdout=None ,stderr=None ,\n preexec_fn=None ,close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,\n shell=False ,cwd=None ,env=None ,universal_newlines=False ,\n startupinfo=None ,creationflags=0,\n restore_signals=True ,start_new_session=False ,\n pass_fds=()):\n \'\'\n _cleanup()\n \n self._child_created=False\n self._input=None\n self._communication_started=False\n if bufsize is None :\n bufsize=-1\n if not isinstance(bufsize,int):\n raise TypeError("bufsize must be an integer")\n \n if mswindows:\n if preexec_fn is not None :\n raise ValueError("preexec_fn is not supported on Windows "\n "platforms")\n any_stdio_set=(stdin is not None or stdout is not None or\n stderr is not None )\n if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:\n if any_stdio_set:\n close_fds=False\n else :\n close_fds=True\n elif close_fds and any_stdio_set:\n raise ValueError(\n "close_fds is not supported on Windows platforms"\n " if you redirect stdin/stdout/stderr")\n else :\n \n if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:\n close_fds=True\n if pass_fds and not close_fds:\n warnings.warn("pass_fds overriding close_fds.",RuntimeWarning)\n close_fds=True\n if startupinfo is not None :\n raise ValueError("startupinfo is only supported on Windows "\n "platforms")\n if creationflags !=0:\n raise ValueError("creationflags is only supported on Windows "\n "platforms")\n \n self.args=args\n self.stdin=None\n self.stdout=None\n self.stderr=None\n self.pid=None\n self.returncode=None\n self.universal_newlines=universal_newlines\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n (p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite)=self._get_handles(stdin,stdout,stderr)\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n if p2cwrite !=-1:\n self.stdin=io.open(p2cwrite,\'wb\',bufsize)\n if universal_newlines:\n self.stdin=io.TextIOWrapper(self.stdin,write_through=True )\n if c2pread !=-1:\n self.stdout=io.open(c2pread,\'rb\',bufsize)\n if universal_newlines:\n self.stdout=io.TextIOWrapper(self.stdout)\n if errread !=-1:\n self.stderr=io.open(errread,\'rb\',bufsize)\n if universal_newlines:\n self.stderr=io.TextIOWrapper(self.stderr)\n \n self._closed_child_pipe_fds=False\n try :\n self._execute_child(args,executable,preexec_fn,close_fds,\n pass_fds,cwd,env,\n startupinfo,creationflags,shell,\n p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite,\n restore_signals,start_new_session)\n except :\n \n for f in filter(None ,(self.stdin,self.stdout,self.stderr)):\n try :\n f.close()\n except EnvironmentError:\n pass\n \n if not self._closed_child_pipe_fds:\n to_close=[]\n if stdin ==PIPE:\n to_close.append(p2cread)\n if stdout ==PIPE:\n to_close.append(c2pwrite)\n if stderr ==PIPE:\n to_close.append(errwrite)\n if hasattr(self,\'_devnull\'):\n to_close.append(self._devnull)\n for fd in to_close:\n try :\n os.close(fd)\n except EnvironmentError:\n pass\n \n raise\n \n \n def _translate_newlines(self,data,encoding):\n data=data.decode(encoding)\n return data.replace("\\r\\n","\\n").replace("\\r","\\n")\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,traceback):\n if self.stdout:\n self.stdout.close()\n if self.stderr:\n self.stderr.close()\n if self.stdin:\n self.stdin.close()\n \n self.wait()\n \n def __del__(self,_maxsize=sys.maxsize,_active=_active):\n \n \n \n if not getattr(self,\'_child_created\',False ):\n \n return\n \n self._internal_poll(_deadstate=_maxsize)\n if self.returncode is None and _active is not None :\n \n _active.append(self)\n \n def _get_devnull(self):\n if not hasattr(self,\'_devnull\'):\n self._devnull=os.open(os.devnull,os.O_RDWR)\n return self._devnull\n \n def communicate(self,input=None ,timeout=None ):\n \'\'\n\n\n\n\n\n \n \n if self._communication_started and input:\n raise ValueError("Cannot send input after starting communication")\n \n \n \n \n if (timeout is None and not self._communication_started and\n [self.stdin,self.stdout,self.stderr].count(None )>=2):\n stdout=None\n stderr=None\n if self.stdin:\n if input:\n try :\n self.stdin.write(input)\n except IOError as e:\n if e.errno !=errno.EPIPE and e.errno !=errno.EINVAL:\n raise\n self.stdin.close()\n elif self.stdout:\n stdout=_eintr_retry_call(self.stdout.read)\n self.stdout.close()\n elif self.stderr:\n stderr=_eintr_retry_call(self.stderr.read)\n self.stderr.close()\n self.wait()\n else :\n if timeout is not None :\n endtime=_time()+timeout\n else :\n endtime=None\n \n try :\n stdout,stderr=self._communicate(input,endtime,timeout)\n finally :\n self._communication_started=True\n \n sts=self.wait(timeout=self._remaining_time(endtime))\n \n return (stdout,stderr)\n \n \n def poll(self):\n return self._internal_poll()\n \n \n def _remaining_time(self,endtime):\n \'\'\n if endtime is None :\n return None\n else :\n return endtime -_time()\n \n \n def _check_timeout(self,endtime,orig_timeout):\n \'\'\n if endtime is None :\n return\n if _time()>endtime:\n raise TimeoutExpired(self.args,orig_timeout)\n \n \n if mswindows:\n \n \n \n def _get_handles(self,stdin,stdout,stderr):\n \'\'\n\n \n if stdin is None and stdout is None and stderr is None :\n return (-1,-1,-1,-1,-1,-1)\n \n p2cread,p2cwrite=-1,-1\n c2pread,c2pwrite=-1,-1\n errread,errwrite=-1,-1\n \n if stdin is None :\n p2cread=_winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)\n if p2cread is None :\n p2cread,_=_winapi.CreatePipe(None ,0)\n p2cread=Handle(p2cread)\n _winapi.CloseHandle(_)\n elif stdin ==PIPE:\n p2cread,p2cwrite=_winapi.CreatePipe(None ,0)\n p2cread,p2cwrite=Handle(p2cread),Handle(p2cwrite)\n elif stdin ==DEVNULL:\n p2cread=msvcrt.get_osfhandle(self._get_devnull())\n elif isinstance(stdin,int):\n p2cread=msvcrt.get_osfhandle(stdin)\n else :\n \n p2cread=msvcrt.get_osfhandle(stdin.fileno())\n p2cread=self._make_inheritable(p2cread)\n \n if stdout is None :\n c2pwrite=_winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)\n if c2pwrite is None :\n _,c2pwrite=_winapi.CreatePipe(None ,0)\n c2pwrite=Handle(c2pwrite)\n _winapi.CloseHandle(_)\n elif stdout ==PIPE:\n c2pread,c2pwrite=_winapi.CreatePipe(None ,0)\n c2pread,c2pwrite=Handle(c2pread),Handle(c2pwrite)\n elif stdout ==DEVNULL:\n c2pwrite=msvcrt.get_osfhandle(self._get_devnull())\n elif isinstance(stdout,int):\n c2pwrite=msvcrt.get_osfhandle(stdout)\n else :\n \n c2pwrite=msvcrt.get_osfhandle(stdout.fileno())\n c2pwrite=self._make_inheritable(c2pwrite)\n \n if stderr is None :\n errwrite=_winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)\n if errwrite is None :\n _,errwrite=_winapi.CreatePipe(None ,0)\n errwrite=Handle(errwrite)\n _winapi.CloseHandle(_)\n elif stderr ==PIPE:\n errread,errwrite=_winapi.CreatePipe(None ,0)\n errread,errwrite=Handle(errread),Handle(errwrite)\n elif stderr ==STDOUT:\n errwrite=c2pwrite\n elif stderr ==DEVNULL:\n errwrite=msvcrt.get_osfhandle(self._get_devnull())\n elif isinstance(stderr,int):\n errwrite=msvcrt.get_osfhandle(stderr)\n else :\n \n errwrite=msvcrt.get_osfhandle(stderr.fileno())\n errwrite=self._make_inheritable(errwrite)\n \n return (p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite)\n \n \n def _make_inheritable(self,handle):\n \'\'\n h=_winapi.DuplicateHandle(\n _winapi.GetCurrentProcess(),handle,\n _winapi.GetCurrentProcess(),0,1,\n _winapi.DUPLICATE_SAME_ACCESS)\n return Handle(h)\n \n \n def _find_w9xpopen(self):\n \'\'\n w9xpopen=os.path.join(\n os.path.dirname(_winapi.GetModuleFileName(0)),\n "w9xpopen.exe")\n if not os.path.exists(w9xpopen):\n \n \n w9xpopen=os.path.join(os.path.dirname(sys.base_exec_prefix),\n "w9xpopen.exe")\n if not os.path.exists(w9xpopen):\n raise RuntimeError("Cannot locate w9xpopen.exe, which is "\n "needed for Popen to work with your "\n "shell or platform.")\n return w9xpopen\n \n \n def _execute_child(self,args,executable,preexec_fn,close_fds,\n pass_fds,cwd,env,\n startupinfo,creationflags,shell,\n p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite,\n unused_restore_signals,unused_start_new_session):\n \'\'\n \n assert not pass_fds,"pass_fds not supported on Windows."\n \n if not isinstance(args,str):\n args=list2cmdline(args)\n \n \n if startupinfo is None :\n startupinfo=STARTUPINFO()\n if -1 not in (p2cread,c2pwrite,errwrite):\n startupinfo.dwFlags |=_winapi.STARTF_USESTDHANDLES\n startupinfo.hStdInput=p2cread\n startupinfo.hStdOutput=c2pwrite\n startupinfo.hStdError=errwrite\n \n if shell:\n startupinfo.dwFlags |=_winapi.STARTF_USESHOWWINDOW\n startupinfo.wShowWindow=_winapi.SW_HIDE\n comspec=os.environ.get("COMSPEC","cmd.exe")\n args=\'{} /c "{}"\'.format(comspec,args)\n if (_winapi.GetVersion()>=0x80000000 or\n os.path.basename(comspec).lower()=="command.com"):\n \n \n \n \n w9xpopen=self._find_w9xpopen()\n args=\'"%s" %s\'%(w9xpopen,args)\n \n \n \n \n \n \n creationflags |=_winapi.CREATE_NEW_CONSOLE\n \n \n try :\n hp,ht,pid,tid=_winapi.CreateProcess(executable,args,\n \n None ,None ,\n int(not close_fds),\n creationflags,\n env,\n cwd,\n startupinfo)\n except pywintypes.error as e:\n \n \n \n \n raise WindowsError(*e.args)\n finally :\n \n \n \n \n \n \n if p2cread !=-1:\n p2cread.Close()\n if c2pwrite !=-1:\n c2pwrite.Close()\n if errwrite !=-1:\n errwrite.Close()\n if hasattr(self,\'_devnull\'):\n os.close(self._devnull)\n \n \n self._child_created=True\n self._handle=Handle(hp)\n self.pid=pid\n _winapi.CloseHandle(ht)\n \n def _internal_poll(self,_deadstate=None ,\n _WaitForSingleObject=_winapi.WaitForSingleObject,\n _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,\n _GetExitCodeProcess=_winapi.GetExitCodeProcess):\n \'\'\n\n\n\n\n\n \n if self.returncode is None :\n if _WaitForSingleObject(self._handle,0)==_WAIT_OBJECT_0:\n self.returncode=_GetExitCodeProcess(self._handle)\n return self.returncode\n \n \n def wait(self,timeout=None ,endtime=None ):\n \'\'\n \n if endtime is not None :\n timeout=self._remaining_time(endtime)\n if timeout is None :\n timeout_millis=_winapi.INFINITE\n else :\n timeout_millis=int(timeout *1000)\n if self.returncode is None :\n result=_winapi.WaitForSingleObject(self._handle,\n timeout_millis)\n if result ==_winapi.WAIT_TIMEOUT:\n raise TimeoutExpired(self.args,timeout)\n self.returncode=_winapi.GetExitCodeProcess(self._handle)\n return self.returncode\n \n \n def _readerthread(self,fh,buffer):\n buffer.append(fh.read())\n fh.close()\n \n \n def _communicate(self,input,endtime,orig_timeout):\n \n \n if self.stdout and not hasattr(self,"_stdout_buff"):\n self._stdout_buff=[]\n self.stdout_thread=\\\n threading.Thread(target=self._readerthread,\n args=(self.stdout,self._stdout_buff))\n self.stdout_thread.daemon=True\n self.stdout_thread.start()\n if self.stderr and not hasattr(self,"_stderr_buff"):\n self._stderr_buff=[]\n self.stderr_thread=\\\n threading.Thread(target=self._readerthread,\n args=(self.stderr,self._stderr_buff))\n self.stderr_thread.daemon=True\n self.stderr_thread.start()\n \n if self.stdin:\n if input is not None :\n try :\n self.stdin.write(input)\n except IOError as e:\n if e.errno !=errno.EPIPE:\n raise\n self.stdin.close()\n \n \n \n \n if self.stdout is not None :\n self.stdout_thread.join(self._remaining_time(endtime))\n if self.stdout_thread.is_alive():\n raise TimeoutExpired(self.args,orig_timeout)\n if self.stderr is not None :\n self.stderr_thread.join(self._remaining_time(endtime))\n if self.stderr_thread.is_alive():\n raise TimeoutExpired(self.args,orig_timeout)\n \n \n \n stdout=None\n stderr=None\n if self.stdout:\n stdout=self._stdout_buff\n self.stdout.close()\n if self.stderr:\n stderr=self._stderr_buff\n self.stderr.close()\n \n \n if stdout is not None :\n stdout=stdout[0]\n if stderr is not None :\n stderr=stderr[0]\n \n return (stdout,stderr)\n \n def send_signal(self,sig):\n \'\'\n \n if sig ==signal.SIGTERM:\n self.terminate()\n elif sig ==signal.CTRL_C_EVENT:\n os.kill(self.pid,signal.CTRL_C_EVENT)\n elif sig ==signal.CTRL_BREAK_EVENT:\n os.kill(self.pid,signal.CTRL_BREAK_EVENT)\n else :\n raise ValueError("Unsupported signal: {}".format(sig))\n \n def terminate(self):\n \'\'\n \n try :\n _winapi.TerminateProcess(self._handle,1)\n except PermissionError:\n \n \n rc=_winapi.GetExitCodeProcess(self._handle)\n if rc ==_winapi.STILL_ACTIVE:\n raise\n self.returncode=rc\n \n kill=terminate\n \n else :\n \n \n \n def _get_handles(self,stdin,stdout,stderr):\n \'\'\n\n \n p2cread,p2cwrite=-1,-1\n c2pread,c2pwrite=-1,-1\n errread,errwrite=-1,-1\n \n if stdin is None :\n pass\n elif stdin ==PIPE:\n p2cread,p2cwrite=_create_pipe()\n elif stdin ==DEVNULL:\n p2cread=self._get_devnull()\n elif isinstance(stdin,int):\n p2cread=stdin\n else :\n \n p2cread=stdin.fileno()\n \n if stdout is None :\n pass\n elif stdout ==PIPE:\n c2pread,c2pwrite=_create_pipe()\n elif stdout ==DEVNULL:\n c2pwrite=self._get_devnull()\n elif isinstance(stdout,int):\n c2pwrite=stdout\n else :\n \n c2pwrite=stdout.fileno()\n \n if stderr is None :\n pass\n elif stderr ==PIPE:\n errread,errwrite=_create_pipe()\n elif stderr ==STDOUT:\n errwrite=c2pwrite\n elif stderr ==DEVNULL:\n errwrite=self._get_devnull()\n elif isinstance(stderr,int):\n errwrite=stderr\n else :\n \n errwrite=stderr.fileno()\n \n return (p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite)\n \n \n def _close_fds(self,fds_to_keep):\n start_fd=3\n for fd in sorted(fds_to_keep):\n if fd >=start_fd:\n os.closerange(start_fd,fd)\n start_fd=fd+1\n if start_fd <=MAXFD:\n os.closerange(start_fd,MAXFD)\n \n \n def _execute_child(self,args,executable,preexec_fn,close_fds,\n pass_fds,cwd,env,\n startupinfo,creationflags,shell,\n p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite,\n restore_signals,start_new_session):\n \'\'\n \n if isinstance(args,(str,bytes)):\n args=[args]\n else :\n args=list(args)\n \n if shell:\n args=["/bin/sh","-c"]+args\n if executable:\n args[0]=executable\n \n if executable is None :\n executable=args[0]\n orig_executable=executable\n \n \n \n \n errpipe_read,errpipe_write=_create_pipe()\n try :\n try :\n \n \n \n \n \n if env is not None :\n env_list=[os.fsencode(k)+b\'=\'+os.fsencode(v)\n for k,v in env.items()]\n else :\n env_list=None\n executable=os.fsencode(executable)\n if os.path.dirname(executable):\n executable_list=(executable,)\n else :\n \n executable_list=tuple(\n os.path.join(os.fsencode(dir),executable)\n for dir in os.get_exec_path(env))\n fds_to_keep=set(pass_fds)\n fds_to_keep.add(errpipe_write)\n self.pid=_posixsubprocess.fork_exec(\n args,executable_list,\n close_fds,sorted(fds_to_keep),cwd,env_list,\n p2cread,p2cwrite,c2pread,c2pwrite,\n errread,errwrite,\n errpipe_read,errpipe_write,\n restore_signals,start_new_session,preexec_fn)\n self._child_created=True\n finally :\n \n os.close(errpipe_write)\n \n \n devnull_fd=getattr(self,\'_devnull\',None )\n if p2cread !=-1 and p2cwrite !=-1 and p2cread !=devnull_fd:\n os.close(p2cread)\n if c2pwrite !=-1 and c2pread !=-1 and c2pwrite !=devnull_fd:\n os.close(c2pwrite)\n if errwrite !=-1 and errread !=-1 and errwrite !=devnull_fd:\n os.close(errwrite)\n if devnull_fd is not None :\n os.close(devnull_fd)\n \n self._closed_child_pipe_fds=True\n \n \n \n errpipe_data=bytearray()\n while True :\n part=_eintr_retry_call(os.read,errpipe_read,50000)\n errpipe_data +=part\n if not part or len(errpipe_data)>50000:\n break\n finally :\n \n os.close(errpipe_read)\n \n if errpipe_data:\n try :\n _eintr_retry_call(os.waitpid,self.pid,0)\n except OSError as e:\n if e.errno !=errno.ECHILD:\n raise\n try :\n exception_name,hex_errno,err_msg=(\n errpipe_data.split(b\':\',2))\n except ValueError:\n exception_name=b\'RuntimeError\'\n hex_errno=b\'0\'\n err_msg=(b\'Bad exception data from child: \'+\n repr(errpipe_data))\n child_exception_type=getattr(\n builtins,exception_name.decode(\'ascii\'),\n RuntimeError)\n err_msg=err_msg.decode(errors="surrogatepass")\n if issubclass(child_exception_type,OSError)and hex_errno:\n errno_num=int(hex_errno,16)\n child_exec_never_called=(err_msg =="noexec")\n if child_exec_never_called:\n err_msg=""\n if errno_num !=0:\n err_msg=os.strerror(errno_num)\n if errno_num ==errno.ENOENT:\n if child_exec_never_called:\n \n err_msg +=\': \'+repr(cwd)\n else :\n err_msg +=\': \'+repr(orig_executable)\n raise child_exception_type(errno_num,err_msg)\n raise child_exception_type(err_msg)\n \n \n def _handle_exitstatus(self,sts,_WIFSIGNALED=os.WIFSIGNALED,\n _WTERMSIG=os.WTERMSIG,_WIFEXITED=os.WIFEXITED,\n _WEXITSTATUS=os.WEXITSTATUS):\n \n \n if _WIFSIGNALED(sts):\n self.returncode=-_WTERMSIG(sts)\n elif _WIFEXITED(sts):\n self.returncode=_WEXITSTATUS(sts)\n else :\n \n raise RuntimeError("Unknown child exit status!")\n \n \n def _internal_poll(self,_deadstate=None ,_waitpid=os.waitpid,\n _WNOHANG=os.WNOHANG,_os_error=os.error,_ECHILD=errno.ECHILD):\n \'\'\n\n\n\n\n\n \n if self.returncode is None :\n try :\n pid,sts=_waitpid(self.pid,_WNOHANG)\n if pid ==self.pid:\n self._handle_exitstatus(sts)\n except _os_error as e:\n if _deadstate is not None :\n self.returncode=_deadstate\n elif e.errno ==_ECHILD:\n \n \n \n \n \n self.returncode=0\n return self.returncode\n \n \n def _try_wait(self,wait_flags):\n try :\n (pid,sts)=_eintr_retry_call(os.waitpid,self.pid,wait_flags)\n except OSError as e:\n if e.errno !=errno.ECHILD:\n raise\n \n \n \n pid=self.pid\n sts=0\n return (pid,sts)\n \n \n def wait(self,timeout=None ,endtime=None ):\n \'\'\n \n if self.returncode is not None :\n return self.returncode\n \n \n \n if endtime is not None or timeout is not None :\n if endtime is None :\n endtime=_time()+timeout\n elif timeout is None :\n timeout=self._remaining_time(endtime)\n \n if endtime is not None :\n \n \n delay=0.0005\n while True :\n (pid,sts)=self._try_wait(os.WNOHANG)\n assert pid ==self.pid or pid ==0\n if pid ==self.pid:\n self._handle_exitstatus(sts)\n break\n remaining=self._remaining_time(endtime)\n if remaining <=0:\n raise TimeoutExpired(self.args,timeout)\n delay=min(delay *2,remaining,.05)\n time.sleep(delay)\n else :\n while self.returncode is None :\n (pid,sts)=self._try_wait(0)\n \n \n if pid ==self.pid:\n self._handle_exitstatus(sts)\n return self.returncode\n \n \n def _communicate(self,input,endtime,orig_timeout):\n if self.stdin and not self._communication_started:\n \n \n self.stdin.flush()\n if not input:\n self.stdin.close()\n \n if _has_poll:\n stdout,stderr=self._communicate_with_poll(input,endtime,\n orig_timeout)\n else :\n stdout,stderr=self._communicate_with_select(input,endtime,\n orig_timeout)\n \n self.wait(timeout=self._remaining_time(endtime))\n \n \n if stdout is not None :\n stdout=b\'\'.join(stdout)\n if stderr is not None :\n stderr=b\'\'.join(stderr)\n \n \n \n if self.universal_newlines:\n if stdout is not None :\n stdout=self._translate_newlines(stdout,\n self.stdout.encoding)\n if stderr is not None :\n stderr=self._translate_newlines(stderr,\n self.stderr.encoding)\n \n return (stdout,stderr)\n \n \n def _save_input(self,input):\n \n \n \n if self.stdin and self._input is None :\n self._input_offset=0\n self._input=input\n if self.universal_newlines and input is not None :\n self._input=self._input.encode(self.stdin.encoding)\n \n \n def _communicate_with_poll(self,input,endtime,orig_timeout):\n stdout=None\n stderr=None\n \n if not self._communication_started:\n self._fd2file={}\n \n poller=select.poll()\n def register_and_append(file_obj,eventmask):\n poller.register(file_obj.fileno(),eventmask)\n self._fd2file[file_obj.fileno()]=file_obj\n \n def close_unregister_and_remove(fd):\n poller.unregister(fd)\n self._fd2file[fd].close()\n self._fd2file.pop(fd)\n \n if self.stdin and input:\n register_and_append(self.stdin,select.POLLOUT)\n \n \n if not self._communication_started:\n self._fd2output={}\n if self.stdout:\n self._fd2output[self.stdout.fileno()]=[]\n if self.stderr:\n self._fd2output[self.stderr.fileno()]=[]\n \n select_POLLIN_POLLPRI=select.POLLIN |select.POLLPRI\n if self.stdout:\n register_and_append(self.stdout,select_POLLIN_POLLPRI)\n stdout=self._fd2output[self.stdout.fileno()]\n if self.stderr:\n register_and_append(self.stderr,select_POLLIN_POLLPRI)\n stderr=self._fd2output[self.stderr.fileno()]\n \n self._save_input(input)\n \n while self._fd2file:\n timeout=self._remaining_time(endtime)\n if timeout is not None and timeout <0:\n raise TimeoutExpired(self.args,orig_timeout)\n try :\n ready=poller.poll(timeout)\n except select.error as e:\n if e.args[0]==errno.EINTR:\n continue\n raise\n self._check_timeout(endtime,orig_timeout)\n \n \n \n \n for fd,mode in ready:\n if mode&select.POLLOUT:\n chunk=self._input[self._input_offset:\n self._input_offset+_PIPE_BUF]\n try :\n self._input_offset +=os.write(fd,chunk)\n except OSError as e:\n if e.errno ==errno.EPIPE:\n close_unregister_and_remove(fd)\n else :\n raise\n else :\n if self._input_offset >=len(self._input):\n close_unregister_and_remove(fd)\n elif mode&select_POLLIN_POLLPRI:\n data=os.read(fd,4096)\n if not data:\n close_unregister_and_remove(fd)\n self._fd2output[fd].append(data)\n else :\n \n close_unregister_and_remove(fd)\n \n return (stdout,stderr)\n \n \n def _communicate_with_select(self,input,endtime,orig_timeout):\n if not self._communication_started:\n self._read_set=[]\n self._write_set=[]\n if self.stdin and input:\n self._write_set.append(self.stdin)\n if self.stdout:\n self._read_set.append(self.stdout)\n if self.stderr:\n self._read_set.append(self.stderr)\n \n self._save_input(input)\n \n stdout=None\n stderr=None\n \n if self.stdout:\n if not self._communication_started:\n self._stdout_buff=[]\n stdout=self._stdout_buff\n if self.stderr:\n if not self._communication_started:\n self._stderr_buff=[]\n stderr=self._stderr_buff\n \n while self._read_set or self._write_set:\n timeout=self._remaining_time(endtime)\n if timeout is not None and timeout <0:\n raise TimeoutExpired(self.args,orig_timeout)\n try :\n (rlist,wlist,xlist)=\\\n select.select(self._read_set,self._write_set,[],\n timeout)\n except select.error as e:\n if e.args[0]==errno.EINTR:\n continue\n raise\n \n \n \n if not (rlist or wlist or xlist):\n raise TimeoutExpired(self.args,orig_timeout)\n \n self._check_timeout(endtime,orig_timeout)\n \n \n \n \n if self.stdin in wlist:\n chunk=self._input[self._input_offset:\n self._input_offset+_PIPE_BUF]\n try :\n bytes_written=os.write(self.stdin.fileno(),chunk)\n except OSError as e:\n if e.errno ==errno.EPIPE:\n self.stdin.close()\n self._write_set.remove(self.stdin)\n else :\n raise\n else :\n self._input_offset +=bytes_written\n if self._input_offset >=len(self._input):\n self.stdin.close()\n self._write_set.remove(self.stdin)\n \n if self.stdout in rlist:\n data=os.read(self.stdout.fileno(),1024)\n if not data:\n self.stdout.close()\n self._read_set.remove(self.stdout)\n stdout.append(data)\n \n if self.stderr in rlist:\n data=os.read(self.stderr.fileno(),1024)\n if not data:\n self.stderr.close()\n self._read_set.remove(self.stderr)\n stderr.append(data)\n \n return (stdout,stderr)\n \n \n def send_signal(self,sig):\n \'\'\n \n os.kill(self.pid,sig)\n \n def terminate(self):\n \'\'\n \n self.send_signal(signal.SIGTERM)\n \n def kill(self):\n \'\'\n \n self.send_signal(signal.SIGKILL)\n',["_posixsubprocess","_winapi","builtins","errno","gc","io","msvcrt","os","select","signal","sys","threading","time","traceback","warnings"]],sys:[".py","\nfrom _sys import *\n\n_getframe=Getframe\nfrom javascript import JSObject\nfrom browser import window\n\nbrython_debug_mode=__BRYTHON__.debug\n\nbase_exec_prefix=__BRYTHON__.brython_path\n\nbase_prefix=__BRYTHON__.brython_path\n\nbuiltin_module_names=__BRYTHON__.builtin_module_names\n\nbyteorder='little'\n\ndef exc_info():\n exc=__BRYTHON__.current_exception\n if exc is None :\n return (None ,None ,None )\n return (exc.__class__,exc,exc.traceback)\n \nexec_prefix=__BRYTHON__.brython_path\n\nexecutable=__BRYTHON__.brython_path+'/brython.js'\n\nargv=__BRYTHON__.__ARGV\n\ndef exit(i=None ):\n raise SystemExit('')\n \nclass flag_class:\n def __init__(self):\n self.debug=0\n self.inspect=0\n self.interactive=0\n self.optimize=0\n self.dont_write_bytecode=0\n self.no_user_site=0\n self.no_site=0\n self.ignore_environment=0\n self.verbose=0\n self.bytes_warning=0\n self.quiet=0\n self.hash_randomization=1\n \nflags=flag_class()\n\nclass float_info:\n mant_dig=53\n max=window.Number.MAX_VALUE\n min=window.Number.MIN_VALUE\n radix=2\n \ndef getfilesystemencoding(*args,**kw):\n ''\n\n \n return 'utf-8'\n \ndef getrecursionlimit():\n return 200\n \nmaxsize=2 **63 -1\n\nmaxunicode=1114111\n\n\n\n\n\n\nplatform=\"brython\"\n\nprefix=__BRYTHON__.brython_path\n\nversion='.'.join(str(x)for x in __BRYTHON__.version_info[:3])\nversion +=\" (default, %s) \\n[Javascript 1.5] on Brython\"%__BRYTHON__.compiled_date\nhexversion=0x03000000\n\nclass _version_info(object):\n def __init__(self,version_info):\n self.version_info=version_info\n self.major=version_info[0]\n self.minor=version_info[1]\n self.micro=version_info[2]\n self.releaselevel=version_info[3]\n self.serial=version_info[4]\n \n def __getitem__(self,index):\n if isinstance(self.version_info[index],list):\n return tuple(self.version_info[index])\n return self.version_info[index]\n \n def hexversion(self):\n try :\n return '0%d0%d0%d'%(self.major,self.minor,self.micro)\n finally :\n return '0%d0000'%(self.major)\n \n def __str__(self):\n _s=\"sys.version(major=%d, minor=%d, micro=%d, releaselevel='%s', serial=%d)\"\n return _s %(self.major,self.minor,self.micro,\n self.releaselevel,self.serial)\n \n \n def __eq__(self,other):\n if isinstance(other,tuple):\n return (self.major,self.minor,self.micro)==other\n \n raise Error(\"Error! I don't know how to compare!\")\n \n def __ge__(self,other):\n if isinstance(other,tuple):\n return (self.major,self.minor,self.micro)>=other\n \n raise Error(\"Error! I don't know how to compare!\")\n \n def __gt__(self,other):\n if isinstance(other,tuple):\n return (self.major,self.minor,self.micro)>other\n \n raise Error(\"Error! I don't know how to compare!\")\n \n def __le__(self,other):\n if isinstance(other,tuple):\n return (self.major,self.minor,self.micro)<=other\n \n raise Error(\"Error! I don't know how to compare!\")\n \n def __lt__(self,other):\n if isinstance(other,tuple):\n return (self.major,self.minor,self.micro)=0:\n s=bytearray([0o200])\n else :\n s=bytearray([0o377])\n n=256 **digits+n\n \n for i in range(digits -1):\n s.insert(1,n&0o377)\n n >>=8\n else :\n raise ValueError("overflow in number field")\n \n return s\n \ndef calc_chksums(buf):\n \'\'\n\n\n\n\n\n\n \n unsigned_chksum=256+sum(struct.unpack_from("148B8x356B",buf))\n signed_chksum=256+sum(struct.unpack_from("148b8x356b",buf))\n return unsigned_chksum,signed_chksum\n \ndef copyfileobj(src,dst,length=None ):\n \'\'\n\n \n if length ==0:\n return\n if length is None :\n shutil.copyfileobj(src,dst)\n return\n \n BUFSIZE=16 *1024\n blocks,remainder=divmod(length,BUFSIZE)\n for b in range(blocks):\n buf=src.read(BUFSIZE)\n if len(buf)self.bufsize:\n self.fileobj.write(self.buf[:self.bufsize])\n self.buf=self.buf[self.bufsize:]\n \n def close(self):\n \'\'\n\n \n if self.closed:\n return\n \n if self.mode =="w"and self.comptype !="tar":\n self.buf +=self.cmp.flush()\n \n if self.mode =="w"and self.buf:\n self.fileobj.write(self.buf)\n self.buf=b""\n if self.comptype =="gz":\n \n \n \n \n \n \n self.fileobj.write(struct.pack("=0:\n blocks,remainder=divmod(pos -self.pos,self.bufsize)\n for i in range(blocks):\n self.read(self.bufsize)\n self.read(remainder)\n else :\n raise StreamError("seeking backwards is not allowed")\n return self.pos\n \n def read(self,size=None ):\n \'\'\n\n\n \n if size is None :\n t=[]\n while True :\n buf=self._read(self.bufsize)\n if not buf:\n break\n t.append(buf)\n buf="".join(t)\n else :\n buf=self._read(size)\n self.pos +=len(buf)\n return buf\n \n def _read(self,size):\n \'\'\n \n if self.comptype =="tar":\n return self.__read(size)\n \n c=len(self.dbuf)\n while c lastpos:\n self.map.append((False ,lastpos,offset,None ))\n self.map.append((True ,offset,offset+size,realpos))\n realpos +=size\n lastpos=offset+size\n if lastpos 0:\n while True :\n data,start,stop,offset=self.map[self.map_index]\n if start <=self.position "%(self.__class__.__name__,self.name,id(self))\n \n def get_info(self):\n \'\'\n \n info={\n "name":self.name,\n "mode":self.mode&0o7777,\n "uid":self.uid,\n "gid":self.gid,\n "size":self.size,\n "mtime":self.mtime,\n "chksum":self.chksum,\n "type":self.type,\n "linkname":self.linkname,\n "uname":self.uname,\n "gname":self.gname,\n "devmajor":self.devmajor,\n "devminor":self.devminor\n }\n \n if info["type"]==DIRTYPE and not info["name"].endswith("/"):\n info["name"]+="/"\n \n return info\n \n def tobuf(self,format=DEFAULT_FORMAT,encoding=ENCODING,errors="surrogateescape"):\n \'\'\n \n info=self.get_info()\n \n if format ==USTAR_FORMAT:\n return self.create_ustar_header(info,encoding,errors)\n elif format ==GNU_FORMAT:\n return self.create_gnu_header(info,encoding,errors)\n elif format ==PAX_FORMAT:\n return self.create_pax_header(info,encoding)\n else :\n raise ValueError("invalid format")\n \n def create_ustar_header(self,info,encoding,errors):\n \'\'\n \n info["magic"]=POSIX_MAGIC\n \n if len(info["linkname"])>LENGTH_LINK:\n raise ValueError("linkname is too long")\n \n if len(info["name"])>LENGTH_NAME:\n info["prefix"],info["name"]=self._posix_split_name(info["name"])\n \n return self._create_header(info,USTAR_FORMAT,encoding,errors)\n \n def create_gnu_header(self,info,encoding,errors):\n \'\'\n \n info["magic"]=GNU_MAGIC\n \n buf=b""\n if len(info["linkname"])>LENGTH_LINK:\n buf +=self._create_gnu_long_header(info["linkname"],GNUTYPE_LONGLINK,encoding,errors)\n \n if len(info["name"])>LENGTH_NAME:\n buf +=self._create_gnu_long_header(info["name"],GNUTYPE_LONGNAME,encoding,errors)\n \n return buf+self._create_header(info,GNU_FORMAT,encoding,errors)\n \n def create_pax_header(self,info,encoding):\n \'\'\n\n\n \n info["magic"]=POSIX_MAGIC\n pax_headers=self.pax_headers.copy()\n \n \n \n for name,hname,length in (\n ("name","path",LENGTH_NAME),("linkname","linkpath",LENGTH_LINK),\n ("uname","uname",32),("gname","gname",32)):\n \n if hname in pax_headers:\n \n continue\n \n \n try :\n info[name].encode("ascii","strict")\n except UnicodeEncodeError:\n pax_headers[hname]=info[name]\n continue\n \n if len(info[name])>length:\n pax_headers[hname]=info[name]\n \n \n \n for name,digits in (("uid",8),("gid",8),("size",12),("mtime",12)):\n if name in pax_headers:\n \n info[name]=0\n continue\n \n val=info[name]\n if not 0 <=val <8 **(digits -1)or isinstance(val,float):\n pax_headers[name]=str(val)\n info[name]=0\n \n \n if pax_headers:\n buf=self._create_pax_generic_header(pax_headers,XHDTYPE,encoding)\n else :\n buf=b""\n \n return buf+self._create_header(info,USTAR_FORMAT,"ascii","replace")\n \n @classmethod\n def create_pax_global_header(cls,pax_headers):\n \'\'\n \n return cls._create_pax_generic_header(pax_headers,XGLTYPE,"utf-8")\n \n def _posix_split_name(self,name):\n \'\'\n\n \n prefix=name[:LENGTH_PREFIX+1]\n while prefix and prefix[-1]!="/":\n prefix=prefix[:-1]\n \n name=name[len(prefix):]\n prefix=prefix[:-1]\n \n if not prefix or len(name)>LENGTH_NAME:\n raise ValueError("name is too long")\n return prefix,name\n \n @staticmethod\n def _create_header(info,format,encoding,errors):\n \'\'\n\n \n parts=[\n stn(info.get("name",""),100,encoding,errors),\n itn(info.get("mode",0)&0o7777,8,format),\n itn(info.get("uid",0),8,format),\n itn(info.get("gid",0),8,format),\n itn(info.get("size",0),12,format),\n itn(info.get("mtime",0),12,format),\n b" ",\n info.get("type",REGTYPE),\n stn(info.get("linkname",""),100,encoding,errors),\n info.get("magic",POSIX_MAGIC),\n stn(info.get("uname",""),32,encoding,errors),\n stn(info.get("gname",""),32,encoding,errors),\n itn(info.get("devmajor",0),8,format),\n itn(info.get("devminor",0),8,format),\n stn(info.get("prefix",""),155,encoding,errors)\n ]\n \n buf=struct.pack("%ds"%BLOCKSIZE,b"".join(parts))\n chksum=calc_chksums(buf[-BLOCKSIZE:])[0]\n buf=buf[:-364]+bytes("%06o\\0"%chksum,"ascii")+buf[-357:]\n return buf\n \n @staticmethod\n def _create_payload(payload):\n \'\'\n\n \n blocks,remainder=divmod(len(payload),BLOCKSIZE)\n if remainder >0:\n payload +=(BLOCKSIZE -remainder)*NUL\n return payload\n \n @classmethod\n def _create_gnu_long_header(cls,name,type,encoding,errors):\n \'\'\n\n \n name=name.encode(encoding,errors)+NUL\n \n info={}\n info["name"]="././@LongLink"\n info["type"]=type\n info["size"]=len(name)\n info["magic"]=GNU_MAGIC\n \n \n return cls._create_header(info,USTAR_FORMAT,encoding,errors)+\\\n cls._create_payload(name)\n \n @classmethod\n def _create_pax_generic_header(cls,pax_headers,type,encoding):\n \'\'\n\n\n \n \n \n binary=False\n for keyword,value in pax_headers.items():\n try :\n value.encode("utf-8","strict")\n except UnicodeEncodeError:\n binary=True\n break\n \n records=b""\n if binary:\n \n records +=b"21 hdrcharset=BINARY\\n"\n \n for keyword,value in pax_headers.items():\n keyword=keyword.encode("utf-8")\n if binary:\n \n \n value=value.encode(encoding,"surrogateescape")\n else :\n value=value.encode("utf-8")\n \n l=len(keyword)+len(value)+3\n n=p=0\n while True :\n n=l+len(str(p))\n if n ==p:\n break\n p=n\n records +=bytes(str(p),"ascii")+b" "+keyword+b"="+value+b"\\n"\n \n \n \n info={}\n info["name"]="././@PaxHeader"\n info["type"]=type\n info["size"]=len(records)\n info["magic"]=POSIX_MAGIC\n \n \n return cls._create_header(info,USTAR_FORMAT,"ascii","replace")+\\\n cls._create_payload(records)\n \n @classmethod\n def frombuf(cls,buf,encoding,errors):\n \'\'\n \n if len(buf)==0:\n raise EmptyHeaderError("empty header")\n if len(buf)!=BLOCKSIZE:\n raise TruncatedHeaderError("truncated header")\n if buf.count(NUL)==BLOCKSIZE:\n raise EOFHeaderError("end of file header")\n \n chksum=nti(buf[148:156])\n if chksum not in calc_chksums(buf):\n raise InvalidHeaderError("bad checksum")\n \n obj=cls()\n obj.name=nts(buf[0:100],encoding,errors)\n obj.mode=nti(buf[100:108])\n obj.uid=nti(buf[108:116])\n obj.gid=nti(buf[116:124])\n obj.size=nti(buf[124:136])\n obj.mtime=nti(buf[136:148])\n obj.chksum=chksum\n obj.type=buf[156:157]\n obj.linkname=nts(buf[157:257],encoding,errors)\n obj.uname=nts(buf[265:297],encoding,errors)\n obj.gname=nts(buf[297:329],encoding,errors)\n obj.devmajor=nti(buf[329:337])\n obj.devminor=nti(buf[337:345])\n prefix=nts(buf[345:500],encoding,errors)\n \n \n \n if obj.type ==AREGTYPE and obj.name.endswith("/"):\n obj.type=DIRTYPE\n \n \n \n \n if obj.type ==GNUTYPE_SPARSE:\n pos=386\n structs=[]\n for i in range(4):\n try :\n offset=nti(buf[pos:pos+12])\n numbytes=nti(buf[pos+12:pos+24])\n except ValueError:\n break\n structs.append((offset,numbytes))\n pos +=24\n isextended=bool(buf[482])\n origsize=nti(buf[483:495])\n obj._sparse_structs=(structs,isextended,origsize)\n \n \n if obj.isdir():\n obj.name=obj.name.rstrip("/")\n \n \n if prefix and obj.type not in GNU_TYPES:\n obj.name=prefix+"/"+obj.name\n return obj\n \n @classmethod\n def fromtarfile(cls,tarfile):\n \'\'\n\n \n buf=tarfile.fileobj.read(BLOCKSIZE)\n obj=cls.frombuf(buf,tarfile.encoding,tarfile.errors)\n obj.offset=tarfile.fileobj.tell()-BLOCKSIZE\n return obj._proc_member(tarfile)\n \n \n \n \n \n \n \n \n \n \n \n \n def _proc_member(self,tarfile):\n \'\'\n\n \n if self.type in (GNUTYPE_LONGNAME,GNUTYPE_LONGLINK):\n return self._proc_gnulong(tarfile)\n elif self.type ==GNUTYPE_SPARSE:\n return self._proc_sparse(tarfile)\n elif self.type in (XHDTYPE,XGLTYPE,SOLARIS_XHDTYPE):\n return self._proc_pax(tarfile)\n else :\n return self._proc_builtin(tarfile)\n \n def _proc_builtin(self,tarfile):\n \'\'\n\n \n self.offset_data=tarfile.fileobj.tell()\n offset=self.offset_data\n if self.isreg()or self.type not in SUPPORTED_TYPES:\n \n offset +=self._block(self.size)\n tarfile.offset=offset\n \n \n \n self._apply_pax_info(tarfile.pax_headers,tarfile.encoding,tarfile.errors)\n \n return self\n \n def _proc_gnulong(self,tarfile):\n \'\'\n\n \n buf=tarfile.fileobj.read(self._block(self.size))\n \n \n try :\n next=self.fromtarfile(tarfile)\n except HeaderError:\n raise SubsequentHeaderError("missing or bad subsequent header")\n \n \n \n next.offset=self.offset\n if self.type ==GNUTYPE_LONGNAME:\n next.name=nts(buf,tarfile.encoding,tarfile.errors)\n elif self.type ==GNUTYPE_LONGLINK:\n next.linkname=nts(buf,tarfile.encoding,tarfile.errors)\n \n return next\n \n def _proc_sparse(self,tarfile):\n \'\'\n \n \n structs,isextended,origsize=self._sparse_structs\n del self._sparse_structs\n \n \n while isextended:\n buf=tarfile.fileobj.read(BLOCKSIZE)\n pos=0\n for i in range(21):\n try :\n offset=nti(buf[pos:pos+12])\n numbytes=nti(buf[pos+12:pos+24])\n except ValueError:\n break\n if offset and numbytes:\n structs.append((offset,numbytes))\n pos +=24\n isextended=bool(buf[504])\n self.sparse=structs\n \n self.offset_data=tarfile.fileobj.tell()\n tarfile.offset=self.offset_data+self._block(self.size)\n self.size=origsize\n return self\n \n def _proc_pax(self,tarfile):\n \'\'\n\n \n \n buf=tarfile.fileobj.read(self._block(self.size))\n \n \n \n \n if self.type ==XGLTYPE:\n pax_headers=tarfile.pax_headers\n else :\n pax_headers=tarfile.pax_headers.copy()\n \n \n \n \n \n \n match=re.search(br"\\d+ hdrcharset=([^\\n]+)\\n",buf)\n if match is not None :\n pax_headers["hdrcharset"]=match.group(1).decode("utf-8")\n \n \n \n \n hdrcharset=pax_headers.get("hdrcharset")\n if hdrcharset =="BINARY":\n encoding=tarfile.encoding\n else :\n encoding="utf-8"\n \n \n \n \n \n regex=re.compile(br"(\\d+) ([^=]+)=")\n pos=0\n while True :\n match=regex.match(buf,pos)\n if not match:\n break\n \n length,keyword=match.groups()\n length=int(length)\n value=buf[match.end(2)+1:match.start(1)+length -1]\n \n \n \n \n \n \n \n \n keyword=self._decode_pax_field(keyword,"utf-8","utf-8",\n tarfile.errors)\n if keyword in PAX_NAME_FIELDS:\n value=self._decode_pax_field(value,encoding,tarfile.encoding,\n tarfile.errors)\n else :\n value=self._decode_pax_field(value,"utf-8","utf-8",\n tarfile.errors)\n \n pax_headers[keyword]=value\n pos +=length\n \n \n try :\n next=self.fromtarfile(tarfile)\n except HeaderError:\n raise SubsequentHeaderError("missing or bad subsequent header")\n \n \n if "GNU.sparse.map"in pax_headers:\n \n self._proc_gnusparse_01(next,pax_headers)\n \n elif "GNU.sparse.size"in pax_headers:\n \n self._proc_gnusparse_00(next,pax_headers,buf)\n \n elif pax_headers.get("GNU.sparse.major")=="1"and pax_headers.get("GNU.sparse.minor")=="0":\n \n self._proc_gnusparse_10(next,pax_headers,tarfile)\n \n if self.type in (XHDTYPE,SOLARIS_XHDTYPE):\n \n next._apply_pax_info(pax_headers,tarfile.encoding,tarfile.errors)\n next.offset=self.offset\n \n if "size"in pax_headers:\n \n \n \n offset=next.offset_data\n if next.isreg()or next.type not in SUPPORTED_TYPES:\n offset +=next._block(next.size)\n tarfile.offset=offset\n \n return next\n \n def _proc_gnusparse_00(self,next,pax_headers,buf):\n \'\'\n \n offsets=[]\n for match in re.finditer(br"\\d+ GNU.sparse.offset=(\\d+)\\n",buf):\n offsets.append(int(match.group(1)))\n numbytes=[]\n for match in re.finditer(br"\\d+ GNU.sparse.numbytes=(\\d+)\\n",buf):\n numbytes.append(int(match.group(1)))\n next.sparse=list(zip(offsets,numbytes))\n \n def _proc_gnusparse_01(self,next,pax_headers):\n \'\'\n \n sparse=[int(x)for x in pax_headers["GNU.sparse.map"].split(",")]\n next.sparse=list(zip(sparse[::2],sparse[1::2]))\n \n def _proc_gnusparse_10(self,next,pax_headers,tarfile):\n \'\'\n \n fields=None\n sparse=[]\n buf=tarfile.fileobj.read(BLOCKSIZE)\n fields,buf=buf.split(b"\\n",1)\n fields=int(fields)\n while len(sparse)1 or mode not in "raw":\n raise ValueError("mode must be \'r\', \'a\' or \'w\'")\n self.mode=mode\n self._mode={"r":"rb","a":"r+b","w":"wb"}[mode]\n \n if not fileobj:\n if self.mode =="a"and not os.path.exists(name):\n \n self.mode="w"\n self._mode="wb"\n fileobj=bltn_open(name,self._mode)\n self._extfileobj=False\n else :\n if name is None and hasattr(fileobj,"name"):\n name=fileobj.name\n if hasattr(fileobj,"mode"):\n self._mode=fileobj.mode\n self._extfileobj=True\n self.name=os.path.abspath(name)if name else None\n self.fileobj=fileobj\n \n \n if format is not None :\n self.format=format\n if tarinfo is not None :\n self.tarinfo=tarinfo\n if dereference is not None :\n self.dereference=dereference\n if ignore_zeros is not None :\n self.ignore_zeros=ignore_zeros\n if encoding is not None :\n self.encoding=encoding\n self.errors=errors\n \n if pax_headers is not None and self.format ==PAX_FORMAT:\n self.pax_headers=pax_headers\n else :\n self.pax_headers={}\n \n if debug is not None :\n self.debug=debug\n if errorlevel is not None :\n self.errorlevel=errorlevel\n \n \n self.closed=False\n self.members=[]\n self._loaded=False\n self.offset=self.fileobj.tell()\n \n self.inodes={}\n \n \n try :\n if self.mode =="r":\n self.firstmember=None\n self.firstmember=self.next()\n \n if self.mode =="a":\n \n \n while True :\n self.fileobj.seek(self.offset)\n try :\n tarinfo=self.tarinfo.fromtarfile(self)\n self.members.append(tarinfo)\n except EOFHeaderError:\n self.fileobj.seek(self.offset)\n break\n except HeaderError as e:\n raise ReadError(str(e))\n \n if self.mode in "aw":\n self._loaded=True\n \n if self.pax_headers:\n buf=self.tarinfo.create_pax_global_header(self.pax_headers.copy())\n self.fileobj.write(buf)\n self.offset +=len(buf)\n except :\n if not self._extfileobj:\n self.fileobj.close()\n self.closed=True\n raise\n \n \n \n \n \n \n \n \n \n \n \n \n @classmethod\n def open(cls,name=None ,mode="r",fileobj=None ,bufsize=RECORDSIZE,**kwargs):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not name and not fileobj:\n raise ValueError("nothing to open")\n \n if mode in ("r","r:*"):\n \n for comptype in cls.OPEN_METH:\n func=getattr(cls,cls.OPEN_METH[comptype])\n if fileobj is not None :\n saved_pos=fileobj.tell()\n try :\n return func(name,"r",fileobj,**kwargs)\n except (ReadError,CompressionError)as e:\n if fileobj is not None :\n fileobj.seek(saved_pos)\n continue\n raise ReadError("file could not be opened successfully")\n \n elif ":"in mode:\n filemode,comptype=mode.split(":",1)\n filemode=filemode or "r"\n comptype=comptype or "tar"\n \n \n \n if comptype in cls.OPEN_METH:\n func=getattr(cls,cls.OPEN_METH[comptype])\n else :\n raise CompressionError("unknown compression type %r"%comptype)\n return func(name,filemode,fileobj,**kwargs)\n \n elif "|"in mode:\n filemode,comptype=mode.split("|",1)\n filemode=filemode or "r"\n comptype=comptype or "tar"\n \n if filemode not in "rw":\n raise ValueError("mode must be \'r\' or \'w\'")\n \n stream=_Stream(name,filemode,comptype,fileobj,bufsize)\n try :\n t=cls(name,filemode,stream,**kwargs)\n except :\n stream.close()\n raise\n t._extfileobj=False\n return t\n \n elif mode in "aw":\n return cls.taropen(name,mode,fileobj,**kwargs)\n \n raise ValueError("undiscernible mode")\n \n @classmethod\n def taropen(cls,name,mode="r",fileobj=None ,**kwargs):\n \'\'\n \n if len(mode)>1 or mode not in "raw":\n raise ValueError("mode must be \'r\', \'a\' or \'w\'")\n return cls(name,mode,fileobj,**kwargs)\n \n @classmethod\n def gzopen(cls,name,mode="r",fileobj=None ,compresslevel=9,**kwargs):\n \'\'\n\n \n if len(mode)>1 or mode not in "rw":\n raise ValueError("mode must be \'r\' or \'w\'")\n \n try :\n import gzip\n gzip.GzipFile\n except (ImportError,AttributeError):\n raise CompressionError("gzip module is not available")\n \n extfileobj=fileobj is not None\n try :\n fileobj=gzip.GzipFile(name,mode+"b",compresslevel,fileobj)\n t=cls.taropen(name,mode,fileobj,**kwargs)\n except IOError:\n if not extfileobj and fileobj is not None :\n fileobj.close()\n if fileobj is None :\n raise\n raise ReadError("not a gzip file")\n except :\n if not extfileobj and fileobj is not None :\n fileobj.close()\n raise\n t._extfileobj=extfileobj\n return t\n \n @classmethod\n def bz2open(cls,name,mode="r",fileobj=None ,compresslevel=9,**kwargs):\n \'\'\n\n \n if len(mode)>1 or mode not in "rw":\n raise ValueError("mode must be \'r\' or \'w\'.")\n \n try :\n import bz2\n except ImportError:\n raise CompressionError("bz2 module is not available")\n \n fileobj=bz2.BZ2File(fileobj or name,mode,\n compresslevel=compresslevel)\n \n try :\n t=cls.taropen(name,mode,fileobj,**kwargs)\n except (IOError,EOFError):\n fileobj.close()\n raise ReadError("not a bzip2 file")\n t._extfileobj=False\n return t\n \n @classmethod\n def xzopen(cls,name,mode="r",fileobj=None ,preset=None ,**kwargs):\n \'\'\n\n \n if mode not in ("r","w"):\n raise ValueError("mode must be \'r\' or \'w\'")\n \n try :\n import lzma\n except ImportError:\n raise CompressionError("lzma module is not available")\n \n fileobj=lzma.LZMAFile(fileobj or name,mode,preset=preset)\n \n try :\n t=cls.taropen(name,mode,fileobj,**kwargs)\n except (lzma.LZMAError,EOFError):\n fileobj.close()\n raise ReadError("not an lzma file")\n t._extfileobj=False\n return t\n \n \n OPEN_METH={\n "tar":"taropen",\n "gz":"gzopen",\n "bz2":"bz2open",\n "xz":"xzopen"\n }\n \n \n \n \n def close(self):\n \'\'\n\n \n if self.closed:\n return\n \n if self.mode in "aw":\n self.fileobj.write(NUL *(BLOCKSIZE *2))\n self.offset +=(BLOCKSIZE *2)\n \n \n blocks,remainder=divmod(self.offset,RECORDSIZE)\n if remainder >0:\n self.fileobj.write(NUL *(RECORDSIZE -remainder))\n \n if not self._extfileobj:\n self.fileobj.close()\n self.closed=True\n \n def getmember(self,name):\n \'\'\n\n\n\n \n tarinfo=self._getmember(name)\n if tarinfo is None :\n raise KeyError("filename %r not found"%name)\n return tarinfo\n \n def getmembers(self):\n \'\'\n\n \n self._check()\n if not self._loaded:\n self._load()\n \n return self.members\n \n def getnames(self):\n \'\'\n\n \n return [tarinfo.name for tarinfo in self.getmembers()]\n \n def gettarinfo(self,name=None ,arcname=None ,fileobj=None ):\n \'\'\n\n\n\n\n \n self._check("aw")\n \n \n \n if fileobj is not None :\n name=fileobj.name\n \n \n \n \n if arcname is None :\n arcname=name\n drv,arcname=os.path.splitdrive(arcname)\n arcname=arcname.replace(os.sep,"/")\n arcname=arcname.lstrip("/")\n \n \n \n tarinfo=self.tarinfo()\n tarinfo.tarfile=self\n \n \n \n if fileobj is None :\n if hasattr(os,"lstat")and not self.dereference:\n statres=os.lstat(name)\n else :\n statres=os.stat(name)\n else :\n statres=os.fstat(fileobj.fileno())\n linkname=""\n \n stmd=statres.st_mode\n if stat.S_ISREG(stmd):\n inode=(statres.st_ino,statres.st_dev)\n if not self.dereference and statres.st_nlink >1 and\\\n inode in self.inodes and arcname !=self.inodes[inode]:\n \n \n type=LNKTYPE\n linkname=self.inodes[inode]\n else :\n \n \n type=REGTYPE\n if inode[0]:\n self.inodes[inode]=arcname\n elif stat.S_ISDIR(stmd):\n type=DIRTYPE\n elif stat.S_ISFIFO(stmd):\n type=FIFOTYPE\n elif stat.S_ISLNK(stmd):\n type=SYMTYPE\n linkname=os.readlink(name)\n elif stat.S_ISCHR(stmd):\n type=CHRTYPE\n elif stat.S_ISBLK(stmd):\n type=BLKTYPE\n else :\n return None\n \n \n \n tarinfo.name=arcname\n tarinfo.mode=stmd\n tarinfo.uid=statres.st_uid\n tarinfo.gid=statres.st_gid\n if type ==REGTYPE:\n tarinfo.size=statres.st_size\n else :\n tarinfo.size=0\n tarinfo.mtime=statres.st_mtime\n tarinfo.type=type\n tarinfo.linkname=linkname\n if pwd:\n try :\n tarinfo.uname=pwd.getpwuid(tarinfo.uid)[0]\n except KeyError:\n pass\n if grp:\n try :\n tarinfo.gname=grp.getgrgid(tarinfo.gid)[0]\n except KeyError:\n pass\n \n if type in (CHRTYPE,BLKTYPE):\n if hasattr(os,"major")and hasattr(os,"minor"):\n tarinfo.devmajor=os.major(statres.st_rdev)\n tarinfo.devminor=os.minor(statres.st_rdev)\n return tarinfo\n \n def list(self,verbose=True ):\n \'\'\n\n\n \n self._check()\n \n for tarinfo in self:\n if verbose:\n print(stat.filemode(tarinfo.mode),end=\' \')\n print("%s/%s"%(tarinfo.uname or tarinfo.uid,\n tarinfo.gname or tarinfo.gid),end=\' \')\n if tarinfo.ischr()or tarinfo.isblk():\n print("%10s"%("%d,%d"\\\n %(tarinfo.devmajor,tarinfo.devminor)),end=\' \')\n else :\n print("%10d"%tarinfo.size,end=\' \')\n print("%d-%02d-%02d %02d:%02d:%02d"\\\n %time.localtime(tarinfo.mtime)[:6],end=\' \')\n \n print(tarinfo.name+("/"if tarinfo.isdir()else ""),end=\' \')\n \n if verbose:\n if tarinfo.issym():\n print("->",tarinfo.linkname,end=\' \')\n if tarinfo.islnk():\n print("link to",tarinfo.linkname,end=\' \')\n print()\n \n def add(self,name,arcname=None ,recursive=True ,exclude=None ,*,filter=None ):\n \'\'\n\n\n\n\n\n\n\n\n \n self._check("aw")\n \n if arcname is None :\n arcname=name\n \n \n if exclude is not None :\n import warnings\n warnings.warn("use the filter argument instead",\n DeprecationWarning,2)\n if exclude(name):\n self._dbg(2,"tarfile: Excluded %r"%name)\n return\n \n \n if self.name is not None and os.path.abspath(name)==self.name:\n self._dbg(2,"tarfile: Skipped %r"%name)\n return\n \n self._dbg(1,name)\n \n \n tarinfo=self.gettarinfo(name,arcname)\n \n if tarinfo is None :\n self._dbg(1,"tarfile: Unsupported type %r"%name)\n return\n \n \n if filter is not None :\n tarinfo=filter(tarinfo)\n if tarinfo is None :\n self._dbg(2,"tarfile: Excluded %r"%name)\n return\n \n \n if tarinfo.isreg():\n with bltn_open(name,"rb")as f:\n self.addfile(tarinfo,f)\n \n elif tarinfo.isdir():\n self.addfile(tarinfo)\n if recursive:\n for f in os.listdir(name):\n self.add(os.path.join(name,f),os.path.join(arcname,f),\n recursive,exclude,filter=filter)\n \n else :\n self.addfile(tarinfo)\n \n def addfile(self,tarinfo,fileobj=None ):\n \'\'\n\n\n\n\n \n self._check("aw")\n \n tarinfo=copy.copy(tarinfo)\n \n buf=tarinfo.tobuf(self.format,self.encoding,self.errors)\n self.fileobj.write(buf)\n self.offset +=len(buf)\n \n \n if fileobj is not None :\n copyfileobj(fileobj,self.fileobj,tarinfo.size)\n blocks,remainder=divmod(tarinfo.size,BLOCKSIZE)\n if remainder >0:\n self.fileobj.write(NUL *(BLOCKSIZE -remainder))\n blocks +=1\n self.offset +=blocks *BLOCKSIZE\n \n self.members.append(tarinfo)\n \n def extractall(self,path=".",members=None ):\n \'\'\n\n\n\n\n \n directories=[]\n \n if members is None :\n members=self\n \n for tarinfo in members:\n if tarinfo.isdir():\n \n directories.append(tarinfo)\n tarinfo=copy.copy(tarinfo)\n tarinfo.mode=0o700\n \n self.extract(tarinfo,path,set_attrs=not tarinfo.isdir())\n \n \n directories.sort(key=lambda a:a.name)\n directories.reverse()\n \n \n for tarinfo in directories:\n dirpath=os.path.join(path,tarinfo.name)\n try :\n self.chown(tarinfo,dirpath)\n self.utime(tarinfo,dirpath)\n self.chmod(tarinfo,dirpath)\n except ExtractError as e:\n if self.errorlevel >1:\n raise\n else :\n self._dbg(1,"tarfile: %s"%e)\n \n def extract(self,member,path="",set_attrs=True ):\n \'\'\n\n\n\n\n \n self._check("r")\n \n if isinstance(member,str):\n tarinfo=self.getmember(member)\n else :\n tarinfo=member\n \n \n if tarinfo.islnk():\n tarinfo._link_target=os.path.join(path,tarinfo.linkname)\n \n try :\n self._extract_member(tarinfo,os.path.join(path,tarinfo.name),\n set_attrs=set_attrs)\n except EnvironmentError as e:\n if self.errorlevel >0:\n raise\n else :\n if e.filename is None :\n self._dbg(1,"tarfile: %s"%e.strerror)\n else :\n self._dbg(1,"tarfile: %s %r"%(e.strerror,e.filename))\n except ExtractError as e:\n if self.errorlevel >1:\n raise\n else :\n self._dbg(1,"tarfile: %s"%e)\n \n def extractfile(self,member):\n \'\'\n\n\n\n \n self._check("r")\n \n if isinstance(member,str):\n tarinfo=self.getmember(member)\n else :\n tarinfo=member\n \n if tarinfo.isreg()or tarinfo.type not in SUPPORTED_TYPES:\n \n return self.fileobject(self,tarinfo)\n \n elif tarinfo.islnk()or tarinfo.issym():\n if isinstance(self.fileobj,_Stream):\n \n \n \n raise StreamError("cannot extract (sym)link as file object")\n else :\n \n return self.extractfile(self._find_link_target(tarinfo))\n else :\n \n \n return None\n \n def _extract_member(self,tarinfo,targetpath,set_attrs=True ):\n \'\'\n\n \n \n \n \n targetpath=targetpath.rstrip("/")\n targetpath=targetpath.replace("/",os.sep)\n \n \n upperdirs=os.path.dirname(targetpath)\n if upperdirs and not os.path.exists(upperdirs):\n \n \n os.makedirs(upperdirs)\n \n if tarinfo.islnk()or tarinfo.issym():\n self._dbg(1,"%s -> %s"%(tarinfo.name,tarinfo.linkname))\n else :\n self._dbg(1,tarinfo.name)\n \n if tarinfo.isreg():\n self.makefile(tarinfo,targetpath)\n elif tarinfo.isdir():\n self.makedir(tarinfo,targetpath)\n elif tarinfo.isfifo():\n self.makefifo(tarinfo,targetpath)\n elif tarinfo.ischr()or tarinfo.isblk():\n self.makedev(tarinfo,targetpath)\n elif tarinfo.islnk()or tarinfo.issym():\n self.makelink(tarinfo,targetpath)\n elif tarinfo.type not in SUPPORTED_TYPES:\n self.makeunknown(tarinfo,targetpath)\n else :\n self.makefile(tarinfo,targetpath)\n \n if set_attrs:\n self.chown(tarinfo,targetpath)\n if not tarinfo.issym():\n self.chmod(tarinfo,targetpath)\n self.utime(tarinfo,targetpath)\n \n \n \n \n \n \n def makedir(self,tarinfo,targetpath):\n \'\'\n \n try :\n \n \n os.mkdir(targetpath,0o700)\n except FileExistsError:\n pass\n \n def makefile(self,tarinfo,targetpath):\n \'\'\n \n source=self.fileobj\n source.seek(tarinfo.offset_data)\n with bltn_open(targetpath,"wb")as target:\n if tarinfo.sparse is not None :\n for offset,size in tarinfo.sparse:\n target.seek(offset)\n copyfileobj(source,target,size)\n else :\n copyfileobj(source,target,tarinfo.size)\n target.seek(tarinfo.size)\n target.truncate()\n \n def makeunknown(self,tarinfo,targetpath):\n \'\'\n\n \n self.makefile(tarinfo,targetpath)\n self._dbg(1,"tarfile: Unknown file type %r, "\\\n "extracted as regular file."%tarinfo.type)\n \n def makefifo(self,tarinfo,targetpath):\n \'\'\n \n if hasattr(os,"mkfifo"):\n os.mkfifo(targetpath)\n else :\n raise ExtractError("fifo not supported by system")\n \n def makedev(self,tarinfo,targetpath):\n \'\'\n \n if not hasattr(os,"mknod")or not hasattr(os,"makedev"):\n raise ExtractError("special devices not supported by system")\n \n mode=tarinfo.mode\n if tarinfo.isblk():\n mode |=stat.S_IFBLK\n else :\n mode |=stat.S_IFCHR\n \n os.mknod(targetpath,mode,\n os.makedev(tarinfo.devmajor,tarinfo.devminor))\n \n def makelink(self,tarinfo,targetpath):\n \'\'\n\n\n \n try :\n \n if tarinfo.issym():\n os.symlink(tarinfo.linkname,targetpath)\n else :\n \n if os.path.exists(tarinfo._link_target):\n os.link(tarinfo._link_target,targetpath)\n else :\n self._extract_member(self._find_link_target(tarinfo),\n targetpath)\n except symlink_exception:\n try :\n self._extract_member(self._find_link_target(tarinfo),\n targetpath)\n except KeyError:\n raise ExtractError("unable to resolve link inside archive")\n \n def chown(self,tarinfo,targetpath):\n \'\'\n \n if pwd and hasattr(os,"geteuid")and os.geteuid()==0:\n \n try :\n g=grp.getgrnam(tarinfo.gname)[2]\n except KeyError:\n g=tarinfo.gid\n try :\n u=pwd.getpwnam(tarinfo.uname)[2]\n except KeyError:\n u=tarinfo.uid\n try :\n if tarinfo.issym()and hasattr(os,"lchown"):\n os.lchown(targetpath,u,g)\n else :\n if sys.platform !="os2emx":\n os.chown(targetpath,u,g)\n except EnvironmentError as e:\n raise ExtractError("could not change owner")\n \n def chmod(self,tarinfo,targetpath):\n \'\'\n \n if hasattr(os,\'chmod\'):\n try :\n os.chmod(targetpath,tarinfo.mode)\n except EnvironmentError as e:\n raise ExtractError("could not change mode")\n \n def utime(self,tarinfo,targetpath):\n \'\'\n \n if not hasattr(os,\'utime\'):\n return\n try :\n os.utime(targetpath,(tarinfo.mtime,tarinfo.mtime))\n except EnvironmentError as e:\n raise ExtractError("could not change modification time")\n \n \n def next(self):\n \'\'\n\n\n \n self._check("ra")\n if self.firstmember is not None :\n m=self.firstmember\n self.firstmember=None\n return m\n \n \n self.fileobj.seek(self.offset)\n tarinfo=None\n while True :\n try :\n tarinfo=self.tarinfo.fromtarfile(self)\n except EOFHeaderError as e:\n if self.ignore_zeros:\n self._dbg(2,"0x%X: %s"%(self.offset,e))\n self.offset +=BLOCKSIZE\n continue\n except InvalidHeaderError as e:\n if self.ignore_zeros:\n self._dbg(2,"0x%X: %s"%(self.offset,e))\n self.offset +=BLOCKSIZE\n continue\n elif self.offset ==0:\n raise ReadError(str(e))\n except EmptyHeaderError:\n if self.offset ==0:\n raise ReadError("empty file")\n except TruncatedHeaderError as e:\n if self.offset ==0:\n raise ReadError(str(e))\n except SubsequentHeaderError as e:\n raise ReadError(str(e))\n break\n \n if tarinfo is not None :\n self.members.append(tarinfo)\n else :\n self._loaded=True\n \n return tarinfo\n \n \n \n \n def _getmember(self,name,tarinfo=None ,normalize=False ):\n \'\'\n\n \n \n members=self.getmembers()\n \n \n if tarinfo is not None :\n members=members[:members.index(tarinfo)]\n \n if normalize:\n name=os.path.normpath(name)\n \n for member in reversed(members):\n if normalize:\n member_name=os.path.normpath(member.name)\n else :\n member_name=member.name\n \n if name ==member_name:\n return member\n \n def _load(self):\n \'\'\n\n \n while True :\n tarinfo=self.next()\n if tarinfo is None :\n break\n self._loaded=True\n \n def _check(self,mode=None ):\n \'\'\n\n \n if self.closed:\n raise IOError("%s is closed"%self.__class__.__name__)\n if mode is not None and self.mode not in mode:\n raise IOError("bad operation for mode %r"%self.mode)\n \n def _find_link_target(self,tarinfo):\n \'\'\n\n \n if tarinfo.issym():\n \n linkname="/".join(filter(None ,(os.path.dirname(tarinfo.name),tarinfo.linkname)))\n limit=None\n else :\n \n \n linkname=tarinfo.linkname\n limit=tarinfo\n \n member=self._getmember(linkname,tarinfo=limit,normalize=True )\n if member is None :\n raise KeyError("linkname %r not found"%linkname)\n return member\n \n def __iter__(self):\n \'\'\n \n if self._loaded:\n return iter(self.members)\n else :\n return TarIter(self)\n \n def _dbg(self,level,msg):\n \'\'\n \n if level <=self.debug:\n print(msg,file=sys.stderr)\n \n def __enter__(self):\n self._check()\n return self\n \n def __exit__(self,type,value,traceback):\n if type is None :\n self.close()\n else :\n \n \n if not self._extfileobj:\n self.fileobj.close()\n self.closed=True\n \n \nclass TarIter:\n \'\'\n\n\n\n \n \n def __init__(self,tarfile):\n \'\'\n \n self.tarfile=tarfile\n self.index=0\n def __iter__(self):\n \'\'\n \n return self\n def __next__(self):\n \'\'\n\n \n \n \n \n \n if self.index ==0 and self.tarfile.firstmember is not None :\n tarinfo=self.tarfile.next()\n elif self.index max_size:\n self.rollover()\n \n def rollover(self):\n if self._rolled:return\n file=self._file\n newfile=self._file=TemporaryFile(**self._TemporaryFileArgs)\n del self._TemporaryFileArgs\n \n newfile.write(file.getvalue())\n newfile.seek(file.tell(),0)\n \n self._rolled=True\n \n \n \n \n \n \n \n def __enter__(self):\n if self._file.closed:\n raise ValueError(\"Cannot enter context with closed file\")\n return self\n \n def __exit__(self,exc,value,tb):\n self._file.close()\n \n \n def __iter__(self):\n return self._file.__iter__()\n \n def close(self):\n self._file.close()\n \n @property\n def closed(self):\n return self._file.closed\n \n @property\n def encoding(self):\n try :\n return self._file.encoding\n except AttributeError:\n if 'b'in self._TemporaryFileArgs['mode']:\n raise\n return self._TemporaryFileArgs['encoding']\n \n def fileno(self):\n self.rollover()\n return self._file.fileno()\n \n def flush(self):\n self._file.flush()\n \n def isatty(self):\n return self._file.isatty()\n \n @property\n def mode(self):\n try :\n return self._file.mode\n except AttributeError:\n return self._TemporaryFileArgs['mode']\n \n @property\n def name(self):\n try :\n return self._file.name\n except AttributeError:\n return None\n \n @property\n def newlines(self):\n try :\n return self._file.newlines\n except AttributeError:\n if 'b'in self._TemporaryFileArgs['mode']:\n raise\n return self._TemporaryFileArgs['newline']\n \n def read(self,*args):\n return self._file.read(*args)\n \n def readline(self,*args):\n return self._file.readline(*args)\n \n def readlines(self,*args):\n return self._file.readlines(*args)\n \n def seek(self,*args):\n self._file.seek(*args)\n \n @property\n def softspace(self):\n return self._file.softspace\n \n def tell(self):\n return self._file.tell()\n \n def truncate(self,size=None ):\n if size is None :\n self._file.truncate()\n else :\n if size >self._max_size:\n self.rollover()\n self._file.truncate(size)\n \n def write(self,s):\n file=self._file\n rv=file.write(s)\n self._check(file)\n return rv\n \n def writelines(self,iterable):\n file=self._file\n rv=file.writelines(iterable)\n self._check(file)\n return rv\n \n \nclass TemporaryDirectory(object):\n ''\n\n\n\n\n\n\n\n\n \n \n def __init__(self,suffix=\"\",prefix=template,dir=None ):\n self._closed=False\n self.name=None\n self.name=mkdtemp(suffix,prefix,dir)\n \n def __repr__(self):\n return \"<{} {!r}>\".format(self.__class__.__name__,self.name)\n \n def __enter__(self):\n return self.name\n \n def cleanup(self,_warn=False ):\n if self.name and not self._closed:\n try :\n self._rmtree(self.name)\n except (TypeError,AttributeError)as ex:\n \n \n \n if \"None\"not in str(ex):\n raise\n print(\"ERROR: {!r} while cleaning up {!r}\".format(ex,self,),\n file=_sys.stderr)\n return\n self._closed=True\n if _warn:\n self._warn(\"Implicitly cleaning up {!r}\".format(self),\n ResourceWarning)\n \n def __exit__(self,exc,value,tb):\n self.cleanup()\n \n def __del__(self):\n \n self.cleanup(_warn=True )\n \n \n \n \n \n _listdir=staticmethod(_os.listdir)\n _path_join=staticmethod(_os.path.join)\n _isdir=staticmethod(_os.path.isdir)\n _islink=staticmethod(_os.path.islink)\n _remove=staticmethod(_os.remove)\n _rmdir=staticmethod(_os.rmdir)\n _os_error=OSError\n _warn=_warnings.warn\n \n def _rmtree(self,path):\n \n \n for name in self._listdir(path):\n fullname=self._path_join(path,name)\n try :\n isdir=self._isdir(fullname)and not self._islink(fullname)\n except self._os_error:\n isdir=False\n if isdir:\n self._rmtree(fullname)\n else :\n try :\n self._remove(fullname)\n except self._os_error:\n pass\n try :\n self._rmdir(path)\n except self._os_error:\n pass\n",["_dummy_thread","_thread","errno","fcntl","io","os","random","sys","warnings"]],textwrap:[".py","''\n\n\n\n\n\n\nimport re\n\n__all__=['TextWrapper','wrap','fill','dedent','indent']\n\n\n\n\n\n\n\n\n\n_whitespace='\\t\\n\\x0b\\x0c\\r '\n\nclass TextWrapper:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n unicode_whitespace_trans={}\n uspace=ord(' ')\n for x in _whitespace:\n unicode_whitespace_trans[ord(x)]=uspace\n \n \n \n \n \n \n \n wordsep_re=re.compile(\n r'(\\s+|'\n r'[^\\s\\w]*\\w+[^0-9\\W]-(?=\\w+[^0-9\\W])|'\n r'(?<=[\\w\\!\\\"\\'\\&\\.\\,\\?])-{2,}(?=\\w))')\n \n \n \n \n \n wordsep_simple_re=re.compile(r'(\\s+)')\n \n \n \n sentence_end_re=re.compile(r'[a-z]'\n r'[\\.\\!\\?]'\n r'[\\\"\\']?'\n r'\\Z')\n \n \n def __init__(self,\n width=70,\n initial_indent=\"\",\n subsequent_indent=\"\",\n expand_tabs=True ,\n replace_whitespace=True ,\n fix_sentence_endings=False ,\n break_long_words=True ,\n drop_whitespace=True ,\n break_on_hyphens=True ,\n tabsize=8):\n self.width=width\n self.initial_indent=initial_indent\n self.subsequent_indent=subsequent_indent\n self.expand_tabs=expand_tabs\n self.replace_whitespace=replace_whitespace\n self.fix_sentence_endings=fix_sentence_endings\n self.break_long_words=break_long_words\n self.drop_whitespace=drop_whitespace\n self.break_on_hyphens=break_on_hyphens\n self.tabsize=tabsize\n \n \n \n \n \n def _munge_whitespace(self,text):\n ''\n\n\n\n\n \n if self.expand_tabs:\n text=text.expandtabs(self.tabsize)\n if self.replace_whitespace:\n text=text.translate(self.unicode_whitespace_trans)\n return text\n \n \n def _split(self,text):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n if self.break_on_hyphens is True :\n chunks=self.wordsep_re.split(text)\n else :\n chunks=self.wordsep_simple_re.split(text)\n chunks=[c for c in chunks if c]\n return chunks\n \n def _fix_sentence_endings(self,chunks):\n ''\n\n\n\n\n\n\n \n i=0\n patsearch=self.sentence_end_re.search\n while i 0)\"%self.width)\n \n \n \n chunks.reverse()\n \n while chunks:\n \n \n \n cur_line=[]\n cur_len=0\n \n \n if lines:\n indent=self.subsequent_indent\n else :\n indent=self.initial_indent\n \n \n width=self.width -len(indent)\n \n \n \n if self.drop_whitespace and chunks[-1].strip()==''and lines:\n del chunks[-1]\n \n while chunks:\n l=len(chunks[-1])\n \n \n if cur_len+l <=width:\n cur_line.append(chunks.pop())\n cur_len +=l\n \n \n else :\n break\n \n \n \n if chunks and len(chunks[-1])>width:\n self._handle_long_word(chunks,cur_line,cur_len,width)\n \n \n if self.drop_whitespace and cur_line and cur_line[-1].strip()=='':\n del cur_line[-1]\n \n \n \n if cur_line:\n lines.append(indent+''.join(cur_line))\n \n return lines\n \n \n \n \n def wrap(self,text):\n ''\n\n\n\n\n\n\n \n text=self._munge_whitespace(text)\n chunks=self._split(text)\n if self.fix_sentence_endings:\n self._fix_sentence_endings(chunks)\n return self._wrap_chunks(chunks)\n \n def fill(self,text):\n ''\n\n\n\n\n \n return \"\\n\".join(self.wrap(text))\n \n \n \n \ndef wrap(text,width=70,**kwargs):\n ''\n\n\n\n\n\n\n\n \n w=TextWrapper(width=width,**kwargs)\n return w.wrap(text)\n \ndef fill(text,width=70,**kwargs):\n ''\n\n\n\n\n\n\n \n w=TextWrapper(width=width,**kwargs)\n return w.fill(text)\n \n \n \n \n_whitespace_only_re=re.compile('^[ \\t]+$',re.MULTILINE)\n_leading_whitespace_re=re.compile('(^[ \\t]*)(?:[^ \\t\\n])',re.MULTILINE)\n\ndef dedent(text):\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n \n margin=None\n text=_whitespace_only_re.sub('',text)\n indents=_leading_whitespace_re.findall(text)\n for indent in indents:\n if margin is None :\n margin=indent\n \n \n \n elif indent.startswith(margin):\n pass\n \n \n \n elif margin.startswith(indent):\n margin=indent\n \n \n \n else :\n margin=\"\"\n break\n \n \n if 0 and margin:\n for line in text.split(\"\\n\"):\n assert not line or line.startswith(margin),\\\n \"line = %r, margin = %r\"%(line,margin)\n \n if margin:\n text=re.sub(r'(?m)^'+margin,'',text)\n return text\n \n \ndef indent(text,prefix,predicate=None ):\n ''\n\n\n\n\n\n \n if predicate is None :\n def predicate(line):\n return line.strip()\n \n def prefixed_lines():\n for line in text.splitlines(True ):\n yield (prefix+line if predicate(line)else line)\n return ''.join(prefixed_lines())\n \n \nif __name__ ==\"__main__\":\n\n\n print(dedent(\"Hello there.\\n This is indented.\"))\n",["re"]],this:[".py",'s="""Gur Mra bs Clguba, ol Gvz Crgref\n\nOrnhgvshy vf orggre guna htyl.\nRkcyvpvg vf orggre guna vzcyvpvg.\nFvzcyr vf orggre guna pbzcyrk.\nPbzcyrk vf orggre guna pbzcyvpngrq.\nSyng vf orggre guna arfgrq.\nFcnefr vf orggre guna qrafr.\nErnqnovyvgl pbhagf.\nFcrpvny pnfrf nera\'g fcrpvny rabhtu gb oernx gur ehyrf.\nNygubhtu cenpgvpnyvgl orngf chevgl.\nReebef fubhyq arire cnff fvyragyl.\nHayrff rkcyvpvgyl fvyraprq.\nVa gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.\nGurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.\nNygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh\'er Qhgpu.\nAbj vf orggre guna arire.\nNygubhtu arire vf bsgra orggre guna *evtug* abj.\nVs gur vzcyrzragngvba vf uneq gb rkcynva, vg\'f n onq vqrn.\nVs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.\nAnzrfcnprf ner bar ubaxvat terng vqrn -- yrg\'f qb zber bs gubfr!"""\n\nd={}\nfor c in (65,97):\n for i in range(26):\n d[chr(i+c)]=chr((i+13)%26+c)\n \nprint("".join([d.get(c,c)for c in s]))\n',[]],threading:[".py","''\n\nimport sys as _sys\nimport _thread\n\nfrom time import sleep as _sleep\ntry :\n from time import monotonic as _time\nexcept ImportError:\n from time import time as _time\nfrom traceback import format_exc as _format_exc\nfrom _weakrefset import WeakSet\n\n\n\n\n\n\n\n\n\n\n\n__all__=['active_count','Condition','current_thread','enumerate','Event',\n'Lock','RLock','Semaphore','BoundedSemaphore','Thread','Barrier',\n'Timer','ThreadError','setprofile','settrace','local','stack_size']\n\n\n_start_new_thread=_thread.start_new_thread\n_allocate_lock=_thread.allocate_lock\nget_ident=_thread.get_ident\nThreadError=_thread.error\ntry :\n _CRLock=_thread.RLock\nexcept AttributeError:\n _CRLock=None\nTIMEOUT_MAX=_thread.TIMEOUT_MAX\ndel _thread\n\n\n\n\n_profile_hook=None\n_trace_hook=None\n\ndef setprofile(func):\n ''\n\n\n\n\n \n global _profile_hook\n _profile_hook=func\n \ndef settrace(func):\n ''\n\n\n\n\n \n global _trace_hook\n _trace_hook=func\n \n \n \nLock=_allocate_lock\n\ndef RLock(*args,**kwargs):\n ''\n\n\n\n\n\n\n \n if _CRLock is None :\n return _PyRLock(*args,**kwargs)\n return _CRLock(*args,**kwargs)\n \nclass _RLock:\n ''\n\n\n\n\n\n\n \n \n def __init__(self):\n self._block=_allocate_lock()\n self._owner=None\n self._count=0\n \n def __repr__(self):\n owner=self._owner\n try :\n owner=_active[owner].name\n except KeyError:\n pass\n return \"<%s owner=%r count=%d>\"%(\n self.__class__.__name__,owner,self._count)\n \n def acquire(self,blocking=True ,timeout=-1):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n me=get_ident()\n if self._owner ==me:\n self._count=self._count+1\n return 1\n rc=self._block.acquire(blocking,timeout)\n if rc:\n self._owner=me\n self._count=1\n return rc\n \n __enter__=acquire\n \n def release(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if self._owner !=get_ident():\n raise RuntimeError(\"cannot release un-acquired lock\")\n self._count=count=self._count -1\n if not count:\n self._owner=None\n self._block.release()\n \n def __exit__(self,t,v,tb):\n self.release()\n \n \n \n def _acquire_restore(self,state):\n self._block.acquire()\n self._count,self._owner=state\n \n def _release_save(self):\n if self._count ==0:\n raise RuntimeError(\"cannot release un-acquired lock\")\n count=self._count\n self._count=0\n owner=self._owner\n self._owner=None\n self._block.release()\n return (count,owner)\n \n def _is_owned(self):\n return self._owner ==get_ident()\n \n_PyRLock=_RLock\n\n\nclass Condition:\n ''\n\n\n\n\n\n\n\n\n \n \n def __init__(self,lock=None ):\n if lock is None :\n lock=RLock()\n self._lock=lock\n \n self.acquire=lock.acquire\n self.release=lock.release\n \n \n \n try :\n self._release_save=lock._release_save\n except AttributeError:\n pass\n try :\n self._acquire_restore=lock._acquire_restore\n except AttributeError:\n pass\n try :\n self._is_owned=lock._is_owned\n except AttributeError:\n pass\n self._waiters=[]\n \n def __enter__(self):\n return self._lock.__enter__()\n \n def __exit__(self,*args):\n return self._lock.__exit__(*args)\n \n def __repr__(self):\n return \"\"%(self._lock,len(self._waiters))\n \n def _release_save(self):\n self._lock.release()\n \n def _acquire_restore(self,x):\n self._lock.acquire()\n \n def _is_owned(self):\n \n \n if self._lock.acquire(0):\n self._lock.release()\n return False\n else :\n return True\n \n def wait(self,timeout=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not self._is_owned():\n raise RuntimeError(\"cannot wait on un-acquired lock\")\n waiter=_allocate_lock()\n waiter.acquire()\n self._waiters.append(waiter)\n saved_state=self._release_save()\n try :\n if timeout is None :\n waiter.acquire()\n gotit=True\n else :\n if timeout >0:\n gotit=waiter.acquire(True ,timeout)\n else :\n gotit=waiter.acquire(False )\n if not gotit:\n try :\n self._waiters.remove(waiter)\n except ValueError:\n pass\n return gotit\n finally :\n self._acquire_restore(saved_state)\n \n def wait_for(self,predicate,timeout=None ):\n ''\n\n\n\n\n\n \n endtime=None\n waittime=timeout\n result=predicate()\n while not result:\n if waittime is not None :\n if endtime is None :\n endtime=_time()+waittime\n else :\n waittime=endtime -_time()\n if waittime <=0:\n break\n self.wait(waittime)\n result=predicate()\n return result\n \n def notify(self,n=1):\n ''\n\n\n\n\n\n\n\n \n if not self._is_owned():\n raise RuntimeError(\"cannot notify on un-acquired lock\")\n __waiters=self._waiters\n waiters=__waiters[:n]\n if not waiters:\n return\n for waiter in waiters:\n waiter.release()\n try :\n __waiters.remove(waiter)\n except ValueError:\n pass\n \n def notify_all(self):\n ''\n\n\n\n\n \n self.notify(len(self._waiters))\n \n notifyAll=notify_all\n \n \nclass Semaphore:\n ''\n\n\n\n\n\n\n \n \n \n \n def __init__(self,value=1):\n if value <0:\n raise ValueError(\"semaphore initial value must be >= 0\")\n self._cond=Condition(Lock())\n self._value=value\n \n def acquire(self,blocking=True ,timeout=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not blocking and timeout is not None :\n raise ValueError(\"can't specify timeout for non-blocking acquire\")\n rc=False\n endtime=None\n with self._cond:\n while self._value ==0:\n if not blocking:\n break\n if timeout is not None :\n if endtime is None :\n endtime=_time()+timeout\n else :\n timeout=endtime -_time()\n if timeout <=0:\n break\n self._cond.wait(timeout)\n else :\n self._value=self._value -1\n rc=True\n return rc\n \n __enter__=acquire\n \n def release(self):\n ''\n\n\n\n\n \n with self._cond:\n self._value=self._value+1\n self._cond.notify()\n \n def __exit__(self,t,v,tb):\n self.release()\n \n \nclass BoundedSemaphore(Semaphore):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,value=1):\n Semaphore.__init__(self,value)\n self._initial_value=value\n \n def release(self):\n ''\n\n\n\n\n\n\n\n \n with self._cond:\n if self._value >=self._initial_value:\n raise ValueError(\"Semaphore released too many times\")\n self._value +=1\n self._cond.notify()\n \n \nclass Event:\n ''\n\n\n\n\n\n \n \n \n \n def __init__(self):\n self._cond=Condition(Lock())\n self._flag=False\n \n def _reset_internal_locks(self):\n \n self._cond.__init__()\n \n def is_set(self):\n ''\n return self._flag\n \n isSet=is_set\n \n def set(self):\n ''\n\n\n\n\n \n self._cond.acquire()\n try :\n self._flag=True\n self._cond.notify_all()\n finally :\n self._cond.release()\n \n def clear(self):\n ''\n\n\n\n\n \n self._cond.acquire()\n try :\n self._flag=False\n finally :\n self._cond.release()\n \n def wait(self,timeout=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n self._cond.acquire()\n try :\n signaled=self._flag\n if not signaled:\n signaled=self._cond.wait(timeout)\n return signaled\n finally :\n self._cond.release()\n \n \n \n \n \n \n \n \n \n \n \n \n \nclass Barrier:\n ''\n\n\n\n\n\n \n \n def __init__(self,parties,action=None ,timeout=None ):\n ''\n\n\n\n\n\n\n \n self._cond=Condition(Lock())\n self._action=action\n self._timeout=timeout\n self._parties=parties\n self._state=0\n self._count=0\n \n def wait(self,timeout=None ):\n ''\n\n\n\n\n\n\n \n if timeout is None :\n timeout=self._timeout\n with self._cond:\n self._enter()\n index=self._count\n self._count +=1\n try :\n if index+1 ==self._parties:\n \n self._release()\n else :\n \n self._wait(timeout)\n return index\n finally :\n self._count -=1\n \n self._exit()\n \n \n \n def _enter(self):\n while self._state in (-1,1):\n \n self._cond.wait()\n \n if self._state <0:\n raise BrokenBarrierError\n assert self._state ==0\n \n \n \n def _release(self):\n try :\n if self._action:\n self._action()\n \n self._state=1\n self._cond.notify_all()\n except :\n \n self._break()\n raise\n \n \n \n def _wait(self,timeout):\n if not self._cond.wait_for(lambda :self._state !=0,timeout):\n \n self._break()\n raise BrokenBarrierError\n if self._state <0:\n raise BrokenBarrierError\n assert self._state ==1\n \n \n \n def _exit(self):\n if self._count ==0:\n if self._state in (-1,1):\n \n self._state=0\n self._cond.notify_all()\n \n def reset(self):\n ''\n\n\n\n\n \n with self._cond:\n if self._count >0:\n if self._state ==0:\n \n self._state=-1\n elif self._state ==-2:\n \n \n self._state=-1\n else :\n self._state=0\n self._cond.notify_all()\n \n def abort(self):\n ''\n\n\n\n\n \n with self._cond:\n self._break()\n \n def _break(self):\n \n \n self._state=-2\n self._cond.notify_all()\n \n @property\n def parties(self):\n ''\n return self._parties\n \n @property\n def n_waiting(self):\n ''\n \n \n if self._state ==0:\n return self._count\n return 0\n \n @property\n def broken(self):\n ''\n return self._state ==-2\n \n \nclass BrokenBarrierError(RuntimeError):\n pass\n \n \n \n_counter=0\ndef _newname(template=\"Thread-%d\"):\n global _counter\n _counter=_counter+1\n return template %_counter\n \n \n_active_limbo_lock=_allocate_lock()\n_active={}\n_limbo={}\n\n\n_dangling=WeakSet()\n\n\n\nclass Thread:\n ''\n\n\n\n\n\n \n \n __initialized=False\n \n \n \n \n __exc_info=_sys.exc_info\n \n \n \n \n def __init__(self,group=None ,target=None ,name=None ,\n args=(),kwargs=None ,*,daemon=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n assert group is None ,\"group argument must be None for now\"\n if kwargs is None :\n kwargs={}\n self._target=target\n self._name=str(name or _newname())\n self._args=args\n self._kwargs=kwargs\n if daemon is not None :\n self._daemonic=daemon\n else :\n self._daemonic=current_thread().daemon\n self._ident=None\n self._started=Event()\n self._stopped=False\n self._block=Condition(Lock())\n self._initialized=True\n \n \n self._stderr=_sys.stderr\n _dangling.add(self)\n \n def _reset_internal_locks(self):\n \n \n if hasattr(self,'_block'):\n self._block.__init__()\n self._started._reset_internal_locks()\n \n def __repr__(self):\n assert self._initialized,\"Thread.__init__() was not called\"\n status=\"initial\"\n if self._started.is_set():\n status=\"started\"\n if self._stopped:\n status=\"stopped\"\n if self._daemonic:\n status +=\" daemon\"\n if self._ident is not None :\n status +=\" %s\"%self._ident\n return \"<%s(%s, %s)>\"%(self.__class__.__name__,self._name,status)\n \n def start(self):\n ''\n\n\n\n\n\n\n\n \n if not self._initialized:\n raise RuntimeError(\"thread.__init__() not called\")\n \n if self._started.is_set():\n raise RuntimeError(\"threads can only be started once\")\n with _active_limbo_lock:\n _limbo[self]=self\n try :\n _start_new_thread(self._bootstrap,())\n except Exception:\n with _active_limbo_lock:\n del _limbo[self]\n raise\n self._started.wait()\n \n def run(self):\n ''\n\n\n\n\n\n\n \n try :\n if self._target:\n self._target(*self._args,**self._kwargs)\n finally :\n \n \n del self._target,self._args,self._kwargs\n \n def _bootstrap(self):\n \n \n \n \n \n \n \n \n \n \n \n \n try :\n self._bootstrap_inner()\n except :\n if self._daemonic and _sys is None :\n return\n raise\n \n def _set_ident(self):\n self._ident=get_ident()\n \n def _bootstrap_inner(self):\n try :\n self._set_ident()\n self._started.set()\n with _active_limbo_lock:\n _active[self._ident]=self\n del _limbo[self]\n \n if _trace_hook:\n _sys.settrace(_trace_hook)\n if _profile_hook:\n _sys.setprofile(_profile_hook)\n \n try :\n self.run()\n except SystemExit:\n pass\n except :\n \n \n \n \n if _sys:\n _sys.stderr.write(\"Exception in thread %s:\\n%s\\n\"%\n (self.name,_format_exc()))\n else :\n \n \n \n exc_type,exc_value,exc_tb=self._exc_info()\n try :\n print((\n \"Exception in thread \"+self.name+\n \" (most likely raised during interpreter shutdown):\"),file=self._stderr)\n print((\n \"Traceback (most recent call last):\"),file=self._stderr)\n while exc_tb:\n print((\n ' File \"%s\", line %s, in %s'%\n (exc_tb.tb_frame.f_code.co_filename,\n exc_tb.tb_lineno,\n exc_tb.tb_frame.f_code.co_name)),file=self._stderr)\n exc_tb=exc_tb.tb_next\n print((\"%s: %s\"%(exc_type,exc_value)),file=self._stderr)\n \n \n finally :\n del exc_type,exc_value,exc_tb\n finally :\n \n \n \n \n \n pass\n finally :\n with _active_limbo_lock:\n self._stop()\n try :\n \n \n del _active[get_ident()]\n except :\n pass\n \n def _stop(self):\n self._block.acquire()\n self._stopped=True\n self._block.notify_all()\n self._block.release()\n \n def _delete(self):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n try :\n with _active_limbo_lock:\n del _active[get_ident()]\n \n \n \n \n except KeyError:\n if 'dummy_threading'not in _sys.modules:\n raise\n \n def join(self,timeout=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not self._initialized:\n raise RuntimeError(\"Thread.__init__() not called\")\n if not self._started.is_set():\n raise RuntimeError(\"cannot join thread before it is started\")\n if self is current_thread():\n raise RuntimeError(\"cannot join current thread\")\n \n self._block.acquire()\n try :\n if timeout is None :\n while not self._stopped:\n self._block.wait()\n else :\n deadline=_time()+timeout\n while not self._stopped:\n delay=deadline -_time()\n if delay <=0:\n break\n self._block.wait(delay)\n finally :\n self._block.release()\n \n @property\n def name(self):\n ''\n\n\n\n\n \n assert self._initialized,\"Thread.__init__() not called\"\n return self._name\n \n @name.setter\n def name(self,name):\n assert self._initialized,\"Thread.__init__() not called\"\n self._name=str(name)\n \n @property\n def ident(self):\n ''\n\n\n\n\n\n \n assert self._initialized,\"Thread.__init__() not called\"\n return self._ident\n \n def is_alive(self):\n ''\n\n\n\n\n\n \n assert self._initialized,\"Thread.__init__() not called\"\n return self._started.is_set()and not self._stopped\n \n isAlive=is_alive\n \n @property\n def daemon(self):\n ''\n\n\n\n\n\n\n\n\n\n \n assert self._initialized,\"Thread.__init__() not called\"\n return self._daemonic\n \n @daemon.setter\n def daemon(self,daemonic):\n if not self._initialized:\n raise RuntimeError(\"Thread.__init__() not called\")\n if self._started.is_set():\n raise RuntimeError(\"cannot set daemon status of active thread\");\n self._daemonic=daemonic\n \n def isDaemon(self):\n return self.daemon\n \n def setDaemon(self,daemonic):\n self.daemon=daemonic\n \n def getName(self):\n return self.name\n \n def setName(self,name):\n self.name=name\n \n \n \nclass Timer(Thread):\n ''\n\n\n\n\n\n \n \n def __init__(self,interval,function,args=None ,kwargs=None ):\n Thread.__init__(self)\n self.interval=interval\n self.function=function\n self.args=args if args is not None else []\n self.kwargs=kwargs if kwargs is not None else {}\n self.finished=Event()\n \n def cancel(self):\n ''\n self.finished.set()\n \n def run(self):\n self.finished.wait(self.interval)\n if not self.finished.is_set():\n self.function(*self.args,**self.kwargs)\n self.finished.set()\n \n \n \n \nclass _MainThread(Thread):\n\n def __init__(self):\n Thread.__init__(self,name=\"MainThread\",daemon=False )\n self._started.set()\n self._set_ident()\n with _active_limbo_lock:\n _active[self._ident]=self\n \n def _exitfunc(self):\n self._stop()\n t=_pickSomeNonDaemonThread()\n while t:\n t.join()\n t=_pickSomeNonDaemonThread()\n self._delete()\n \ndef _pickSomeNonDaemonThread():\n for t in enumerate():\n if not t.daemon and t.is_alive():\n return t\n return None\n \n \n \n \n \n \n \n \n \n \nclass _DummyThread(Thread):\n\n def __init__(self):\n Thread.__init__(self,name=_newname(\"Dummy-%d\"),daemon=True )\n \n \n \n \n del self._block\n \n self._started.set()\n self._set_ident()\n with _active_limbo_lock:\n _active[self._ident]=self\n \n def _stop(self):\n pass\n \n def join(self,timeout=None ):\n assert False ,\"cannot join a dummy thread\"\n \n \n \n \ndef current_thread():\n ''\n\n\n\n\n \n try :\n return _active[get_ident()]\n except KeyError:\n return _DummyThread()\n \ncurrentThread=current_thread\n\ndef active_count():\n ''\n\n\n\n\n \n with _active_limbo_lock:\n return len(_active)+len(_limbo)\n \nactiveCount=active_count\n\ndef _enumerate():\n\n return list(_active.values())+list(_limbo.values())\n \ndef enumerate():\n ''\n\n\n\n\n\n \n with _active_limbo_lock:\n return list(_active.values())+list(_limbo.values())\n \nfrom _thread import stack_size\n\n\n\n\n\n_shutdown=_MainThread()._exitfunc\n\n\n\n\ntry :\n from _thread import _local as local\nexcept ImportError:\n from _threading_local import local\n \n \ndef _after_fork():\n\n\n\n\n\n\n global _active_limbo_lock\n _active_limbo_lock=_allocate_lock()\n \n \n new_active={}\n current=current_thread()\n with _active_limbo_lock:\n for thread in _enumerate():\n \n \n thread._reset_internal_locks()\n if thread is current:\n \n \n ident=get_ident()\n thread._ident=ident\n new_active[ident]=thread\n else :\n \n thread._stop()\n \n _limbo.clear()\n _active.clear()\n _active.update(new_active)\n assert len(_active)==1\n",["_thread","_threading_local","_weakrefset","sys","time","traceback"]],time:[".py","from browser import window\n\n\ndate=window.Date.new\n\nnow=window.Date.now\n\n\n\n\n\n\n\n_STRUCT_TM_ITEMS=9\n\n\n\n\n\ndef _get_day_of_year(arg):\n ''\n\n\n\n\n\n\n\n\n\n \n ml=[31,28,31,30,31,30,31,31,30,31,30,31]\n if arg[0]%4 ==0:\n ml[1]+=1\n i=1\n yday=0\n while i mm >13:\n raise ValueError(\"month out of range\")\n \n dd=t[2]\n if dd ==0:dd=1\n if -1 >dd >32:\n raise ValueError(\"day of month out of range\")\n \n hh=t[3]\n if -1 >hh >24:\n raise ValueError(\"hour out of range\")\n \n minu=t[4]\n if -1 >minu >60:\n raise ValueError(\"minute out of range\")\n \n ss=t[5]\n if -1 >ss >62:\n raise ValueError(\"seconds out of range\")\n \n wd=t[6]%7\n if wd <-2:\n raise ValueError(\"day of week out of range\")\n \n dy=t[7]\n if dy ==0:dy=1\n if -1 >dy >367:\n raise ValueError(\"day of year out of range\")\n \n return t[0],mm,dd,hh,minu,ss,wd,dy,t[-1]\n \n \ndef _is_dst(secs=None ):\n ''\n d=date()\n if secs is not None :\n d=date(secs *1000)\n \n \n \n jan=date(d.getFullYear(),0,1)\n jul=date(d.getFullYear(),6,1)\n dst=int(d.getTimezoneOffset()=0 else 6\n tmp=struct_time([d.getUTCFullYear(),\n d.getUTCMonth()+1,d.getUTCDate(),\n d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds(),\n wday,0,0])\n tmp.args[7]=_get_day_of_year(tmp.args)\n return tmp\n \ndef localtime(secs=None ):\n d=date()\n if secs is not None :\n d=date(secs *1000)\n dst=_is_dst(secs)\n wday=d.getDay()-1 if d.getDay()-1 >=0 else 6\n tmp=struct_time([d.getFullYear(),\n d.getMonth()+1,d.getDate(),\n d.getHours(),d.getMinutes(),d.getSeconds(),\n wday,0,dst])\n tmp.args[7]=_get_day_of_year(tmp.args)\n return tmp\n \ndef mktime(t):\n if isinstance(t,struct_time):\n d1=date(t.tm_year,t.tm_mon -1,t.tm_mday,\n t.tm_hour,t.tm_min,t.tm_sec,0).getTime()\n elif isinstance(t,tuple):\n d1=date(t[0],t[1]-1,t[2],t[3],t[4],t[5],0).getTime()\n else :\n raise ValueError(\"Tuple or struct_time argument required\")\n d2=date(0).getTime()\n return (d1 -d2)/1000.\n \ndef monotonic():\n return now()/1000.\n \ndef perf_counter():\n return now()/1000.\n \ndef process_time():\n return now()/1000.\n \ndef time():\n return float(date().getTime()/1000)\n \ndef sleep(secs):\n ''\n\n \n raise NotImplementedError(\"Blocking functions like time.sleep() are not \"\n \"supported in the browser. Use functions in module browser.timer \"\n \"instead.\")\n \ndef strftime(_format,t=None ):\n\n def ns(t,nb):\n \n res=str(t)\n while len(res) float\n repeat(string, string) -> list\n default_timer() -> float\n\n"""\n\nimport gc\nimport sys\nimport time\nimport itertools\n\n__all__=["Timer","timeit","repeat","default_timer"]\n\ndummy_src_name=""\ndefault_number=1000000\ndefault_repeat=3\ndefault_timer=time.perf_counter\n\n\n\n\ntemplate="""\ndef inner(_it, _timer):\n {setup}\n _t0 = _timer()\n for _i in _it:\n {stmt}\n _t1 = _timer()\n return _t1 - _t0\n"""\n\ndef reindent(src,indent):\n \'\'\n return src.replace("\\n","\\n"+" "*indent)\n \ndef _template_func(setup,func):\n \'\'\n def inner(_it,_timer,_func=func):\n setup()\n _t0=_timer()\n for _i in _it:\n _func()\n _t1=_timer()\n return _t1 -_t0\n return inner\n \nclass Timer:\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,stmt="pass",setup="pass",timer=default_timer):\n \'\'\n self.timer=timer\n ns={}\n if isinstance(stmt,str):\n stmt=reindent(stmt,8)\n if isinstance(setup,str):\n setup=reindent(setup,4)\n src=template.format(stmt=stmt,setup=setup)\n elif callable(setup):\n src=template.format(stmt=stmt,setup=\'_setup()\')\n ns[\'_setup\']=setup\n else :\n raise ValueError("setup is neither a string nor callable")\n self.src=src\n code=compile(src,dummy_src_name,"exec")\n exec(code,globals(),ns)\n self.inner=ns["inner"]\n elif callable(stmt):\n self.src=None\n if isinstance(setup,str):\n _setup=setup\n def setup():\n exec(_setup,globals(),ns)\n elif not callable(setup):\n raise ValueError("setup is neither a string nor callable")\n self.inner=_template_func(setup,stmt)\n else :\n raise ValueError("stmt is neither a string nor callable")\n \n def print_exc(self,file=None ):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n import linecache,traceback\n if self.src is not None :\n linecache.cache[dummy_src_name]=(len(self.src),\n None ,\n self.src.split("\\n"),\n dummy_src_name)\n \n \n traceback.print_exc(file=file)\n \n def timeit(self,number=default_number):\n \'\'\n\n\n\n\n\n\n\n \n it=itertools.repeat(None ,number)\n gcold=gc.isenabled()\n gc.disable()\n try :\n timing=self.inner(it,self.timer)\n finally :\n if gcold:\n gc.enable()\n return timing\n \n def repeat(self,repeat=default_repeat,number=default_number):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n r=[]\n for i in range(repeat):\n t=self.timeit(number)\n r.append(t)\n return r\n \ndef timeit(stmt="pass",setup="pass",timer=default_timer,\nnumber=default_number):\n \'\'\n return Timer(stmt,setup,timer).timeit(number)\n \ndef repeat(stmt="pass",setup="pass",timer=default_timer,\nrepeat=default_repeat,number=default_number):\n \'\'\n return Timer(stmt,setup,timer).repeat(repeat,number)\n \ndef main(args=None ,*,_wrap_timer=None ):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if args is None :\n args=sys.argv[1:]\n import getopt\n try :\n opts,args=getopt.getopt(args,"n:s:r:tcpvh",\n ["number=","setup=","repeat=",\n "time","clock","process",\n "verbose","help"])\n except getopt.error as err:\n print(err)\n print("use -h/--help for command line help")\n return 2\n timer=default_timer\n stmt="\\n".join(args)or "pass"\n number=0\n setup=[]\n repeat=default_repeat\n verbose=0\n precision=3\n for o,a in opts:\n if o in ("-n","--number"):\n number=int(a)\n if o in ("-s","--setup"):\n setup.append(a)\n if o in ("-r","--repeat"):\n repeat=int(a)\n if repeat <=0:\n repeat=1\n if o in ("-t","--time"):\n timer=time.time\n if o in ("-c","--clock"):\n timer=time.clock\n if o in ("-p","--process"):\n timer=time.process_time\n if o in ("-v","--verbose"):\n if verbose:\n precision +=1\n verbose +=1\n if o in ("-h","--help"):\n print(__doc__,end=\' \')\n return 0\n setup="\\n".join(setup)or "pass"\n \n \n \n import os\n sys.path.insert(0,os.curdir)\n if _wrap_timer is not None :\n timer=_wrap_timer(timer)\n t=Timer(stmt,setup,timer)\n if number ==0:\n \n for i in range(1,10):\n number=10 **i\n try :\n x=t.timeit(number)\n except :\n t.print_exc()\n return 1\n if verbose:\n print("%d loops -> %.*g secs"%(number,precision,x))\n if x >=0.2:\n break\n try :\n r=t.repeat(repeat,number)\n except :\n t.print_exc()\n return 1\n best=min(r)\n if verbose:\n print("raw times:"," ".join(["%.*g"%(precision,x)for x in r]))\n print("%d loops,"%number,end=\' \')\n usec=best *1e6 /number\n if usec <1000:\n print("best of %d: %.*g usec per loop"%(repeat,precision,usec))\n else :\n msec=usec /1000\n if msec <1000:\n print("best of %d: %.*g msec per loop"%(repeat,precision,msec))\n else :\n sec=msec /1000\n print("best of %d: %.*g sec per loop"%(repeat,precision,sec))\n return None\n \nif __name__ =="__main__":\n sys.exit(main())\n',["gc","getopt","itertools","linecache","os","sys","time","traceback"]],token:[".py",'\'\'\n\n__all__=[\'tok_name\',\'ISTERMINAL\',\'ISNONTERMINAL\',\'ISEOF\']\n\n\n\n\n\n\n\n\n\nENDMARKER=0\nNAME=1\nNUMBER=2\nSTRING=3\nNEWLINE=4\nINDENT=5\nDEDENT=6\nLPAR=7\nRPAR=8\nLSQB=9\nRSQB=10\nCOLON=11\nCOMMA=12\nSEMI=13\nPLUS=14\nMINUS=15\nSTAR=16\nSLASH=17\nVBAR=18\nAMPER=19\nLESS=20\nGREATER=21\nEQUAL=22\nDOT=23\nPERCENT=24\nLBRACE=25\nRBRACE=26\nEQEQUAL=27\nNOTEQUAL=28\nLESSEQUAL=29\nGREATEREQUAL=30\nTILDE=31\nCIRCUMFLEX=32\nLEFTSHIFT=33\nRIGHTSHIFT=34\nDOUBLESTAR=35\nPLUSEQUAL=36\nMINEQUAL=37\nSTAREQUAL=38\nSLASHEQUAL=39\nPERCENTEQUAL=40\nAMPEREQUAL=41\nVBAREQUAL=42\nCIRCUMFLEXEQUAL=43\nLEFTSHIFTEQUAL=44\nRIGHTSHIFTEQUAL=45\nDOUBLESTAREQUAL=46\nDOUBLESLASH=47\nDOUBLESLASHEQUAL=48\nAT=49\nRARROW=50\nELLIPSIS=51\nOP=52\nERRORTOKEN=53\nN_TOKENS=54\nNT_OFFSET=256\n\n\ntok_name={value:name\nfor name,value in globals().items()\nif isinstance(value,int)and not name.startswith(\'_\')}\n__all__.extend(tok_name.values())\n\ndef ISTERMINAL(x):\n return x =NT_OFFSET\n \ndef ISEOF(x):\n return x ==ENDMARKER\n \n \ndef _main():\n import re\n import sys\n args=sys.argv[1:]\n inFileName=args and args[0]or "Include/token.h"\n outFileName="Lib/token.py"\n if len(args)>1:\n outFileName=args[1]\n try :\n fp=open(inFileName)\n except IOError as err:\n sys.stdout.write("I/O error: %s\\n"%str(err))\n sys.exit(1)\n lines=fp.read().split("\\n")\n fp.close()\n prog=re.compile(\n "#define[ \\t][ \\t]*([A-Z0-9][A-Z0-9_]*)[ \\t][ \\t]*([0-9][0-9]*)",\n re.IGNORECASE)\n tokens={}\n for line in lines:\n match=prog.match(line)\n if match:\n name,val=match.group(1,2)\n val=int(val)\n tokens[val]=name\n keys=sorted(tokens.keys())\n \n try :\n fp=open(outFileName)\n except IOError as err:\n sys.stderr.write("I/O error: %s\\n"%str(err))\n sys.exit(2)\n format=fp.read().split("\\n")\n fp.close()\n try :\n start=format.index("#--start constants--")+1\n end=format.index("#--end constants--")\n except ValueError:\n sys.stderr.write("target does not contain format markers")\n sys.exit(3)\n lines=[]\n for val in keys:\n lines.append("%s = %d"%(tokens[val],val))\n format[start:end]=lines\n try :\n fp=open(outFileName,\'w\')\n except IOError as err:\n sys.stderr.write("I/O error: %s\\n"%str(err))\n sys.exit(4)\n fp.write("\\n".join(format))\n fp.close()\n \n \nif __name__ =="__main__":\n _main()\n',["re","sys"]],tokenize:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__author__='Ka-Ping Yee '\n__credits__=('GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, '\n'Skip Montanaro, Raymond Hettinger, Trent Nelson, '\n'Michael Foord')\nimport builtins\nimport re\nimport sys\nfrom token import *\nfrom codecs import lookup,BOM_UTF8\nimport collections\nfrom io import TextIOWrapper\ncookie_re=re.compile(r'^[ \\t\\f]*#.*coding[:=][ \\t]*([-\\w.]+)',re.ASCII)\n\nimport token\n__all__=token.__all__+[\"COMMENT\",\"tokenize\",\"detect_encoding\",\n\"NL\",\"untokenize\",\"ENCODING\",\"TokenInfo\"]\ndel token\n\nCOMMENT=N_TOKENS\ntok_name[COMMENT]='COMMENT'\nNL=N_TOKENS+1\ntok_name[NL]='NL'\nENCODING=N_TOKENS+2\ntok_name[ENCODING]='ENCODING'\nN_TOKENS +=3\nEXACT_TOKEN_TYPES={\n'(':LPAR,\n')':RPAR,\n'[':LSQB,\n']':RSQB,\n':':COLON,\n',':COMMA,\n';':SEMI,\n'+':PLUS,\n'-':MINUS,\n'*':STAR,\n'/':SLASH,\n'|':VBAR,\n'&':AMPER,\n'<':LESS,\n'>':GREATER,\n'=':EQUAL,\n'.':DOT,\n'%':PERCENT,\n'{':LBRACE,\n'}':RBRACE,\n'==':EQEQUAL,\n'!=':NOTEQUAL,\n'<=':LESSEQUAL,\n'>=':GREATEREQUAL,\n'~':TILDE,\n'^':CIRCUMFLEX,\n'<<':LEFTSHIFT,\n'>>':RIGHTSHIFT,\n'**':DOUBLESTAR,\n'+=':PLUSEQUAL,\n'-=':MINEQUAL,\n'*=':STAREQUAL,\n'/=':SLASHEQUAL,\n'%=':PERCENTEQUAL,\n'&=':AMPEREQUAL,\n'|=':VBAREQUAL,\n'^=':CIRCUMFLEXEQUAL,\n'<<=':LEFTSHIFTEQUAL,\n'>>=':RIGHTSHIFTEQUAL,\n'**=':DOUBLESTAREQUAL,\n'//':DOUBLESLASH,\n'//=':DOUBLESLASHEQUAL,\n'@':AT\n}\n\nclass TokenInfo(collections.namedtuple('TokenInfo','type string start end line')):\n def __repr__(self):\n annotated_type='%d (%s)'%(self.type,tok_name[self.type])\n return ('TokenInfo(type=%s, string=%r, start=%r, end=%r, line=%r)'%\n self._replace(type=annotated_type))\n \n @property\n def exact_type(self):\n if self.type ==OP and self.string in EXACT_TOKEN_TYPES:\n return EXACT_TOKEN_TYPES[self.string]\n else :\n return self.type\n \ndef group(*choices):return '('+'|'.join(choices)+')'\ndef any(*choices):return group(*choices)+'*'\ndef maybe(*choices):return group(*choices)+'?'\n\n\n\nWhitespace=r'[ \\f\\t]*'\nComment=r'#[^\\r\\n]*'\nIgnore=Whitespace+any(r'\\\\\\r?\\n'+Whitespace)+maybe(Comment)\nName=r'\\w+'\n\nHexnumber=r'0[xX][0-9a-fA-F]+'\nBinnumber=r'0[bB][01]+'\nOctnumber=r'0[oO][0-7]+'\nDecnumber=r'(?:0+|[1-9][0-9]*)'\nIntnumber=group(Hexnumber,Binnumber,Octnumber,Decnumber)\nExponent=r'[eE][-+]?[0-9]+'\nPointfloat=group(r'[0-9]+\\.[0-9]*',r'\\.[0-9]+')+maybe(Exponent)\nExpfloat=r'[0-9]+'+Exponent\nFloatnumber=group(Pointfloat,Expfloat)\nImagnumber=group(r'[0-9]+[jJ]',Floatnumber+r'[jJ]')\nNumber=group(Imagnumber,Floatnumber,Intnumber)\n\nStringPrefix=r'(?:[bB][rR]?|[rR][bB]?|[uU])?'\n\n\nSingle=r\"[^'\\\\]*(?:\\\\.[^'\\\\]*)*'\"\n\nDouble=r'[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"'\n\nSingle3=r\"[^'\\\\]*(?:(?:\\\\.|'(?!''))[^'\\\\]*)*'''\"\n\nDouble3=r'[^\"\\\\]*(?:(?:\\\\.|\"(?!\"\"))[^\"\\\\]*)*\"\"\"'\nTriple=group(StringPrefix+\"'''\",StringPrefix+'\"\"\"')\n\nString=group(StringPrefix+r\"'[^\\n'\\\\]*(?:\\\\.[^\\n'\\\\]*)*'\",\nStringPrefix+r'\"[^\\n\"\\\\]*(?:\\\\.[^\\n\"\\\\]*)*\"')\n\n\n\n\nOperator=group(r\"\\*\\*=?\",r\">>=?\",r\"<<=?\",r\"!=\",\nr\"//=?\",r\"->\",\nr\"[+\\-*/%&|^=<>]=?\",\nr\"~\")\n\nBracket='[][(){}]'\nSpecial=group(r'\\r?\\n',r'\\.\\.\\.',r'[:;.,@]')\nFunny=group(Operator,Bracket,Special)\n\nPlainToken=group(Number,Funny,String,Name)\nToken=Ignore+PlainToken\n\n\nContStr=group(StringPrefix+r\"'[^\\n'\\\\]*(?:\\\\.[^\\n'\\\\]*)*\"+\ngroup(\"'\",r'\\\\\\r?\\n'),\nStringPrefix+r'\"[^\\n\"\\\\]*(?:\\\\.[^\\n\"\\\\]*)*'+\ngroup('\"',r'\\\\\\r?\\n'))\nPseudoExtras=group(r'\\\\\\r?\\n|\\Z',Comment,Triple)\nPseudoToken=Whitespace+group(PseudoExtras,Number,Funny,ContStr,Name)\n\ndef _compile(expr):\n return re.compile(expr,re.UNICODE)\n \nendpats={\"'\":Single,'\"':Double,\n\"'''\":Single3,'\"\"\"':Double3,\n\"r'''\":Single3,'r\"\"\"':Double3,\n\"b'''\":Single3,'b\"\"\"':Double3,\n\"R'''\":Single3,'R\"\"\"':Double3,\n\"B'''\":Single3,'B\"\"\"':Double3,\n\"br'''\":Single3,'br\"\"\"':Double3,\n\"bR'''\":Single3,'bR\"\"\"':Double3,\n\"Br'''\":Single3,'Br\"\"\"':Double3,\n\"BR'''\":Single3,'BR\"\"\"':Double3,\n\"rb'''\":Single3,'rb\"\"\"':Double3,\n\"Rb'''\":Single3,'Rb\"\"\"':Double3,\n\"rB'''\":Single3,'rB\"\"\"':Double3,\n\"RB'''\":Single3,'RB\"\"\"':Double3,\n\"u'''\":Single3,'u\"\"\"':Double3,\n\"R'''\":Single3,'R\"\"\"':Double3,\n\"U'''\":Single3,'U\"\"\"':Double3,\n'r':None ,'R':None ,'b':None ,'B':None ,\n'u':None ,'U':None }\n\ntriple_quoted={}\nfor t in (\"'''\",'\"\"\"',\n\"r'''\",'r\"\"\"',\"R'''\",'R\"\"\"',\n\"b'''\",'b\"\"\"',\"B'''\",'B\"\"\"',\n\"br'''\",'br\"\"\"',\"Br'''\",'Br\"\"\"',\n\"bR'''\",'bR\"\"\"',\"BR'''\",'BR\"\"\"',\n\"rb'''\",'rb\"\"\"',\"rB'''\",'rB\"\"\"',\n\"Rb'''\",'Rb\"\"\"',\"RB'''\",'RB\"\"\"',\n\"u'''\",'u\"\"\"',\"U'''\",'U\"\"\"',\n):\n triple_quoted[t]=t\nsingle_quoted={}\nfor t in (\"'\",'\"',\n\"r'\",'r\"',\"R'\",'R\"',\n\"b'\",'b\"',\"B'\",'B\"',\n\"br'\",'br\"',\"Br'\",'Br\"',\n\"bR'\",'bR\"',\"BR'\",'BR\"',\n\"rb'\",'rb\"',\"rB'\",'rB\"',\n\"Rb'\",'Rb\"',\"RB'\",'RB\"',\n\"u'\",'u\"',\"U'\",'U\"',\n):\n single_quoted[t]=t\n \ntabsize=8\n\nclass TokenError(Exception):pass\n\nclass StopTokenizing(Exception):pass\n\n\nclass Untokenizer:\n\n def __init__(self):\n self.tokens=[]\n self.prev_row=1\n self.prev_col=0\n self.encoding=None\n \n def add_whitespace(self,start):\n row,col=start\n assert row <=self.prev_row\n col_offset=col -self.prev_col\n if col_offset:\n self.tokens.append(\" \"*col_offset)\n \n def untokenize(self,iterable):\n for t in iterable:\n if len(t)==2:\n self.compat(t,iterable)\n break\n tok_type,token,start,end,line=t\n if tok_type ==ENCODING:\n self.encoding=token\n continue\n self.add_whitespace(start)\n self.tokens.append(token)\n self.prev_row,self.prev_col=end\n if tok_type in (NEWLINE,NL):\n self.prev_row +=1\n self.prev_col=0\n return \"\".join(self.tokens)\n \n def compat(self,token,iterable):\n startline=False\n indents=[]\n toks_append=self.tokens.append\n toknum,tokval=token\n \n if toknum in (NAME,NUMBER):\n tokval +=' '\n if toknum in (NEWLINE,NL):\n startline=True\n prevstring=False\n for tok in iterable:\n toknum,tokval=tok[:2]\n if toknum ==ENCODING:\n self.encoding=tokval\n continue\n \n if toknum in (NAME,NUMBER):\n tokval +=' '\n \n \n if toknum ==STRING:\n if prevstring:\n tokval=' '+tokval\n prevstring=True\n else :\n prevstring=False\n \n if toknum ==INDENT:\n indents.append(tokval)\n continue\n elif toknum ==DEDENT:\n indents.pop()\n continue\n elif toknum in (NEWLINE,NL):\n startline=True\n elif startline and indents:\n toks_append(indents[-1])\n startline=False\n toks_append(tokval)\n \n \ndef untokenize(iterable):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n ut=Untokenizer()\n out=ut.untokenize(iterable)\n if ut.encoding is not None :\n out=out.encode(ut.encoding)\n return out\n \n \ndef _get_normal_name(orig_enc):\n ''\n \n enc=orig_enc[:12].lower().replace(\"_\",\"-\")\n if enc ==\"utf-8\"or enc.startswith(\"utf-8-\"):\n return \"utf-8\"\n if enc in (\"latin-1\",\"iso-8859-1\",\"iso-latin-1\")or\\\n enc.startswith((\"latin-1-\",\"iso-8859-1-\",\"iso-latin-1-\")):\n return \"iso-8859-1\"\n return orig_enc\n \ndef detect_encoding(readline):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n filename=readline.__self__.name\n except AttributeError:\n filename=None\n bom_found=False\n encoding=None\n default='utf-8'\n def read_or_stop():\n try :\n return readline()\n except StopIteration:\n return b''\n \n def find_cookie(line):\n try :\n \n \n \n line_string=line.decode('utf-8')\n except UnicodeDecodeError:\n msg=\"invalid or missing encoding declaration\"\n if filename is not None :\n msg='{} for {!r}'.format(msg,filename)\n raise SyntaxError(msg)\n \n match=cookie_re.match(line_string)\n if not match:\n return None\n encoding=_get_normal_name(match.group(1))\n try :\n codec=lookup(encoding)\n except LookupError:\n \n if filename is None :\n msg=\"unknown encoding: \"+encoding\n else :\n msg=\"unknown encoding for {!r}: {}\".format(filename,\n encoding)\n raise SyntaxError(msg)\n \n if bom_found:\n if encoding !='utf-8':\n \n if filename is None :\n msg='encoding problem: utf-8'\n else :\n msg='encoding problem for {!r}: utf-8'.format(filename)\n raise SyntaxError(msg)\n encoding +='-sig'\n return encoding\n \n first=read_or_stop()\n if first.startswith(BOM_UTF8):\n bom_found=True\n first=first[3:]\n default='utf-8-sig'\n if not first:\n return default,[]\n \n encoding=find_cookie(first)\n if encoding:\n return encoding,[first]\n \n second=read_or_stop()\n if not second:\n return default,[first]\n \n encoding=find_cookie(second)\n if encoding:\n return encoding,[first,second]\n \n return default,[first,second]\n \n \ndef open(filename):\n ''\n\n \n buffer=builtins.open(filename,'rb')\n encoding,lines=detect_encoding(buffer.readline)\n buffer.seek(0)\n text=TextIOWrapper(buffer,encoding,line_buffering=True )\n text.mode='r'\n return text\n \n \ndef tokenize(readline):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n from itertools import chain,repeat\n encoding,consumed=detect_encoding(readline)\n rl_gen=iter(readline,b\"\")\n empty=repeat(b\"\")\n return _tokenize(chain(consumed,rl_gen,empty).__next__,encoding)\n \n \ndef _tokenize(readline,encoding):\n lnum=parenlev=continued=0\n numchars='0123456789'\n contstr,needcont='',0\n contline=None\n indents=[0]\n \n if encoding is not None :\n if encoding ==\"utf-8-sig\":\n \n encoding=\"utf-8\"\n yield TokenInfo(ENCODING,encoding,(0,0),(0,0),'')\n while True :\n try :\n line=readline()\n except StopIteration:\n line=b''\n \n if encoding is not None :\n line=line.decode(encoding)\n lnum +=1\n pos,max=0,len(line)\n \n if contstr:\n if not line:\n raise TokenError(\"EOF in multi-line string\",strstart)\n endmatch=endprog.match(line)\n if endmatch:\n pos=end=endmatch.end(0)\n yield TokenInfo(STRING,contstr+line[:end],\n strstart,(lnum,end),contline+line)\n contstr,needcont='',0\n contline=None\n elif needcont and line[-2:]!='\\\\\\n'and line[-3:]!='\\\\\\r\\n':\n yield TokenInfo(ERRORTOKEN,contstr+line,\n strstart,(lnum,len(line)),contline)\n contstr=''\n contline=None\n continue\n else :\n contstr=contstr+line\n contline=contline+line\n continue\n \n elif parenlev ==0 and not continued:\n if not line:break\n column=0\n while pos indents[-1]:\n indents.append(column)\n yield TokenInfo(INDENT,line[:pos],(lnum,0),(lnum,pos),line)\n while column \",lnum,pos,line))\n indents=indents[:-1]\n yield TokenInfo(DEDENT,'',(lnum,pos),(lnum,pos),line)\n \n else :\n if not line:\n raise TokenError(\"EOF in multi-line statement\",(lnum,0))\n continued=0\n \n while pos 0 else NEWLINE,\n token,spos,epos,line)\n elif initial =='#':\n assert not token.endswith(\"\\n\")\n yield TokenInfo(COMMENT,token,spos,epos,line)\n elif token in triple_quoted:\n endprog=_compile(endpats[token])\n endmatch=endprog.match(line,pos)\n if endmatch:\n pos=endmatch.end(0)\n token=line[start:pos]\n yield TokenInfo(STRING,token,spos,(lnum,pos),line)\n else :\n strstart=(lnum,start)\n contstr=line[start:]\n contline=line\n break\n elif initial in single_quoted or\\\n token[:2]in single_quoted or\\\n token[:3]in single_quoted:\n if token[-1]=='\\n':\n strstart=(lnum,start)\n endprog=_compile(endpats[initial]or\n endpats[token[1]]or\n endpats[token[2]])\n contstr,needcont=line[start:],1\n contline=line\n break\n else :\n yield TokenInfo(STRING,token,spos,epos,line)\n elif initial.isidentifier():\n yield TokenInfo(NAME,token,spos,epos,line)\n elif initial =='\\\\':\n continued=1\n else :\n if initial in '([{':\n parenlev +=1\n elif initial in ')]}':\n parenlev -=1\n yield TokenInfo(OP,token,spos,epos,line)\n else :\n yield TokenInfo(ERRORTOKEN,line[pos],\n (lnum,pos),(lnum,pos+1),line)\n pos +=1\n \n for indent in indents[1:]:\n yield TokenInfo(DEDENT,'',(lnum,0),(lnum,0),'')\n yield TokenInfo(ENDMARKER,'',(lnum,0),(lnum,0),'')\n \n \n \n \ndef generate_tokens(readline):\n return _tokenize(readline,None )\n \ndef main():\n import argparse\n \n \n def perror(message):\n print(message,file=sys.stderr)\n \n def error(message,filename=None ,location=None ):\n if location:\n args=(filename,)+location+(message,)\n perror(\"%s:%d:%d: error: %s\"%args)\n elif filename:\n perror(\"%s: error: %s\"%(filename,message))\n else :\n perror(\"error: %s\"%message)\n sys.exit(1)\n \n \n parser=argparse.ArgumentParser(prog='python -m tokenize')\n parser.add_argument(dest='filename',nargs='?',\n metavar='filename.py',\n help='the file to tokenize; defaults to stdin')\n parser.add_argument('-e','--exact',dest='exact',action='store_true',\n help='display token names using the exact type')\n args=parser.parse_args()\n \n try :\n \n if args.filename:\n filename=args.filename\n with builtins.open(filename,'rb')as f:\n tokens=list(tokenize(f.readline))\n else :\n filename=\"\"\n tokens=_tokenize(sys.stdin.readline,None )\n \n \n for token in tokens:\n token_type=token.type\n if args.exact:\n token_type=token.exact_type\n token_range=\"%d,%d-%d,%d:\"%(token.start+token.end)\n print(\"%-20s%-15s%-15r\"%\n (token_range,tok_name[token_type],token.string))\n except IndentationError as err:\n line,column=err.args[1][1:3]\n error(err.args[0],filename,(line,column))\n except TokenError as err:\n line,column=err.args[1]\n error(err.args[0],filename,(line,column))\n except SyntaxError as err:\n error(err,filename)\n except IOError as err:\n error(err)\n except KeyboardInterrupt:\n print(\"interrupted\\n\")\n except Exception as err:\n perror(\"unexpected error: %s\"%err)\n raise\n \nif __name__ ==\"__main__\":\n main()\n",["argparse","builtins","codecs","collections","io","itertools","re","sys","token"]],traceback:[".py","import sys\nfrom browser import console\n\ndef _restore_current(exc):\n ''\n\n \n __BRYTHON__.current_exception=exc\n \ndef print_exc(file=None ):\n ''\n if file is None :\n file=sys.stderr\n file.write(format_exc())\n \ndef format_exc(limit=None ,chain=True ,includeInternal=False ):\n exc=__BRYTHON__.current_exception\n return format_exception(exc.__class__,exc,exc.traceback,\n limit=limit,chain=chain,includeInternal=includeInternal)\n \ndef format_exception(_type,exc,tb,limit=None ,chain=True ,includeInternal=False ):\n ''\n\n\n \n res='';\n if isinstance(exc,SyntaxError):\n res +='\\n module %s line %s'%(exc.args[1],exc.args[2])\n offset=exc.args[3]\n res +='\\n '+exc.args[4]\n res +='\\n '+offset *' '+'^'\n else :\n if includeInternal:\n res +=exc.infoWithInternal\n else :\n res +=exc.info\n msg=exc.__class__.__name__+': '\n try :\n msg +=str(exc)\n except :\n msg +=''.format(exc.__class__.__name__)\n res='\\n'+msg+'\\n'+res\n if not res.endswith('\\n'):\n res +='\\n'\n _restore_current(exc)\n return res\n \ndef extract_tb(tb,limit=None ):\n return tb\n",["browser","sys"]],turtle:[".py","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport math\nimport sys\n\nfrom math import cos,sin\n\nfrom browser import console,document,html,timer\nimport _svg as svg\nimport copy\n\n\n\n\n\n_CFG={\n\n\n\"canvwidth\":500,\n\"canvheight\":500,\n\n\n\"mode\":\"standard\",\n\n\n\n\"shape\":\"classic\",\n\"pencolor\":\"black\",\n\"fillcolor\":\"black\",\n\n\"visible\":True ,\n\n\n\n\n\n\n\n\"turtle_canvas_wrapper\":None ,\n\"turtle_canvas_id\":\"turtle-canvas\",\n\"min_duration\":\"1ms\"\n}\n\n_cfg_copy=copy.copy(_CFG)\n\n\ndef set_defaults(**params):\n ''\n _CFG.update(**params)\n Screen().reset()\n \n \nclass FormattedTuple(tuple):\n ''\n def __new__(cls,x,y):\n return tuple.__new__(cls,(x,y))\n def __repr__(self):\n return \"(%.2f, %.2f)\"%self\n \ndef create_circle(r):\n ''\n circle=svg.circle(x=0,y=0,r=r,stroke=\"black\",fill=\"black\")\n circle.setAttribute(\"stroke-width\",1)\n return circle\n \n \ndef create_polygon(points):\n ''\n points=[\"%s,%s \"%(x,y)for x,y in points]\n polygon=svg.polygon(points=points,stroke=\"black\",fill=\"black\")\n polygon.setAttribute(\"stroke-width\",1)\n return polygon\n \n \ndef create_rectangle(width=2,height=2,rx=None ,ry=None ):\n ''\n \n rectangle=svg.rect(x=-width /2,y=-height /2,width=width,\n height=height,stroke=\"black\",fill=\"black\")\n rectangle.setAttribute(\"stroke-width\",1)\n if rx is not None :\n rectangle.setAttribute(\"rx\",rx)\n if ry is not None :\n rectangle.setAttribute(\"ry\",ry)\n return rectangle\n \n \ndef create_square(size=2,r=None ):\n ''\n \n return create_rectangle(width=size,height=size,rx=r,ry=r)\n \n \nclass TurtleGraphicsError(Exception):\n ''\n \n pass\n \n \nclass Singleton(type):\n _instances={}\n def __call__(cls,*args,**kwargs):\n if cls not in cls._instances:\n cls._instances[cls]=super(Singleton,cls).__call__(*args,**kwargs)\n return cls._instances[cls]\n \n \nclass Screen(metaclass=Singleton):\n\n def __init__(self):\n self.shapes={\n 'arrow':(create_polygon,((-10,0),(10,0),(0,10))),\n 'turtle':(create_polygon,((0,16),(-2,14),(-1,10),(-4,7),\n (-7,9),(-9,8),(-6,5),(-7,1),(-5,-3),(-8,-6),\n (-6,-8),(-4,-5),(0,-7),(4,-5),(6,-8),(8,-6),\n (5,-3),(7,1),(6,5),(9,8),(7,9),(4,7),(1,10),\n (2,14))),\n 'classic':(create_polygon,((0,0),(-5,-9),(0,-7),(5,-9))),\n 'triangle':(create_polygon,((10,-5.77),(0,11.55),(-10,-5.77))),\n 'square':(create_square,20),\n 'circle':(create_circle,10)\n }\n self.reset()\n self._set_geometry()\n \n def bgcolor(self,color=None ):\n ''\n\n \n if color is None :\n return self.background_color\n self.background_color=color\n width=_CFG['canvwidth']\n height=_CFG['canvheight']\n if self.mode()in ['logo','standard']:\n x=-width //2\n y=-height //2\n else :\n x=0\n y=-height\n \n self.frame_index +=1\n rect=svg.rect(x=x,y=y,width=width,height=height,fill=color,\n style={'display':'none'})\n an=svg.animate(Id=\"animation_frame%s\"%self.frame_index,\n attributeName=\"display\",attributeType=\"CSS\",\n From=\"block\",to=\"block\",dur=_CFG[\"min_duration\"],\n fill='freeze')\n an.setAttribute('begin',\"animation_frame%s.end\"%(self.frame_index -1))\n rect <=an\n \n self.background_canvas <=rect\n \n def _convert_coordinates(self,x,y):\n ''\n\n\n\n\n\n \n return x *self.yscale,self.y_points_down *y *self.yscale\n \n \n def create_svg_turtle(self,_turtle,name):\n if name in self.shapes:\n fn=self.shapes[name][0]\n arg=self.shapes[name][1]\n else :\n print(\"Unknown turtle '%s'; the default turtle will be used\")\n fn=self.shapes[_CVG[\"shape\"]][0]\n arg=self.shapes[_CVG[\"shape\"]][1]\n shape=fn(arg)\n if self._mode =='standard'or self._mode =='world':\n rotation=-90\n else :\n rotation=0\n return shape,rotation\n \n def _dot(self,pos,size,color):\n ''\n if color is None :\n color='black'\n if size is None or size <1:\n size=1\n self.frame_index +=1\n \n x,y=self._convert_coordinates(pos[0],pos[1])\n \n circle=svg.circle(cx=x,cy=y,r=size,fill=color,\n style={'display':'none'})\n an=svg.animate(Id=\"animation_frame%s\"%self.frame_index,\n attributeName=\"display\",attributeType=\"CSS\",\n From=\"block\",to=\"block\",dur=_CFG[\"min_duration\"],\n fill='freeze')\n an.setAttribute('begin',\"animation_frame%s.end\"%(self.frame_index -1))\n circle <=an\n self.canvas <=circle\n \n def _drawline(self,_turtle,coordlist=None ,\n color=None ,width=1,speed=None ):\n ''\n\n\n\n\n \n \n outline=color[0]\n fill=color[1]\n \n x0,y0=coordlist[0]\n x1,y1=coordlist[1]\n \n x0,y0=self._convert_coordinates(x0,y0)\n x1,y1=self._convert_coordinates(x1,y1)\n \n \n if speed ==0:\n duration=_CFG[\"min_duration\"]\n else :\n dist=_turtle._distance\n if speed is None or speed ==1:\n duration=0.02 *dist\n else :\n duration=0.02 *dist /speed **1.2\n if duration <0.001:\n duration=_CFG[\"min_duration\"]\n else :\n duration=\"%6.3fs\"%duration\n \n drawing=_turtle._drawing\n \n _line=svg.line(x1=x0,y1=y0,x2=x0,y2=y0,\n style={'stroke':outline,'stroke-width':width})\n if not drawing:\n _line.setAttribute('opacity',0)\n \n \n begin=\"animation_frame%s.end\"%self.frame_index\n self.frame_index +=1\n _an1=svg.animate(Id=\"animation_frame%s\"%self.frame_index,\n attributeName=\"x2\",attributeType=\"XML\",\n From=x0,to=x1,dur=duration,fill='freeze',\n begin=begin)\n _line <=_an1\n \n \n if drawing:\n _an2=svg.animate(attributeName=\"y2\",attributeType=\"XML\",\n begin=begin,\n From=y0,to=y1,dur=duration,fill='freeze')\n _line <=_an2\n \n if width >2:\n _line_cap=svg.set(attributeName=\"stroke-linecap\",\n begin=begin,\n attributeType=\"xml\",to=\"round\",dur=duration,fill='freeze')\n _line <=_line_cap\n \n self.canvas <=_line\n return begin,duration,(x0,y0),(x1,y1)\n \n def _drawpoly(self,coordlist,outline=None ,fill=None ,width=None ):\n ''\n\n\n\n\n \n self.frame_index +=1\n shape=[\"%s,%s\"%self._convert_coordinates(x,y)for x,y in coordlist]\n \n style={'display':'none'}\n if fill is not None :\n style['fill']=fill\n if outline is not None :\n style['stroke']=outline\n if width is not None :\n style['stroke-width']=width\n else :\n style['stroke-width']=1\n \n polygon=svg.polygon(points=\" \".join(shape),style=style)\n \n an=svg.animate(Id=\"animation_frame%s\"%self.frame_index,\n attributeName=\"display\",attributeType=\"CSS\",\n From=\"block\",to=\"block\",dur=_CFG[\"min_duration\"],\n fill='freeze')\n \n an.setAttribute('begin',\"animation_frame%s.end\"%(self.frame_index -1))\n polygon <=an\n self.canvas <=polygon\n \n \n def _new_frame(self):\n ''\n \n previous_end=\"animation_frame%s.end\"%self.frame_index\n self.frame_index +=1\n new_frame_id=\"animation_frame%s\"%self.frame_index\n return previous_end,new_frame_id\n \n def mode(self,_mode=None ):\n if _mode is None :\n return self._mode\n _CFG['mode']=_mode\n self.reset()\n \n \n def reset(self):\n self._turtles=[]\n self.frame_index=0\n self.background_color=\"white\"\n self._set_geometry()\n \n def _set_geometry(self):\n self.width=_CFG[\"canvwidth\"]\n self.height=_CFG[\"canvheight\"]\n self.x_offset=self.y_offset=0\n self.xscale=self.yscale=1\n \n self.y_points_down=-1\n self._mode=_CFG[\"mode\"].lower()\n if self._mode in ['logo','standard']:\n self.translate_canvas=(self.width //2,self.height //2)\n elif self._mode =='world':\n self.translate_canvas=(0,self.height)\n self._setup_canvas()\n \n def _setup_canvas(self):\n self.svg_scene=svg.svg(Id=_CFG[\"turtle_canvas_id\"],width=self.width,\n height=self.height)\n translate=\"translate(%d %d)\"%self.translate_canvas\n \n \n self.svg_scene <=svg.animate(\n Id=\"animation_frame%s\"%self.frame_index,\n attributeName=\"width\",attributeType=\"CSS\",\n From=self.width,to=self.width,begin=\"0s\",\n dur=_CFG[\"min_duration\"],fill='freeze')\n \n \n \n \n self.background_canvas=svg.g(transform=translate)\n self.canvas=svg.g(transform=translate)\n self.writing_canvas=svg.g(transform=translate)\n self.turtle_canvas=svg.g(transform=translate)\n \n self.svg_scene <=self.background_canvas\n self.svg_scene <=self.canvas\n self.svg_scene <=self.writing_canvas\n self.svg_scene <=self.turtle_canvas\n \n \n def setworldcoordinates(self,llx,lly,urx,ury):\n ''\n\n\n\n\n\n\n\n\n\n\n \n self._mode=\"world\"\n \n if urx 2:\n self.screen._drawpoly(self._fillpath,outline=self._pencolor,\n fill=self._fillcolor,)\n else :\n print(\"No path to fill.\")\n self._fillpath=None\n \n def dot(self,size=None ,color=None ):\n ''\n \n item=self.screen._dot((self._x,self._y),size,color=color)\n \n def _write(self,txt,align,font,color=None ):\n ''\n \n if color is None :\n color=self._pencolor\n self.screen._write((self._x,self._y),txt,align,font,color)\n \n \n def write(self,arg,align=\"left\",font=(\"Arial\",8,\"normal\"),color=None ):\n ''\n\n\n\n\n\n\n \n self._write(str(arg),align.lower(),font,color=color)\n \n def begin_poly(self):\n ''\n \n self._poly=[(self._x,self._y)]\n self._creatingPoly=True\n \n def end_poly(self):\n ''\n \n self._creatingPoly=False\n \n def get_poly(self):\n ''\n \n \n if self._poly is not None :\n return tuple(self._poly)\n \n def getscreen(self):\n ''\n \n return self.screen\n \n def getturtle(self):\n ''\n\n\n \n return self\n getpen=getturtle\n \n def _make_copy(self,name=None ):\n ''\n\n \n \n if name is None :\n name=self.name\n \n \n \n \n \n _turtle,rotation=self.screen.create_svg_turtle(self,name=name)\n _turtle.setAttribute(\"opacity\",0)\n _turtle.setAttribute(\"fill\",self._fillcolor)\n _turtle.setAttribute(\"stroke\",self._pencolor)\n \n \n \n previous_end,new_frame_id=self.screen._new_frame()\n x,y=self.screen._convert_coordinates(self._x,self._y)\n _turtle <=svg.animateMotion(begin=previous_end,dur=_CFG[\"min_duration\"],\n fill=\"remove\")\n \n _turtle <=svg.animateMotion(Id=new_frame_id,\n From=\"%s,%s\"%(x,y),to=\"%s,%s\"%(x,y),\n dur=_CFG[\"min_duration\"],begin=previous_end,\n fill=\"freeze\")\n _turtle <=svg.animateTransform(attributeName=\"transform\",\n type=\"rotate\",\n From=(self._old_heading,0,0),\n to=(self._old_heading,0,0),\n begin=previous_end,\n dur=_CFG[\"min_duration\"],fill=\"freeze\")\n _turtle <=svg.animate(begin=previous_end,\n dur=_CFG[\"min_duration\"],fill=\"freeze\",\n attributeName=\"opacity\",attributeType=\"XML\",\n From=0,to=1)\n return _turtle\n \n def stamp(self):\n ''\n \n _turtle=self._make_copy(name=self.name)\n self.screen.canvas <=_turtle\n \n \n def clone(self):\n ''\n \n n=Turtle(self.name)\n \n attrs=vars(self)\n new_dict={}\n for attr in attrs:\n if isinstance(getattr(self,attr),(int,str,float)):\n new_dict[attr]=getattr(self,attr)\n n.__dict__.update(**new_dict)\n \n if not n._shown:\n n._shown=True\n n.hideturtle()\n n.left(0)\n n.fd(0)\n n.color(n.color())\n return n\n \n \nPen=Turtle\n\n\ndef done():\n Screen().show_scene()\nshow_scene=done\n\n\ndef replay_scene():\n ''\n if (_CFG[\"turtle_canvas_id\"]in document and\n document[_CFG[\"turtle_canvas_id\"]]is not None ):\n element=document[_CFG[\"turtle_canvas_id\"]]\n element.parentNode.removeChild(element)\n show_scene()\n \n \ndef restart():\n ''\n _CFG.update(_cfg_copy)\n Screen().reset()\n Turtle._pen=None\n \n if (_CFG[\"turtle_canvas_id\"]in document and\n document[_CFG[\"turtle_canvas_id\"]]is not None ):\n element=document[_CFG[\"turtle_canvas_id\"]]\n element.parentNode.removeChild(element)\n \n \n \nimport inspect\ndef getmethparlist(ob):\n ''\n\n\n\n\n\n \n defText=callText=\"\"\n \n \n \n args,varargs,varkw=inspect.getargs(ob.__code__)\n items2=args[1:]\n realArgs=args[1:]\n defaults=ob.__defaults__ or []\n defaults=[\"=%r\"%(value,)for value in defaults]\n defaults=[\"\"]*(len(realArgs)-len(defaults))+defaults\n items1=[arg+dflt for arg,dflt in zip(realArgs,defaults)]\n if varargs is not None :\n items1.append(\"*\"+varargs)\n items2.append(\"*\"+varargs)\n if varkw is not None :\n items1.append(\"**\"+varkw)\n items2.append(\"**\"+varkw)\n defText=\", \".join(items1)\n defText=\"(%s)\"%defText\n callText=\", \".join(items2)\n callText=\"(%s)\"%callText\n return defText,callText\n \n_tg_screen_functions=['addshape','bgcolor','bgpic','bye',\n'clearscreen','colormode','delay','exitonclick','getcanvas',\n'getshapes','listen','mainloop','mode','numinput',\n'onkey','onkeypress','onkeyrelease','onscreenclick','ontimer',\n'register_shape','resetscreen','screensize','setup',\n'setworldcoordinates','textinput','title','tracer','turtles','update',\n'window_height','window_width']\n\n_tg_turtle_functions=['back','backward','begin_fill','begin_poly','bk',\n'circle','clear','clearstamp','clearstamps','clone','color',\n'degrees','distance','dot','down','end_fill','end_poly','fd',\n'fillcolor','filling','forward','get_poly','getpen','getscreen','get_shapepoly',\n'getturtle','goto','heading','hideturtle','home','ht','isdown',\n'isvisible','left','lt','onclick','ondrag','onrelease','pd',\n'pen','pencolor','pendown','pensize','penup','pos','position',\n'pu','radians','right','reset','resizemode','rt',\n'seth','setheading','setpos','setposition','settiltangle',\n'setundobuffer','setx','sety','shape','shapesize','shapetransform','shearfactor','showturtle',\n'speed','st','stamp','tilt','tiltangle','towards',\n'turtlesize','undo','undobufferentries','up','width',\n'write','xcor','ycor']\n\n\n__all__=(_tg_screen_functions+_tg_turtle_functions+\n['done','restart','replay_scene','Turtle','Screen'])\n\n\n\n\n\n__func_body=\"\"\"\\\ndef {name}{paramslist}:\n if {obj} is None:\n {obj} = {init}\n return {obj}.{name}{argslist}\n\"\"\"\ndef _make_global_funcs(functions,cls,obj,init):\n for methodname in functions:\n try :\n method=getattr(cls,methodname)\n except AttributeError:\n print(\"methodname missing:\",methodname)\n continue\n pl1,pl2=getmethparlist(method)\n defstr=__func_body.format(obj=obj,init=init,name=methodname,\n paramslist=pl1,argslist=pl2)\n exec(defstr,globals())\n \n_make_global_funcs(_tg_turtle_functions,Turtle,'Turtle._pen','Turtle()')\n\n_make_global_funcs(_tg_screen_functions,Screen,'Turtle.screen','Screen()')\n",["_svg","browser","browser.html","browser.timer","copy","inspect","math","sys"]],types:[".py","''\n\n\nimport sys\n\n\n\n\n\n\ndef _f():pass\nFunctionType=type(_f)\nLambdaType=type(lambda :None )\nCodeType=type(_f.__code__)\nMappingProxyType=type(type.__dict__)\nSimpleNamespace=type(sys.implementation)\n\ndef _g():\n yield 1\nGeneratorType=type(_g())\n\nasync def _c():pass\n_c=_c()\nCoroutineType=type(_c)\n_c.close()\n\nasync def _ag():\n yield\n_ag=_ag()\nAsyncGeneratorType=type(_ag)\n\nclass _C:\n def _m(self):pass\nMethodType=type(_C()._m)\n\nBuiltinFunctionType=type(len)\nBuiltinMethodType=type([].append)\n\nWrapperDescriptorType=type(object.__init__)\nMethodWrapperType=type(object().__str__)\nMethodDescriptorType=type(str.join)\nClassMethodDescriptorType=type(dict.__dict__['fromkeys'])\n\nModuleType=type(sys)\n\ntry :\n raise TypeError\nexcept TypeError:\n tb=sys.exc_info()[2]\n TracebackType=type(tb)\n FrameType=type(tb.tb_frame)\n tb=None ;del tb\n \n \nGetSetDescriptorType=type(FunctionType.__code__)\nMemberDescriptorType=type(FunctionType.__globals__)\n\ndel sys,_f,_g,_C,_c,\n\n\n\ndef new_class(name,bases=(),kwds=None ,exec_body=None ):\n ''\n resolved_bases=resolve_bases(bases)\n meta,ns,kwds=prepare_class(name,resolved_bases,kwds)\n if exec_body is not None :\n exec_body(ns)\n if resolved_bases is not bases:\n ns['__orig_bases__']=bases\n return meta(name,resolved_bases,ns,**kwds)\n \ndef resolve_bases(bases):\n ''\n new_bases=list(bases)\n updated=False\n shift=0\n for i,base in enumerate(bases):\n if isinstance(base,type):\n continue\n if not hasattr(base,\"__mro_entries__\"):\n continue\n new_base=base.__mro_entries__(bases)\n updated=True\n if not isinstance(new_base,tuple):\n raise TypeError(\"__mro_entries__ must return a tuple\")\n else :\n new_bases[i+shift:i+shift+1]=new_base\n shift +=len(new_base)-1\n if not updated:\n return bases\n return tuple(new_bases)\n \ndef prepare_class(name,bases=(),kwds=None ):\n ''\n\n\n\n\n\n\n\n\n \n if kwds is None :\n kwds={}\n else :\n kwds=dict(kwds)\n if 'metaclass'in kwds:\n meta=kwds.pop('metaclass')\n else :\n if bases:\n meta=type(bases[0])\n else :\n meta=type\n if isinstance(meta,type):\n \n \n meta=_calculate_meta(meta,bases)\n if hasattr(meta,'__prepare__'):\n ns=meta.__prepare__(name,bases,**kwds)\n else :\n ns={}\n return meta,ns,kwds\n \ndef _calculate_meta(meta,bases):\n ''\n winner=meta\n for base in bases:\n base_meta=type(base)\n if issubclass(winner,base_meta):\n continue\n if issubclass(base_meta,winner):\n winner=base_meta\n continue\n \n raise TypeError(\"metaclass conflict: \"\n \"the metaclass of a derived class \"\n \"must be a (non-strict) subclass \"\n \"of the metaclasses of all its bases\")\n return winner\n \nclass DynamicClassAttribute:\n ''\n\n\n\n\n\n\n\n\n\n \n def __init__(self,fget=None ,fset=None ,fdel=None ,doc=None ):\n self.fget=fget\n self.fset=fset\n self.fdel=fdel\n \n self.__doc__=doc or fget.__doc__\n self.overwrite_doc=doc is None\n \n self.__isabstractmethod__=bool(getattr(fget,'__isabstractmethod__',False ))\n \n def __get__(self,instance,ownerclass=None ):\n if instance is None :\n if self.__isabstractmethod__:\n return self\n raise AttributeError()\n elif self.fget is None :\n raise AttributeError(\"unreadable attribute\")\n return self.fget(instance)\n \n def __set__(self,instance,value):\n if self.fset is None :\n raise AttributeError(\"can't set attribute\")\n self.fset(instance,value)\n \n def __delete__(self,instance):\n if self.fdel is None :\n raise AttributeError(\"can't delete attribute\")\n self.fdel(instance)\n \n def getter(self,fget):\n fdoc=fget.__doc__ if self.overwrite_doc else None\n result=type(self)(fget,self.fset,self.fdel,fdoc or self.__doc__)\n result.overwrite_doc=self.overwrite_doc\n return result\n \n def setter(self,fset):\n result=type(self)(self.fget,fset,self.fdel,self.__doc__)\n result.overwrite_doc=self.overwrite_doc\n return result\n \n def deleter(self,fdel):\n result=type(self)(self.fget,self.fset,fdel,self.__doc__)\n result.overwrite_doc=self.overwrite_doc\n return result\n \n \nclass _GeneratorWrapper:\n\n def __init__(self,gen):\n self.__wrapped=gen\n self.__isgen=gen.__class__ is GeneratorType\n self.__name__=getattr(gen,'__name__',None )\n self.__qualname__=getattr(gen,'__qualname__',None )\n def send(self,val):\n return self.__wrapped.send(val)\n def throw(self,tp,*rest):\n return self.__wrapped.throw(tp,*rest)\n def close(self):\n return self.__wrapped.close()\n @property\n def gi_code(self):\n return self.__wrapped.gi_code\n @property\n def gi_frame(self):\n return self.__wrapped.gi_frame\n @property\n def gi_running(self):\n return self.__wrapped.gi_running\n @property\n def gi_yieldfrom(self):\n return self.__wrapped.gi_yieldfrom\n cr_code=gi_code\n cr_frame=gi_frame\n cr_running=gi_running\n cr_await=gi_yieldfrom\n def __next__(self):\n return next(self.__wrapped)\n def __iter__(self):\n if self.__isgen:\n return self.__wrapped\n return self\n __await__=__iter__\n \ndef coroutine(func):\n ''\n \n if not callable(func):\n raise TypeError('types.coroutine() expects a callable')\n \n if (func.__class__ is FunctionType and\n getattr(func,'__code__',None ).__class__ is CodeType):\n \n co_flags=func.__code__.co_flags\n \n \n \n if co_flags&0x180:\n return func\n \n \n \n if co_flags&0x20:\n \n co=func.__code__\n func.__code__=CodeType(\n co.co_argcount,co.co_kwonlyargcount,co.co_nlocals,\n co.co_stacksize,\n co.co_flags |0x100,\n co.co_code,\n co.co_consts,co.co_names,co.co_varnames,co.co_filename,\n co.co_name,co.co_firstlineno,co.co_lnotab,co.co_freevars,\n co.co_cellvars)\n return func\n \n \n \n \n \n \n import functools\n import _collections_abc\n @functools.wraps(func)\n def wrapped(*args,**kwargs):\n coro=func(*args,**kwargs)\n if (coro.__class__ is CoroutineType or\n coro.__class__ is GeneratorType and coro.gi_code.co_flags&0x100):\n \n return coro\n if (isinstance(coro,_collections_abc.Generator)and\n not isinstance(coro,_collections_abc.Coroutine)):\n \n \n \n return _GeneratorWrapper(coro)\n \n \n return coro\n \n return wrapped\n \n \n__all__=[n for n in globals()if n[:1]!='_']\n",["_collections_abc","functools","sys"]],typing:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport abc\nfrom abc import abstractmethod,abstractproperty\nimport collections\nimport collections.abc\nimport contextlib\nimport functools\nimport operator\nimport re as stdlib_re\nimport sys\nimport types\nfrom types import WrapperDescriptorType,MethodWrapperType,MethodDescriptorType\n\n\n__all__=[\n\n'Any',\n'Callable',\n'ClassVar',\n'Generic',\n'Optional',\n'Tuple',\n'Type',\n'TypeVar',\n'Union',\n\n\n'AbstractSet',\n'ByteString',\n'Container',\n'ContextManager',\n'Hashable',\n'ItemsView',\n'Iterable',\n'Iterator',\n'KeysView',\n'Mapping',\n'MappingView',\n'MutableMapping',\n'MutableSequence',\n'MutableSet',\n'Sequence',\n'Sized',\n'ValuesView',\n'Awaitable',\n'AsyncIterator',\n'AsyncIterable',\n'Coroutine',\n'Collection',\n'AsyncGenerator',\n'AsyncContextManager',\n\n\n'Reversible',\n'SupportsAbs',\n'SupportsBytes',\n'SupportsComplex',\n'SupportsFloat',\n'SupportsInt',\n'SupportsRound',\n\n\n'Counter',\n'Deque',\n'Dict',\n'DefaultDict',\n'List',\n'Set',\n'FrozenSet',\n'NamedTuple',\n'Generator',\n\n\n'AnyStr',\n'cast',\n'get_type_hints',\n'NewType',\n'no_type_check',\n'no_type_check_decorator',\n'NoReturn',\n'overload',\n'Text',\n'TYPE_CHECKING',\n]\n\n\n\n\n\n\ndef _type_check(arg,msg,is_argument=True ):\n ''\n\n\n\n\n\n\n\n\n\n \n invalid_generic_forms=(Generic,_Protocol)\n if is_argument:\n invalid_generic_forms=invalid_generic_forms+(ClassVar,)\n \n if arg is None :\n return type(None )\n if isinstance(arg,str):\n return ForwardRef(arg)\n if (isinstance(arg,_GenericAlias)and\n arg.__origin__ in invalid_generic_forms):\n raise TypeError(f\"{arg} is not valid as type argument\")\n if (isinstance(arg,_SpecialForm)and arg is not Any or\n arg in (Generic,_Protocol)):\n raise TypeError(f\"Plain {arg} is not valid as type argument\")\n if isinstance(arg,(type,TypeVar,ForwardRef)):\n return arg\n if not callable(arg):\n raise TypeError(f\"{msg} Got {arg!r:.100}.\")\n return arg\n \n \ndef _type_repr(obj):\n ''\n\n\n\n\n\n \n if isinstance(obj,type):\n if obj.__module__ =='builtins':\n return obj.__qualname__\n return f'{obj.__module__}.{obj.__qualname__}'\n if obj is ...:\n return ('...')\n if isinstance(obj,types.FunctionType):\n return obj.__name__\n return repr(obj)\n \n \ndef _collect_type_vars(types):\n ''\n\n\n\n \n tvars=[]\n for t in types:\n if isinstance(t,TypeVar)and t not in tvars:\n tvars.append(t)\n if isinstance(t,_GenericAlias)and not t._special:\n tvars.extend([t for t in t.__parameters__ if t not in tvars])\n return tuple(tvars)\n \n \ndef _subs_tvars(tp,tvars,subs):\n ''\n\n \n if not isinstance(tp,_GenericAlias):\n return tp\n new_args=list(tp.__args__)\n for a,arg in enumerate(tp.__args__):\n if isinstance(arg,TypeVar):\n for i,tvar in enumerate(tvars):\n if arg ==tvar:\n new_args[a]=subs[i]\n else :\n new_args[a]=_subs_tvars(arg,tvars,subs)\n if tp.__origin__ is Union:\n return Union[tuple(new_args)]\n return tp.copy_with(tuple(new_args))\n \n \ndef _check_generic(cls,parameters):\n ''\n\n \n if not cls.__parameters__:\n raise TypeError(f\"{cls} is not a generic class\")\n alen=len(parameters)\n elen=len(cls.__parameters__)\n if alen !=elen:\n raise TypeError(f\"Too {'many' if alen > elen else 'few'} parameters for {cls};\"\n f\" actual {alen}, expected {elen}\")\n \n \ndef _remove_dups_flatten(parameters):\n ''\n\n \n \n params=[]\n for p in parameters:\n if isinstance(p,_GenericAlias)and p.__origin__ is Union:\n params.extend(p.__args__)\n elif isinstance(p,tuple)and len(p)>0 and p[0]is Union:\n params.extend(p[1:])\n else :\n params.append(p)\n \n all_params=set(params)\n if len(all_params) NoReturn:\n raise Exception('no way')\n\n This type is invalid in other positions, e.g., ``List[NoReturn]``\n will fail in static type checkers.\n \"\"\")\n\nClassVar=_SpecialForm('ClassVar',doc=\n\"\"\"Special type construct to mark class variables.\n\n An annotation wrapped in ClassVar indicates that a given\n attribute is intended to be used as a class variable and\n should not be set on instances of that class. Usage::\n\n class Starship:\n stats: ClassVar[Dict[str, int]] = {} # class variable\n damage: int = 10 # instance variable\n\n ClassVar accepts only types and cannot be further subscribed.\n\n Note that ClassVar is not a class itself, and should not\n be used with isinstance() or issubclass().\n \"\"\")\n\nUnion=_SpecialForm('Union',doc=\n\"\"\"Union type; Union[X, Y] means either X or Y.\n\n To define a union, use e.g. Union[int, str]. Details:\n - The arguments must be types and there must be at least one.\n - None as an argument is a special case and is replaced by\n type(None).\n - Unions of unions are flattened, e.g.::\n\n Union[Union[int, str], float] == Union[int, str, float]\n\n - Unions of a single argument vanish, e.g.::\n\n Union[int] == int # The constructor actually returns int\n\n - Redundant arguments are skipped, e.g.::\n\n Union[int, str, int] == Union[int, str]\n\n - When comparing unions, the argument order is ignored, e.g.::\n\n Union[int, str] == Union[str, int]\n\n - You cannot subclass or instantiate a union.\n - You can use Optional[X] as a shorthand for Union[X, None].\n \"\"\")\n\nOptional=_SpecialForm('Optional',doc=\n\"\"\"Optional type.\n\n Optional[X] is equivalent to Union[X, None].\n \"\"\")\n\n\nclass ForwardRef(_Final,_root=True ):\n ''\n \n __slots__=('__forward_arg__','__forward_code__',\n '__forward_evaluated__','__forward_value__',\n '__forward_is_argument__')\n \n def __init__(self,arg,is_argument=True ):\n if not isinstance(arg,str):\n raise TypeError(f\"Forward reference must be a string -- got {arg!r}\")\n try :\n code=compile(arg,'','eval')\n except SyntaxError:\n raise SyntaxError(f\"Forward reference must be an expression -- got {arg!r}\")\n self.__forward_arg__=arg\n self.__forward_code__=code\n self.__forward_evaluated__=False\n self.__forward_value__=None\n self.__forward_is_argument__=is_argument\n \n def _evaluate(self,globalns,localns):\n if not self.__forward_evaluated__ or localns is not globalns:\n if globalns is None and localns is None :\n globalns=localns={}\n elif globalns is None :\n globalns=localns\n elif localns is None :\n localns=globalns\n self.__forward_value__=_type_check(\n eval(self.__forward_code__,globalns,localns),\n \"Forward references must evaluate to types.\",\n is_argument=self.__forward_is_argument__)\n self.__forward_evaluated__=True\n return self.__forward_value__\n \n def __eq__(self,other):\n if not isinstance(other,ForwardRef):\n return NotImplemented\n return (self.__forward_arg__ ==other.__forward_arg__ and\n self.__forward_value__ ==other.__forward_value__)\n \n def __hash__(self):\n return hash((self.__forward_arg__,self.__forward_value__))\n \n def __repr__(self):\n return f'ForwardRef({self.__forward_arg__!r})'\n \n \nclass TypeVar(_Final,_Immutable,_root=True ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __slots__=('__name__','__bound__','__constraints__',\n '__covariant__','__contravariant__')\n \n def __init__(self,name,*constraints,bound=None ,\n covariant=False ,contravariant=False ):\n self.__name__=name\n if covariant and contravariant:\n raise ValueError(\"Bivariant types are not supported.\")\n self.__covariant__=bool(covariant)\n self.__contravariant__=bool(contravariant)\n if constraints and bound is not None :\n raise TypeError(\"Constraints cannot be combined with bound=...\")\n if constraints and len(constraints)==1:\n raise TypeError(\"A single constraint is not allowed\")\n msg=\"TypeVar(name, constraint, ...): constraints must be types.\"\n self.__constraints__=tuple(_type_check(t,msg)for t in constraints)\n if bound:\n self.__bound__=_type_check(bound,\"Bound must be a type.\")\n else :\n self.__bound__=None\n def_mod=sys._getframe(1).f_globals['__name__']\n if def_mod !='typing':\n self.__module__=def_mod\n \n def __repr__(self):\n if self.__covariant__:\n prefix='+'\n elif self.__contravariant__:\n prefix='-'\n else :\n prefix='~'\n return prefix+self.__name__\n \n def __reduce__(self):\n return self.__name__\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n_normalize_alias={'list':'List',\n'tuple':'Tuple',\n'dict':'Dict',\n'set':'Set',\n'frozenset':'FrozenSet',\n'deque':'Deque',\n'defaultdict':'DefaultDict',\n'type':'Type',\n'Set':'AbstractSet'}\n\ndef _is_dunder(attr):\n return attr.startswith('__')and attr.endswith('__')\n \n \nclass _GenericAlias(_Final,_root=True ):\n ''\n\n\n\n\n\n\n \n def __init__(self,origin,params,*,inst=True ,special=False ,name=None ):\n self._inst=inst\n self._special=special\n if special and name is None :\n orig_name=origin.__name__\n name=_normalize_alias.get(orig_name,orig_name)\n self._name=name\n if not isinstance(params,tuple):\n params=(params,)\n self.__origin__=origin\n self.__args__=tuple(...if a is _TypingEllipsis else\n ()if a is _TypingEmpty else\n a for a in params)\n self.__parameters__=_collect_type_vars(params)\n self.__slots__=None\n if not name:\n self.__module__=origin.__module__\n \n @_tp_cache\n def __getitem__(self,params):\n if self.__origin__ in (Generic,_Protocol):\n \n raise TypeError(f\"Cannot subscript already-subscripted {self}\")\n if not isinstance(params,tuple):\n params=(params,)\n msg=\"Parameters to generic types must be types.\"\n params=tuple(_type_check(p,msg)for p in params)\n _check_generic(self,params)\n return _subs_tvars(self,self.__parameters__,params)\n \n def copy_with(self,params):\n \n return _GenericAlias(self.__origin__,params,name=self._name,inst=self._inst)\n \n def __repr__(self):\n if (self._name !='Callable'or\n len(self.__args__)==2 and self.__args__[0]is Ellipsis):\n if self._name:\n name='typing.'+self._name\n else :\n name=_type_repr(self.__origin__)\n if not self._special:\n args=f'[{\", \".join([_type_repr(a) for a in self.__args__])}]'\n else :\n args=''\n return (f'{name}{args}')\n if self._special:\n return 'typing.Callable'\n return (f'typing.Callable'\n f'[[{\", \".join([_type_repr(a) for a in self.__args__[:-1]])}], '\n f'{_type_repr(self.__args__[-1])}]')\n \n def __eq__(self,other):\n if not isinstance(other,_GenericAlias):\n return NotImplemented\n if self.__origin__ !=other.__origin__:\n return False\n if self.__origin__ is Union and other.__origin__ is Union:\n return frozenset(self.__args__)==frozenset(other.__args__)\n return self.__args__ ==other.__args__\n \n def __hash__(self):\n if self.__origin__ is Union:\n return hash((Union,frozenset(self.__args__)))\n return hash((self.__origin__,self.__args__))\n \n def __call__(self,*args,**kwargs):\n if not self._inst:\n raise TypeError(f\"Type {self._name} cannot be instantiated; \"\n f\"use {self._name.lower()}() instead\")\n result=self.__origin__(*args,**kwargs)\n try :\n result.__orig_class__=self\n except AttributeError:\n pass\n return result\n \n def __mro_entries__(self,bases):\n if self._name:\n res=[]\n if self.__origin__ not in bases:\n res.append(self.__origin__)\n i=bases.index(self)\n if not any(isinstance(b,_GenericAlias)or issubclass(b,Generic)\n for b in bases[i+1:]):\n res.append(Generic)\n return tuple(res)\n if self.__origin__ is Generic:\n i=bases.index(self)\n for b in bases[i+1:]:\n if isinstance(b,_GenericAlias)and b is not self:\n return ()\n return (self.__origin__,)\n \n def __getattr__(self,attr):\n \n \n if '__origin__'in self.__dict__ and not _is_dunder(attr):\n return getattr(self.__origin__,attr)\n raise AttributeError(attr)\n \n def __setattr__(self,attr,val):\n if _is_dunder(attr)or attr in ('_name','_inst','_special'):\n super().__setattr__(attr,val)\n else :\n setattr(self.__origin__,attr,val)\n \n def __instancecheck__(self,obj):\n return self.__subclasscheck__(type(obj))\n \n def __subclasscheck__(self,cls):\n if self._special:\n if not isinstance(cls,_GenericAlias):\n return issubclass(cls,self.__origin__)\n if cls._special:\n return issubclass(cls.__origin__,self.__origin__)\n raise TypeError(\"Subscripted generics cannot be used with\"\n \" class and instance checks\")\n \n def __reduce__(self):\n if self._special:\n return self._name\n \n if self._name:\n origin=globals()[self._name]\n else :\n origin=self.__origin__\n if (origin is Callable and\n not (len(self.__args__)==2 and self.__args__[0]is Ellipsis)):\n args=list(self.__args__[:-1]),self.__args__[-1]\n else :\n args=tuple(self.__args__)\n if len(args)==1 and not isinstance(args[0],tuple):\n args,=args\n return operator.getitem,(origin,args)\n \n \nclass _VariadicGenericAlias(_GenericAlias,_root=True ):\n ''\n\n \n def __getitem__(self,params):\n if self._name !='Callable'or not self._special:\n return self.__getitem_inner__(params)\n if not isinstance(params,tuple)or len(params)!=2:\n raise TypeError(\"Callable must be used as \"\n \"Callable[[arg, ...], result].\")\n args,result=params\n if args is Ellipsis:\n params=(Ellipsis,result)\n else :\n if not isinstance(args,list):\n raise TypeError(f\"Callable[args, result]: args must be a list.\"\n f\" Got {args}\")\n params=(tuple(args),result)\n return self.__getitem_inner__(params)\n \n @_tp_cache\n def __getitem_inner__(self,params):\n if self.__origin__ is tuple and self._special:\n if params ==():\n return self.copy_with((_TypingEmpty,))\n if not isinstance(params,tuple):\n params=(params,)\n if len(params)==2 and params[1]is ...:\n msg=\"Tuple[t, ...]: t must be a type.\"\n p=_type_check(params[0],msg)\n return self.copy_with((p,_TypingEllipsis))\n msg=\"Tuple[t0, t1, ...]: each t must be a type.\"\n params=tuple(_type_check(p,msg)for p in params)\n return self.copy_with(params)\n if self.__origin__ is collections.abc.Callable and self._special:\n args,result=params\n msg=\"Callable[args, result]: result must be a type.\"\n result=_type_check(result,msg)\n if args is Ellipsis:\n return self.copy_with((_TypingEllipsis,result))\n msg=\"Callable[[arg, ...], result]: each arg must be a type.\"\n args=tuple(_type_check(arg,msg)for arg in args)\n params=args+(result,)\n return self.copy_with(params)\n return super().__getitem__(params)\n \n \nclass Generic:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__=()\n \n def __new__(cls,*args,**kwds):\n if cls is Generic:\n raise TypeError(\"Type Generic cannot be instantiated; \"\n \"it can be used only as a base class\")\n if super().__new__ is object.__new__ and cls.__init__ is not object.__init__:\n obj=super().__new__(cls)\n else :\n obj=super().__new__(cls,*args,**kwds)\n return obj\n \n @_tp_cache\n def __class_getitem__(cls,params):\n if not isinstance(params,tuple):\n params=(params,)\n if not params and cls is not Tuple:\n raise TypeError(\n f\"Parameter list to {cls.__qualname__}[...] cannot be empty\")\n msg=\"Parameters to generic types must be types.\"\n params=tuple(_type_check(p,msg)for p in params)\n if cls is Generic:\n \n if not all(isinstance(p,TypeVar)for p in params):\n raise TypeError(\n \"Parameters to Generic[...] must all be type variables\")\n if len(set(params))!=len(params):\n raise TypeError(\n \"Parameters to Generic[...] must all be unique\")\n elif cls is _Protocol:\n \n pass\n else :\n \n _check_generic(cls,params)\n return _GenericAlias(cls,params)\n \n def __init_subclass__(cls,*args,**kwargs):\n super().__init_subclass__(*args,**kwargs)\n tvars=[]\n if '__orig_bases__'in cls.__dict__:\n error=Generic in cls.__orig_bases__\n else :\n error=Generic in cls.__bases__ and cls.__name__ !='_Protocol'\n if error:\n raise TypeError(\"Cannot inherit from plain Generic\")\n if '__orig_bases__'in cls.__dict__:\n tvars=_collect_type_vars(cls.__orig_bases__)\n \n \n \n \n \n gvars=None\n for base in cls.__orig_bases__:\n if (isinstance(base,_GenericAlias)and\n base.__origin__ is Generic):\n if gvars is not None :\n raise TypeError(\n \"Cannot inherit from Generic[...] multiple types.\")\n gvars=base.__parameters__\n if gvars is None :\n gvars=tvars\n else :\n tvarset=set(tvars)\n gvarset=set(gvars)\n if not tvarset <=gvarset:\n s_vars=', '.join(str(t)for t in tvars if t not in gvarset)\n s_args=', '.join(str(g)for g in gvars)\n raise TypeError(f\"Some type variables ({s_vars}) are\"\n f\" not listed in Generic[{s_args}]\")\n tvars=gvars\n cls.__parameters__=tuple(tvars)\n \n \nclass _TypingEmpty:\n ''\n\n\n \n \n \nclass _TypingEllipsis:\n ''\n \n \ndef cast(typ,val):\n ''\n\n\n\n\n\n \n return val\n \n \ndef _get_defaults(func):\n ''\n try :\n code=func.__code__\n except AttributeError:\n \n return {}\n pos_count=code.co_argcount\n arg_names=code.co_varnames\n arg_names=arg_names[:pos_count]\n defaults=func.__defaults__ or ()\n kwdefaults=func.__kwdefaults__\n res=dict(kwdefaults)if kwdefaults else {}\n pos_offset=pos_count -len(defaults)\n for name,value in zip(arg_names[pos_offset:],defaults):\n assert name not in res\n res[name]=value\n return res\n \n \n_allowed_types=(types.FunctionType,types.BuiltinFunctionType,\ntypes.MethodType,types.ModuleType,\nWrapperDescriptorType,MethodWrapperType,MethodDescriptorType)\n\n\ndef get_type_hints(obj,globalns=None ,localns=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if getattr(obj,'__no_type_check__',None ):\n return {}\n \n if isinstance(obj,type):\n hints={}\n for base in reversed(obj.__mro__):\n if globalns is None :\n base_globals=sys.modules[base.__module__].__dict__\n else :\n base_globals=globalns\n ann=base.__dict__.get('__annotations__',{})\n for name,value in ann.items():\n if value is None :\n value=type(None )\n if isinstance(value,str):\n value=ForwardRef(value,is_argument=False )\n value=_eval_type(value,base_globals,localns)\n hints[name]=value\n return hints\n \n if globalns is None :\n if isinstance(obj,types.ModuleType):\n globalns=obj.__dict__\n else :\n globalns=getattr(obj,'__globals__',{})\n if localns is None :\n localns=globalns\n elif localns is None :\n localns=globalns\n hints=getattr(obj,'__annotations__',None )\n if hints is None :\n \n if isinstance(obj,_allowed_types):\n return {}\n else :\n raise TypeError('{!r} is not a module, class, method, '\n 'or function.'.format(obj))\n defaults=_get_defaults(obj)\n hints=dict(hints)\n for name,value in hints.items():\n if value is None :\n value=type(None )\n if isinstance(value,str):\n value=ForwardRef(value)\n value=_eval_type(value,globalns,localns)\n if name in defaults and defaults[name]is None :\n value=Optional[value]\n hints[name]=value\n return hints\n \n \ndef no_type_check(arg):\n ''\n\n\n\n\n\n\n \n if isinstance(arg,type):\n arg_attrs=arg.__dict__.copy()\n for attr,val in arg.__dict__.items():\n if val in arg.__bases__+(arg,):\n arg_attrs.pop(attr)\n for obj in arg_attrs.values():\n if isinstance(obj,types.FunctionType):\n obj.__no_type_check__=True\n if isinstance(obj,type):\n no_type_check(obj)\n try :\n arg.__no_type_check__=True\n except TypeError:\n pass\n return arg\n \n \ndef no_type_check_decorator(decorator):\n ''\n\n\n\n \n \n @functools.wraps(decorator)\n def wrapped_decorator(*args,**kwds):\n func=decorator(*args,**kwds)\n func=no_type_check(func)\n return func\n \n return wrapped_decorator\n \n \ndef _overload_dummy(*args,**kwds):\n ''\n raise NotImplementedError(\n \"You should not call an overloaded function. \"\n \"A series of @overload-decorated functions \"\n \"outside a stub module should always be followed \"\n \"by an implementation that is not @overload-ed.\")\n \n \ndef overload(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _overload_dummy\n \n \nclass _ProtocolMeta(type):\n ''\n\n\n\n \n \n def __instancecheck__(self,obj):\n if _Protocol not in self.__bases__:\n return super().__instancecheck__(obj)\n raise TypeError(\"Protocols cannot be used with isinstance().\")\n \n def __subclasscheck__(self,cls):\n if not self._is_protocol:\n \n return NotImplemented\n \n if self is _Protocol:\n \n return True\n \n \n attrs=self._get_protocol_attrs()\n \n for attr in attrs:\n if not any(attr in d.__dict__ for d in cls.__mro__):\n return False\n return True\n \n def _get_protocol_attrs(self):\n \n protocol_bases=[]\n for c in self.__mro__:\n if getattr(c,'_is_protocol',False )and c.__name__ !='_Protocol':\n protocol_bases.append(c)\n \n \n attrs=set()\n for base in protocol_bases:\n for attr in base.__dict__.keys():\n \n for c in self.__mro__:\n if (c is not base and attr in c.__dict__ and\n not getattr(c,'_is_protocol',False )):\n break\n else :\n if (not attr.startswith('_abc_')and\n attr !='__abstractmethods__'and\n attr !='__annotations__'and\n attr !='__weakref__'and\n attr !='_is_protocol'and\n attr !='_gorg'and\n attr !='__dict__'and\n attr !='__args__'and\n attr !='__slots__'and\n attr !='_get_protocol_attrs'and\n attr !='__next_in_mro__'and\n attr !='__parameters__'and\n attr !='__origin__'and\n attr !='__orig_bases__'and\n attr !='__extra__'and\n attr !='__tree_hash__'and\n attr !='__module__'):\n attrs.add(attr)\n \n return attrs\n \n \nclass _Protocol(Generic,metaclass=_ProtocolMeta):\n ''\n\n\n\n\n \n \n __slots__=()\n \n _is_protocol=True\n \n def __class_getitem__(cls,params):\n return super().__class_getitem__(params)\n \n \n \n \nT=TypeVar('T')\nKT=TypeVar('KT')\nVT=TypeVar('VT')\nT_co=TypeVar('T_co',covariant=True )\nV_co=TypeVar('V_co',covariant=True )\nVT_co=TypeVar('VT_co',covariant=True )\nT_contra=TypeVar('T_contra',contravariant=True )\n\nCT_co=TypeVar('CT_co',covariant=True ,bound=type)\n\n\n\nAnyStr=TypeVar('AnyStr',bytes,str)\n\n\n\ndef _alias(origin,params,inst=True ):\n return _GenericAlias(origin,params,special=True ,inst=inst)\n \nHashable=_alias(collections.abc.Hashable,())\nAwaitable=_alias(collections.abc.Awaitable,T_co)\nCoroutine=_alias(collections.abc.Coroutine,(T_co,T_contra,V_co))\nAsyncIterable=_alias(collections.abc.AsyncIterable,T_co)\nAsyncIterator=_alias(collections.abc.AsyncIterator,T_co)\nIterable=_alias(collections.abc.Iterable,T_co)\nIterator=_alias(collections.abc.Iterator,T_co)\nReversible=_alias(collections.abc.Reversible,T_co)\nSized=_alias(collections.abc.Sized,())\nContainer=_alias(collections.abc.Container,T_co)\nCollection=_alias(collections.abc.Collection,T_co)\nCallable=_VariadicGenericAlias(collections.abc.Callable,(),special=True )\nCallable.__doc__=\\\n\"\"\"Callable type; Callable[[int], str] is a function of (int) -> str.\n\n The subscription syntax must always be used with exactly two\n values: the argument list and the return type. The argument list\n must be a list of types or ellipsis; the return type must be a single type.\n\n There is no syntax to indicate optional or keyword arguments,\n such function types are rarely used as callback types.\n \"\"\"\nAbstractSet=_alias(collections.abc.Set,T_co)\nMutableSet=_alias(collections.abc.MutableSet,T)\n\nMapping=_alias(collections.abc.Mapping,(KT,VT_co))\nMutableMapping=_alias(collections.abc.MutableMapping,(KT,VT))\nSequence=_alias(collections.abc.Sequence,T_co)\nMutableSequence=_alias(collections.abc.MutableSequence,T)\nByteString=_alias(collections.abc.ByteString,())\nTuple=_VariadicGenericAlias(tuple,(),inst=False ,special=True )\nTuple.__doc__=\\\n\"\"\"Tuple type; Tuple[X, Y] is the cross-product type of X and Y.\n\n Example: Tuple[T1, T2] is a tuple of two elements corresponding\n to type variables T1 and T2. Tuple[int, float, str] is a tuple\n of an int, a float and a string.\n\n To specify a variable-length tuple of homogeneous type, use Tuple[T, ...].\n \"\"\"\nList=_alias(list,T,inst=False )\nDeque=_alias(collections.deque,T)\nSet=_alias(set,T,inst=False )\nFrozenSet=_alias(frozenset,T_co,inst=False )\nMappingView=_alias(collections.abc.MappingView,T_co)\nKeysView=_alias(collections.abc.KeysView,KT)\nItemsView=_alias(collections.abc.ItemsView,(KT,VT_co))\nValuesView=_alias(collections.abc.ValuesView,VT_co)\nContextManager=_alias(contextlib.AbstractContextManager,T_co)\nAsyncContextManager=_alias(contextlib.AbstractAsyncContextManager,T_co)\nDict=_alias(dict,(KT,VT),inst=False )\nDefaultDict=_alias(collections.defaultdict,(KT,VT))\nCounter=_alias(collections.Counter,T)\nChainMap=_alias(collections.ChainMap,(KT,VT))\nGenerator=_alias(collections.abc.Generator,(T_co,T_contra,V_co))\nAsyncGenerator=_alias(collections.abc.AsyncGenerator,(T_co,T_contra))\nType=_alias(type,CT_co,inst=False )\nType.__doc__=\\\n\"\"\"A special construct usable to annotate class objects.\n\n For example, suppose we have the following classes::\n\n class User: ... # Abstract base for User classes\n class BasicUser(User): ...\n class ProUser(User): ...\n class TeamUser(User): ...\n\n And a function that takes a class argument that's a subclass of\n User and returns an instance of the corresponding class::\n\n U = TypeVar('U', bound=User)\n def new_user(user_class: Type[U]) -> U:\n user = user_class()\n # (Here we could write the user object to a database)\n return user\n\n joe = new_user(BasicUser)\n\n At this point the type checker knows that joe has type BasicUser.\n \"\"\"\n\n\nclass SupportsInt(_Protocol):\n __slots__=()\n \n @abstractmethod\n def __int__(self)->int:\n pass\n \n \nclass SupportsFloat(_Protocol):\n __slots__=()\n \n @abstractmethod\n def __float__(self)->float:\n pass\n \n \nclass SupportsComplex(_Protocol):\n __slots__=()\n \n @abstractmethod\n def __complex__(self)->complex:\n pass\n \n \nclass SupportsBytes(_Protocol):\n __slots__=()\n \n @abstractmethod\n def __bytes__(self)->bytes:\n pass\n \n \nclass SupportsAbs(_Protocol[T_co]):\n __slots__=()\n \n @abstractmethod\n def __abs__(self)->T_co:\n pass\n \nclass SupportsRound(_Protocol[T_co]):\n __slots__=()\n \n @abstractmethod\n def __round__(self,ndigits:int=0)->T_co:\n pass\n \n \ndef _make_nmtuple(name,types):\n msg=\"NamedTuple('Name', [(f0, t0), (f1, t1), ...]); each t must be a type\"\n types=[(n,_type_check(t,msg))for n,t in types]\n nm_tpl=collections.namedtuple(name,[n for n,t in types])\n \n \n nm_tpl.__annotations__=nm_tpl._field_types=collections.OrderedDict(types)\n try :\n nm_tpl.__module__=sys._getframe(2).f_globals.get('__name__','__main__')\n except (AttributeError,ValueError):\n pass\n return nm_tpl\n \n \n \n_prohibited=('__new__','__init__','__slots__','__getnewargs__',\n'_fields','_field_defaults','_field_types',\n'_make','_replace','_asdict','_source')\n\n_special=('__module__','__name__','__qualname__','__annotations__')\n\n\nclass NamedTupleMeta(type):\n\n def __new__(cls,typename,bases,ns):\n if ns.get('_root',False ):\n return super().__new__(cls,typename,bases,ns)\n types=ns.get('__annotations__',{})\n nm_tpl=_make_nmtuple(typename,types.items())\n defaults=[]\n defaults_dict={}\n for field_name in types:\n if field_name in ns:\n default_value=ns[field_name]\n defaults.append(default_value)\n defaults_dict[field_name]=default_value\n elif defaults:\n raise TypeError(\"Non-default namedtuple field {field_name} cannot \"\n \"follow default field(s) {default_names}\"\n .format(field_name=field_name,\n default_names=', '.join(defaults_dict.keys())))\n nm_tpl.__new__.__annotations__=collections.OrderedDict(types)\n nm_tpl.__new__.__defaults__=tuple(defaults)\n nm_tpl._field_defaults=defaults_dict\n \n for key in ns:\n if key in _prohibited:\n raise AttributeError(\"Cannot overwrite NamedTuple attribute \"+key)\n elif key not in _special and key not in nm_tpl._fields:\n setattr(nm_tpl,key,ns[key])\n return nm_tpl\n \n \nclass NamedTuple(metaclass=NamedTupleMeta):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n _root=True\n \n def __new__(self,typename,fields=None ,**kwargs):\n if fields is None :\n fields=kwargs.items()\n elif kwargs:\n raise TypeError(\"Either list of fields or keywords\"\n \" can be provided to NamedTuple, not both\")\n return _make_nmtuple(typename,fields)\n \n \ndef NewType(name,tp):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def new_type(x):\n return x\n \n new_type.__name__=name\n new_type.__supertype__=tp\n return new_type\n \n \n \nText=str\n\n\n\nTYPE_CHECKING=False\n\n\nclass IO(Generic[AnyStr]):\n ''\n\n\n\n\n\n\n\n\n\n \n \n __slots__=()\n \n @abstractproperty\n def mode(self)->str:\n pass\n \n @abstractproperty\n def name(self)->str:\n pass\n \n @abstractmethod\n def close(self)->None :\n pass\n \n @abstractmethod\n def closed(self)->bool:\n pass\n \n @abstractmethod\n def fileno(self)->int:\n pass\n \n @abstractmethod\n def flush(self)->None :\n pass\n \n @abstractmethod\n def isatty(self)->bool:\n pass\n \n @abstractmethod\n def read(self,n:int=-1)->AnyStr:\n pass\n \n @abstractmethod\n def readable(self)->bool:\n pass\n \n @abstractmethod\n def readline(self,limit:int=-1)->AnyStr:\n pass\n \n @abstractmethod\n def readlines(self,hint:int=-1)->List[AnyStr]:\n pass\n \n @abstractmethod\n def seek(self,offset:int,whence:int=0)->int:\n pass\n \n @abstractmethod\n def seekable(self)->bool:\n pass\n \n @abstractmethod\n def tell(self)->int:\n pass\n \n @abstractmethod\n def truncate(self,size:int=None )->int:\n pass\n \n @abstractmethod\n def writable(self)->bool:\n pass\n \n @abstractmethod\n def write(self,s:AnyStr)->int:\n pass\n \n @abstractmethod\n def writelines(self,lines:List[AnyStr])->None :\n pass\n \n @abstractmethod\n def __enter__(self)->'IO[AnyStr]':\n pass\n \n @abstractmethod\n def __exit__(self,type,value,traceback)->None :\n pass\n \n \nclass BinaryIO(IO[bytes]):\n ''\n \n __slots__=()\n \n @abstractmethod\n def write(self,s:Union[bytes,bytearray])->int:\n pass\n \n @abstractmethod\n def __enter__(self)->'BinaryIO':\n pass\n \n \nclass TextIO(IO[str]):\n ''\n \n __slots__=()\n \n @abstractproperty\n def buffer(self)->BinaryIO:\n pass\n \n @abstractproperty\n def encoding(self)->str:\n pass\n \n @abstractproperty\n def errors(self)->Optional[str]:\n pass\n \n @abstractproperty\n def line_buffering(self)->bool:\n pass\n \n @abstractproperty\n def newlines(self)->Any:\n pass\n \n @abstractmethod\n def __enter__(self)->'TextIO':\n pass\n \n \nclass io:\n ''\n \n __all__=['IO','TextIO','BinaryIO']\n IO=IO\n TextIO=TextIO\n BinaryIO=BinaryIO\n \n \nio.__name__=__name__+'.io'\nsys.modules[io.__name__]=io\n\nPattern=_alias(stdlib_re.Pattern,AnyStr)\nMatch=_alias(stdlib_re.Match,AnyStr)\n\nclass re:\n ''\n \n __all__=['Pattern','Match']\n Pattern=Pattern\n Match=Match\n \n \nre.__name__=__name__+'.re'\nsys.modules[re.__name__]=re\n",["abc","collections","collections.abc","contextlib","functools","operator","re","sys","types"]],uuid:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__author__='Ka-Ping Yee '\n\nRESERVED_NCS,RFC_4122,RESERVED_MICROSOFT,RESERVED_FUTURE=[\n'reserved for NCS compatibility','specified in RFC 4122',\n'reserved for Microsoft compatibility','reserved for future definition']\n\nint_=int\nbytes_=bytes\n\nclass UUID(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,hex=None ,bytes=None ,bytes_le=None ,fields=None ,\n int=None ,version=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if [hex,bytes,bytes_le,fields,int].count(None )!=4:\n raise TypeError('need one of hex, bytes, bytes_le, fields, or int')\n if hex is not None :\n hex=hex.replace('urn:','').replace('uuid:','')\n hex=hex.strip('{}').replace('-','')\n if len(hex)!=32:\n raise ValueError('badly formed hexadecimal UUID string')\n int=int_(hex,16)\n if bytes_le is not None :\n if len(bytes_le)!=16:\n raise ValueError('bytes_le is not a 16-char string')\n bytes=(bytes_(reversed(bytes_le[0:4]))+\n bytes_(reversed(bytes_le[4:6]))+\n bytes_(reversed(bytes_le[6:8]))+\n bytes_le[8:])\n if bytes is not None :\n if len(bytes)!=16:\n raise ValueError('bytes is not a 16-char string')\n assert isinstance(bytes,bytes_),repr(bytes)\n int=int_.from_bytes(bytes,byteorder='big')\n if fields is not None :\n if len(fields)!=6:\n raise ValueError('fields is not a 6-tuple')\n (time_low,time_mid,time_hi_version,\n clock_seq_hi_variant,clock_seq_low,node)=fields\n if not 0 <=time_low <1 <<32:\n raise ValueError('field 1 out of range (need a 32-bit value)')\n if not 0 <=time_mid <1 <<16:\n raise ValueError('field 2 out of range (need a 16-bit value)')\n if not 0 <=time_hi_version <1 <<16:\n raise ValueError('field 3 out of range (need a 16-bit value)')\n if not 0 <=clock_seq_hi_variant <1 <<8:\n raise ValueError('field 4 out of range (need an 8-bit value)')\n if not 0 <=clock_seq_low <1 <<8:\n raise ValueError('field 5 out of range (need an 8-bit value)')\n if not 0 <=node <1 <<48:\n raise ValueError('field 6 out of range (need a 48-bit value)')\n clock_seq=(clock_seq_hi_variant <<8)|clock_seq_low\n int=((time_low <<96)|(time_mid <<80)|\n (time_hi_version <<64)|(clock_seq <<48)|node)\n if int is not None :\n if not 0 <=int <1 <<128:\n raise ValueError('int is out of range (need a 128-bit value)')\n if version is not None :\n if not 1 <=version <=5:\n raise ValueError('illegal version number')\n \n int &=~(0xc000 <<48)\n int |=0x8000 <<48\n \n int &=~(0xf000 <<64)\n int |=version <<76\n self.__dict__['int']=int\n \n def __eq__(self,other):\n if isinstance(other,UUID):\n return self.int ==other.int\n return NotImplemented\n \n def __ne__(self,other):\n if isinstance(other,UUID):\n return self.int !=other.int\n return NotImplemented\n \n \n \n \n def __lt__(self,other):\n if isinstance(other,UUID):\n return self.int other.int\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,UUID):\n return self.int <=other.int\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,UUID):\n return self.int >=other.int\n return NotImplemented\n \n def __hash__(self):\n return hash(self.int)\n \n def __int__(self):\n return self.int\n \n def __repr__(self):\n return 'UUID(%r)'%str(self)\n \n def __setattr__(self,name,value):\n raise TypeError('UUID objects are immutable')\n \n def __str__(self):\n hex='%032x'%self.int\n return '%s-%s-%s-%s-%s'%(\n hex[:8],hex[8:12],hex[12:16],hex[16:20],hex[20:])\n \n @property\n def bytes(self):\n bytes=bytearray()\n for shift in range(0,128,8):\n bytes.insert(0,(self.int >>shift)&0xff)\n return bytes_(bytes)\n \n @property\n def bytes_le(self):\n bytes=self.bytes\n return (bytes_(reversed(bytes[0:4]))+\n bytes_(reversed(bytes[4:6]))+\n bytes_(reversed(bytes[6:8]))+\n bytes[8:])\n \n @property\n def fields(self):\n return (self.time_low,self.time_mid,self.time_hi_version,\n self.clock_seq_hi_variant,self.clock_seq_low,self.node)\n \n @property\n def time_low(self):\n return self.int >>96\n \n @property\n def time_mid(self):\n return (self.int >>80)&0xffff\n \n @property\n def time_hi_version(self):\n return (self.int >>64)&0xffff\n \n @property\n def clock_seq_hi_variant(self):\n return (self.int >>56)&0xff\n \n @property\n def clock_seq_low(self):\n return (self.int >>48)&0xff\n \n @property\n def time(self):\n return (((self.time_hi_version&0x0fff)<<48)|\n (self.time_mid <<32)|self.time_low)\n \n @property\n def clock_seq(self):\n return (((self.clock_seq_hi_variant&0x3f)<<8)|\n self.clock_seq_low)\n \n @property\n def node(self):\n return self.int&0xffffffffffff\n \n @property\n def hex(self):\n return '%032x'%self.int\n \n @property\n def urn(self):\n return 'urn:uuid:'+str(self)\n \n @property\n def variant(self):\n if not self.int&(0x8000 <<48):\n return RESERVED_NCS\n elif not self.int&(0x4000 <<48):\n return RFC_4122\n elif not self.int&(0x2000 <<48):\n return RESERVED_MICROSOFT\n else :\n return RESERVED_FUTURE\n \n @property\n def version(self):\n \n if self.variant ==RFC_4122:\n return int((self.int >>76)&0xf)\n \ndef _find_mac(command,args,hw_identifiers,get_index):\n import os,shutil\n executable=shutil.which(command)\n if executable is None :\n path=os.pathsep.join(('/sbin','/usr/sbin'))\n executable=shutil.which(command,path=path)\n if executable is None :\n return None\n \n try :\n \n \n \n cmd='LC_ALL=C %s %s 2>/dev/null'%(executable,args)\n with os.popen(cmd)as pipe:\n for line in pipe:\n words=line.lower().split()\n for i in range(len(words)):\n if words[i]in hw_identifiers:\n try :\n return int(\n words[get_index(i)].replace(':',''),16)\n except (ValueError,IndexError):\n \n \n \n \n \n pass\n except OSError:\n pass\n \ndef _ifconfig_getnode():\n ''\n \n \n for args in ('','-a','-av'):\n mac=_find_mac('ifconfig',args,['hwaddr','ether'],lambda i:i+1)\n if mac:\n return mac\n \n import socket\n ip_addr=socket.gethostbyname(socket.gethostname())\n \n \n mac=_find_mac('arp','-an',[ip_addr],lambda i:-1)\n if mac:\n return mac\n \n \n mac=_find_mac('lanscan','-ai',['lan0'],lambda i:0)\n if mac:\n return mac\n \n return None\n \ndef _ipconfig_getnode():\n ''\n import os,re\n dirs=['',r'c:\\windows\\system32',r'c:\\winnt\\system32']\n try :\n import ctypes\n buffer=ctypes.create_string_buffer(300)\n ctypes.windll.kernel32.GetSystemDirectoryA(buffer,300)\n dirs.insert(0,buffer.value.decode('mbcs'))\n except :\n pass\n \n \n \n \n \n \n \n \n \n \n \n \n \ndef _netbios_getnode():\n ''\n \n import win32wnet,netbios\n ncb=netbios.NCB()\n ncb.Command=netbios.NCBENUM\n ncb.Buffer=adapters=netbios.LANA_ENUM()\n adapters._pack()\n if win32wnet.Netbios(ncb)!=0:\n return\n adapters._unpack()\n for i in range(adapters.length):\n ncb.Reset()\n ncb.Command=netbios.NCBRESET\n ncb.Lana_num=ord(adapters.lana[i])\n if win32wnet.Netbios(ncb)!=0:\n continue\n ncb.Reset()\n ncb.Command=netbios.NCBASTAT\n ncb.Lana_num=ord(adapters.lana[i])\n ncb.Callname='*'.ljust(16)\n ncb.Buffer=status=netbios.ADAPTER_STATUS()\n if win32wnet.Netbios(ncb)!=0:\n continue\n status._unpack()\n bytes=status.adapter_address\n return ((bytes[0]<<40)+(bytes[1]<<32)+(bytes[2]<<24)+\n (bytes[3]<<16)+(bytes[4]<<8)+bytes[5])\n \n \n \n \n \n_uuid_generate_random=_uuid_generate_time=_UuidCreate=None\ntry :\n import ctypes,ctypes.util\n \n \n \n for libname in ['uuid','c']:\n try :\n lib=ctypes.CDLL(ctypes.util.find_library(libname))\n except :\n continue\n if hasattr(lib,'uuid_generate_random'):\n _uuid_generate_random=lib.uuid_generate_random\n if hasattr(lib,'uuid_generate_time'):\n _uuid_generate_time=lib.uuid_generate_time\n if _uuid_generate_random is not None :\n break\n \n \n \n \n \n \n \n \n import sys\n if sys.platform =='darwin':\n import os\n if int(os.uname().release.split('.')[0])>=9:\n _uuid_generate_random=_uuid_generate_time=None\n \n \n \n \n \n \n \n \n \n try :\n lib=ctypes.windll.rpcrt4\n except :\n lib=None\n _UuidCreate=getattr(lib,'UuidCreateSequential',\n getattr(lib,'UuidCreate',None ))\nexcept :\n pass\n \ndef _unixdll_getnode():\n ''\n _buffer=ctypes.create_string_buffer(16)\n _uuid_generate_time(_buffer)\n return UUID(bytes=bytes_(_buffer.raw)).node\n \ndef _windll_getnode():\n ''\n _buffer=ctypes.create_string_buffer(16)\n if _UuidCreate(_buffer)==0:\n return UUID(bytes=bytes_(_buffer.raw)).node\n \ndef _random_getnode():\n ''\n import random\n return random.randrange(0,1 <<48)|0x010000000000\n \n_node=None\n\ndef getnode():\n ''\n\n\n\n\n\n \n \n global _node\n if _node is not None :\n return _node\n \n import sys\n if sys.platform =='win32':\n getters=[_windll_getnode,_netbios_getnode,_ipconfig_getnode]\n else :\n getters=[_unixdll_getnode,_ifconfig_getnode]\n \n for getter in getters+[_random_getnode]:\n try :\n _node=getter()\n except :\n continue\n if _node is not None :\n return _node\n \n_last_timestamp=None\n\ndef uuid1(node=None ,clock_seq=None ):\n ''\n\n\n \n \n \n \n if _uuid_generate_time and node is clock_seq is None :\n _buffer=ctypes.create_string_buffer(16)\n _uuid_generate_time(_buffer)\n return UUID(bytes=bytes_(_buffer.raw))\n \n global _last_timestamp\n import time\n nanoseconds=int(time.time()*1e9)\n \n \n timestamp=int(nanoseconds /100)+0x01b21dd213814000\n if _last_timestamp is not None and timestamp <=_last_timestamp:\n timestamp=_last_timestamp+1\n _last_timestamp=timestamp\n if clock_seq is None :\n import random\n clock_seq=random.randrange(1 <<14)\n time_low=timestamp&0xffffffff\n time_mid=(timestamp >>32)&0xffff\n time_hi_version=(timestamp >>48)&0x0fff\n clock_seq_low=clock_seq&0xff\n clock_seq_hi_variant=(clock_seq >>8)&0x3f\n if node is None :\n node=getnode()\n return UUID(fields=(time_low,time_mid,time_hi_version,\n clock_seq_hi_variant,clock_seq_low,node),version=1)\n \ndef uuid3(namespace,name):\n ''\n from hashlib import md5\n hash=md5(namespace.bytes+bytes(name,\"utf-8\")).digest()\n return UUID(bytes=hash[:16],version=3)\n \ndef uuid4():\n ''\n \n \n if _uuid_generate_random:\n _buffer=ctypes.create_string_buffer(16)\n _uuid_generate_random(_buffer)\n return UUID(bytes=bytes_(_buffer.raw))\n \n \n try :\n import os\n return UUID(bytes=os.urandom(16),version=4)\n except :\n import random\n bytes=bytes_(random.randrange(256)for i in range(16))\n return UUID(bytes=bytes,version=4)\n \ndef uuid5(namespace,name):\n ''\n from hashlib import sha1\n hash=sha1(namespace.bytes+bytes(name,\"utf-8\")).digest()\n return UUID(bytes=hash[:16],version=5)\n \n \n \nNAMESPACE_DNS=UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')\nNAMESPACE_URL=UUID('6ba7b811-9dad-11d1-80b4-00c04fd430c8')\nNAMESPACE_OID=UUID('6ba7b812-9dad-11d1-80b4-00c04fd430c8')\nNAMESPACE_X500=UUID('6ba7b814-9dad-11d1-80b4-00c04fd430c8')\n",["ctypes","ctypes.util","hashlib","netbios","os","random","re","shutil","socket","sys","time","win32wnet"]],VFS_import:[".py","import os\nimport sys\nfrom browser import doc\n\n\n\n\n\n\nVFS=dict(JSObject(__BRYTHON__.py_VFS))\nclass VFSModuleFinder:\n def __init__(self,path_entry):\n print(\"in VFSModuleFinder\")\n if path_entry.startswith('/libs')or path_entry.startswith('/Lib'):\n self.path_entry=path_entry\n else :\n raise ImportError()\n \n def __str__(self):\n return '<%s for \"%s\">'%(self.__class__.__name__,self.path_entry)\n \n def find_module(self,fullname,path=None ):\n path=path or self.path_entry\n \n for _ext in ['js','pyj','py']:\n _filepath=os.path.join(self.path_entry,'%s.%s'%(fullname,_ext))\n if _filepath in VFS:\n print(\"module found at %s:%s\"%(_filepath,fullname))\n return VFSModuleLoader(_filepath,fullname)\n \n print('module %s not found'%fullname)\n raise ImportError()\n return None\n \nclass VFSModuleLoader:\n ''\n \n def __init__(self,filepath,name):\n self._filepath=filepath\n self._name=name\n \n def get_source(self):\n if self._filepath in VFS:\n return JSObject(readFromVFS(self._filepath))\n \n raise ImportError('could not find source for %s'%fullname)\n \n def is_package(self):\n return '.'in self._name\n \n def load_module(self):\n if self._name in sys.modules:\n \n mod=sys.modules[self._name]\n return mod\n \n _src=self.get_source()\n if self._filepath.endswith('.js'):\n mod=JSObject(import_js_module(_src,self._filepath,self._name))\n elif self._filepath.endswith('.py'):\n mod=JSObject(import_py_module(_src,self._filepath,self._name))\n elif self._filepath.endswith('.pyj'):\n mod=JSObject(import_pyj_module(_src,self._filepath,self._name))\n else :\n raise ImportError('Invalid Module: %s'%self._filepath)\n \n \n mod.__file__=self._filepath\n mod.__name__=self._name\n mod.__path__=os.path.abspath(self._filepath)\n mod.__loader__=self\n mod.__package__='.'.join(self._name.split('.')[:-1])\n \n if self.is_package():\n print('adding path for package')\n \n \n mod.__path__=[self.path_entry]\n else :\n print('imported as regular module')\n \n print('creating a new module object for \"%s\"'%self._name)\n sys.modules.setdefault(self._name,mod)\n JSObject(__BRYTHON__.imported)[self._name]=mod\n \n return mod\n \nJSObject(__BRYTHON__.path_hooks.insert(0,VFSModuleFinder))\n",["browser","os","sys"]],warnings:[".py",'\'\'\n\n\n\n\nimport linecache\nimport sys\n\n__all__=["warn","showwarning","formatwarning","filterwarnings",\n"resetwarnings","catch_warnings"]\n\n\ndef showwarning(message,category,filename,lineno,file=None ,line=None ):\n \'\'\n if file is None :\n file=sys.stderr\n try :\n file.write(formatwarning(message,category,filename,lineno,line))\n except IOError:\n pass\n \ndef formatwarning(message,category,filename,lineno,line=None ):\n \'\'\n s="%s:%s: %s: %s\\n"%(filename,lineno,category.__name__,message)\n line=linecache.getline(filename,lineno)if line is None else line\n if line:\n line=line.strip()\n s +=" %s\\n"%line\n return s\n \ndef filterwarnings(action,message="",category=Warning,module="",lineno=0,\nappend=False ):\n \'\'\n\n\n\n\n\n\n\n\n \n import re\n assert action in ("error","ignore","always","default","module",\n "once"),"invalid action: %r"%(action,)\n assert isinstance(message,str),"message must be a string"\n assert isinstance(category,type),"category must be a class"\n assert issubclass(category,Warning),"category must be a Warning subclass"\n assert isinstance(module,str),"module must be a string"\n assert isinstance(lineno,int)and lineno >=0,\\\n "lineno must be an int >= 0"\n item=(action,re.compile(message,re.I),category,\n re.compile(module),lineno)\n if append:\n filters.append(item)\n else :\n filters.insert(0,item)\n \ndef simplefilter(action,category=Warning,lineno=0,append=False ):\n \'\'\n\n\n\n\n\n\n\n \n assert action in ("error","ignore","always","default","module",\n "once"),"invalid action: %r"%(action,)\n assert isinstance(lineno,int)and lineno >=0,\\\n "lineno must be an int >= 0"\n item=(action,None ,category,None ,lineno)\n if append:\n filters.append(item)\n else :\n filters.insert(0,item)\n \ndef resetwarnings():\n \'\'\n filters[:]=[]\n \nclass _OptionError(Exception):\n \'\'\n pass\n \n \ndef _processoptions(args):\n for arg in args:\n try :\n _setoption(arg)\n except _OptionError as msg:\n print("Invalid -W option ignored:",msg,file=sys.stderr)\n \n \ndef _setoption(arg):\n import re\n parts=arg.split(\':\')\n if len(parts)>5:\n raise _OptionError("too many fields (max 5): %r"%(arg,))\n while len(parts)<5:\n parts.append(\'\')\n action,message,category,module,lineno=[s.strip()\n for s in parts]\n action=_getaction(action)\n message=re.escape(message)\n category=_getcategory(category)\n module=re.escape(module)\n if module:\n module=module+\'$\'\n if lineno:\n try :\n lineno=int(lineno)\n if lineno <0:\n raise ValueError\n except (ValueError,OverflowError):\n raise _OptionError("invalid lineno %r"%(lineno,))\n else :\n lineno=0\n filterwarnings(action,message,category,module,lineno)\n \n \ndef _getaction(action):\n if not action:\n return "default"\n if action =="all":return "always"\n for a in (\'default\',\'always\',\'ignore\',\'module\',\'once\',\'error\'):\n if a.startswith(action):\n return a\n raise _OptionError("invalid action: %r"%(action,))\n \n \ndef _getcategory(category):\n import re\n if not category:\n return Warning\n if re.match("^[a-zA-Z0-9_]+$",category):\n try :\n cat=eval(category)\n except NameError:\n raise _OptionError("unknown warning category: %r"%(category,))\n else :\n i=category.rfind(".")\n module=category[:i]\n klass=category[i+1:]\n try :\n m=__import__(module,None ,None ,[klass])\n except ImportError:\n raise _OptionError("invalid module name: %r"%(module,))\n try :\n cat=getattr(m,klass)\n except AttributeError:\n raise _OptionError("unknown warning category: %r"%(category,))\n if not issubclass(cat,Warning):\n raise _OptionError("invalid warning category: %r"%(category,))\n return cat\n \n \n \ndef warn(message,category=None ,stacklevel=1):\n \'\'\n \n if isinstance(message,Warning):\n category=message.__class__\n \n if category is None :\n category=UserWarning\n assert issubclass(category,Warning)\n \n try :\n caller=sys._getframe(stacklevel)\n except ValueError:\n globals=sys.__dict__\n lineno=1\n else :\n globals=caller.f_globals\n lineno=caller.f_lineno\n if \'__name__\'in globals:\n module=globals[\'__name__\']\n else :\n module=""\n filename=globals.get(\'__file__\')\n if filename:\n fnl=filename.lower()\n if fnl.endswith((".pyc",".pyo")):\n filename=filename[:-1]\n else :\n if module =="__main__":\n try :\n filename=sys.argv[0]\n except AttributeError:\n \n filename=\'__main__\'\n if not filename:\n filename=module\n registry=globals.setdefault("__warningregistry__",{})\n warn_explicit(message,category,filename,lineno,module,registry,\n globals)\n \ndef warn_explicit(message,category,filename,lineno,\nmodule=None ,registry=None ,module_globals=None ):\n lineno=int(lineno)\n if module is None :\n module=filename or ""\n if module[-3:].lower()==".py":\n module=module[:-3]\n if registry is None :\n registry={}\n if isinstance(message,Warning):\n text=str(message)\n category=message.__class__\n else :\n text=message\n message=category(message)\n key=(text,category,lineno)\n \n if registry.get(key):\n return\n \n for item in filters:\n action,msg,cat,mod,ln=item\n if ((msg is None or msg.match(text))and\n issubclass(category,cat)and\n (mod is None or mod.match(module))and\n (ln ==0 or lineno ==ln)):\n break\n else :\n action=defaultaction\n \n if action =="ignore":\n registry[key]=1\n return\n \n \n \n linecache.getlines(filename,module_globals)\n \n if action =="error":\n raise message\n \n if action =="once":\n registry[key]=1\n oncekey=(text,category)\n if onceregistry.get(oncekey):\n return\n onceregistry[oncekey]=1\n elif action =="always":\n pass\n elif action =="module":\n registry[key]=1\n altkey=(text,category,0)\n if registry.get(altkey):\n return\n registry[altkey]=1\n elif action =="default":\n registry[key]=1\n else :\n \n raise RuntimeError(\n "Unrecognized action (%r) in warnings.filters:\\n %s"%\n (action,item))\n if not callable(showwarning):\n raise TypeError("warnings.showwarning() must be set to a "\n "function or method")\n \n showwarning(message,category,filename,lineno)\n \n \nclass WarningMessage(object):\n\n \'\'\n \n _WARNING_DETAILS=("message","category","filename","lineno","file",\n "line")\n \n def __init__(self,message,category,filename,lineno,file=None ,\n line=None ):\n local_values=locals()\n for attr in self._WARNING_DETAILS:\n setattr(self,attr,local_values[attr])\n self._category_name=category.__name__ if category else None\n \n def __str__(self):\n return ("{message : %r, category : %r, filename : %r, lineno : %s, "\n "line : %r}"%(self.message,self._category_name,\n self.filename,self.lineno,self.line))\n \n \nclass catch_warnings(object):\n\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,*,record=False ,module=None ):\n \'\'\n\n\n\n\n\n \n self._record=record\n self._module=sys.modules[\'warnings\']if module is None else module\n self._entered=False\n \n def __repr__(self):\n args=[]\n if self._record:\n args.append("record=True")\n if self._module is not sys.modules[\'warnings\']:\n args.append("module=%r"%self._module)\n name=type(self).__name__\n return "%s(%s)"%(name,", ".join(args))\n \n def __enter__(self):\n if self._entered:\n raise RuntimeError("Cannot enter %r twice"%self)\n self._entered=True\n self._filters=self._module.filters\n self._module.filters=self._filters[:]\n self._showwarning=self._module.showwarning\n if self._record:\n log=[]\n def showwarning(*args,**kwargs):\n log.append(WarningMessage(*args,**kwargs))\n self._module.showwarning=showwarning\n return log\n else :\n return None\n \n def __exit__(self,*exc_info):\n if not self._entered:\n raise RuntimeError("Cannot exit %r without entering first"%self)\n self._module.filters=self._filters\n self._module.showwarning=self._showwarning\n \n \n \n \n \n \n \n \n \n \n_warnings_defaults=False\ntry :\n from _warnings import (filters,_defaultaction,_onceregistry,\n warn,warn_explicit)\n defaultaction=_defaultaction\n onceregistry=_onceregistry\n _warnings_defaults=True\nexcept ImportError:\n filters=[]\n defaultaction="default"\n onceregistry={}\n \n \n \n_processoptions(sys.warnoptions)\nif not _warnings_defaults:\n silence=[ImportWarning,PendingDeprecationWarning]\n silence.append(DeprecationWarning)\n for cls in silence:\n simplefilter("ignore",category=cls)\n bytes_warning=sys.flags.bytes_warning\n if bytes_warning >1:\n bytes_action="error"\n elif bytes_warning:\n bytes_action="default"\n else :\n bytes_action="ignore"\n simplefilter(bytes_action,category=BytesWarning,append=1)\n \n if hasattr(sys,\'gettotalrefcount\'):\n resource_action="always"\n else :\n resource_action="ignore"\n simplefilter(resource_action,category=ResourceWarning,append=1)\n \ndel _warnings_defaults\n',["_warnings","linecache","re","sys"]],weakref:[".py",'\'\'\n\n\n\n\n\n\n\n\n\n\nfrom _weakref import (\ngetweakrefcount,\ngetweakrefs,\nref,\nproxy,\nCallableProxyType,\nProxyType,\nReferenceType)\n\nfrom _weakrefset import WeakSet,_IterationGuard\n\nimport collections\n\nProxyTypes=(ProxyType,CallableProxyType)\n\n__all__=["ref","proxy","getweakrefcount","getweakrefs",\n"WeakKeyDictionary","ReferenceType","ProxyType",\n"CallableProxyType","ProxyTypes","WeakValueDictionary",\n"WeakSet"]\n\n\nclass WeakValueDictionary(collections.MutableMapping):\n \'\'\n\n\n\n \n \n \n \n \n \n \n def __init__(self,*args,**kw):\n def remove(wr,selfref=ref(self)):\n self=selfref()\n if self is not None :\n if self._iterating:\n self._pending_removals.append(wr.key)\n else :\n del self.data[wr.key]\n self._remove=remove\n \n self._pending_removals=[]\n self._iterating=set()\n self.data=d={}\n self.update(*args,**kw)\n \n def _commit_removals(self):\n l=self._pending_removals\n d=self.data\n \n \n while l:\n del d[l.pop()]\n \n def __getitem__(self,key):\n o=self.data[key]()\n if o is None :\n raise KeyError(key)\n else :\n return o\n \n def __delitem__(self,key):\n if self._pending_removals:\n self._commit_removals()\n del self.data[key]\n \n def __len__(self):\n return len(self.data)-len(self._pending_removals)\n \n def __contains__(self,key):\n try :\n o=self.data[key]()\n except KeyError:\n return False\n return o is not None\n \n def __repr__(self):\n return ""%id(self)\n \n def __setitem__(self,key,value):\n if self._pending_removals:\n self._commit_removals()\n self.data[key]=KeyedRef(value,self._remove,key)\n \n def copy(self):\n new=WeakValueDictionary()\n for key,wr in self.data.items():\n o=wr()\n if o is not None :\n new[key]=o\n return new\n \n __copy__=copy\n \n def __deepcopy__(self,memo):\n from copy import deepcopy\n new=self.__class__()\n for key,wr in self.data.items():\n o=wr()\n if o is not None :\n new[deepcopy(key,memo)]=o\n return new\n \n def get(self,key,default=None ):\n try :\n wr=self.data[key]\n except KeyError:\n return default\n else :\n o=wr()\n if o is None :\n \n return default\n else :\n return o\n \n def items(self):\n with _IterationGuard(self):\n for k,wr in self.data.items():\n v=wr()\n if v is not None :\n yield k,v\n \n def keys(self):\n with _IterationGuard(self):\n for k,wr in self.data.items():\n if wr()is not None :\n yield k\n \n __iter__=keys\n \n def itervaluerefs(self):\n \'\'\n\n\n\n\n\n\n\n \n with _IterationGuard(self):\n for wr in self.data.values():\n yield wr\n \n def values(self):\n with _IterationGuard(self):\n for wr in self.data.values():\n obj=wr()\n if obj is not None :\n yield obj\n \n def popitem(self):\n if self._pending_removals:\n self._commit_removals()\n while True :\n key,wr=self.data.popitem()\n o=wr()\n if o is not None :\n return key,o\n \n def pop(self,key,*args):\n if self._pending_removals:\n self._commit_removals()\n try :\n o=self.data.pop(key)()\n except KeyError:\n if args:\n return args[0]\n raise\n if o is None :\n raise KeyError(key)\n else :\n return o\n \n def setdefault(self,key,default=None ):\n try :\n wr=self.data[key]\n except KeyError:\n if self._pending_removals:\n self._commit_removals()\n self.data[key]=KeyedRef(default,self._remove,key)\n return default\n else :\n return wr()\n \n def update(self,dict=None ,**kwargs):\n if self._pending_removals:\n self._commit_removals()\n d=self.data\n if dict is not None :\n if not hasattr(dict,"items"):\n dict=type({})(dict)\n for key,o in dict.items():\n d[key]=KeyedRef(o,self._remove,key)\n if len(kwargs):\n self.update(kwargs)\n \n def valuerefs(self):\n \'\'\n\n\n\n\n\n\n\n \n return list(self.data.values())\n \n \nclass KeyedRef(ref):\n \'\'\n\n\n\n\n\n\n \n \n __slots__="key",\n \n def __new__(type,ob,callback,key):\n self=ref.__new__(type,ob,callback)\n self.key=key\n return self\n \n def __init__(self,ob,callback,key):\n super().__init__(ob,callback)\n \n \nclass WeakKeyDictionary(collections.MutableMapping):\n \'\'\n\n\n\n\n\n\n\n \n \n def __init__(self,dict=None ):\n self.data={}\n def remove(k,selfref=ref(self)):\n self=selfref()\n if self is not None :\n if self._iterating:\n self._pending_removals.append(k)\n else :\n del self.data[k]\n self._remove=remove\n \n self._pending_removals=[]\n self._iterating=set()\n if dict is not None :\n self.update(dict)\n \n def _commit_removals(self):\n \n \n \n \n l=self._pending_removals\n d=self.data\n while l:\n try :\n del d[l.pop()]\n except KeyError:\n pass\n \n def __delitem__(self,key):\n del self.data[ref(key)]\n \n def __getitem__(self,key):\n return self.data[ref(key)]\n \n def __len__(self):\n return len(self.data)-len(self._pending_removals)\n \n def __repr__(self):\n return ""%id(self)\n \n def __setitem__(self,key,value):\n self.data[ref(key,self._remove)]=value\n \n def copy(self):\n new=WeakKeyDictionary()\n for key,value in self.data.items():\n o=key()\n if o is not None :\n new[o]=value\n return new\n \n __copy__=copy\n \n def __deepcopy__(self,memo):\n from copy import deepcopy\n new=self.__class__()\n for key,value in self.data.items():\n o=key()\n if o is not None :\n new[o]=deepcopy(value,memo)\n return new\n \n def get(self,key,default=None ):\n return self.data.get(ref(key),default)\n \n def __contains__(self,key):\n try :\n wr=ref(key)\n except TypeError:\n return False\n return wr in self.data\n \n def items(self):\n with _IterationGuard(self):\n for wr,value in self.data.items():\n key=wr()\n if key is not None :\n yield key,value\n \n def keys(self):\n with _IterationGuard(self):\n for wr in self.data:\n obj=wr()\n if obj is not None :\n yield obj\n \n __iter__=keys\n \n def values(self):\n with _IterationGuard(self):\n for wr,value in self.data.items():\n if wr()is not None :\n yield value\n \n def keyrefs(self):\n \'\'\n\n\n\n\n\n\n\n \n return list(self.data)\n \n def popitem(self):\n while True :\n key,value=self.data.popitem()\n o=key()\n if o is not None :\n return o,value\n \n def pop(self,key,*args):\n return self.data.pop(ref(key),*args)\n \n def setdefault(self,key,default=None ):\n return self.data.setdefault(ref(key,self._remove),default)\n \n def update(self,dict=None ,**kwargs):\n d=self.data\n if dict is not None :\n if not hasattr(dict,"items"):\n dict=type({})(dict)\n for key,value in dict.items():\n d[ref(key,self._remove)]=value\n if len(kwargs):\n self.update(kwargs)\n',["_weakref","_weakrefset","collections","copy"]],webbrowser:[".py","from browser import window\n\n__all__=[\"Error\",\"open\",\"open_new\",\"open_new_tab\"]\n\nclass Error(Exception):\n pass\n \n_target={0:'',1:'_blank',2:'_new'}\n\n\ndef open(url,new=0,autoraise=True ):\n ''\n\n\n \n \n \n if '://'in url:\n if url[:6]=='ftp://':\n print('entro')\n else :\n protocol=url.split('//:')[0]\n url=url.replace(protocol+'//:','//')\n else :\n url='//'+url\n print(url)\n if window.open(url,_target[new]):\n return True\n return False\n \ndef open_new(url):\n return open(url,1)\n \ndef open_new_tab(url):\n return open(url,2)\n \n \n",["browser"]],zipfile:[".py","''\n\n\n\n\nimport io\nimport os\nimport re\nimport imp\nimport sys\nimport time\nimport stat\nimport shutil\nimport struct\nimport binascii\n\n\"\"\"\ntry:\n import zlib # We may need its compression method\n crc32 = zlib.crc32\nexcept ImportError:\n zlib = None\n crc32 = binascii.crc32\n\ntry:\n import bz2 # We may need its compression method\nexcept ImportError:\n bz2 = None\n\ntry:\n import lzma # We may need its compression method\nexcept ImportError:\n lzma = None\n\"\"\"\nzlib=None\ncrc32=binascii.crc32\nbz2=None\nlzma=None\n\n__all__=[\"BadZipFile\",\"BadZipfile\",\"error\",\n\"ZIP_STORED\",\"ZIP_DEFLATED\",\"ZIP_BZIP2\",\"ZIP_LZMA\",\n\"is_zipfile\",\"ZipInfo\",\"ZipFile\",\"PyZipFile\",\"LargeZipFile\"]\n\nclass BadZipFile(Exception):\n pass\n \n \nclass LargeZipFile(Exception):\n ''\n\n\n \n \nerror=BadZipfile=BadZipFile\n\n\nZIP64_LIMIT=(1 <<31)-1\nZIP_FILECOUNT_LIMIT=1 <<16\nZIP_MAX_COMMENT=(1 <<16)-1\n\n\nZIP_STORED=0\nZIP_DEFLATED=8\nZIP_BZIP2=12\nZIP_LZMA=14\n\n\nDEFAULT_VERSION=20\nZIP64_VERSION=45\nBZIP2_VERSION=46\nLZMA_VERSION=63\n\nMAX_EXTRACT_VERSION=63\n\n\n\n\n\n\n\n\n\nstructEndArchive=b\"<4s4H2LH\"\nstringEndArchive=b\"PK\\005\\006\"\nsizeEndCentDir=struct.calcsize(structEndArchive)\n\n_ECD_SIGNATURE=0\n_ECD_DISK_NUMBER=1\n_ECD_DISK_START=2\n_ECD_ENTRIES_THIS_DISK=3\n_ECD_ENTRIES_TOTAL=4\n_ECD_SIZE=5\n_ECD_OFFSET=6\n_ECD_COMMENT_SIZE=7\n\n\n_ECD_COMMENT=8\n_ECD_LOCATION=9\n\n\n\nstructCentralDir=\"<4s4B4HL2L5H2L\"\nstringCentralDir=b\"PK\\001\\002\"\nsizeCentralDir=struct.calcsize(structCentralDir)\n\n\n_CD_SIGNATURE=0\n_CD_CREATE_VERSION=1\n_CD_CREATE_SYSTEM=2\n_CD_EXTRACT_VERSION=3\n_CD_EXTRACT_SYSTEM=4\n_CD_FLAG_BITS=5\n_CD_COMPRESS_TYPE=6\n_CD_TIME=7\n_CD_DATE=8\n_CD_CRC=9\n_CD_COMPRESSED_SIZE=10\n_CD_UNCOMPRESSED_SIZE=11\n_CD_FILENAME_LENGTH=12\n_CD_EXTRA_FIELD_LENGTH=13\n_CD_COMMENT_LENGTH=14\n_CD_DISK_NUMBER_START=15\n_CD_INTERNAL_FILE_ATTRIBUTES=16\n_CD_EXTERNAL_FILE_ATTRIBUTES=17\n_CD_LOCAL_HEADER_OFFSET=18\n\n\n\nstructFileHeader=\"<4s2B4HL2L2H\"\nstringFileHeader=b\"PK\\003\\004\"\nsizeFileHeader=struct.calcsize(structFileHeader)\n\n_FH_SIGNATURE=0\n_FH_EXTRACT_VERSION=1\n_FH_EXTRACT_SYSTEM=2\n_FH_GENERAL_PURPOSE_FLAG_BITS=3\n_FH_COMPRESSION_METHOD=4\n_FH_LAST_MOD_TIME=5\n_FH_LAST_MOD_DATE=6\n_FH_CRC=7\n_FH_COMPRESSED_SIZE=8\n_FH_UNCOMPRESSED_SIZE=9\n_FH_FILENAME_LENGTH=10\n_FH_EXTRA_FIELD_LENGTH=11\n\n\nstructEndArchive64Locator=\"<4sLQL\"\nstringEndArchive64Locator=b\"PK\\x06\\x07\"\nsizeEndCentDir64Locator=struct.calcsize(structEndArchive64Locator)\n\n\n\nstructEndArchive64=\"<4sQ2H2L4Q\"\nstringEndArchive64=b\"PK\\x06\\x06\"\nsizeEndCentDir64=struct.calcsize(structEndArchive64)\n\n_CD64_SIGNATURE=0\n_CD64_DIRECTORY_RECSIZE=1\n_CD64_CREATE_VERSION=2\n_CD64_EXTRACT_VERSION=3\n_CD64_DISK_NUMBER=4\n_CD64_DISK_NUMBER_START=5\n_CD64_NUMBER_ENTRIES_THIS_DISK=6\n_CD64_NUMBER_ENTRIES_TOTAL=7\n_CD64_DIRECTORY_SIZE=8\n_CD64_OFFSET_START_CENTDIR=9\n\ndef _check_zipfile(fp):\n try :\n if _EndRecData(fp):\n return True\n except IOError:\n pass\n return False\n \ndef is_zipfile(filename):\n ''\n\n\n \n result=False\n try :\n if hasattr(filename,\"read\"):\n result=_check_zipfile(fp=filename)\n else :\n with open(filename,\"rb\")as fp:\n result=_check_zipfile(fp)\n except IOError:\n pass\n return result\n \ndef _EndRecData64(fpin,offset,endrec):\n ''\n\n \n try :\n fpin.seek(offset -sizeEndCentDir64Locator,2)\n except IOError:\n \n \n return endrec\n \n data=fpin.read(sizeEndCentDir64Locator)\n if len(data)!=sizeEndCentDir64Locator:\n return endrec\n sig,diskno,reloff,disks=struct.unpack(structEndArchive64Locator,data)\n if sig !=stringEndArchive64Locator:\n return endrec\n \n if diskno !=0 or disks !=1:\n raise BadZipFile(\"zipfiles that span multiple disks are not supported\")\n \n \n fpin.seek(offset -sizeEndCentDir64Locator -sizeEndCentDir64,2)\n data=fpin.read(sizeEndCentDir64)\n if len(data)!=sizeEndCentDir64:\n return endrec\n sig,sz,create_version,read_version,disk_num,disk_dir,\\\n dircount,dircount2,dirsize,diroffset=\\\n struct.unpack(structEndArchive64,data)\n if sig !=stringEndArchive64:\n return endrec\n \n \n endrec[_ECD_SIGNATURE]=sig\n endrec[_ECD_DISK_NUMBER]=disk_num\n endrec[_ECD_DISK_START]=disk_dir\n endrec[_ECD_ENTRIES_THIS_DISK]=dircount\n endrec[_ECD_ENTRIES_TOTAL]=dircount2\n endrec[_ECD_SIZE]=dirsize\n endrec[_ECD_OFFSET]=diroffset\n return endrec\n \n \ndef _EndRecData(fpin):\n ''\n\n\n \n \n \n fpin.seek(0,2)\n filesize=fpin.tell()\n \n \n \n \n try :\n fpin.seek(-sizeEndCentDir,2)\n except IOError:\n return None\n data=fpin.read()\n if (len(data)==sizeEndCentDir and\n data[0:4]==stringEndArchive and\n data[-2:]==b\"\\000\\000\"):\n \n endrec=struct.unpack(structEndArchive,data)\n endrec=list(endrec)\n \n \n endrec.append(b\"\")\n endrec.append(filesize -sizeEndCentDir)\n \n \n return _EndRecData64(fpin,-sizeEndCentDir,endrec)\n \n \n \n \n \n \n maxCommentStart=max(filesize -(1 <<16)-sizeEndCentDir,0)\n fpin.seek(maxCommentStart,0)\n data=fpin.read()\n start=data.rfind(stringEndArchive)\n if start >=0:\n \n recData=data[start:start+sizeEndCentDir]\n if len(recData)!=sizeEndCentDir:\n \n return None\n endrec=list(struct.unpack(structEndArchive,recData))\n commentSize=endrec[_ECD_COMMENT_SIZE]\n comment=data[start+sizeEndCentDir:start+sizeEndCentDir+commentSize]\n endrec.append(comment)\n endrec.append(maxCommentStart+start)\n \n \n return _EndRecData64(fpin,maxCommentStart+start -filesize,\n endrec)\n \n \n return None\n \n \nclass ZipInfo(object):\n ''\n \n __slots__=(\n 'orig_filename',\n 'filename',\n 'date_time',\n 'compress_type',\n 'comment',\n 'extra',\n 'create_system',\n 'create_version',\n 'extract_version',\n 'reserved',\n 'flag_bits',\n 'volume',\n 'internal_attr',\n 'external_attr',\n 'header_offset',\n 'CRC',\n 'compress_size',\n 'file_size',\n '_raw_time',\n )\n \n def __init__(self,filename=\"NoName\",date_time=(1980,1,1,0,0,0)):\n self.orig_filename=filename\n \n \n \n null_byte=filename.find(chr(0))\n if null_byte >=0:\n filename=filename[0:null_byte]\n \n \n \n if os.sep !=\"/\"and os.sep in filename:\n filename=filename.replace(os.sep,\"/\")\n \n self.filename=filename\n self.date_time=date_time\n \n if date_time[0]<1980:\n raise ValueError('ZIP does not support timestamps before 1980')\n \n \n self.compress_type=ZIP_STORED\n self.comment=b\"\"\n self.extra=b\"\"\n if sys.platform =='win32':\n self.create_system=0\n else :\n \n self.create_system=3\n self.create_version=DEFAULT_VERSION\n self.extract_version=DEFAULT_VERSION\n self.reserved=0\n self.flag_bits=0\n self.volume=0\n self.internal_attr=0\n self.external_attr=0\n \n \n \n \n \n \n def FileHeader(self,zip64=None ):\n ''\n dt=self.date_time\n dosdate=(dt[0]-1980)<<9 |dt[1]<<5 |dt[2]\n dostime=dt[3]<<11 |dt[4]<<5 |(dt[5]//2)\n if self.flag_bits&0x08:\n \n CRC=compress_size=file_size=0\n else :\n CRC=self.CRC\n compress_size=self.compress_size\n file_size=self.file_size\n \n extra=self.extra\n \n min_version=0\n if zip64 is None :\n zip64=file_size >ZIP64_LIMIT or compress_size >ZIP64_LIMIT\n if zip64:\n fmt='ZIP64_LIMIT or compress_size >ZIP64_LIMIT:\n if not zip64:\n raise LargeZipFile(\"Filesize would require ZIP64 extensions\")\n \n \n file_size=0xffffffff\n compress_size=0xffffffff\n min_version=ZIP64_VERSION\n \n if self.compress_type ==ZIP_BZIP2:\n min_version=max(BZIP2_VERSION,min_version)\n elif self.compress_type ==ZIP_LZMA:\n min_version=max(LZMA_VERSION,min_version)\n \n self.extract_version=max(min_version,self.extract_version)\n self.create_version=max(min_version,self.create_version)\n filename,flag_bits=self._encodeFilenameFlags()\n header=struct.pack(structFileHeader,stringFileHeader,\n self.extract_version,self.reserved,flag_bits,\n self.compress_type,dostime,dosdate,CRC,\n compress_size,file_size,\n len(filename),len(extra))\n return header+filename+extra\n \n def _encodeFilenameFlags(self):\n try :\n return self.filename.encode('ascii'),self.flag_bits\n except UnicodeEncodeError:\n return self.filename.encode('utf-8'),self.flag_bits |0x800\n \n def _decodeExtra(self):\n \n extra=self.extra\n unpack=struct.unpack\n while extra:\n tp,ln=unpack('=24:\n counts=unpack('>1)&0x7FFFFFFF)^poly\n else :\n crc=((crc >>1)&0x7FFFFFFF)\n table[i]=crc\n return table\n crctable=_GenerateCRCTable()\n \n def _crc32(self,ch,crc):\n ''\n return ((crc >>8)&0xffffff)^self.crctable[(crc ^ch)&0xff]\n \n def __init__(self,pwd):\n self.key0=305419896\n self.key1=591751049\n self.key2=878082192\n for p in pwd:\n self._UpdateKeys(p)\n \n def _UpdateKeys(self,c):\n self.key0=self._crc32(c,self.key0)\n self.key1=(self.key1+(self.key0&255))&4294967295\n self.key1=(self.key1 *134775813+1)&4294967295\n self.key2=self._crc32((self.key1 >>24)&255,self.key2)\n \n def __call__(self,c):\n ''\n assert isinstance(c,int)\n k=self.key2 |2\n c=c ^(((k *(k ^1))>>8)&255)\n self._UpdateKeys(c)\n return c\n \n \nclass LZMACompressor:\n\n def __init__(self):\n self._comp=None\n \n def _init(self):\n props=lzma._encode_filter_properties({'id':lzma.FILTER_LZMA1})\n self._comp=lzma.LZMACompressor(lzma.FORMAT_RAW,filters=[\n lzma._decode_filter_properties(lzma.FILTER_LZMA1,props)\n ])\n return struct.pack('[^\\r\\n]+)|(?P\\n|\\r\\n?)')\n \n def __init__(self,fileobj,mode,zipinfo,decrypter=None ,\n close_fileobj=False ):\n self._fileobj=fileobj\n self._decrypter=decrypter\n self._close_fileobj=close_fileobj\n \n self._compress_type=zipinfo.compress_type\n self._compress_left=zipinfo.compress_size\n self._left=zipinfo.file_size\n \n self._decompressor=_get_decompressor(self._compress_type)\n \n self._eof=False\n self._readbuffer=b''\n self._offset=0\n \n self._universal='U'in mode\n self.newlines=None\n \n \n \n if self._decrypter is not None :\n self._compress_left -=12\n \n self.mode=mode\n self.name=zipinfo.filename\n \n if hasattr(zipinfo,'CRC'):\n self._expected_crc=zipinfo.CRC\n self._running_crc=crc32(b'')&0xffffffff\n else :\n self._expected_crc=None\n \n def readline(self,limit=-1):\n ''\n\n\n \n \n if not self._universal and limit <0:\n \n i=self._readbuffer.find(b'\\n',self._offset)+1\n if i >0:\n line=self._readbuffer[self._offset:i]\n self._offset=i\n return line\n \n if not self._universal:\n return io.BufferedIOBase.readline(self,limit)\n \n line=b''\n while limit <0 or len(line)=0:\n chunk=chunk[:limit -len(line)]\n \n self._offset +=len(chunk)\n line +=chunk\n \n return line\n \n def peek(self,n=1):\n ''\n if n >len(self._readbuffer)-self._offset:\n chunk=self.read(n)\n if len(chunk)>self._offset:\n self._readbuffer=chunk+self._readbuffer[self._offset:]\n self._offset=0\n else :\n self._offset -=len(chunk)\n \n \n return self._readbuffer[self._offset:self._offset+512]\n \n def readable(self):\n return True\n \n def read(self,n=-1):\n ''\n\n \n if n is None or n <0:\n buf=self._readbuffer[self._offset:]\n self._readbuffer=b''\n self._offset=0\n while not self._eof:\n buf +=self._read1(self.MAX_N)\n return buf\n \n end=n+self._offset\n if end 0 and not self._eof:\n data=self._read1(n)\n if n 0:\n while not self._eof:\n data=self._read1(n)\n if n len(data):\n data +=self._read2(n -len(data))\n else :\n data=self._read2(n)\n \n if self._compress_type ==ZIP_STORED:\n self._eof=self._compress_left <=0\n elif self._compress_type ==ZIP_DEFLATED:\n n=max(n,self.MIN_READ_SIZE)\n data=self._decompressor.decompress(data,n)\n self._eof=(self._decompressor.eof or\n self._compress_left <=0 and\n not self._decompressor.unconsumed_tail)\n if self._eof:\n data +=self._decompressor.flush()\n else :\n data=self._decompressor.decompress(data)\n self._eof=self._decompressor.eof or self._compress_left <=0\n \n data=data[:self._left]\n self._left -=len(data)\n if self._left <=0:\n self._eof=True\n self._update_crc(data)\n return data\n \n def _read2(self,n):\n if self._compress_left <=0:\n return b''\n \n n=max(n,self.MIN_READ_SIZE)\n n=min(n,self._compress_left)\n \n data=self._fileobj.read(n)\n self._compress_left -=len(data)\n \n if self._decrypter is not None :\n data=bytes(map(self._decrypter,data))\n return data\n \n def close(self):\n try :\n if self._close_fileobj:\n self._fileobj.close()\n finally :\n super().close()\n \n \nclass ZipFile:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n fp=None\n _windows_illegal_name_trans_table=None\n \n def __init__(self,file,mode=\"r\",compression=ZIP_STORED,allowZip64=False ):\n ''\n if mode not in (\"r\",\"w\",\"a\"):\n raise RuntimeError('ZipFile() requires mode \"r\", \"w\", or \"a\"')\n \n _check_compression(compression)\n \n self._allowZip64=allowZip64\n self._didModify=False\n self.debug=0\n self.NameToInfo={}\n self.filelist=[]\n self.compression=compression\n self.mode=key=mode.replace('b','')[0]\n self.pwd=None\n self._comment=b''\n \n \n if isinstance(file,str):\n \n self._filePassed=0\n self.filename=file\n modeDict={'r':'rb','w':'wb','a':'r+b'}\n try :\n self.fp=io.open(file,modeDict[mode])\n except IOError:\n if mode =='a':\n mode=key='w'\n self.fp=io.open(file,modeDict[mode])\n else :\n raise\n else :\n self._filePassed=1\n self.fp=file\n self.filename=getattr(file,'name',None )\n \n try :\n if key =='r':\n self._RealGetContents()\n elif key =='w':\n \n \n self._didModify=True\n elif key =='a':\n try :\n \n self._RealGetContents()\n \n self.fp.seek(self.start_dir,0)\n except BadZipFile:\n \n self.fp.seek(0,2)\n \n \n \n self._didModify=True\n else :\n raise RuntimeError('Mode must be \"r\", \"w\" or \"a\"')\n except :\n fp=self.fp\n self.fp=None\n if not self._filePassed:\n fp.close()\n raise\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,traceback):\n self.close()\n \n def _RealGetContents(self):\n ''\n fp=self.fp\n try :\n endrec=_EndRecData(fp)\n except IOError:\n raise BadZipFile(\"File is not a zip file\")\n if not endrec:\n raise BadZipFile(\"File is not a zip file\")\n if self.debug >1:\n print(endrec)\n size_cd=endrec[_ECD_SIZE]\n offset_cd=endrec[_ECD_OFFSET]\n self._comment=endrec[_ECD_COMMENT]\n \n \n concat=endrec[_ECD_LOCATION]-size_cd -offset_cd\n if endrec[_ECD_SIGNATURE]==stringEndArchive64:\n \n concat -=(sizeEndCentDir64+sizeEndCentDir64Locator)\n \n if self.debug >2:\n inferred=concat+offset_cd\n print(\"given, inferred, offset\",offset_cd,inferred,concat)\n \n self.start_dir=offset_cd+concat\n fp.seek(self.start_dir,0)\n data=fp.read(size_cd)\n fp=io.BytesIO(data)\n total=0\n while total 2:\n print(centdir)\n filename=fp.read(centdir[_CD_FILENAME_LENGTH])\n flags=centdir[5]\n if flags&0x800:\n \n filename=filename.decode('utf-8')\n else :\n \n filename=filename.decode('cp437')\n \n x=ZipInfo(filename)\n x.extra=fp.read(centdir[_CD_EXTRA_FIELD_LENGTH])\n x.comment=fp.read(centdir[_CD_COMMENT_LENGTH])\n x.header_offset=centdir[_CD_LOCAL_HEADER_OFFSET]\n (x.create_version,x.create_system,x.extract_version,x.reserved,\n x.flag_bits,x.compress_type,t,d,\n x.CRC,x.compress_size,x.file_size)=centdir[1:12]\n if x.extract_version >MAX_EXTRACT_VERSION:\n raise NotImplementedError(\"zip file version %.1f\"%\n (x.extract_version /10))\n x.volume,x.internal_attr,x.external_attr=centdir[15:18]\n \n x._raw_time=t\n x.date_time=((d >>9)+1980,(d >>5)&0xF,d&0x1F,\n t >>11,(t >>5)&0x3F,(t&0x1F)*2)\n \n x._decodeExtra()\n x.header_offset=x.header_offset+concat\n self.filelist.append(x)\n self.NameToInfo[x.filename]=x\n \n \n total=(total+sizeCentralDir+centdir[_CD_FILENAME_LENGTH]\n +centdir[_CD_EXTRA_FIELD_LENGTH]\n +centdir[_CD_COMMENT_LENGTH])\n \n if self.debug >2:\n print(\"total\",total)\n \n \n def namelist(self):\n ''\n return [data.filename for data in self.filelist]\n \n def infolist(self):\n ''\n \n return self.filelist\n \n def printdir(self,file=None ):\n ''\n print(\"%-46s %19s %12s\"%(\"File Name\",\"Modified \",\"Size\"),\n file=file)\n for zinfo in self.filelist:\n date=\"%d-%02d-%02d %02d:%02d:%02d\"%zinfo.date_time[:6]\n print(\"%-46s %s %12d\"%(zinfo.filename,date,zinfo.file_size),\n file=file)\n \n def testzip(self):\n ''\n chunk_size=2 **20\n for zinfo in self.filelist:\n try :\n \n \n with self.open(zinfo.filename,\"r\")as f:\n while f.read(chunk_size):\n pass\n except BadZipFile:\n return zinfo.filename\n \n def getinfo(self,name):\n ''\n info=self.NameToInfo.get(name)\n if info is None :\n raise KeyError(\n 'There is no item named %r in the archive'%name)\n \n return info\n \n def setpassword(self,pwd):\n ''\n if pwd and not isinstance(pwd,bytes):\n raise TypeError(\"pwd: expected bytes, got %s\"%type(pwd))\n if pwd:\n self.pwd=pwd\n else :\n self.pwd=None\n \n @property\n def comment(self):\n ''\n return self._comment\n \n @comment.setter\n def comment(self,comment):\n if not isinstance(comment,bytes):\n raise TypeError(\"comment: expected bytes, got %s\"%type(comment))\n \n if len(comment)>=ZIP_MAX_COMMENT:\n if self.debug:\n print('Archive comment is too long; truncating to %d bytes'\n %ZIP_MAX_COMMENT)\n comment=comment[:ZIP_MAX_COMMENT]\n self._comment=comment\n self._didModify=True\n \n def read(self,name,pwd=None ):\n ''\n with self.open(name,\"r\",pwd)as fp:\n return fp.read()\n \n def open(self,name,mode=\"r\",pwd=None ):\n ''\n if mode not in (\"r\",\"U\",\"rU\"):\n raise RuntimeError('open() requires mode \"r\", \"U\", or \"rU\"')\n if pwd and not isinstance(pwd,bytes):\n raise TypeError(\"pwd: expected bytes, got %s\"%type(pwd))\n if not self.fp:\n raise RuntimeError(\n \"Attempt to read ZIP archive that was already closed\")\n \n \n \n if self._filePassed:\n zef_file=self.fp\n else :\n zef_file=io.open(self.filename,'rb')\n \n try :\n \n if isinstance(name,ZipInfo):\n \n zinfo=name\n else :\n \n zinfo=self.getinfo(name)\n zef_file.seek(zinfo.header_offset,0)\n \n \n fheader=zef_file.read(sizeFileHeader)\n if len(fheader)!=sizeFileHeader:\n raise BadZipFile(\"Truncated file header\")\n fheader=struct.unpack(structFileHeader,fheader)\n if fheader[_FH_SIGNATURE]!=stringFileHeader:\n raise BadZipFile(\"Bad magic number for file header\")\n \n fname=zef_file.read(fheader[_FH_FILENAME_LENGTH])\n if fheader[_FH_EXTRA_FIELD_LENGTH]:\n zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])\n \n if zinfo.flag_bits&0x20:\n \n raise NotImplementedError(\"compressed patched data (flag bit 5)\")\n \n if zinfo.flag_bits&0x40:\n \n raise NotImplementedError(\"strong encryption (flag bit 6)\")\n \n if zinfo.flag_bits&0x800:\n \n fname_str=fname.decode(\"utf-8\")\n else :\n fname_str=fname.decode(\"cp437\")\n \n if fname_str !=zinfo.orig_filename:\n raise BadZipFile(\n 'File name in directory %r and header %r differ.'\n %(zinfo.orig_filename,fname))\n \n \n is_encrypted=zinfo.flag_bits&0x1\n zd=None\n if is_encrypted:\n if not pwd:\n pwd=self.pwd\n if not pwd:\n raise RuntimeError(\"File %s is encrypted, password \"\n \"required for extraction\"%name)\n \n zd=_ZipDecrypter(pwd)\n \n \n \n \n \n header=zef_file.read(12)\n h=list(map(zd,header[0:12]))\n if zinfo.flag_bits&0x8:\n \n check_byte=(zinfo._raw_time >>8)&0xff\n else :\n \n check_byte=(zinfo.CRC >>24)&0xff\n if h[11]!=check_byte:\n raise RuntimeError(\"Bad password for file\",name)\n \n return ZipExtFile(zef_file,mode,zinfo,zd,\n close_fileobj=not self._filePassed)\n except :\n if not self._filePassed:\n zef_file.close()\n raise\n \n def extract(self,member,path=None ,pwd=None ):\n ''\n\n\n\n \n if not isinstance(member,ZipInfo):\n member=self.getinfo(member)\n \n if path is None :\n path=os.getcwd()\n \n return self._extract_member(member,path,pwd)\n \n def extractall(self,path=None ,members=None ,pwd=None ):\n ''\n\n\n\n \n if members is None :\n members=self.namelist()\n \n for zipinfo in members:\n self.extract(zipinfo,path,pwd)\n \n @classmethod\n def _sanitize_windows_name(cls,arcname,pathsep):\n ''\n table=cls._windows_illegal_name_trans_table\n if not table:\n illegal=':<>|\"?*'\n table=str.maketrans(illegal,'_'*len(illegal))\n cls._windows_illegal_name_trans_table=table\n arcname=arcname.translate(table)\n \n arcname=(x.rstrip('.')for x in arcname.split(pathsep))\n \n arcname=pathsep.join(x for x in arcname if x)\n return arcname\n \n def _extract_member(self,member,targetpath,pwd):\n ''\n\n \n \n \n arcname=member.filename.replace('/',os.path.sep)\n \n if os.path.altsep:\n arcname=arcname.replace(os.path.altsep,os.path.sep)\n \n \n arcname=os.path.splitdrive(arcname)[1]\n invalid_path_parts=('',os.path.curdir,os.path.pardir)\n arcname=os.path.sep.join(x for x in arcname.split(os.path.sep)\n if x not in invalid_path_parts)\n if os.path.sep =='\\\\':\n \n arcname=self._sanitize_windows_name(arcname,os.path.sep)\n \n targetpath=os.path.join(targetpath,arcname)\n targetpath=os.path.normpath(targetpath)\n \n \n upperdirs=os.path.dirname(targetpath)\n if upperdirs and not os.path.exists(upperdirs):\n os.makedirs(upperdirs)\n \n if member.filename[-1]=='/':\n if not os.path.isdir(targetpath):\n os.mkdir(targetpath)\n return targetpath\n \n with self.open(member,pwd=pwd)as source,\\\n open(targetpath,\"wb\")as target:\n shutil.copyfileobj(source,target)\n \n return targetpath\n \n def _writecheck(self,zinfo):\n ''\n if zinfo.filename in self.NameToInfo:\n if self.debug:\n print(\"Duplicate name:\",zinfo.filename)\n if self.mode not in (\"w\",\"a\"):\n raise RuntimeError('write() requires mode \"w\" or \"a\"')\n if not self.fp:\n raise RuntimeError(\n \"Attempt to write ZIP archive that was already closed\")\n _check_compression(zinfo.compress_type)\n if zinfo.file_size >ZIP64_LIMIT:\n if not self._allowZip64:\n raise LargeZipFile(\"Filesize would require ZIP64 extensions\")\n if zinfo.header_offset >ZIP64_LIMIT:\n if not self._allowZip64:\n raise LargeZipFile(\n \"Zipfile size would require ZIP64 extensions\")\n \n def write(self,filename,arcname=None ,compress_type=None ):\n ''\n \n if not self.fp:\n raise RuntimeError(\n \"Attempt to write to ZIP archive that was already closed\")\n \n st=os.stat(filename)\n isdir=stat.S_ISDIR(st.st_mode)\n mtime=time.localtime(st.st_mtime)\n date_time=mtime[0:6]\n \n if arcname is None :\n arcname=filename\n arcname=os.path.normpath(os.path.splitdrive(arcname)[1])\n while arcname[0]in (os.sep,os.altsep):\n arcname=arcname[1:]\n if isdir:\n arcname +='/'\n zinfo=ZipInfo(arcname,date_time)\n zinfo.external_attr=(st[0]&0xFFFF)<<16\n if compress_type is None :\n zinfo.compress_type=self.compression\n else :\n zinfo.compress_type=compress_type\n \n zinfo.file_size=st.st_size\n zinfo.flag_bits=0x00\n zinfo.header_offset=self.fp.tell()\n if zinfo.compress_type ==ZIP_LZMA:\n \n zinfo.flag_bits |=0x02\n \n self._writecheck(zinfo)\n self._didModify=True\n \n if isdir:\n zinfo.file_size=0\n zinfo.compress_size=0\n zinfo.CRC=0\n self.filelist.append(zinfo)\n self.NameToInfo[zinfo.filename]=zinfo\n self.fp.write(zinfo.FileHeader(False ))\n return\n \n cmpr=_get_compressor(zinfo.compress_type)\n with open(filename,\"rb\")as fp:\n \n zinfo.CRC=CRC=0\n zinfo.compress_size=compress_size=0\n \n zip64=self._allowZip64 and\\\n zinfo.file_size *1.05 >ZIP64_LIMIT\n self.fp.write(zinfo.FileHeader(zip64))\n file_size=0\n while 1:\n buf=fp.read(1024 *8)\n if not buf:\n break\n file_size=file_size+len(buf)\n CRC=crc32(buf,CRC)&0xffffffff\n if cmpr:\n buf=cmpr.compress(buf)\n compress_size=compress_size+len(buf)\n self.fp.write(buf)\n if cmpr:\n buf=cmpr.flush()\n compress_size=compress_size+len(buf)\n self.fp.write(buf)\n zinfo.compress_size=compress_size\n else :\n zinfo.compress_size=file_size\n zinfo.CRC=CRC\n zinfo.file_size=file_size\n if not zip64 and self._allowZip64:\n if file_size >ZIP64_LIMIT:\n raise RuntimeError('File size has increased during compressing')\n if compress_size >ZIP64_LIMIT:\n raise RuntimeError('Compressed size larger than uncompressed size')\n \n \n position=self.fp.tell()\n self.fp.seek(zinfo.header_offset,0)\n self.fp.write(zinfo.FileHeader(zip64))\n self.fp.seek(position,0)\n self.filelist.append(zinfo)\n self.NameToInfo[zinfo.filename]=zinfo\n \n def writestr(self,zinfo_or_arcname,data,compress_type=None ):\n ''\n\n\n\n \n if isinstance(data,str):\n data=data.encode(\"utf-8\")\n if not isinstance(zinfo_or_arcname,ZipInfo):\n zinfo=ZipInfo(filename=zinfo_or_arcname,\n date_time=time.localtime(time.time())[:6])\n zinfo.compress_type=self.compression\n zinfo.external_attr=0o600 <<16\n else :\n zinfo=zinfo_or_arcname\n \n if not self.fp:\n raise RuntimeError(\n \"Attempt to write to ZIP archive that was already closed\")\n \n zinfo.file_size=len(data)\n zinfo.header_offset=self.fp.tell()\n if compress_type is not None :\n zinfo.compress_type=compress_type\n if zinfo.compress_type ==ZIP_LZMA:\n \n zinfo.flag_bits |=0x02\n \n self._writecheck(zinfo)\n self._didModify=True\n zinfo.CRC=crc32(data)&0xffffffff\n co=_get_compressor(zinfo.compress_type)\n if co:\n data=co.compress(data)+co.flush()\n zinfo.compress_size=len(data)\n else :\n zinfo.compress_size=zinfo.file_size\n zip64=zinfo.file_size >ZIP64_LIMIT or\\\n zinfo.compress_size >ZIP64_LIMIT\n if zip64 and not self._allowZip64:\n raise LargeZipFile(\"Filesize would require ZIP64 extensions\")\n self.fp.write(zinfo.FileHeader(zip64))\n self.fp.write(data)\n if zinfo.flag_bits&0x08:\n \n fmt='ZIP64_LIMIT\\\n or zinfo.compress_size >ZIP64_LIMIT:\n extra.append(zinfo.file_size)\n extra.append(zinfo.compress_size)\n file_size=0xffffffff\n compress_size=0xffffffff\n else :\n file_size=zinfo.file_size\n compress_size=zinfo.compress_size\n \n if zinfo.header_offset >ZIP64_LIMIT:\n extra.append(zinfo.header_offset)\n header_offset=0xffffffff\n else :\n header_offset=zinfo.header_offset\n \n extra_data=zinfo.extra\n min_version=0\n if extra:\n \n extra_data=struct.pack(\n '=ZIP_FILECOUNT_LIMIT or\n centDirOffset >ZIP64_LIMIT or\n centDirSize >ZIP64_LIMIT):\n \n zip64endrec=struct.pack(\n structEndArchive64,stringEndArchive64,\n 44,45,45,0,0,centDirCount,centDirCount,\n centDirSize,centDirOffset)\n self.fp.write(zip64endrec)\n \n zip64locrec=struct.pack(\n structEndArchive64Locator,\n stringEndArchive64Locator,0,pos2,1)\n self.fp.write(zip64locrec)\n centDirCount=min(centDirCount,0xFFFF)\n centDirSize=min(centDirSize,0xFFFFFFFF)\n centDirOffset=min(centDirOffset,0xFFFFFFFF)\n \n endrec=struct.pack(structEndArchive,stringEndArchive,\n 0,0,centDirCount,centDirCount,\n centDirSize,centDirOffset,len(self._comment))\n self.fp.write(endrec)\n self.fp.write(self._comment)\n self.fp.flush()\n finally :\n fp=self.fp\n self.fp=None\n if not self._filePassed:\n fp.close()\n \n \nclass PyZipFile(ZipFile):\n ''\n \n def __init__(self,file,mode=\"r\",compression=ZIP_STORED,\n allowZip64=False ,optimize=-1):\n ZipFile.__init__(self,file,mode=mode,compression=compression,\n allowZip64=allowZip64)\n self._optimize=optimize\n \n def writepy(self,pathname,basename=\"\"):\n ''\n\n\n\n\n\n\n\n\n\n \n dir,name=os.path.split(pathname)\n if os.path.isdir(pathname):\n initname=os.path.join(pathname,\"__init__.py\")\n if os.path.isfile(initname):\n \n if basename:\n basename=\"%s/%s\"%(basename,name)\n else :\n basename=name\n if self.debug:\n print(\"Adding package in\",pathname,\"as\",basename)\n fname,arcname=self._get_codename(initname[0:-3],basename)\n if self.debug:\n print(\"Adding\",arcname)\n self.write(fname,arcname)\n dirlist=os.listdir(pathname)\n dirlist.remove(\"__init__.py\")\n \n for filename in dirlist:\n path=os.path.join(pathname,filename)\n root,ext=os.path.splitext(filename)\n if os.path.isdir(path):\n if os.path.isfile(os.path.join(path,\"__init__.py\")):\n \n self.writepy(path,basename)\n elif ext ==\".py\":\n fname,arcname=self._get_codename(path[0:-3],\n basename)\n if self.debug:\n print(\"Adding\",arcname)\n self.write(fname,arcname)\n else :\n \n if self.debug:\n print(\"Adding files from directory\",pathname)\n for filename in os.listdir(pathname):\n path=os.path.join(pathname,filename)\n root,ext=os.path.splitext(filename)\n if ext ==\".py\":\n fname,arcname=self._get_codename(path[0:-3],\n basename)\n if self.debug:\n print(\"Adding\",arcname)\n self.write(fname,arcname)\n else :\n if pathname[-3:]!=\".py\":\n raise RuntimeError(\n 'Files added with writepy() must end with \".py\"')\n fname,arcname=self._get_codename(pathname[0:-3],basename)\n if self.debug:\n print(\"Adding file\",arcname)\n self.write(fname,arcname)\n \n def _get_codename(self,pathname,basename):\n ''\n\n\n\n\n \n def _compile(file,optimize=-1):\n import py_compile\n if self.debug:\n print(\"Compiling\",file)\n try :\n py_compile.compile(file,doraise=True ,optimize=optimize)\n except py_compile.PyCompileError as err:\n print(err.msg)\n return False\n return True\n \n file_py=pathname+\".py\"\n file_pyc=pathname+\".pyc\"\n file_pyo=pathname+\".pyo\"\n pycache_pyc=imp.cache_from_source(file_py,True )\n pycache_pyo=imp.cache_from_source(file_py,False )\n if self._optimize ==-1:\n \n if (os.path.isfile(file_pyo)and\n os.stat(file_pyo).st_mtime >=os.stat(file_py).st_mtime):\n \n arcname=fname=file_pyo\n elif (os.path.isfile(file_pyc)and\n os.stat(file_pyc).st_mtime >=os.stat(file_py).st_mtime):\n \n arcname=fname=file_pyc\n elif (os.path.isfile(pycache_pyc)and\n os.stat(pycache_pyc).st_mtime >=os.stat(file_py).st_mtime):\n \n \n fname=pycache_pyc\n arcname=file_pyc\n elif (os.path.isfile(pycache_pyo)and\n os.stat(pycache_pyo).st_mtime >=os.stat(file_py).st_mtime):\n \n \n fname=pycache_pyo\n arcname=file_pyo\n else :\n \n if _compile(file_py):\n fname=(pycache_pyc if __debug__ else pycache_pyo)\n arcname=(file_pyc if __debug__ else file_pyo)\n else :\n fname=arcname=file_py\n else :\n \n if self._optimize ==0:\n fname=pycache_pyc\n arcname=file_pyc\n else :\n fname=pycache_pyo\n arcname=file_pyo\n if not (os.path.isfile(fname)and\n os.stat(fname).st_mtime >=os.stat(file_py).st_mtime):\n if not _compile(file_py,optimize=self._optimize):\n fname=arcname=file_py\n archivename=os.path.split(arcname)[1]\n if basename:\n archivename=\"%s/%s\"%(basename,archivename)\n return (fname,archivename)\n \n \ndef main(args=None ):\n import textwrap\n USAGE=textwrap.dedent(\"\"\"\\\n Usage:\n zipfile.py -l zipfile.zip # Show listing of a zipfile\n zipfile.py -t zipfile.zip # Test if a zipfile is valid\n zipfile.py -e zipfile.zip target # Extract zipfile into target dir\n zipfile.py -c zipfile.zip src ... # Create zipfile from sources\n \"\"\")\n if args is None :\n args=sys.argv[1:]\n \n if not args or args[0]not in ('-l','-c','-e','-t'):\n print(USAGE)\n sys.exit(1)\n \n if args[0]=='-l':\n if len(args)!=2:\n print(USAGE)\n sys.exit(1)\n with ZipFile(args[1],'r')as zf:\n zf.printdir()\n \n elif args[0]=='-t':\n if len(args)!=2:\n print(USAGE)\n sys.exit(1)\n with ZipFile(args[1],'r')as zf:\n badfile=zf.testzip()\n if badfile:\n print(\"The following enclosed file is corrupted: {!r}\".format(badfile))\n print(\"Done testing\")\n \n elif args[0]=='-e':\n if len(args)!=3:\n print(USAGE)\n sys.exit(1)\n \n with ZipFile(args[1],'r')as zf:\n out=args[2]\n for path in zf.namelist():\n if path.startswith('./'):\n tgt=os.path.join(out,path[2:])\n else :\n tgt=os.path.join(out,path)\n \n tgtdir=os.path.dirname(tgt)\n if not os.path.exists(tgtdir):\n os.makedirs(tgtdir)\n with open(tgt,'wb')as fp:\n fp.write(zf.read(path))\n \n elif args[0]=='-c':\n if len(args)<3:\n print(USAGE)\n sys.exit(1)\n \n def addToZip(zf,path,zippath):\n if os.path.isfile(path):\n zf.write(path,zippath,ZIP_DEFLATED)\n elif os.path.isdir(path):\n for nm in os.listdir(path):\n addToZip(zf,\n os.path.join(path,nm),os.path.join(zippath,nm))\n \n \n with ZipFile(args[1],'w',allowZip64=True )as zf:\n for src in args[2:]:\n addToZip(zf,src,os.path.basename(src))\n \nif __name__ ==\"__main__\":\n main()\n",["binascii","imp","io","os","py_compile","re","shutil","stat","struct","sys","textwrap","time"]],zlib:[".py","\n\ndef compress(data):\n return data\n \ndef decompress(data):\n return data\n",[]],_abcoll:[".py",'\n\n\n"""Abstract Base Classes (ABCs) for collections, according to PEP 3119.\n\nDON\'T USE THIS MODULE DIRECTLY! The classes here should be imported\nvia collections; they are defined here only to alleviate certain\nbootstrapping issues. Unit tests are in test_collections.\n"""\n\n\n\n\nimport sys\n\n__all__=["Hashable","Iterable","Iterator",\n"Sized","Container","Callable",\n"Set","MutableSet",\n"Mapping","MutableMapping",\n"MappingView","KeysView","ItemsView","ValuesView",\n"Sequence","MutableSequence",\n"ByteString",\n]\n\n"""\n### collection related types which are not exposed through builtin ###\n## iterators ##\n#fixme brython\n#bytes_iterator = type(iter(b\'\'))\nbytes_iterator = type(iter(\'\'))\n#fixme brython\n#bytearray_iterator = type(iter(bytearray()))\n#callable_iterator = ???\ndict_keyiterator = type(iter({}.keys()))\ndict_valueiterator = type(iter({}.values()))\ndict_itemiterator = type(iter({}.items()))\nlist_iterator = type(iter([]))\nlist_reverseiterator = type(iter(reversed([])))\nrange_iterator = type(iter(range(0)))\nset_iterator = type(iter(set()))\nstr_iterator = type(iter(""))\ntuple_iterator = type(iter(()))\nzip_iterator = type(iter(zip()))\n## views ##\ndict_keys = type({}.keys())\ndict_values = type({}.values())\ndict_items = type({}.items())\n## misc ##\ndict_proxy = type(type.__dict__)\n"""\n\ndef abstractmethod(self):\n return self\n \n \n \n \n \nclass Iterable:\n\n @abstractmethod\n def __iter__(self):\n while False :\n yield None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Iterable:\n if any("__iter__"in B.__dict__ for B in C.__mro__):\n return True\n return NotImplemented\n \n \n \nclass Sized:\n\n @abstractmethod\n def __len__(self):\n return 0\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Sized:\n if any("__len__"in B.__dict__ for B in C.__mro__):\n return True\n return NotImplemented\n \n \n \nclass Container:\n\n @abstractmethod\n def __contains__(self,x):\n return False\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Container:\n if any("__contains__"in B.__dict__ for B in C.__mro__):\n return True\n return NotImplemented\n \n \n \n \nclass Mapping(Sized,Iterable,Container):\n\n @abstractmethod\n def __getitem__(self,key):\n raise KeyError\n \n def get(self,key,default=None ):\n try :\n return self[key]\n except KeyError:\n return default\n \n def __contains__(self,key):\n try :\n self[key]\n except KeyError:\n return False\n else :\n return True\n \n def keys(self):\n return KeysView(self)\n \n def items(self):\n return ItemsView(self)\n \n def values(self):\n return ValuesView(self)\n \n def __eq__(self,other):\n if not isinstance(other,Mapping):\n return NotImplemented\n return dict(self.items())==dict(other.items())\n \n def __ne__(self,other):\n return not (self ==other)\n \n \nclass MutableMapping(Mapping):\n\n @abstractmethod\n def __setitem__(self,key,value):\n raise KeyError\n \n @abstractmethod\n def __delitem__(self,key):\n raise KeyError\n \n __marker=object()\n \n def pop(self,key,default=__marker):\n try :\n value=self[key]\n except KeyError:\n if default is self.__marker:\n raise\n return default\n else :\n del self[key]\n return value\n \n def popitem(self):\n try :\n key=next(iter(self))\n except StopIteration:\n raise KeyError\n value=self[key]\n del self[key]\n return key,value\n \n def clear(self):\n try :\n while True :\n self.popitem()\n except KeyError:\n pass\n \n def update(*args,**kwds):\n if len(args)>2:\n raise TypeError("update() takes at most 2 positional "\n "arguments ({} given)".format(len(args)))\n elif not args:\n raise TypeError("update() takes at least 1 argument (0 given)")\n self=args[0]\n other=args[1]if len(args)>=2 else ()\n \n if isinstance(other,Mapping):\n for key in other:\n self[key]=other[key]\n elif hasattr(other,"keys"):\n for key in other.keys():\n self[key]=other[key]\n else :\n for key,value in other:\n self[key]=value\n for key,value in kwds.items():\n self[key]=value\n \n def setdefault(self,key,default=None ):\n try :\n return self[key]\n except KeyError:\n self[key]=default\n return default\n \n \n',["sys"]],_codecs:[".py","\ndef ascii_decode(*args,**kw):\n pass\n \ndef ascii_encode(*args,**kw):\n pass\n \ndef charbuffer_encode(*args,**kw):\n pass\n \ndef charmap_build(*args,**kw):\n pass\n \ndef charmap_decode(*args,**kw):\n pass\n \ndef charmap_encode(*args,**kw):\n pass\n \ndef decode(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef encode(*args,**kw):\n ''\n\n\n\n\n\n \n obj=args[0]\n if len(args)==2:\n encoding=args[1]\n else :\n encoding='utf-8'\n if isinstance(obj,str):\n return obj.encode(encoding)\n \ndef escape_decode(*args,**kw):\n pass\n \ndef escape_encode(*args,**kw):\n pass\n \ndef latin_1_decode(*args,**kw):\n pass\n \ndef latin_1_encode(*args,**kw):\n pass\n \ndef lookup(encoding):\n ''\n\n \n \n if encoding in ('utf-8','utf_8'):\n from browser import console\n console.log('encoding',encoding)\n import encodings.utf_8\n return encodings.utf_8.getregentry()\n \n LookupError(encoding)\n \ndef lookup_error(*args,**kw):\n ''\n\n \n pass\n \ndef mbcs_decode(*args,**kw):\n pass\n \ndef mbcs_encode(*args,**kw):\n pass\n \ndef raw_unicode_escape_decode(*args,**kw):\n pass\n \ndef raw_unicode_escape_encode(*args,**kw):\n pass\n \ndef readbuffer_encode(*args,**kw):\n pass\n \ndef register(*args,**kw):\n ''\n\n\n\n \n pass\n \ndef register_error(*args,**kw):\n ''\n\n\n\n\n \n pass\n \ndef unicode_escape_decode(*args,**kw):\n pass\n \ndef unicode_escape_encode(*args,**kw):\n pass\n \ndef unicode_internal_decode(*args,**kw):\n pass\n \ndef unicode_internal_encode(*args,**kw):\n pass\n \ndef utf_16_be_decode(*args,**kw):\n pass\n \ndef utf_16_be_encode(*args,**kw):\n pass\n \ndef utf_16_decode(*args,**kw):\n pass\n \ndef utf_16_encode(*args,**kw):\n pass\n \ndef utf_16_ex_decode(*args,**kw):\n pass\n \ndef utf_16_le_decode(*args,**kw):\n pass\n \ndef utf_16_le_encode(*args,**kw):\n pass\n \ndef utf_32_be_decode(*args,**kw):\n pass\n \ndef utf_32_be_encode(*args,**kw):\n pass\n \ndef utf_32_decode(*args,**kw):\n pass\n \ndef utf_32_encode(*args,**kw):\n pass\n \ndef utf_32_ex_decode(*args,**kw):\n pass\n \ndef utf_32_le_decode(*args,**kw):\n pass\n \ndef utf_32_le_encode(*args,**kw):\n pass\n \ndef utf_7_decode(*args,**kw):\n pass\n \ndef utf_7_encode(*args,**kw):\n pass\n \ndef utf_8_decode(*args,**kw):\n pass\n \ndef utf_8_encode(*args,**kw):\n input=args[0]\n if len(args)==2:\n errors=args[1]\n else :\n errors=kw.get('errors','strict')\n \n \n \n return (bytes([_f for _f in input],'utf-8'),len(input))\n",["browser","encodings.utf_8"]],_collections:[".py","\n\n\n\n\n\n\n\n\n\nimport operator\n\n\n\ndef _thread_ident():\n return -1\n \n \nn=30\nLFTLNK=n\nRGTLNK=n+1\nBLOCKSIZ=n+2\n\n\n\n\n\n\n\n\nclass deque:\n\n def __new__(cls,iterable=(),*args,**kw):\n \n \n self=object.__new__(cls,*args,**kw)\n self.clear()\n return self\n \n def __init__(self,iterable=(),maxlen=None ):\n object.__init__(self)\n self.clear()\n if maxlen is not None :\n if maxlen <0:\n raise ValueError(\"maxlen must be non-negative\")\n self._maxlen=maxlen\n add=self.append\n for elem in iterable:\n add(elem)\n \n @property\n def maxlen(self):\n return self._maxlen\n \n def clear(self):\n self.right=self.left=[None ]*BLOCKSIZ\n self.rightndx=n //2\n self.leftndx=n //2+1\n self.length=0\n self.state=0\n \n def append(self,x):\n self.state +=1\n self.rightndx +=1\n if self.rightndx ==n:\n newblock=[None ]*BLOCKSIZ\n self.right[RGTLNK]=newblock\n newblock[LFTLNK]=self.right\n self.right=newblock\n self.rightndx=0\n self.length +=1\n self.right[self.rightndx]=x\n if self.maxlen is not None and self.length >self.maxlen:\n self.popleft()\n \n def appendleft(self,x):\n self.state +=1\n self.leftndx -=1\n if self.leftndx ==-1:\n newblock=[None ]*BLOCKSIZ\n self.left[LFTLNK]=newblock\n newblock[RGTLNK]=self.left\n self.left=newblock\n self.leftndx=n -1\n self.length +=1\n self.left[self.leftndx]=x\n if self.maxlen is not None and self.length >self.maxlen:\n self.pop()\n \n def extend(self,iterable):\n if iterable is self:\n iterable=list(iterable)\n for elem in iterable:\n self.append(elem)\n \n def extendleft(self,iterable):\n if iterable is self:\n iterable=list(iterable)\n for elem in iterable:\n self.appendleft(elem)\n \n def pop(self):\n if self.left is self.right and self.leftndx >self.rightndx:\n \n raise IndexError(\"pop from an empty deque\")\n x=self.right[self.rightndx]\n self.right[self.rightndx]=None\n self.length -=1\n self.rightndx -=1\n self.state +=1\n if self.rightndx ==-1:\n prevblock=self.right[LFTLNK]\n if prevblock is None :\n \n self.rightndx=n //2\n self.leftndx=n //2+1\n else :\n prevblock[RGTLNK]=None\n self.right[LFTLNK]=None\n self.right=prevblock\n self.rightndx=n -1\n return x\n \n def popleft(self):\n if self.left is self.right and self.leftndx >self.rightndx:\n \n raise IndexError(\"pop from an empty deque\")\n x=self.left[self.leftndx]\n self.left[self.leftndx]=None\n self.length -=1\n self.leftndx +=1\n self.state +=1\n if self.leftndx ==n:\n prevblock=self.left[RGTLNK]\n if prevblock is None :\n \n self.rightndx=n //2\n self.leftndx=n //2+1\n else :\n prevblock[LFTLNK]=None\n self.left[RGTLNK]=None\n self.left=prevblock\n self.leftndx=0\n return x\n \n def count(self,value):\n c=0\n for item in self:\n if item ==value:\n c +=1\n return c\n \n def remove(self,value):\n \n for i in range(len(self)):\n if self[i]==value:\n del self[i]\n return\n raise ValueError(\"deque.remove(x): x not in deque\")\n \n def rotate(self,n=1):\n length=len(self)\n if length ==0:\n return\n halflen=(length+1)>>1\n if n >halflen or n <-halflen:\n n %=length\n if n >halflen:\n n -=length\n elif n <-halflen:\n n +=length\n while n >0:\n self.appendleft(self.pop())\n n -=1\n while n <0:\n self.append(self.popleft())\n n +=1\n \n def reverse(self):\n ''\n leftblock=self.left\n rightblock=self.right\n leftindex=self.leftndx\n rightindex=self.rightndx\n for i in range(self.length //2):\n \n assert leftblock !=rightblock or leftindex =0:\n block=self.left\n while block:\n l,r=0,n\n if block is self.left:\n l=self.leftndx\n if block is self.right:\n r=self.rightndx+1\n span=r -l\n if index =negative_span:\n return block,r+index\n index -=negative_span\n block=block[LFTLNK]\n raise IndexError(\"deque index out of range\")\n \n def __getitem__(self,index):\n block,index=self.__getref(index)\n return block[index]\n \n def __setitem__(self,index,value):\n block,index=self.__getref(index)\n block[index]=value\n \n def __delitem__(self,index):\n length=len(self)\n if index >=0:\n if index >=length:\n raise IndexError(\"deque index out of range\")\n self.rotate(-index)\n self.popleft()\n self.rotate(index)\n else :\n \n index=index ^(2 **31)\n if index >=length:\n raise IndexError(\"deque index out of range\")\n self.rotate(index)\n self.pop()\n self.rotate(-index)\n \n def __reduce_ex__(self,proto):\n return type(self),(list(self),self.maxlen)\n \n def __hash__(self):\n \n raise TypeError(\"deque objects are unhashable\")\n \n def __copy__(self):\n return self.__class__(self,self.maxlen)\n \n \n def __eq__(self,other):\n if isinstance(other,deque):\n return list(self)==list(other)\n else :\n return NotImplemented\n \n def __ne__(self,other):\n if isinstance(other,deque):\n return list(self)!=list(other)\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,deque):\n return list(self)list(other)\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,deque):\n return list(self)>=list(other)\n else :\n return NotImplemented\n \n def __iadd__(self,other):\n self.extend(other)\n return self\n \n \nclass deque_iterator(object):\n\n def __init__(self,deq,itergen):\n self.counter=len(deq)\n def giveup():\n self.counter=0\n \n raise RuntimeError(\"deque mutated during iteration\")\n self._gen=itergen(deq.state,giveup)\n \n def __next__(self):\n res=self._gen.__next__()\n self.counter -=1\n return res\n \n def __iter__(self):\n return self\n \nclass defaultdict(dict):\n\n def __init__(self,*args,**kwds):\n if len(args)>0:\n default_factory=args[0]\n args=args[1:]\n if not callable(default_factory)and default_factory is not None :\n raise TypeError(\"first argument must be callable\")\n else :\n default_factory=None\n dict.__init__(self,args,kwds)\n self.default_factory=default_factory\n self.update(args,kwds)\n super(defaultdict,self).__init__(*args,**kwds)\n \n def __missing__(self,key):\n \n if self.default_factory is None :\n raise KeyError(key)\n self[key]=value=self.default_factory()\n return value\n \n def __repr__(self,recurse=set()):\n if id(self)in recurse:\n return \"defaultdict(...)\"\n try :\n recurse.add(id(self))\n return \"defaultdict(%s, %s)\"%(repr(self.default_factory),super(defaultdict,self).__repr__())\n finally :\n recurse.remove(id(self))\n \n def copy(self):\n return type(self)(self.default_factory,self)\n \n def __copy__(self):\n return self.copy()\n \n def __reduce__(self):\n \n \n \n \n \n \n \n \n \n \n \n return (type(self),(self.default_factory,),None ,None ,self.items())\n \nfrom operator import itemgetter as _itemgetter\nfrom keyword import iskeyword as _iskeyword\nimport sys as _sys\n\ndef namedtuple(typename,field_names,verbose=False ,rename=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n if isinstance(field_names,str):\n field_names=field_names.replace(',',' ').split()\n field_names=tuple(map(str,field_names))\n if rename:\n names=list(field_names)\n seen=set()\n for i,name in enumerate(names):\n if (not min(c.isalnum()or c =='_'for c in name)or _iskeyword(name)\n or not name or name[0].isdigit()or name.startswith('_')\n or name in seen):\n names[i]='_%d'%i\n seen.add(name)\n field_names=tuple(names)\n for name in (typename,)+field_names:\n if not min(c.isalnum()or c =='_'for c in name):\n raise ValueError('Type names and field names can only contain alphanumeric characters and underscores: %r'%name)\n if _iskeyword(name):\n raise ValueError('Type names and field names cannot be a keyword: %r'%name)\n if name[0].isdigit():\n raise ValueError('Type names and field names cannot start with a number: %r'%name)\n seen_names=set()\n for name in field_names:\n if name.startswith('_')and not rename:\n raise ValueError('Field names cannot start with an underscore: %r'%name)\n if name in seen_names:\n raise ValueError('Encountered duplicate field name: %r'%name)\n seen_names.add(name)\n \n \n numfields=len(field_names)\n argtxt=repr(field_names).replace(\"'\",\"\")[1:-1]\n reprtxt=', '.join('%s=%%r'%name for name in field_names)\n \n template='''class %(typename)s(tuple):\n '%(typename)s(%(argtxt)s)' \\n\n __slots__ = () \\n\n _fields = %(field_names)r \\n\n def __new__(_cls, %(argtxt)s):\n return tuple.__new__(_cls, (%(argtxt)s)) \\n\n @classmethod\n def _make(cls, iterable, new=tuple.__new__, len=len):\n 'Make a new %(typename)s object from a sequence or iterable'\n result = new(cls, iterable)\n if len(result) != %(numfields)d:\n raise TypeError('Expected %(numfields)d arguments, got %%d' %% len(result))\n return result \\n\n def __repr__(self):\n return '%(typename)s(%(reprtxt)s)' %% self \\n\n def _asdict(self):\n 'Return a new dict which maps field names to their values'\n return dict(zip(self._fields, self)) \\n\n def _replace(_self, **kwds):\n 'Return a new %(typename)s object replacing specified fields with new values'\n result = _self._make(map(kwds.pop, %(field_names)r, _self))\n if kwds:\n raise ValueError('Got unexpected field names: %%r' %% kwds.keys())\n return result \\n\n def __getnewargs__(self):\n return tuple(self) \\n\\n'''%locals()\n for i,name in enumerate(field_names):\n template +=' %s = _property(_itemgetter(%d))\\n'%(name,i)\n \n if verbose:\n print(template)\n \n \n namespace=dict(_itemgetter=_itemgetter,__name__='namedtuple_%s'%typename,\n _property=property,_tuple=tuple)\n try :\n exec(template,namespace)\n except SyntaxError as e:\n raise SyntaxError(e.message+':\\n'+template)\n result=namespace[typename]\n \n \n \n \n \n try :\n result.__module__=_sys._getframe(1).f_globals.get('__name__','__main__')\n except (AttributeError,ValueError):\n pass\n \n return result\n \nif __name__ =='__main__':\n Point=namedtuple('Point',['x','y'])\n p=Point(11,y=22)\n print(p[0]+p[1])\n x,y=p\n print(x,y)\n print(p.x+p.y)\n print(p)\n",["keyword","operator","sys"]],_collections_abc:[".py","\n\n\n\"\"\"Abstract Base Classes (ABCs) for collections, according to PEP 3119.\n\nUnit tests are in test_collections.\n\"\"\"\n\nfrom abc import ABCMeta,abstractmethod\nimport sys\n\n__all__=[\"Awaitable\",\"Coroutine\",\n\"AsyncIterable\",\"AsyncIterator\",\"AsyncGenerator\",\n\"Hashable\",\"Iterable\",\"Iterator\",\"Generator\",\"Reversible\",\n\"Sized\",\"Container\",\"Callable\",\"Collection\",\n\"Set\",\"MutableSet\",\n\"Mapping\",\"MutableMapping\",\n\"MappingView\",\"KeysView\",\"ItemsView\",\"ValuesView\",\n\"Sequence\",\"MutableSequence\",\n\"ByteString\",\n]\n\n\n\n\n\n__name__=\"collections.abc\"\n\n\n\n\n\n\n\n\nbytes_iterator=type(iter(b''))\nbytearray_iterator=type(iter(bytearray()))\n\ndict_keyiterator=type(iter({}.keys()))\ndict_valueiterator=type(iter({}.values()))\ndict_itemiterator=type(iter({}.items()))\nlist_iterator=type(iter([]))\nlist_reverseiterator=type(iter(reversed([])))\nrange_iterator=type(iter(range(0)))\nlongrange_iterator=type(iter(range(1 <<1000)))\nset_iterator=type(iter(set()))\nstr_iterator=type(iter(\"\"))\ntuple_iterator=type(iter(()))\nzip_iterator=type(iter(zip()))\n\ndict_keys=type({}.keys())\ndict_values=type({}.values())\ndict_items=type({}.items())\n\nmappingproxy=type(type.__dict__)\ngenerator=type((lambda :(yield ))())\n\nasync def _coro():pass\n_coro=_coro()\ncoroutine=type(_coro)\n_coro.close()\ndel _coro\n\nasync def _ag():yield\n_ag=_ag()\nasync_generator=type(_ag)\ndel _ag\n\n\n\n\ndef _check_methods(C,*methods):\n mro=C.__mro__\n for method in methods:\n for B in mro:\n if method in B.__dict__:\n if B.__dict__[method]is None :\n return NotImplemented\n break\n else :\n return NotImplemented\n return True\n \nclass Hashable(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __hash__(self):\n return 0\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Hashable:\n return _check_methods(C,\"__hash__\")\n return NotImplemented\n \n \nclass Awaitable(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __await__(self):\n yield\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Awaitable:\n return _check_methods(C,\"__await__\")\n return NotImplemented\n \n \nclass Coroutine(Awaitable):\n\n __slots__=()\n \n @abstractmethod\n def send(self,value):\n ''\n\n \n raise StopIteration\n \n @abstractmethod\n def throw(self,typ,val=None ,tb=None ):\n ''\n\n \n if val is None :\n if tb is None :\n raise typ\n val=typ()\n if tb is not None :\n val=val.with_traceback(tb)\n raise val\n \n def close(self):\n ''\n \n try :\n self.throw(GeneratorExit)\n except (GeneratorExit,StopIteration):\n pass\n else :\n raise RuntimeError(\"coroutine ignored GeneratorExit\")\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Coroutine:\n return _check_methods(C,'__await__','send','throw','close')\n return NotImplemented\n \n \nCoroutine.register(coroutine)\n\n\nclass AsyncIterable(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __aiter__(self):\n return AsyncIterator()\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AsyncIterable:\n return _check_methods(C,\"__aiter__\")\n return NotImplemented\n \n \nclass AsyncIterator(AsyncIterable):\n\n __slots__=()\n \n @abstractmethod\n async def __anext__(self):\n ''\n raise StopAsyncIteration\n \n def __aiter__(self):\n return self\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AsyncIterator:\n return _check_methods(C,\"__anext__\",\"__aiter__\")\n return NotImplemented\n \n \nclass AsyncGenerator(AsyncIterator):\n\n __slots__=()\n \n async def __anext__(self):\n ''\n\n \n return await self.asend(None )\n \n @abstractmethod\n async def asend(self,value):\n ''\n\n \n raise StopAsyncIteration\n \n @abstractmethod\n async def athrow(self,typ,val=None ,tb=None ):\n ''\n\n \n if val is None :\n if tb is None :\n raise typ\n val=typ()\n if tb is not None :\n val=val.with_traceback(tb)\n raise val\n \n async def aclose(self):\n ''\n \n try :\n await self.athrow(GeneratorExit)\n except (GeneratorExit,StopAsyncIteration):\n pass\n else :\n raise RuntimeError(\"asynchronous generator ignored GeneratorExit\")\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AsyncGenerator:\n return _check_methods(C,'__aiter__','__anext__',\n 'asend','athrow','aclose')\n return NotImplemented\n \n \nAsyncGenerator.register(async_generator)\n\n\nclass Iterable(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __iter__(self):\n while False :\n yield None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Iterable:\n return _check_methods(C,\"__iter__\")\n return NotImplemented\n \n \nclass Iterator(Iterable):\n\n __slots__=()\n \n @abstractmethod\n def __next__(self):\n ''\n raise StopIteration\n \n def __iter__(self):\n return self\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Iterator:\n return _check_methods(C,'__iter__','__next__')\n return NotImplemented\n \nIterator.register(bytes_iterator)\nIterator.register(bytearray_iterator)\n\nIterator.register(dict_keyiterator)\nIterator.register(dict_valueiterator)\nIterator.register(dict_itemiterator)\nIterator.register(list_iterator)\nIterator.register(list_reverseiterator)\nIterator.register(range_iterator)\nIterator.register(longrange_iterator)\nIterator.register(set_iterator)\nIterator.register(str_iterator)\nIterator.register(tuple_iterator)\nIterator.register(zip_iterator)\n\n\nclass Reversible(Iterable):\n\n __slots__=()\n \n @abstractmethod\n def __reversed__(self):\n while False :\n yield None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Reversible:\n return _check_methods(C,\"__reversed__\",\"__iter__\")\n return NotImplemented\n \n \nclass Generator(Iterator):\n\n __slots__=()\n \n def __next__(self):\n ''\n\n \n return self.send(None )\n \n @abstractmethod\n def send(self,value):\n ''\n\n \n raise StopIteration\n \n @abstractmethod\n def throw(self,typ,val=None ,tb=None ):\n ''\n\n \n if val is None :\n if tb is None :\n raise typ\n val=typ()\n if tb is not None :\n val=val.with_traceback(tb)\n raise val\n \n def close(self):\n ''\n \n try :\n self.throw(GeneratorExit)\n except (GeneratorExit,StopIteration):\n pass\n else :\n raise RuntimeError(\"generator ignored GeneratorExit\")\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Generator:\n return _check_methods(C,'__iter__','__next__',\n 'send','throw','close')\n return NotImplemented\n \nGenerator.register(generator)\n\n\nclass Sized(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __len__(self):\n return 0\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Sized:\n return _check_methods(C,\"__len__\")\n return NotImplemented\n \n \nclass Container(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __contains__(self,x):\n return False\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Container:\n return _check_methods(C,\"__contains__\")\n return NotImplemented\n \nclass Collection(Sized,Iterable,Container):\n\n __slots__=()\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Collection:\n return _check_methods(C,\"__len__\",\"__iter__\",\"__contains__\")\n return NotImplemented\n \nclass Callable(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __call__(self,*args,**kwds):\n return False\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Callable:\n return _check_methods(C,\"__call__\")\n return NotImplemented\n \n \n \n \n \nclass Set(Collection):\n\n ''\n\n\n\n\n\n\n\n \n \n __slots__=()\n \n def __le__(self,other):\n if not isinstance(other,Set):\n return NotImplemented\n if len(self)>len(other):\n return False\n for elem in self:\n if elem not in other:\n return False\n return True\n \n def __lt__(self,other):\n if not isinstance(other,Set):\n return NotImplemented\n return len(self)len(other)and self.__ge__(other)\n \n def __ge__(self,other):\n if not isinstance(other,Set):\n return NotImplemented\n if len(self)MAX:\n h -=MASK+1\n if h ==-1:\n h=590923713\n return h\n \nSet.register(frozenset)\n\n\nclass MutableSet(Set):\n ''\n\n\n\n\n\n\n\n\n \n \n __slots__=()\n \n @abstractmethod\n def add(self,value):\n ''\n raise NotImplementedError\n \n @abstractmethod\n def discard(self,value):\n ''\n raise NotImplementedError\n \n def remove(self,value):\n ''\n if value not in self:\n raise KeyError(value)\n self.discard(value)\n \n def pop(self):\n ''\n it=iter(self)\n try :\n value=next(it)\n except StopIteration:\n raise KeyError from None\n self.discard(value)\n return value\n \n def clear(self):\n ''\n try :\n while True :\n self.pop()\n except KeyError:\n pass\n \n def __ior__(self,it):\n for value in it:\n self.add(value)\n return self\n \n def __iand__(self,it):\n for value in (self -it):\n self.discard(value)\n return self\n \n def __ixor__(self,it):\n if it is self:\n self.clear()\n else :\n if not isinstance(it,Set):\n it=self._from_iterable(it)\n for value in it:\n if value in self:\n self.discard(value)\n else :\n self.add(value)\n return self\n \n def __isub__(self,it):\n if it is self:\n self.clear()\n else :\n for value in it:\n self.discard(value)\n return self\n \nMutableSet.register(set)\n\n\n\n\n\nclass Mapping(Collection):\n\n __slots__=()\n \n \"\"\"A Mapping is a generic container for associating key/value\n pairs.\n\n This class provides concrete generic implementations of all\n methods except for __getitem__, __iter__, and __len__.\n\n \"\"\"\n \n @abstractmethod\n def __getitem__(self,key):\n raise KeyError\n \n def get(self,key,default=None ):\n ''\n try :\n return self[key]\n except KeyError:\n return default\n \n def __contains__(self,key):\n try :\n self[key]\n except KeyError:\n return False\n else :\n return True\n \n def keys(self):\n ''\n return KeysView(self)\n \n def items(self):\n ''\n return ItemsView(self)\n \n def values(self):\n ''\n return ValuesView(self)\n \n def __eq__(self,other):\n if not isinstance(other,Mapping):\n return NotImplemented\n return dict(self.items())==dict(other.items())\n \n __reversed__=None\n \nMapping.register(mappingproxy)\n\n\nclass MappingView(Sized):\n\n __slots__='_mapping',\n \n def __init__(self,mapping):\n self._mapping=mapping\n \n def __len__(self):\n return len(self._mapping)\n \n def __repr__(self):\n return '{0.__class__.__name__}({0._mapping!r})'.format(self)\n \n \nclass KeysView(MappingView,Set):\n\n __slots__=()\n \n @classmethod\n def _from_iterable(self,it):\n return set(it)\n \n def __contains__(self,key):\n return key in self._mapping\n \n def __iter__(self):\n yield from self._mapping\n \nKeysView.register(dict_keys)\n\n\nclass ItemsView(MappingView,Set):\n\n __slots__=()\n \n @classmethod\n def _from_iterable(self,it):\n return set(it)\n \n def __contains__(self,item):\n key,value=item\n try :\n v=self._mapping[key]\n except KeyError:\n return False\n else :\n return v is value or v ==value\n \n def __iter__(self):\n for key in self._mapping:\n yield (key,self._mapping[key])\n \nItemsView.register(dict_items)\n\n\nclass ValuesView(MappingView,Collection):\n\n __slots__=()\n \n def __contains__(self,value):\n for key in self._mapping:\n v=self._mapping[key]\n if v is value or v ==value:\n return True\n return False\n \n def __iter__(self):\n for key in self._mapping:\n yield self._mapping[key]\n \nValuesView.register(dict_values)\n\n\nclass MutableMapping(Mapping):\n\n __slots__=()\n \n \"\"\"A MutableMapping is a generic container for associating\n key/value pairs.\n\n This class provides concrete generic implementations of all\n methods except for __getitem__, __setitem__, __delitem__,\n __iter__, and __len__.\n\n \"\"\"\n \n @abstractmethod\n def __setitem__(self,key,value):\n raise KeyError\n \n @abstractmethod\n def __delitem__(self,key):\n raise KeyError\n \n __marker=object()\n \n def pop(self,key,default=__marker):\n ''\n\n \n try :\n value=self[key]\n except KeyError:\n if default is self.__marker:\n raise\n return default\n else :\n del self[key]\n return value\n \n def popitem(self):\n ''\n\n \n try :\n key=next(iter(self))\n except StopIteration:\n raise KeyError from None\n value=self[key]\n del self[key]\n return key,value\n \n def clear(self):\n ''\n try :\n while True :\n self.popitem()\n except KeyError:\n pass\n \n def update(*args,**kwds):\n ''\n\n\n\n \n if not args:\n raise TypeError(\"descriptor 'update' of 'MutableMapping' object \"\n \"needs an argument\")\n self,*args=args\n if len(args)>1:\n raise TypeError('update expected at most 1 arguments, got %d'%\n len(args))\n if args:\n other=args[0]\n if isinstance(other,Mapping):\n for key in other:\n self[key]=other[key]\n elif hasattr(other,\"keys\"):\n for key in other.keys():\n self[key]=other[key]\n else :\n for key,value in other:\n self[key]=value\n for key,value in kwds.items():\n self[key]=value\n \n def setdefault(self,key,default=None ):\n ''\n try :\n return self[key]\n except KeyError:\n self[key]=default\n return default\n \nMutableMapping.register(dict)\n\n\n\n\n\nclass Sequence(Reversible,Collection):\n\n ''\n\n\n\n \n \n __slots__=()\n \n @abstractmethod\n def __getitem__(self,index):\n raise IndexError\n \n def __iter__(self):\n i=0\n try :\n while True :\n v=self[i]\n yield v\n i +=1\n except IndexError:\n return\n \n def __contains__(self,value):\n for v in self:\n if v is value or v ==value:\n return True\n return False\n \n def __reversed__(self):\n for i in reversed(range(len(self))):\n yield self[i]\n \n def index(self,value,start=0,stop=None ):\n ''\n\n\n\n\n \n if start is not None and start <0:\n start=max(len(self)+start,0)\n if stop is not None and stop <0:\n stop +=len(self)\n \n i=start\n while stop is None or i 0:\n raise Error("newline inside string")\n raise\n \n self.line_num +=1\n \n if \'\\0\'in line:\n raise Error("line contains NULL byte")\n self._parse_process_char(line)\n self._parse_eol()\n \n if self.state ==self.START_RECORD:\n break\n \n fields=self.fields\n self.fields=[]\n return fields\n \n def _parse_process_char(self,line):\n pos=0\n while pos pos:\n self._parse_add_str(line[pos:pos2])\n pos=pos2\n self._parse_save_field()\n self.state=self.EAT_CRNL\n break\n elif line[pos2]==self._escapechar[0]:\n \n if pos2 >pos:\n self._parse_add_str(line[pos:pos2])\n pos=pos2\n self.state=self.ESCAPED_CHAR\n break\n elif line[pos2]==self._delimiter[0]:\n \n if pos2 >pos:\n self._parse_add_str(line[pos:pos2])\n pos=pos2\n self._parse_save_field()\n self.state=self.START_FIELD\n break\n \n pos2 +=1\n else :\n if pos2 >pos:\n self._parse_add_str(line[pos:pos2])\n pos=pos2\n continue\n \n elif self.state ==self.START_RECORD:\n if line[pos]==\'\\n\'or line[pos]==\'\\r\':\n self.state=self.EAT_CRNL\n else :\n self.state=self.START_FIELD\n \n continue\n \n elif self.state ==self.START_FIELD:\n if line[pos]==\'\\n\'or line[pos]==\'\\r\':\n \n self._parse_save_field()\n self.state=self.EAT_CRNL\n elif (line[pos]==self._quotechar[0]\n and self._quoting !=QUOTE_NONE):\n \n self.state=self.IN_QUOTED_FIELD\n elif line[pos]==self._escapechar[0]:\n \n self.state=self.ESCAPED_CHAR\n elif self._skipinitialspace and line[pos]==\' \':\n \n pass\n elif line[pos]==self._delimiter[0]:\n \n self._parse_save_field()\n else :\n \n if self._quoting ==QUOTE_NONNUMERIC:\n self.numeric_field=True\n self.state=self.IN_FIELD\n continue\n \n elif self.state ==self.ESCAPED_CHAR:\n self._parse_add_char(line[pos])\n self.state=self.IN_FIELD\n \n elif self.state ==self.IN_QUOTED_FIELD:\n if line[pos]==self._escapechar:\n \n self.state=self.ESCAPE_IN_QUOTED_FIELD\n elif (line[pos]==self._quotechar\n and self._quoting !=QUOTE_NONE):\n if self._doublequote:\n \n self.state=self.QUOTE_IN_QUOTED_FIELD\n else :\n \n self.state=self.IN_FIELD\n else :\n \n self._parse_add_char(line[pos])\n \n elif self.state ==self.ESCAPE_IN_QUOTED_FIELD:\n self._parse_add_char(line[pos])\n self.state=self.IN_QUOTED_FIELD\n \n elif self.state ==self.QUOTE_IN_QUOTED_FIELD:\n \n if (line[pos]==self._quotechar\n and self._quoting !=QUOTE_NONE):\n \n self._parse_add_char(line[pos])\n self.state=self.IN_QUOTED_FIELD\n elif line[pos]==self._delimiter[0]:\n \n self._parse_save_field()\n self.state=self.START_FIELD\n elif line[pos]==\'\\r\'or line[pos]==\'\\n\':\n \n self._parse_save_field()\n self.state=self.EAT_CRNL\n elif not self._strict:\n self._parse_add_char(line[pos])\n self.state=self.IN_FIELD\n else :\n raise Error("\'%c\' expected after \'%c\'"%\n (self._delimiter,self._quotechar))\n \n elif self.state ==self.EAT_CRNL:\n if line[pos]==\'\\r\'or line[pos]==\'\\n\':\n pass\n else :\n raise Error("new-line character seen in unquoted field - "\n "do you need to open the file "\n "in universal-newline mode?")\n \n else :\n raise RuntimeError("unknown state: %r"%(self.state,))\n \n pos +=1\n \n def _parse_eol(self):\n if self.state ==self.EAT_CRNL:\n self.state=self.START_RECORD\n elif self.state ==self.START_RECORD:\n \n pass\n elif self.state ==self.IN_FIELD:\n \n \n self._parse_save_field()\n self.state=self.START_RECORD\n elif self.state ==self.START_FIELD:\n \n self._parse_save_field()\n self.state=self.START_RECORD\n elif self.state ==self.ESCAPED_CHAR:\n self._parse_add_char(\'\\n\')\n self.state=self.IN_FIELD\n elif self.state ==self.IN_QUOTED_FIELD:\n pass\n elif self.state ==self.ESCAPE_IN_QUOTED_FIELD:\n self._parse_add_char(\'\\n\')\n self.state=self.IN_QUOTED_FIELD\n elif self.state ==self.QUOTE_IN_QUOTED_FIELD:\n \n self._parse_save_field()\n self.state=self.START_RECORD\n else :\n raise RuntimeError("unknown state: %r"%(self.state,))\n \n def _parse_save_field(self):\n field,self.field=self.field,\'\'\n if self.numeric_field:\n self.numeric_field=False\n field=float(field)\n self.fields.append(field)\n \n def _parse_add_char(self,c):\n if len(self.field)+1 >_field_limit:\n raise Error("field larget than field limit (%d)"%(_field_limit))\n self.field +=c\n \n def _parse_add_str(self,s):\n if len(self.field)+len(s)>_field_limit:\n raise Error("field larget than field limit (%d)"%(_field_limit))\n self.field +=s\n \n \nclass Writer(object):\n \'\'\n\n\n \n \n def __init__(self,file,dialect=None ,**kwargs):\n if not (hasattr(file,\'write\')and callable(file.write)):\n raise TypeError("argument 1 must have a \'write\' method")\n self.writeline=file.write\n self.dialect=_call_dialect(dialect,kwargs)\n \n def _join_reset(self):\n self.rec=[]\n self.num_fields=0\n \n def _join_append(self,field,quoted,quote_empty):\n dialect=self.dialect\n \n if self.num_fields >0:\n self.rec.append(dialect.delimiter)\n \n if dialect.quoting ==QUOTE_NONE:\n need_escape=tuple(dialect.lineterminator)+(\n dialect.escapechar,\n dialect.delimiter,dialect.quotechar)\n \n else :\n for c in tuple(dialect.lineterminator)+(\n dialect.delimiter,dialect.escapechar):\n if c and c in field:\n quoted=True\n \n need_escape=()\n if dialect.quotechar in field:\n if dialect.doublequote:\n field=field.replace(dialect.quotechar,\n dialect.quotechar *2)\n quoted=True\n else :\n need_escape=(dialect.quotechar,)\n \n \n for c in need_escape:\n if c and c in field:\n if not dialect.escapechar:\n raise Error("need to escape, but no escapechar set")\n field=field.replace(c,dialect.escapechar+c)\n \n \n if field ==\'\'and quote_empty:\n if dialect.quoting ==QUOTE_NONE:\n raise Error("single empty field record must be quoted")\n quoted=1\n \n if quoted:\n field=dialect.quotechar+field+dialect.quotechar\n \n self.rec.append(field)\n self.num_fields +=1\n \n \n \n def writerow(self,row):\n dialect=self.dialect\n try :\n rowlen=len(row)\n except TypeError:\n raise Error("sequence expected")\n \n \n self._join_reset()\n \n for field in row:\n quoted=False\n if dialect.quoting ==QUOTE_NONNUMERIC:\n try :\n float(field)\n except :\n quoted=True\n \n \n elif dialect.quoting ==QUOTE_ALL:\n quoted=True\n \n if field is None :\n self._join_append("",quoted,rowlen ==1)\n else :\n self._join_append(str(field),quoted,rowlen ==1)\n \n \n self.rec.append(dialect.lineterminator)\n \n self.writeline(\'\'.join(self.rec))\n \n def writerows(self,rows):\n for row in rows:\n self.writerow(row)\n \ndef reader(*args,**kwargs):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n return Reader(*args,**kwargs)\n \ndef writer(*args,**kwargs):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n \n return Writer(*args,**kwargs)\n \n \nundefined=object()\ndef field_size_limit(limit=undefined):\n \'\'\n\n\n\n \n \n global _field_limit\n old_limit=_field_limit\n \n if limit is not undefined:\n if not isinstance(limit,(int,long)):\n raise TypeError("int expected, got %s"%\n (limit.__class__.__name__,))\n _field_limit=limit\n \n return old_limit\n',[]],_dummy_thread:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=['error','start_new_thread','exit','get_ident','allocate_lock',\n'interrupt_main','LockType']\n\n\nTIMEOUT_MAX=2 **31\n\n\n\n\n\n\nerror=RuntimeError\n\ndef start_new_thread(function,args,kwargs={}):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if type(args)!=type(tuple()):\n raise TypeError(\"2nd arg must be a tuple\")\n if type(kwargs)!=type(dict()):\n raise TypeError(\"3rd arg must be a dict\")\n global _main\n _main=False\n try :\n function(*args,**kwargs)\n except SystemExit:\n pass\n except :\n import traceback\n traceback.print_exc()\n _main=True\n global _interrupt\n if _interrupt:\n _interrupt=False\n raise KeyboardInterrupt\n \ndef exit():\n ''\n raise SystemExit\n \ndef get_ident():\n ''\n\n\n\n\n \n return -1\n \ndef allocate_lock():\n ''\n return LockType()\n \ndef stack_size(size=None ):\n ''\n if size is not None :\n raise error(\"setting thread stack size not supported\")\n return 0\n \nclass LockType(object):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self):\n self.locked_status=False\n \n def acquire(self,waitflag=None ,timeout=-1):\n ''\n\n\n\n\n\n\n\n\n \n if waitflag is None or waitflag:\n self.locked_status=True\n return True\n else :\n if not self.locked_status:\n self.locked_status=True\n return True\n else :\n if timeout >0:\n import time\n time.sleep(timeout)\n return False\n \n __enter__=acquire\n \n def __exit__(self,typ,val,tb):\n self.release()\n \n def release(self):\n ''\n \n \n if not self.locked_status:\n raise error\n self.locked_status=False\n return True\n \n def locked(self):\n return self.locked_status\n \n \n_interrupt=False\n\n_main=True\n\ndef interrupt_main():\n ''\n \n if _main:\n raise KeyboardInterrupt\n else :\n global _interrupt\n _interrupt=True\n",["time","traceback"]],_functools:[".py",'from reprlib import recursive_repr\n\nclass partial:\n \'\'\n\n \n \n __slots__="func","args","keywords","__dict__","__weakref__"\n \n def __new__(*args,**keywords):\n if not args:\n raise TypeError("descriptor \'__new__\' of partial needs an argument")\n if len(args)<2:\n raise TypeError("type \'partial\' takes at least one argument")\n cls,func,*args=args\n if not callable(func):\n raise TypeError("the first argument must be callable")\n args=tuple(args)\n \n if hasattr(func,"func"):\n args=func.args+args\n tmpkw=func.keywords.copy()\n tmpkw.update(keywords)\n keywords=tmpkw\n del tmpkw\n func=func.func\n \n self=super(partial,cls).__new__(cls)\n \n self.func=func\n self.args=args\n self.keywords=keywords\n return self\n \n def __call__(*args,**keywords):\n if not args:\n raise TypeError("descriptor \'__call__\' of partial needs an argument")\n self,*args=args\n newkeywords=self.keywords.copy()\n newkeywords.update(keywords)\n return self.func(*self.args,*args,**newkeywords)\n \n @recursive_repr()\n def __repr__(self):\n qualname=type(self).__qualname__\n args=[repr(self.func)]\n args.extend(repr(x)for x in self.args)\n args.extend(f"{k}={v!r}"for (k,v)in self.keywords.items())\n if type(self).__module__ =="functools":\n return f"functools.{qualname}({\', \'.join(args)})"\n return f"{qualname}({\', \'.join(args)})"\n \n def __reduce__(self):\n return type(self),(self.func,),(self.func,self.args,\n self.keywords or None ,self.__dict__ or None )\n \n def __setstate__(self,state):\n if not isinstance(state,tuple):\n raise TypeError("argument to __setstate__ must be a tuple")\n if len(state)!=4:\n raise TypeError(f"expected 4 items in state, got {len(state)}")\n func,args,kwds,namespace=state\n if (not callable(func)or not isinstance(args,tuple)or\n (kwds is not None and not isinstance(kwds,dict))or\n (namespace is not None and not isinstance(namespace,dict))):\n raise TypeError("invalid partial state")\n \n args=tuple(args)\n if kwds is None :\n kwds={}\n elif type(kwds)is not dict:\n kwds=dict(kwds)\n if namespace is None :\n namespace={}\n \n self.__dict__=namespace\n self.func=func\n self.args=args\n self.keywords=kwds\n \ndef reduce(func,iterable,initializer=None ):\n args=iter(iterable)\n if initializer is not None :\n res=initializer\n else :\n res=next(args)\n while True :\n try :\n res=func(res,next(args))\n except StopIteration:\n return res\n',["reprlib"]],_imp:[".py","''\n\n\nclass __loader__(object):pass\n\ndef _fix_co_filename(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:_fix_co_filename'))\n \ndef acquire_lock(*args,**kw):\n ''\n\n\n \n pass\n \n \ndef extension_suffixes(*args,**kw):\n ''\n return ['.pyd']\n \ndef get_frozen_object(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:get_frozen_object'))\n \ndef init_builtin(module,*args,**kw):\n return __import__(module)\n \ndef init_frozen(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:init_frozen'))\n \ndef is_builtin(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:is_builtin'))\n \ndef is_frozen(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:is_frozen'))\n \ndef is_frozen_package(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:is_frozen_package'))\n \ndef load_dynamic(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:load_dynamic'))\n \ndef lock_held(*args,**kw):\n ''\n \n \n return False\n \n \ndef release_lock(*args,**kw):\n ''\n \n \n pass\n \n",[]],_io:[".py",'\'\'\n\n\n\nimport os\nimport abc\nimport codecs\nimport errno\n\ntry :\n from _thread import allocate_lock as Lock\nexcept ImportError:\n from _dummy_thread import allocate_lock as Lock\n \nimport io\n\n\nSEEK_SET=0\nSEEK_CUR=1\nSEEK_END=2\n\nvalid_seek_flags={0,1,2}\nif hasattr(os,\'SEEK_HOLE\'):\n valid_seek_flags.add(os.SEEK_HOLE)\n valid_seek_flags.add(os.SEEK_DATA)\n \n \nDEFAULT_BUFFER_SIZE=8 *1024\n\n\n\n\n\n\nBlockingIOError=BlockingIOError\n\n\ndef __open(file,mode="r",buffering=-1,encoding=None ,errors=None ,\nnewline=None ,closefd=True ,opener=None ):\n\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not isinstance(file,(str,bytes,int)):\n raise TypeError("invalid file: %r"%file)\n if not isinstance(mode,str):\n raise TypeError("invalid mode: %r"%mode)\n if not isinstance(buffering,int):\n raise TypeError("invalid buffering: %r"%buffering)\n if encoding is not None and not isinstance(encoding,str):\n raise TypeError("invalid encoding: %r"%encoding)\n if errors is not None and not isinstance(errors,str):\n raise TypeError("invalid errors: %r"%errors)\n modes=set(mode)\n if modes -set("axrwb+tU")or len(mode)>len(modes):\n raise ValueError("invalid mode: %r"%mode)\n creating="x"in modes\n reading="r"in modes\n writing="w"in modes\n appending="a"in modes\n updating="+"in modes\n text="t"in modes\n binary="b"in modes\n if "U"in modes:\n if creating or writing or appending:\n raise ValueError("can\'t use U and writing mode at once")\n reading=True\n if text and binary:\n raise ValueError("can\'t have text and binary mode at once")\n if creating+reading+writing+appending >1:\n raise ValueError("can\'t have read/write/append mode at once")\n if not (creating or reading or writing or appending):\n raise ValueError("must have exactly one of read/write/append mode")\n if binary and encoding is not None :\n raise ValueError("binary mode doesn\'t take an encoding argument")\n if binary and errors is not None :\n raise ValueError("binary mode doesn\'t take an errors argument")\n if binary and newline is not None :\n raise ValueError("binary mode doesn\'t take a newline argument")\n raw=FileIO(file,\n (creating and "x"or "")+\n (reading and "r"or "")+\n (writing and "w"or "")+\n (appending and "a"or "")+\n (updating and "+"or ""),\n closefd,opener=opener)\n line_buffering=False\n if buffering ==1 or buffering <0 and raw.isatty():\n buffering=-1\n line_buffering=True\n if buffering <0:\n buffering=DEFAULT_BUFFER_SIZE\n try :\n bs=os.fstat(raw.fileno()).st_blksize\n except (os.error,AttributeError):\n pass\n else :\n if bs >1:\n buffering=bs\n if buffering <0:\n raise ValueError("invalid buffering size")\n if buffering ==0:\n if binary:\n return raw\n raise ValueError("can\'t have unbuffered text I/O")\n if updating:\n buffer=BufferedRandom(raw,buffering)\n elif creating or writing or appending:\n buffer=BufferedWriter(raw,buffering)\n elif reading:\n buffer=BufferedReader(raw,buffering)\n else :\n raise ValueError("unknown mode: %r"%mode)\n if binary:\n return buffer\n text=TextIOWrapper(buffer,encoding,errors,newline,line_buffering)\n text.mode=mode\n return text\n \n \nclass DocDescriptor:\n \'\'\n \n def __get__(self,obj,typ):\n return (\n "open(file, mode=\'r\', buffering=-1, encoding=None, "\n "errors=None, newline=None, closefd=True)\\n\\n"+\n open.__doc__)\n \nclass OpenWrapper:\n \'\'\n\n\n\n\n\n \n __doc__=DocDescriptor()\n \n def __new__(cls,*args,**kwargs):\n return open(*args,**kwargs)\n \n \n \n \ntry :\n UnsupportedOperation=io.UnsupportedOperation\nexcept AttributeError:\n class UnsupportedOperation(ValueError,IOError):\n pass\n \n \nclass IOBase(metaclass=abc.ABCMeta):\n\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n def _unsupported(self,name):\n \'\'\n raise UnsupportedOperation("%s.%s() not supported"%\n (self.__class__.__name__,name))\n \n \n \n def seek(self,pos,whence=0):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n \n self._unsupported("seek")\n \n def tell(self):\n \'\'\n return self.seek(0,1)\n \n def truncate(self,pos=None ):\n \'\'\n\n\n\n \n self._unsupported("truncate")\n \n \n \n def flush(self):\n \'\'\n\n\n \n self._checkClosed()\n \n \n __closed=False\n \n def close(self):\n \'\'\n\n\n \n if not self.__closed:\n try :\n self.flush()\n finally :\n self.__closed=True\n \n def __del__(self):\n \'\'\n \n \n \n \n \n try :\n self.close()\n except :\n pass\n \n \n \n def seekable(self):\n \'\'\n\n\n\n \n return False\n \n def _checkSeekable(self,msg=None ):\n \'\'\n \n if not self.seekable():\n raise UnsupportedOperation("File or stream is not seekable."\n if msg is None else msg)\n \n def readable(self):\n \'\'\n\n\n \n return False\n \n def _checkReadable(self,msg=None ):\n \'\'\n \n if not self.readable():\n raise UnsupportedOperation("File or stream is not readable."\n if msg is None else msg)\n \n def writable(self):\n \'\'\n\n\n \n return False\n \n def _checkWritable(self,msg=None ):\n \'\'\n \n if not self.writable():\n raise UnsupportedOperation("File or stream is not writable."\n if msg is None else msg)\n \n @property\n def closed(self):\n \'\'\n\n\n \n return self.__closed\n \n def _checkClosed(self,msg=None ):\n \'\'\n \n if self.closed:\n raise ValueError("I/O operation on closed file."\n if msg is None else msg)\n \n \n \n def __enter__(self):\n \'\'\n self._checkClosed()\n return self\n \n def __exit__(self,*args):\n \'\'\n self.close()\n \n \n \n \n \n def fileno(self):\n \'\'\n\n\n \n self._unsupported("fileno")\n \n def isatty(self):\n \'\'\n\n\n \n self._checkClosed()\n return False\n \n \n \n def readline(self,limit=-1):\n \'\'\n\n\n\n\n\n\n\n \n \n if hasattr(self,"peek"):\n def nreadahead():\n readahead=self.peek(1)\n if not readahead:\n return 1\n n=(readahead.find(b"\\n")+1)or len(readahead)\n if limit >=0:\n n=min(n,limit)\n return n\n else :\n def nreadahead():\n return 1\n if limit is None :\n limit=-1\n elif not isinstance(limit,int):\n raise TypeError("limit must be an integer")\n res=bytearray()\n while limit <0 or len(res)=hint:\n break\n return lines\n \n def writelines(self,lines):\n self._checkClosed()\n for line in lines:\n self.write(line)\n \n \n \n \n \nclass RawIOBase(IOBase):\n\n \'\'\n \n \n \n \n \n \n \n \n \n \n \n def read(self,n=-1):\n \'\'\n\n\n\n \n if n is None :\n n=-1\n if n <0:\n return self.readall()\n b=bytearray(n.__index__())\n n=self.readinto(b)\n if n is None :\n return None\n del b[n:]\n return bytes(b)\n \n def readall(self):\n \'\'\n res=bytearray()\n while True :\n data=self.read(DEFAULT_BUFFER_SIZE)\n if not data:\n break\n res +=data\n if res:\n return bytes(res)\n else :\n \n return data\n \n def readinto(self,b):\n \'\'\n\n\n\n \n self._unsupported("readinto")\n \n def write(self,b):\n \'\'\n\n\n \n self._unsupported("write")\n \n \n \n \n \n \n \nclass BufferedIOBase(IOBase):\n\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def read(self,n=None ):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self._unsupported("read")\n \n def read1(self,n=None ):\n \'\'\n\n \n self._unsupported("read1")\n \n def readinto(self,b):\n \'\'\n\n\n\n\n\n\n\n\n \n \n data=self.read(len(b))\n n=len(data)\n try :\n b[:n]=data\n except TypeError as err:\n import array\n if not isinstance(b,array.array):\n raise err\n b[:n]=array.array(\'b\',data)\n return n\n \n def write(self,b):\n \'\'\n\n\n\n\n\n\n \n self._unsupported("write")\n \n def detach(self):\n \'\'\n\n\n\n\n \n self._unsupported("detach")\n \n \n \n \n \nclass _BufferedIOMixin(BufferedIOBase):\n\n \'\'\n\n\n\n\n \n \n def __init__(self,raw):\n self._raw=raw\n \n \n \n def seek(self,pos,whence=0):\n new_position=self.raw.seek(pos,whence)\n if new_position <0:\n raise IOError("seek() returned an invalid position")\n return new_position\n \n def tell(self):\n pos=self.raw.tell()\n if pos <0:\n raise IOError("tell() returned an invalid position")\n return pos\n \n def truncate(self,pos=None ):\n \n \n \n self.flush()\n \n if pos is None :\n pos=self.tell()\n \n \n return self.raw.truncate(pos)\n \n \n \n def flush(self):\n if self.closed:\n raise ValueError("flush of closed file")\n self.raw.flush()\n \n def close(self):\n if self.raw is not None and not self.closed:\n try :\n \n self.flush()\n finally :\n self.raw.close()\n \n def detach(self):\n if self.raw is None :\n raise ValueError("raw stream already detached")\n self.flush()\n raw=self._raw\n self._raw=None\n return raw\n \n \n \n def seekable(self):\n return self.raw.seekable()\n \n def readable(self):\n return self.raw.readable()\n \n def writable(self):\n return self.raw.writable()\n \n @property\n def raw(self):\n return self._raw\n \n @property\n def closed(self):\n return self.raw.closed\n \n @property\n def name(self):\n return self.raw.name\n \n @property\n def mode(self):\n return self.raw.mode\n \n def __getstate__(self):\n raise TypeError("can not serialize a \'{0}\' object"\n .format(self.__class__.__name__))\n \n def __repr__(self):\n clsname=self.__class__.__name__\n try :\n name=self.name\n except AttributeError:\n return "<_io.{0}>".format(clsname)\n else :\n return "<_io.{0} name={1!r}>".format(clsname,name)\n \n \n \n def fileno(self):\n return self.raw.fileno()\n \n def isatty(self):\n return self.raw.isatty()\n \n \nclass BytesIO(BufferedIOBase):\n\n \'\'\n \n def __init__(self,initial_bytes=None ):\n buf=bytearray()\n if initial_bytes is not None :\n buf +=initial_bytes\n self._buffer=buf\n self._pos=0\n \n def __getstate__(self):\n if self.closed:\n raise ValueError("__getstate__ on closed file")\n return self.__dict__.copy()\n \n def getvalue(self):\n \'\'\n \n if self.closed:\n raise ValueError("getvalue on closed file")\n return bytes(self._buffer)\n \n def getbuffer(self):\n \'\'\n \n return memoryview(self._buffer)\n \n def read(self,n=None ):\n if self.closed:\n raise ValueError("read from closed file")\n if n is None :\n n=-1\n if n <0:\n n=len(self._buffer)\n if len(self._buffer)<=self._pos:\n return b""\n newpos=min(len(self._buffer),self._pos+n)\n b=self._buffer[self._pos:newpos]\n self._pos=newpos\n return bytes(b)\n \n def read1(self,n):\n \'\'\n \n return self.read(n)\n \n def write(self,b):\n if self.closed:\n raise ValueError("write to closed file")\n if isinstance(b,str):\n raise TypeError("can\'t write str to binary stream")\n n=len(b)\n if n ==0:\n return 0\n pos=self._pos\n if pos >len(self._buffer):\n \n \n padding=b\'\\x00\'*(pos -len(self._buffer))\n self._buffer +=padding\n self._buffer[pos:pos+n]=b\n self._pos +=n\n return n\n \n def seek(self,pos,whence=0):\n if self.closed:\n raise ValueError("seek on closed file")\n try :\n pos.__index__\n except AttributeError as err:\n raise TypeError("an integer is required")from err\n if whence ==0:\n if pos <0:\n raise ValueError("negative seek position %r"%(pos,))\n self._pos=pos\n elif whence ==1:\n self._pos=max(0,self._pos+pos)\n elif whence ==2:\n self._pos=max(0,len(self._buffer)+pos)\n else :\n raise ValueError("unsupported whence value")\n return self._pos\n \n def tell(self):\n if self.closed:\n raise ValueError("tell on closed file")\n return self._pos\n \n def truncate(self,pos=None ):\n if self.closed:\n raise ValueError("truncate on closed file")\n if pos is None :\n pos=self._pos\n else :\n try :\n pos.__index__\n except AttributeError as err:\n raise TypeError("an integer is required")from err\n if pos <0:\n raise ValueError("negative truncate position %r"%(pos,))\n del self._buffer[pos:]\n return pos\n \n def readable(self):\n if self.closed:\n raise ValueError("I/O operation on closed file.")\n return True\n \n def writable(self):\n if self.closed:\n raise ValueError("I/O operation on closed file.")\n return True\n \n def seekable(self):\n if self.closed:\n raise ValueError("I/O operation on closed file.")\n return True\n \n \nclass BufferedReader(_BufferedIOMixin):\n\n \'\'\n\n\n\n\n\n\n \n \n def __init__(self,raw,buffer_size=DEFAULT_BUFFER_SIZE):\n \'\'\n \n if not raw.readable():\n raise IOError(\'"raw" argument must be readable.\')\n \n _BufferedIOMixin.__init__(self,raw)\n if buffer_size <=0:\n raise ValueError("invalid buffer size")\n self.buffer_size=buffer_size\n self._reset_read_buf()\n self._read_lock=Lock()\n \n def _reset_read_buf(self):\n self._read_buf=b""\n self._read_pos=0\n \n def read(self,n=None ):\n \'\'\n\n\n\n\n\n \n if n is not None and n <-1:\n raise ValueError("invalid number of bytes to read")\n with self._read_lock:\n return self._read_unlocked(n)\n \n def _read_unlocked(self,n=None ):\n nodata_val=b""\n empty_values=(b"",None )\n buf=self._read_buf\n pos=self._read_pos\n \n \n if n is None or n ==-1:\n self._reset_read_buf()\n if hasattr(self.raw,\'readall\'):\n chunk=self.raw.readall()\n if chunk is None :\n return buf[pos:]or None\n else :\n return buf[pos:]+chunk\n chunks=[buf[pos:]]\n current_size=0\n while True :\n \n try :\n chunk=self.raw.read()\n except InterruptedError:\n continue\n if chunk in empty_values:\n nodata_val=chunk\n break\n current_size +=len(chunk)\n chunks.append(chunk)\n return b"".join(chunks)or nodata_val\n \n \n avail=len(buf)-pos\n if n <=avail:\n \n self._read_pos +=n\n return buf[pos:pos+n]\n \n \n chunks=[buf[pos:]]\n wanted=max(self.buffer_size,n)\n while avail self.buffer_size:\n \n \n self._flush_unlocked()\n before=len(self._write_buf)\n self._write_buf.extend(b)\n written=len(self._write_buf)-before\n if len(self._write_buf)>self.buffer_size:\n try :\n self._flush_unlocked()\n except BlockingIOError as e:\n if len(self._write_buf)>self.buffer_size:\n \n \n overage=len(self._write_buf)-self.buffer_size\n written -=overage\n self._write_buf=self._write_buf[:self.buffer_size]\n raise BlockingIOError(e.errno,e.strerror,written)\n return written\n \n def truncate(self,pos=None ):\n with self._write_lock:\n self._flush_unlocked()\n if pos is None :\n pos=self.raw.tell()\n return self.raw.truncate(pos)\n \n def flush(self):\n with self._write_lock:\n self._flush_unlocked()\n \n def _flush_unlocked(self):\n if self.closed:\n raise ValueError("flush of closed file")\n while self._write_buf:\n try :\n n=self.raw.write(self._write_buf)\n except InterruptedError:\n continue\n except BlockingIOError:\n raise RuntimeError("self.raw should implement RawIOBase: it "\n "should not raise BlockingIOError")\n if n is None :\n raise BlockingIOError(\n errno.EAGAIN,\n "write could not complete without blocking",0)\n if n >len(self._write_buf)or n <0:\n raise IOError("write() returned incorrect number of bytes")\n del self._write_buf[:n]\n \n def tell(self):\n return _BufferedIOMixin.tell(self)+len(self._write_buf)\n \n def seek(self,pos,whence=0):\n if whence not in valid_seek_flags:\n raise ValueError("invalid whence value")\n with self._write_lock:\n self._flush_unlocked()\n return _BufferedIOMixin.seek(self,pos,whence)\n \n \nclass BufferedRWPair(BufferedIOBase):\n\n \'\'\n\n\n\n\n\n\n\n\n \n \n \n \n \n def __init__(self,reader,writer,buffer_size=DEFAULT_BUFFER_SIZE):\n \'\'\n\n\n \n if not reader.readable():\n raise IOError(\'"reader" argument must be readable.\')\n \n if not writer.writable():\n raise IOError(\'"writer" argument must be writable.\')\n \n self.reader=BufferedReader(reader,buffer_size)\n self.writer=BufferedWriter(writer,buffer_size)\n \n def read(self,n=None ):\n if n is None :\n n=-1\n return self.reader.read(n)\n \n def readinto(self,b):\n return self.reader.readinto(b)\n \n def write(self,b):\n return self.writer.write(b)\n \n def peek(self,n=0):\n return self.reader.peek(n)\n \n def read1(self,n):\n return self.reader.read1(n)\n \n def readable(self):\n return self.reader.readable()\n \n def writable(self):\n return self.writer.writable()\n \n def flush(self):\n return self.writer.flush()\n \n def close(self):\n self.writer.close()\n self.reader.close()\n \n def isatty(self):\n return self.reader.isatty()or self.writer.isatty()\n \n @property\n def closed(self):\n return self.writer.closed\n \n \nclass BufferedRandom(BufferedWriter,BufferedReader):\n\n \'\'\n\n\n\n\n \n \n def __init__(self,raw,buffer_size=DEFAULT_BUFFER_SIZE):\n raw._checkSeekable()\n BufferedReader.__init__(self,raw,buffer_size)\n BufferedWriter.__init__(self,raw,buffer_size)\n \n def seek(self,pos,whence=0):\n if whence not in valid_seek_flags:\n raise ValueError("invalid whence value")\n self.flush()\n if self._read_buf:\n \n with self._read_lock:\n self.raw.seek(self._read_pos -len(self._read_buf),1)\n \n \n pos=self.raw.seek(pos,whence)\n with self._read_lock:\n self._reset_read_buf()\n if pos <0:\n raise IOError("seek() returned invalid position")\n return pos\n \n def tell(self):\n if self._write_buf:\n return BufferedWriter.tell(self)\n else :\n return BufferedReader.tell(self)\n \n def truncate(self,pos=None ):\n if pos is None :\n pos=self.tell()\n \n return BufferedWriter.truncate(self,pos)\n \n def read(self,n=None ):\n if n is None :\n n=-1\n self.flush()\n return BufferedReader.read(self,n)\n \n def readinto(self,b):\n self.flush()\n return BufferedReader.readinto(self,b)\n \n def peek(self,n=0):\n self.flush()\n return BufferedReader.peek(self,n)\n \n def read1(self,n):\n self.flush()\n return BufferedReader.read1(self,n)\n \n def write(self,b):\n if self._read_buf:\n \n with self._read_lock:\n self.raw.seek(self._read_pos -len(self._read_buf),1)\n self._reset_read_buf()\n return BufferedWriter.write(self,b)\n \n \nclass TextIOBase(IOBase):\n\n \'\'\n\n\n\n\n \n \n def read(self,n=-1):\n \'\'\n\n\n\n\n\n \n self._unsupported("read")\n \n def write(self,s):\n \'\'\n self._unsupported("write")\n \n def truncate(self,pos=None ):\n \'\'\n self._unsupported("truncate")\n \n def readline(self):\n \'\'\n\n\n \n self._unsupported("readline")\n \n def detach(self):\n \'\'\n\n\n\n\n \n self._unsupported("detach")\n \n @property\n def encoding(self):\n \'\'\n return None\n \n @property\n def newlines(self):\n \'\'\n\n\n\n\n \n return None\n \n @property\n def errors(self):\n \'\'\n\n \n return None\n \n \n \n \n \nclass IncrementalNewlineDecoder(codecs.IncrementalDecoder):\n \'\'\n\n\n\n\n \n def __init__(self,decoder,translate,errors=\'strict\'):\n codecs.IncrementalDecoder.__init__(self,errors=errors)\n self.translate=translate\n self.decoder=decoder\n self.seennl=0\n self.pendingcr=False\n \n def decode(self,input,final=False ):\n \n if self.decoder is None :\n output=input\n else :\n output=self.decoder.decode(input,final=final)\n if self.pendingcr and (output or final):\n output="\\r"+output\n self.pendingcr=False\n \n \n \n if output.endswith("\\r")and not final:\n output=output[:-1]\n self.pendingcr=True\n \n \n crlf=output.count(\'\\r\\n\')\n cr=output.count(\'\\r\')-crlf\n lf=output.count(\'\\n\')-crlf\n self.seennl |=(lf and self._LF)|(cr and self._CR)\\\n |(crlf and self._CRLF)\n \n if self.translate:\n if crlf:\n output=output.replace("\\r\\n","\\n")\n if cr:\n output=output.replace("\\r","\\n")\n \n return output\n \n def getstate(self):\n if self.decoder is None :\n buf=b""\n flag=0\n else :\n buf,flag=self.decoder.getstate()\n flag <<=1\n if self.pendingcr:\n flag |=1\n return buf,flag\n \n def setstate(self,state):\n buf,flag=state\n self.pendingcr=bool(flag&1)\n if self.decoder is not None :\n self.decoder.setstate((buf,flag >>1))\n \n def reset(self):\n self.seennl=0\n self.pendingcr=False\n if self.decoder is not None :\n self.decoder.reset()\n \n _LF=1\n _CR=2\n _CRLF=4\n \n @property\n def newlines(self):\n return (None ,\n "\\n",\n "\\r",\n ("\\r","\\n"),\n "\\r\\n",\n ("\\n","\\r\\n"),\n ("\\r","\\r\\n"),\n ("\\r","\\n","\\r\\n")\n )[self.seennl]\n \n \nclass TextIOWrapper(TextIOBase):\n\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n _CHUNK_SIZE=2048\n \n \n \n \n def __init__(self,buffer,encoding=None ,errors=None ,newline=None ,\n line_buffering=False ,write_through=False ):\n if newline is not None and not isinstance(newline,str):\n raise TypeError("illegal newline type: %r"%(type(newline),))\n if newline not in (None ,"","\\n","\\r","\\r\\n"):\n raise ValueError("illegal newline value: %r"%(newline,))\n if encoding is None :\n try :\n encoding=os.device_encoding(buffer.fileno())\n except (AttributeError,UnsupportedOperation):\n pass\n if encoding is None :\n try :\n import locale\n except ImportError:\n \n encoding="ascii"\n else :\n encoding=locale.getpreferredencoding(False )\n \n if not isinstance(encoding,str):\n raise ValueError("invalid encoding: %r"%encoding)\n \n if errors is None :\n errors="strict"\n else :\n if not isinstance(errors,str):\n raise ValueError("invalid errors: %r"%errors)\n \n self._buffer=buffer\n self._line_buffering=line_buffering\n self._encoding=encoding\n self._errors=errors\n self._readuniversal=not newline\n self._readtranslate=newline is None\n self._readnl=newline\n self._writetranslate=newline !=\'\'\n self._writenl=newline or os.linesep\n self._encoder=None\n self._decoder=None\n self._decoded_chars=\'\'\n self._decoded_chars_used=0\n self._snapshot=None\n self._seekable=self._telling=self.buffer.seekable()\n self._has_read1=hasattr(self.buffer,\'read1\')\n self._b2cratio=0.0\n \n if self._seekable and self.writable():\n position=self.buffer.tell()\n if position !=0:\n try :\n self._get_encoder().setstate(0)\n except LookupError:\n \n pass\n \n \n \n \n \n \n \n \n \n \n def __repr__(self):\n result="<_io.TextIOWrapper"\n try :\n name=self.name\n except AttributeError:\n pass\n else :\n result +=" name={0!r}".format(name)\n try :\n mode=self.mode\n except AttributeError:\n pass\n else :\n result +=" mode={0!r}".format(mode)\n return result+" encoding={0!r}>".format(self.encoding)\n \n @property\n def encoding(self):\n return self._encoding\n \n @property\n def errors(self):\n return self._errors\n \n @property\n def line_buffering(self):\n return self._line_buffering\n \n @property\n def buffer(self):\n return self._buffer\n \n def seekable(self):\n if self.closed:\n raise ValueError("I/O operation on closed file.")\n return self._seekable\n \n def readable(self):\n return self.buffer.readable()\n \n def writable(self):\n return self.buffer.writable()\n \n def flush(self):\n self.buffer.flush()\n self._telling=self._seekable\n \n def close(self):\n if self.buffer is not None and not self.closed:\n try :\n self.flush()\n finally :\n self.buffer.close()\n \n @property\n def closed(self):\n return self.buffer.closed\n \n @property\n def name(self):\n return self.buffer.name\n \n def fileno(self):\n return self.buffer.fileno()\n \n def isatty(self):\n return self.buffer.isatty()\n \n def write(self,s):\n \'\'\n if self.closed:\n raise ValueError("write to closed file")\n if not isinstance(s,str):\n raise TypeError("can\'t write %s to text stream"%\n s.__class__.__name__)\n length=len(s)\n haslf=(self._writetranslate or self._line_buffering)and "\\n"in s\n if haslf and self._writetranslate and self._writenl !="\\n":\n s=s.replace("\\n",self._writenl)\n encoder=self._encoder or self._get_encoder()\n \n b=encoder.encode(s)\n self.buffer.write(b)\n if self._line_buffering and (haslf or "\\r"in s):\n self.flush()\n self._snapshot=None\n if self._decoder:\n self._decoder.reset()\n return length\n \n def _get_encoder(self):\n make_encoder=codecs.getincrementalencoder(self._encoding)\n self._encoder=make_encoder(self._errors)\n return self._encoder\n \n def _get_decoder(self):\n make_decoder=codecs.getincrementaldecoder(self._encoding)\n decoder=make_decoder(self._errors)\n if self._readuniversal:\n decoder=IncrementalNewlineDecoder(decoder,self._readtranslate)\n self._decoder=decoder\n return decoder\n \n \n \n \n def _set_decoded_chars(self,chars):\n \'\'\n self._decoded_chars=chars\n self._decoded_chars_used=0\n \n def _get_decoded_chars(self,n=None ):\n \'\'\n offset=self._decoded_chars_used\n if n is None :\n chars=self._decoded_chars[offset:]\n else :\n chars=self._decoded_chars[offset:offset+n]\n self._decoded_chars_used +=len(chars)\n return chars\n \n def _rewind_decoded_chars(self,n):\n \'\'\n if self._decoded_chars_used 0:\n decoder.setstate((b\'\',dec_flags))\n \n n=len(decoder.decode(next_input[:skip_bytes]))\n if n <=chars_to_skip:\n b,d=decoder.getstate()\n if not b:\n \n dec_flags=d\n chars_to_skip -=n\n break\n \n skip_bytes -=len(b)\n skip_back=1\n else :\n \n skip_bytes -=skip_back\n skip_back=skip_back *2\n else :\n skip_bytes=0\n decoder.setstate((b\'\',dec_flags))\n \n \n start_pos=position+skip_bytes\n start_flags=dec_flags\n if chars_to_skip ==0:\n \n return self._pack_cookie(start_pos,start_flags)\n \n \n \n \n \n bytes_fed=0\n need_eof=0\n \n chars_decoded=0\n for i in range(skip_bytes,len(next_input)):\n bytes_fed +=1\n chars_decoded +=len(decoder.decode(next_input[i:i+1]))\n dec_buffer,dec_flags=decoder.getstate()\n if not dec_buffer and chars_decoded <=chars_to_skip:\n \n start_pos +=bytes_fed\n chars_to_skip -=chars_decoded\n start_flags,bytes_fed,chars_decoded=dec_flags,0,0\n if chars_decoded >=chars_to_skip:\n break\n else :\n \n chars_decoded +=len(decoder.decode(b\'\',final=True ))\n need_eof=1\n if chars_decoded =0:\n endpos=pos+1\n break\n else :\n start=len(line)\n \n elif self._readuniversal:\n \n \n \n \n nlpos=line.find("\\n",start)\n crpos=line.find("\\r",start)\n if crpos ==-1:\n if nlpos ==-1:\n \n start=len(line)\n else :\n \n endpos=nlpos+1\n break\n elif nlpos ==-1:\n \n endpos=crpos+1\n break\n elif nlpos =0:\n endpos=pos+len(self._readnl)\n break\n \n if limit >=0 and len(line)>=limit:\n endpos=limit\n break\n \n \n while self._read_chunk():\n if self._decoded_chars:\n break\n if self._decoded_chars:\n line +=self._get_decoded_chars()\n else :\n \n self._set_decoded_chars(\'\')\n self._snapshot=None\n return line\n \n if limit >=0 and endpos >limit:\n endpos=limit\n \n \n self._rewind_decoded_chars(len(line)-endpos)\n return line[:endpos]\n \n @property\n def newlines(self):\n return self._decoder.newlines if self._decoder else None\n \n \nclass StringIO(TextIOWrapper):\n \'\'\n\n\n\n \n \n def __init__(self,initial_value="",newline="\\n"):\n super(StringIO,self).__init__(BytesIO(),\n encoding="utf-8",\n errors="strict",\n newline=newline)\n \n \n if newline is None :\n self._writetranslate=False\n if initial_value is not None :\n if not isinstance(initial_value,str):\n raise TypeError("initial_value must be str or None, not {0}"\n .format(type(initial_value).__name__))\n initial_value=str(initial_value)\n self.write(initial_value)\n self.seek(0)\n \n def getvalue(self):\n self.flush()\n return self.buffer.getvalue().decode(self._encoding,self._errors)\n \n def __repr__(self):\n \n \n return object.__repr__(self)\n \n @property\n def errors(self):\n return None\n \n @property\n def encoding(self):\n return None\n \n def detach(self):\n \n self._unsupported("detach")\n',["_dummy_thread","_thread","abc","array","codecs","errno","io","locale","os"]],_markupbase:[".py",'\'\'\n\n\n\n\n\n\nimport re\n\n_declname_match=re.compile(r\'[a-zA-Z][-_.a-zA-Z0-9]*\\s*\').match\n_declstringlit_match=re.compile(r\'(\\\'[^\\\']*\\\'|"[^"]*")\\s*\').match\n_commentclose=re.compile(r\'--\\s*>\')\n_markedsectionclose=re.compile(r\']\\s*]\\s*>\')\n\n\n\n\n_msmarkedsectionclose=re.compile(r\']\\s*>\')\n\ndel re\n\n\nclass ParserBase:\n \'\'\n \n \n def __init__(self):\n if self.__class__ is ParserBase:\n raise RuntimeError(\n "_markupbase.ParserBase must be subclassed")\n \n def error(self,message):\n raise NotImplementedError(\n "subclasses of ParserBase must override error()")\n \n def reset(self):\n self.lineno=1\n self.offset=0\n \n def getpos(self):\n \'\'\n return self.lineno,self.offset\n \n \n \n \n \n def updatepos(self,i,j):\n if i >=j:\n return j\n rawdata=self.rawdata\n nlines=rawdata.count("\\n",i,j)\n if nlines:\n self.lineno=self.lineno+nlines\n pos=rawdata.rindex("\\n",i,j)\n self.offset=j -(pos+1)\n else :\n self.offset=self.offset+j -i\n return j\n \n _decl_otherchars=\'\'\n \n \n def parse_declaration(self,i):\n \n \n \n \n \n \n \n \n \n \n rawdata=self.rawdata\n j=i+2\n assert rawdata[i:j]=="":\n \n return j+1\n if rawdata[j:j+1]in ("-",""):\n \n \n return -1\n \n n=len(rawdata)\n if rawdata[j:j+2]==\'--\':\n \n return self.parse_comment(i)\n elif rawdata[j]==\'[\':\n \n \n \n \n return self.parse_marked_section(i)\n else :\n decltype,j=self._scan_name(j,i)\n if j <0:\n return j\n if decltype =="doctype":\n self._decl_otherchars=\'\'\n while j ":\n \n data=rawdata[i+2:j]\n if decltype =="doctype":\n self.handle_decl(data)\n else :\n \n \n \n \n self.unknown_decl(data)\n return j+1\n if c in "\\"\'":\n m=_declstringlit_match(rawdata,j)\n if not m:\n return -1\n j=m.end()\n elif c in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ":\n name,j=self._scan_name(j,i)\n elif c in self._decl_otherchars:\n j=j+1\n elif c =="[":\n \n if decltype =="doctype":\n j=self._parse_doctype_subset(j+1,i)\n elif decltype in {"attlist","linktype","link","element"}:\n \n \n \n \n self.error("unsupported \'[\' char in %s declaration"%decltype)\n else :\n self.error("unexpected \'[\' char in declaration")\n else :\n self.error(\n "unexpected %r char in declaration"%rawdata[j])\n if j <0:\n return j\n return -1\n \n \n \n def parse_marked_section(self,i,report=1):\n rawdata=self.rawdata\n assert rawdata[i:i+3]==\'n:\n \n return -1\n if rawdata[j:j+4]=="\x3c!--":\n j=self.parse_comment(j,report=0)\n if j <0:\n return j\n continue\n name,j=self._scan_name(j+2,declstartpos)\n if j ==-1:\n return -1\n if name not in {"attlist","element","entity","notation"}:\n self.updatepos(declstartpos,j+2)\n self.error(\n "unknown declaration %r in internal subset"%name)\n \n meth=getattr(self,"_parse_doctype_"+name)\n j=meth(j,declstartpos)\n if j <0:\n return j\n elif c =="%":\n \n if (j+1)==n:\n \n return -1\n s,j=self._scan_name(j+1,declstartpos)\n if j <0:\n return j\n if rawdata[j]==";":\n j=j+1\n elif c =="]":\n j=j+1\n while j ":\n return j\n self.updatepos(declstartpos,j)\n self.error("unexpected char after internal subset")\n else :\n return -1\n elif c.isspace():\n j=j+1\n else :\n self.updatepos(declstartpos,j)\n self.error("unexpected char %r in internal subset"%c)\n \n return -1\n \n \n def _parse_doctype_element(self,i,declstartpos):\n name,j=self._scan_name(i,declstartpos)\n if j ==-1:\n return -1\n \n rawdata=self.rawdata\n if \'>\'in rawdata[j:]:\n return rawdata.find(">",j)+1\n return -1\n \n \n def _parse_doctype_attlist(self,i,declstartpos):\n rawdata=self.rawdata\n name,j=self._scan_name(i,declstartpos)\n c=rawdata[j:j+1]\n if c =="":\n return -1\n if c ==">":\n return j+1\n while 1:\n \n \n name,j=self._scan_name(j,declstartpos)\n if j <0:\n return j\n c=rawdata[j:j+1]\n if c =="":\n return -1\n if c =="(":\n \n if ")"in rawdata[j:]:\n j=rawdata.find(")",j)+1\n else :\n return -1\n while rawdata[j:j+1].isspace():\n j=j+1\n if not rawdata[j:]:\n \n return -1\n else :\n name,j=self._scan_name(j,declstartpos)\n c=rawdata[j:j+1]\n if not c:\n return -1\n if c in "\'\\"":\n m=_declstringlit_match(rawdata,j)\n if m:\n j=m.end()\n else :\n return -1\n c=rawdata[j:j+1]\n if not c:\n return -1\n if c =="#":\n if rawdata[j:]=="#":\n \n return -1\n name,j=self._scan_name(j+1,declstartpos)\n if j <0:\n return j\n c=rawdata[j:j+1]\n if not c:\n return -1\n if c ==\'>\':\n \n return j+1\n \n \n def _parse_doctype_notation(self,i,declstartpos):\n name,j=self._scan_name(i,declstartpos)\n if j <0:\n return j\n rawdata=self.rawdata\n while 1:\n c=rawdata[j:j+1]\n if not c:\n \n return -1\n if c ==\'>\':\n return j+1\n if c in "\'\\"":\n m=_declstringlit_match(rawdata,j)\n if not m:\n return -1\n j=m.end()\n else :\n name,j=self._scan_name(j,declstartpos)\n if j <0:\n return j\n \n \n def _parse_doctype_entity(self,i,declstartpos):\n rawdata=self.rawdata\n if rawdata[i:i+1]=="%":\n j=i+1\n while 1:\n c=rawdata[j:j+1]\n if not c:\n return -1\n if c.isspace():\n j=j+1\n else :\n break\n else :\n j=i\n name,j=self._scan_name(j,declstartpos)\n if j <0:\n return j\n while 1:\n c=self.rawdata[j:j+1]\n if not c:\n return -1\n if c in "\'\\"":\n m=_declstringlit_match(rawdata,j)\n if m:\n j=m.end()\n else :\n return -1\n elif c ==">":\n return j+1\n else :\n name,j=self._scan_name(j,declstartpos)\n if j <0:\n return j\n \n \n \n def _scan_name(self,i,declstartpos):\n rawdata=self.rawdata\n n=len(rawdata)\n if i ==n:\n return None ,-1\n m=_declname_match(rawdata,i)\n if m:\n s=m.group()\n name=s.strip()\n if (i+len(s))==n:\n return None ,-1\n return name.lower(),m.end()\n else :\n self.updatepos(declstartpos,i)\n self.error("expected name token at %r"\n %rawdata[declstartpos:declstartpos+20])\n \n \n def unknown_decl(self,data):\n pass\n',["re"]],_py_abc:[".py","from _weakrefset import WeakSet\n\n\ndef get_cache_token():\n ''\n\n\n\n\n \n return ABCMeta._abc_invalidation_counter\n \n \nclass ABCMeta(type):\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n _abc_invalidation_counter=0\n \n def __new__(mcls,name,bases,namespace,**kwargs):\n cls=super().__new__(mcls,name,bases,namespace,**kwargs)\n \n abstracts={name\n for name,value in namespace.items()\n if getattr(value,\"__isabstractmethod__\",False )}\n for base in bases:\n for name in getattr(base,\"__abstractmethods__\",set()):\n value=getattr(cls,name,None )\n if getattr(value,\"__isabstractmethod__\",False ):\n abstracts.add(name)\n cls.__abstractmethods__=frozenset(abstracts)\n \n cls._abc_registry=WeakSet()\n cls._abc_cache=WeakSet()\n cls._abc_negative_cache=WeakSet()\n cls._abc_negative_cache_version=ABCMeta._abc_invalidation_counter\n return cls\n \n def register(cls,subclass):\n ''\n\n\n \n if not isinstance(subclass,type):\n raise TypeError(\"Can only register classes\")\n if issubclass(subclass,cls):\n return subclass\n \n \n if issubclass(cls,subclass):\n \n raise RuntimeError(\"Refusing to create an inheritance cycle\")\n cls._abc_registry.add(subclass)\n ABCMeta._abc_invalidation_counter +=1\n return subclass\n \n def _dump_registry(cls,file=None ):\n ''\n print(f\"Class: {cls.__module__}.{cls.__qualname__}\",file=file)\n print(f\"Inv. counter: {get_cache_token()}\",file=file)\n for name in cls.__dict__:\n if name.startswith(\"_abc_\"):\n value=getattr(cls,name)\n if isinstance(value,WeakSet):\n value=set(value)\n print(f\"{name}: {value!r}\",file=file)\n \n def _abc_registry_clear(cls):\n ''\n cls._abc_registry.clear()\n \n def _abc_caches_clear(cls):\n ''\n cls._abc_cache.clear()\n cls._abc_negative_cache.clear()\n \n def __instancecheck__(cls,instance):\n ''\n \n subclass=instance.__class__\n if subclass in cls._abc_cache:\n return True\n subtype=type(instance)\n if subtype is subclass:\n if (cls._abc_negative_cache_version ==\n ABCMeta._abc_invalidation_counter and\n subclass in cls._abc_negative_cache):\n return False\n \n return cls.__subclasscheck__(subclass)\n return any(cls.__subclasscheck__(c)for c in (subclass,subtype))\n \n def __subclasscheck__(cls,subclass):\n ''\n if not isinstance(subclass,type):\n raise TypeError('issubclass() arg 1 must be a class')\n \n if subclass in cls._abc_cache:\n return True\n \n if cls._abc_negative_cache_version >(numbytes *8 -k)\n",["browser"]],_socket:[".py","''\n\n\n\n\nAF_APPLETALK=16\n\nAF_DECnet=12\n\nAF_INET=2\n\nAF_INET6=23\n\nAF_IPX=6\n\nAF_IRDA=26\n\nAF_SNA=11\n\nAF_UNSPEC=0\n\nAI_ADDRCONFIG=1024\n\nAI_ALL=256\n\nAI_CANONNAME=2\n\nAI_NUMERICHOST=4\n\nAI_NUMERICSERV=8\n\nAI_PASSIVE=1\n\nAI_V4MAPPED=2048\n\nCAPI=''\n\nEAI_AGAIN=11002\n\nEAI_BADFLAGS=10022\n\nEAI_FAIL=11003\n\nEAI_FAMILY=10047\n\nEAI_MEMORY=8\n\nEAI_NODATA=11001\n\nEAI_NONAME=11001\n\nEAI_SERVICE=10109\n\nEAI_SOCKTYPE=10044\n\nINADDR_ALLHOSTS_GROUP=-536870911\n\nINADDR_ANY=0\n\nINADDR_BROADCAST=-1\n\nINADDR_LOOPBACK=2130706433\n\nINADDR_MAX_LOCAL_GROUP=-536870657\n\nINADDR_NONE=-1\n\nINADDR_UNSPEC_GROUP=-536870912\n\nIPPORT_RESERVED=1024\n\nIPPORT_USERRESERVED=5000\n\nIPPROTO_ICMP=1\n\nIPPROTO_IP=0\n\nIPPROTO_RAW=255\n\nIPPROTO_TCP=6\n\nIPPROTO_UDP=17\n\nIPV6_CHECKSUM=26\n\nIPV6_DONTFRAG=14\n\nIPV6_HOPLIMIT=21\n\nIPV6_HOPOPTS=1\n\nIPV6_JOIN_GROUP=12\n\nIPV6_LEAVE_GROUP=13\n\nIPV6_MULTICAST_HOPS=10\n\nIPV6_MULTICAST_IF=9\n\nIPV6_MULTICAST_LOOP=11\n\nIPV6_PKTINFO=19\n\nIPV6_RECVRTHDR=38\n\nIPV6_RECVTCLASS=40\n\nIPV6_RTHDR=32\n\nIPV6_TCLASS=39\n\nIPV6_UNICAST_HOPS=4\n\nIPV6_V6ONLY=27\n\nIP_ADD_MEMBERSHIP=12\n\nIP_DROP_MEMBERSHIP=13\n\nIP_HDRINCL=2\n\nIP_MULTICAST_IF=9\n\nIP_MULTICAST_LOOP=11\n\nIP_MULTICAST_TTL=10\n\nIP_OPTIONS=1\n\nIP_RECVDSTADDR=25\n\nIP_TOS=3\n\nIP_TTL=4\n\nMSG_BCAST=1024\n\nMSG_CTRUNC=512\n\nMSG_DONTROUTE=4\n\nMSG_MCAST=2048\n\nMSG_OOB=1\n\nMSG_PEEK=2\n\nMSG_TRUNC=256\n\nNI_DGRAM=16\n\nNI_MAXHOST=1025\n\nNI_MAXSERV=32\n\nNI_NAMEREQD=4\n\nNI_NOFQDN=1\n\nNI_NUMERICHOST=2\n\nNI_NUMERICSERV=8\n\nRCVALL_MAX=3\n\nRCVALL_OFF=0\n\nRCVALL_ON=1\n\nRCVALL_SOCKETLEVELONLY=2\n\nSHUT_RD=0\n\nSHUT_RDWR=2\n\nSHUT_WR=1\n\nSIO_KEEPALIVE_VALS=2550136836\n\nSIO_RCVALL=2550136833\n\nSOCK_DGRAM=2\n\nSOCK_RAW=3\n\nSOCK_RDM=4\n\nSOCK_SEQPACKET=5\n\nSOCK_STREAM=1\n\nSOL_IP=0\n\nSOL_SOCKET=65535\n\nSOL_TCP=6\n\nSOL_UDP=17\n\nSOMAXCONN=2147483647\n\nSO_ACCEPTCONN=2\n\nSO_BROADCAST=32\n\nSO_DEBUG=1\n\nSO_DONTROUTE=16\n\nSO_ERROR=4103\n\nSO_EXCLUSIVEADDRUSE=-5\n\nSO_KEEPALIVE=8\n\nSO_LINGER=128\n\nSO_OOBINLINE=256\n\nSO_RCVBUF=4098\n\nSO_RCVLOWAT=4100\n\nSO_RCVTIMEO=4102\n\nSO_REUSEADDR=4\n\nSO_SNDBUF=4097\n\nSO_SNDLOWAT=4099\n\nSO_SNDTIMEO=4101\n\nSO_TYPE=4104\n\nSO_USELOOPBACK=64\n\nclass SocketType:\n pass\n \nTCP_MAXSEG=4\n\nTCP_NODELAY=1\n\n__loader__='<_frozen_importlib.ExtensionFileLoader object at 0x00CA2D90>'\n\ndef dup(*args,**kw):\n ''\n\n \n pass\n \nclass error:\n pass\n \nclass gaierror:\n pass\n \ndef getaddrinfo(*args,**kw):\n ''\n\n \n pass\n \ndef getdefaulttimeout(*args,**kw):\n ''\n\n\n \n pass\n \ndef gethostbyaddr(*args,**kw):\n ''\n\n \n pass\n \ndef gethostbyname(*args,**kw):\n ''\n \n pass\n \ndef gethostbyname_ex(*args,**kw):\n ''\n\n \n pass\n \ndef gethostname(*args,**kw):\n ''\n \n pass\n \ndef getnameinfo(*args,**kw):\n ''\n \n pass\n \ndef getprotobyname(*args,**kw):\n ''\n \n pass\n \ndef getservbyname(*args,**kw):\n ''\n\n\n \n pass\n \ndef getservbyport(*args,**kw):\n ''\n\n\n \n pass\n \nhas_ipv6=True\n\nclass herror:\n pass\n \ndef htonl(*args,**kw):\n ''\n \n pass\n \ndef htons(*args,**kw):\n ''\n \n pass\n \ndef inet_aton(*args,**kw):\n ''\n\n \n pass\n \ndef inet_ntoa(*args,**kw):\n ''\n \n pass\n \ndef ntohl(*args,**kw):\n ''\n \n pass\n \ndef ntohs(*args,**kw):\n ''\n \n pass\n \ndef setdefaulttimeout(*args,**kw):\n ''\n\n\n \n pass\n \nclass socket:\n def __init__(self,*args,**kw):\n pass\n def bind(self,*args,**kw):\n pass\n def close(self):\n pass\n \nclass timeout:\n pass\n",[]],_sre:[".py",'\n\'\'\n\n\n\n\n\n\n\nMAXREPEAT=2147483648\n\n\nimport operator,sys\nfrom sre_constants import ATCODES,OPCODES,CHCODES\nfrom sre_constants import SRE_INFO_PREFIX,SRE_INFO_LITERAL\nfrom sre_constants import SRE_FLAG_UNICODE,SRE_FLAG_LOCALE\n\n\nimport sys\n\n\n\nMAGIC=20031017\n\n\n\n\n\n\n\n\n\n\n\n\n\nCODESIZE=4\n\ncopyright="_sre.py 2.4c Copyright 2005 by Nik Haldimann"\n\n\ndef getcodesize():\n return CODESIZE\n \ndef compile(pattern,flags,code,groups=0,groupindex={},indexgroup=[None ]):\n \'\'\n \n return SRE_Pattern(pattern,flags,code,groups,groupindex,indexgroup)\n \ndef getlower(char_ord,flags):\n if (char_ord <128)or (flags&SRE_FLAG_UNICODE)\\\n or (flags&SRE_FLAG_LOCALE and char_ord <256):\n \n return ord(chr(char_ord).lower())\n else :\n return char_ord\n \n \nclass SRE_Pattern:\n\n def __init__(self,pattern,flags,code,groups=0,groupindex={},indexgroup=[None ]):\n self.pattern=pattern\n self.flags=flags\n self.groups=groups\n self.groupindex=groupindex\n self._indexgroup=indexgroup\n self._code=code\n \n def match(self,string,pos=0,endpos=sys.maxsize):\n \'\'\n\n \n state=_State(string,pos,endpos,self.flags)\n if state.match(self._code):\n return SRE_Match(self,state)\n return None\n \n def search(self,string,pos=0,endpos=sys.maxsize):\n \'\'\n\n\n \n state=_State(string,pos,endpos,self.flags)\n if state.search(self._code):\n return SRE_Match(self,state)\n else :\n return None\n \n def findall(self,string,pos=0,endpos=sys.maxsize):\n \'\'\n matchlist=[]\n state=_State(string,pos,endpos,self.flags)\n while state.start <=state.end:\n state.reset()\n state.string_position=state.start\n if not state.search(self._code):\n break\n match=SRE_Match(self,state)\n if self.groups ==0 or self.groups ==1:\n item=match.group(self.groups)\n else :\n item=match.groups("")\n matchlist.append(item)\n if state.string_position ==state.start:\n state.start +=1\n else :\n state.start=state.string_position\n return matchlist\n \n def _subx(self,template,string,count=0,subn=False ):\n filter=template\n if not callable(template)and "\\\\"in template:\n \n \n \n \n import re as sre\n filter=sre._subx(self,template)\n state=_State(string,0,sys.maxsize,self.flags)\n sublist=[]\n \n n=last_pos=0\n while not count or n 0):\n \n if callable(filter):\n sublist.append(filter(SRE_Match(self,state)))\n else :\n sublist.append(filter)\n last_pos=state.string_position\n n +=1\n if state.string_position ==state.start:\n state.start +=1\n else :\n state.start=state.string_position\n \n if last_pos =0 and group <=self.re.groups:\n return group\n else :\n if group in self.re.groupindex:\n return self.re.groupindex[group]\n raise IndexError("no such group")\n \n def _get_slice(self,group,default):\n group_indices=self.regs[group]\n if group_indices[0]>=0:\n return self.string[group_indices[0]:group_indices[1]]\n else :\n return default\n \n def start(self,group=0):\n \'\'\n\n \n return self.regs[self._get_index(group)][0]\n \n def end(self,group=0):\n \'\'\n\n \n return self.regs[self._get_index(group)][1]\n \n def span(self,group=0):\n \'\'\n return self.start(group),self.end(group)\n \n def expand(self,template):\n \'\'\n \n import sre\n return sre._expand(self.re,self,template)\n \n def groups(self,default=None ):\n \'\'\n\n \n groups=[]\n for indices in self.regs[1:]:\n if indices[0]>=0:\n groups.append(self.string[indices[0]:indices[1]])\n else :\n groups.append(default)\n return tuple(groups)\n \n def groupdict(self,default=None ):\n \'\'\n\n \n groupdict={}\n for key,value in self.re.groupindex.items():\n groupdict[key]=self._get_slice(value,default)\n return groupdict\n \n def group(self,*args):\n \'\'\n \n if len(args)==0:\n args=(0,)\n grouplist=[]\n for group in args:\n grouplist.append(self._get_slice(self._get_index(group),None ))\n if len(grouplist)==1:\n return grouplist[0]\n else :\n return tuple(grouplist)\n \n def __copy__():\n raise TypeError("cannot copy this pattern object")\n \n def __deepcopy__():\n raise TypeError("cannot copy this pattern object")\n \n \nclass _State:\n\n def __init__(self,string,start,end,flags):\n self.string=string\n if start <0:\n start=0\n if end >len(string):\n end=len(string)\n self.start=start\n self.string_position=self.start\n self.end=end\n self.pos=start\n self.flags=flags\n self.reset()\n \n def reset(self):\n self.marks=[]\n self.lastindex=-1\n self.marks_stack=[]\n self.context_stack=[]\n self.repeat=None\n \n def match(self,pattern_codes):\n \n \n \n \n \n \n \n \n \n dispatcher=_OpcodeDispatcher()\n self.context_stack.append(_MatchContext(self,pattern_codes))\n has_matched=None\n while len(self.context_stack)>0:\n context=self.context_stack[-1]\n has_matched=dispatcher.match(context)\n if has_matched is not None :\n self.context_stack.pop()\n return has_matched\n \n def search(self,pattern_codes):\n flags=0\n if pattern_codes[0]==OPCODES["info"]:\n \n \n if pattern_codes[2]&SRE_INFO_PREFIX and pattern_codes[5]>1:\n return self.fast_search(pattern_codes)\n flags=pattern_codes[2]\n pattern_codes=pattern_codes[pattern_codes[1]+1:]\n \n string_position=self.start\n if pattern_codes[0]==OPCODES["literal"]:\n \n \n character=pattern_codes[1]\n while True :\n while string_position =self.end:\n return False\n self.start=string_position\n string_position +=1\n self.string_position=string_position\n if flags&SRE_INFO_LITERAL:\n return True\n if self.match(pattern_codes[2:]):\n return True\n return False\n \n \n while string_position <=self.end:\n self.reset()\n self.start=self.string_position=string_position\n if self.match(pattern_codes):\n return True\n string_position +=1\n return False\n \n def fast_search(self,pattern_codes):\n \'\'\n \n \n \n flags=pattern_codes[2]\n prefix_len=pattern_codes[5]\n prefix_skip=pattern_codes[6]\n prefix=pattern_codes[7:7+prefix_len]\n overlap=pattern_codes[7+prefix_len -1:pattern_codes[1]+1]\n pattern_codes=pattern_codes[pattern_codes[1]+1:]\n i=0\n string_position=self.string_position\n while string_position =len(self.marks):\n self.marks.extend([None ]*(mark_nr -len(self.marks)+1))\n self.marks[mark_nr]=position\n \n def get_marks(self,group_index):\n marks_index=2 *group_index\n if len(self.marks)>marks_index+1:\n return self.marks[marks_index],self.marks[marks_index+1]\n else :\n return None ,None\n \n def marks_push(self):\n self.marks_stack.append((self.marks[:],self.lastindex))\n \n def marks_pop(self):\n self.marks,self.lastindex=self.marks_stack.pop()\n \n def marks_pop_keep(self):\n self.marks,self.lastindex=self.marks_stack[-1]\n \n def marks_pop_discard(self):\n self.marks_stack.pop()\n \n def lower(self,char_ord):\n return getlower(char_ord,self.flags)\n \n \nclass _MatchContext:\n\n def __init__(self,state,pattern_codes):\n self.state=state\n self.pattern_codes=pattern_codes\n self.string_position=state.string_position\n self.code_position=0\n self.has_matched=None\n \n def push_new_context(self,pattern_offset):\n \'\'\n\n \n child_context=_MatchContext(self.state,\n self.pattern_codes[self.code_position+pattern_offset:])\n \n \n \n \n self.state.context_stack.append(child_context)\n return child_context\n \n def peek_char(self,peek=0):\n return self.state.string[self.string_position+peek]\n \n def skip_char(self,skip_count):\n self.string_position +=skip_count\n \n def remaining_chars(self):\n return self.state.end -self.string_position\n \n def peek_code(self,peek=0):\n return self.pattern_codes[self.code_position+peek]\n \n def skip_code(self,skip_count):\n self.code_position +=skip_count\n \n def remaining_codes(self):\n return len(self.pattern_codes)-self.code_position\n \n def at_beginning(self):\n return self.string_position ==0\n \n def at_end(self):\n return self.string_position ==self.state.end\n \n def at_linebreak(self):\n return not self.at_end()and _is_linebreak(self.peek_char())\n \n def at_boundary(self,word_checker):\n if self.at_beginning()and self.at_end():\n return False\n that=not self.at_beginning()and word_checker(self.peek_char(-1))\n this=not self.at_end()and word_checker(self.peek_char())\n return this !=that\n \n \nclass _RepeatContext(_MatchContext):\n\n def __init__(self,context):\n _MatchContext.__init__(self,context.state,\n context.pattern_codes[context.code_position:])\n self.count=-1\n \n self.previous=context.state.repeat\n self.last_position=None\n \n \nclass _Dispatcher:\n\n DISPATCH_TABLE=None\n \n def dispatch(self,code,context):\n method=self.DISPATCH_TABLE.get(code,self.__class__.unknown)\n return method(self,context)\n \n def unknown(self,code,ctx):\n raise NotImplementedError()\n \n def build_dispatch_table(cls,code_dict,method_prefix):\n if cls.DISPATCH_TABLE is not None :\n return\n table={}\n for key,value in code_dict.items():\n if hasattr(cls,"%s%s"%(method_prefix,key)):\n table[value]=getattr(cls,"%s%s"%(method_prefix,key))\n cls.DISPATCH_TABLE=table\n \n build_dispatch_table=classmethod(build_dispatch_table)\n \n \nclass _OpcodeDispatcher(_Dispatcher):\n\n def __init__(self):\n self.executing_contexts={}\n self.at_dispatcher=_AtcodeDispatcher()\n self.ch_dispatcher=_ChcodeDispatcher()\n self.set_dispatcher=_CharsetDispatcher()\n \n def match(self,context):\n \'\'\n\n \n while context.remaining_codes()>0 and context.has_matched is None :\n opcode=context.peek_code()\n if not self.dispatch(opcode,context):\n return None\n if context.has_matched is None :\n context.has_matched=False\n return context.has_matched\n \n def dispatch(self,opcode,context):\n \'\'\n \n \n if id(context)in self.executing_contexts:\n generator=self.executing_contexts[id(context)]\n del self.executing_contexts[id(context)]\n has_finished=next(generator)\n else :\n method=self.DISPATCH_TABLE.get(opcode,_OpcodeDispatcher.unknown)\n has_finished=method(self,context)\n if hasattr(has_finished,"__next__"):\n generator=has_finished\n has_finished=next(generator)\n if not has_finished:\n self.executing_contexts[id(context)]=generator\n return has_finished\n \n def op_success(self,ctx):\n \n \n ctx.state.string_position=ctx.string_position\n ctx.has_matched=True\n return True\n \n def op_failure(self,ctx):\n \n \n ctx.has_matched=False\n return True\n \n def general_op_literal(self,ctx,compare,decorate=lambda x:x):\n \n if ctx.at_end()or not compare(decorate(ord(ctx.peek_char())),\n decorate(ctx.peek_code(1))):\n ctx.has_matched=False\n ctx.skip_code(2)\n ctx.skip_char(1)\n \n def op_literal(self,ctx):\n \n \n \n self.general_op_literal(ctx,operator.eq)\n return True\n \n def op_not_literal(self,ctx):\n \n \n \n self.general_op_literal(ctx,operator.ne)\n return True\n \n def op_literal_ignore(self,ctx):\n \n \n \n self.general_op_literal(ctx,operator.eq,ctx.state.lower)\n return True\n \n def op_not_literal_ignore(self,ctx):\n \n \n \n self.general_op_literal(ctx,operator.ne,ctx.state.lower)\n return True\n \n def op_at(self,ctx):\n \n \n \n if not self.at_dispatcher.dispatch(ctx.peek_code(1),ctx):\n ctx.has_matched=False\n \n return True\n ctx.skip_code(2)\n return True\n \n def op_category(self,ctx):\n \n \n \n if ctx.at_end()or not self.ch_dispatcher.dispatch(ctx.peek_code(1),ctx):\n ctx.has_matched=False\n \n return True\n ctx.skip_code(2)\n ctx.skip_char(1)\n return True\n \n def op_any(self,ctx):\n \n \n \n if ctx.at_end()or ctx.at_linebreak():\n ctx.has_matched=False\n \n return True\n ctx.skip_code(1)\n ctx.skip_char(1)\n return True\n \n def op_any_all(self,ctx):\n \n \n \n if ctx.at_end():\n ctx.has_matched=False\n \n return True\n ctx.skip_code(1)\n ctx.skip_char(1)\n return True\n \n def general_op_in(self,ctx,decorate=lambda x:x):\n \n \n if ctx.at_end():\n ctx.has_matched=False\n \n return\n skip=ctx.peek_code(1)\n ctx.skip_code(2)\n \n \n if not self.check_charset(ctx,decorate(ord(ctx.peek_char()))):\n \n ctx.has_matched=False\n return\n ctx.skip_code(skip -1)\n ctx.skip_char(1)\n \n \n def op_in(self,ctx):\n \n \n \n self.general_op_in(ctx)\n return True\n \n def op_in_ignore(self,ctx):\n \n \n \n self.general_op_in(ctx,ctx.state.lower)\n return True\n \n def op_jump(self,ctx):\n \n \n \n ctx.skip_code(ctx.peek_code(1)+1)\n return True\n \n \n \n op_info=op_jump\n \n def op_mark(self,ctx):\n \n \n \n ctx.state.set_mark(ctx.peek_code(1),ctx.string_position)\n ctx.skip_code(2)\n return True\n \n def op_branch(self,ctx):\n \n \n \n ctx.state.marks_push()\n ctx.skip_code(1)\n current_branch_length=ctx.peek_code(0)\n while current_branch_length:\n \n \n if not (ctx.peek_code(1)==OPCODES["literal"]and\\\n (ctx.at_end()or ctx.peek_code(2)!=ord(ctx.peek_char()))):\n ctx.state.string_position=ctx.string_position\n child_context=ctx.push_new_context(1)\n \n yield False\n if child_context.has_matched:\n ctx.has_matched=True\n yield True\n ctx.state.marks_pop_keep()\n ctx.skip_code(current_branch_length)\n current_branch_length=ctx.peek_code(0)\n ctx.state.marks_pop_discard()\n ctx.has_matched=False\n \n yield True\n \n def op_repeat_one(self,ctx):\n \n \n \n \n mincount=ctx.peek_code(2)\n maxcount=ctx.peek_code(3)\n \n \n \n if ctx.remaining_chars()=mincount and\\\n (ctx.at_end()or ord(ctx.peek_char())!=char):\n ctx.skip_char(-1)\n count -=1\n if count =mincount:\n ctx.state.string_position=ctx.string_position\n child_context=ctx.push_new_context(ctx.peek_code(1)+1)\n yield False\n if child_context.has_matched:\n ctx.has_matched=True\n yield True\n ctx.skip_char(-1)\n count -=1\n ctx.state.marks_pop_keep()\n \n ctx.state.marks_pop_discard()\n ctx.has_matched=False\n \n yield True\n \n def op_min_repeat_one(self,ctx):\n \n \n mincount=ctx.peek_code(2)\n maxcount=ctx.peek_code(3)\n \n \n if ctx.remaining_chars()=maxcount and maxcount !=MAXREPEAT:\n ctx.has_matched=False\n \n yield True\n repeat.count=count\n child_context=repeat.push_new_context(4)\n yield False\n ctx.has_matched=child_context.has_matched\n if not ctx.has_matched:\n repeat.count=count -1\n ctx.state.string_position=ctx.string_position\n yield True\n \n def general_op_groupref(self,ctx,decorate=lambda x:x):\n group_start,group_end=ctx.state.get_marks(ctx.peek_code(1))\n if group_start is None or group_end is None or group_end =0:\n child_context=ctx.push_new_context(3)\n yield False\n if child_context.has_matched:\n ctx.has_matched=False\n yield True\n ctx.skip_code(ctx.peek_code(1)+1)\n yield True\n \n def unknown(self,ctx):\n \n raise RuntimeError("Internal re error. Unknown opcode: %s"%ctx.peek_code())\n \n def check_charset(self,ctx,char):\n \'\'\n \n self.set_dispatcher.reset(char)\n save_position=ctx.code_position\n result=None\n while result is None :\n result=self.set_dispatcher.dispatch(ctx.peek_code(),ctx)\n ctx.code_position=save_position\n \n return result\n \n def count_repetitions(self,ctx,maxcount):\n \'\'\n\n \n count=0\n real_maxcount=ctx.state.end -ctx.string_position\n if maxcount >4)\\\n &(1 <<(char_code&15)):\n return self.ok\n ctx.skip_code(16)\n else :\n if char_code <256 and ctx.peek_code(char_code >>5)\\\n &(1 <<(char_code&31)):\n return self.ok\n ctx.skip_code(8)\n def set_range(self,ctx):\n \n if ctx.peek_code(1)<=self.char <=ctx.peek_code(2):\n return self.ok\n ctx.skip_code(3)\n def set_negate(self,ctx):\n self.ok=not self.ok\n ctx.skip_code(1)\n \n \n def set_bigcharset(self,ctx):\n raise NotImplementedError("_sre.py: set_bigcharset, array not implemented")\n \n char_code=self.char\n count=ctx.peek_code(1)\n ctx.skip_code(2)\n if char_code <65536:\n block_index=char_code >>8\n \n a=array.array("B")\n a.fromstring(array.array(CODESIZE ==2 and "H"or "I",\n [ctx.peek_code(block_index //CODESIZE)]).tostring())\n block=a[block_index %CODESIZE]\n ctx.skip_code(256 //CODESIZE)\n block_value=ctx.peek_code(block *(32 //CODESIZE)\n +((char_code&255)>>(CODESIZE ==2 and 4 or 5)))\n if block_value&(1 <<(char_code&((8 *CODESIZE)-1))):\n return self.ok\n else :\n ctx.skip_code(256 //CODESIZE)\n ctx.skip_code(count *(32 //CODESIZE))\n \n def unknown(self,ctx):\n return False\n \n_CharsetDispatcher.build_dispatch_table(OPCODES,"set_")\n\n\nclass _AtcodeDispatcher(_Dispatcher):\n\n def at_beginning(self,ctx):\n return ctx.at_beginning()\n at_beginning_string=at_beginning\n def at_beginning_line(self,ctx):\n return ctx.at_beginning()or _is_linebreak(ctx.peek_char(-1))\n def at_end(self,ctx):\n return (ctx.remaining_chars()==1 and ctx.at_linebreak())or ctx.at_end()\n def at_end_line(self,ctx):\n return ctx.at_linebreak()or ctx.at_end()\n def at_end_string(self,ctx):\n return ctx.at_end()\n def at_boundary(self,ctx):\n return ctx.at_boundary(_is_word)\n def at_non_boundary(self,ctx):\n return not ctx.at_boundary(_is_word)\n def at_loc_boundary(self,ctx):\n return ctx.at_boundary(_is_loc_word)\n def at_loc_non_boundary(self,ctx):\n return not ctx.at_boundary(_is_loc_word)\n def at_uni_boundary(self,ctx):\n return ctx.at_boundary(_is_uni_word)\n def at_uni_non_boundary(self,ctx):\n return not ctx.at_boundary(_is_uni_word)\n def unknown(self,ctx):\n return False\n \n_AtcodeDispatcher.build_dispatch_table(ATCODES,"")\n\n\nclass _ChcodeDispatcher(_Dispatcher):\n\n def category_digit(self,ctx):\n return _is_digit(ctx.peek_char())\n def category_not_digit(self,ctx):\n return not _is_digit(ctx.peek_char())\n def category_space(self,ctx):\n return _is_space(ctx.peek_char())\n def category_not_space(self,ctx):\n return not _is_space(ctx.peek_char())\n def category_word(self,ctx):\n return _is_word(ctx.peek_char())\n def category_not_word(self,ctx):\n return not _is_word(ctx.peek_char())\n def category_linebreak(self,ctx):\n return _is_linebreak(ctx.peek_char())\n def category_not_linebreak(self,ctx):\n return not _is_linebreak(ctx.peek_char())\n def category_loc_word(self,ctx):\n return _is_loc_word(ctx.peek_char())\n def category_loc_not_word(self,ctx):\n return not _is_loc_word(ctx.peek_char())\n def category_uni_digit(self,ctx):\n return ctx.peek_char().isdigit()\n def category_uni_not_digit(self,ctx):\n return not ctx.peek_char().isdigit()\n def category_uni_space(self,ctx):\n return ctx.peek_char().isspace()\n def category_uni_not_space(self,ctx):\n return not ctx.peek_char().isspace()\n def category_uni_word(self,ctx):\n return _is_uni_word(ctx.peek_char())\n def category_uni_not_word(self,ctx):\n return not _is_uni_word(ctx.peek_char())\n def category_uni_linebreak(self,ctx):\n return ord(ctx.peek_char())in _uni_linebreaks\n def category_uni_not_linebreak(self,ctx):\n return ord(ctx.peek_char())not in _uni_linebreaks\n def unknown(self,ctx):\n return False\n \n_ChcodeDispatcher.build_dispatch_table(CHCODES,"")\n\n\n_ascii_char_info=[0,0,0,0,0,0,0,0,0,2,6,2,\n2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,25,25,25,25,25,25,25,25,\n25,25,0,0,0,0,0,0,0,24,24,24,24,24,24,24,24,24,24,\n24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,0,0,\n0,0,16,0,24,24,24,24,24,24,24,24,24,24,24,24,24,24,\n24,24,24,24,24,24,24,24,24,24,24,24,0,0,0,0,0]\n\ndef _is_digit(char):\n code=ord(char)\n return code <128 and _ascii_char_info[code]&1\n \ndef _is_space(char):\n code=ord(char)\n return code <128 and _ascii_char_info[code]&2\n \ndef _is_word(char):\n\n code=ord(char)\n return code <128 and _ascii_char_info[code]&16\n \ndef _is_loc_word(char):\n return (not (ord(char)&~255)and char.isalnum())or char ==\'_\'\n \ndef _is_uni_word(char):\n\n\n return chr(ord(char)).isalnum()or char ==\'_\'\n \ndef _is_linebreak(char):\n return char =="\\n"\n \n \n_uni_linebreaks=[10,13,28,29,30,133,8232,8233]\n\ndef _log(message):\n if 0:\n print(message)\n',["operator","re","sre","sre_constants","sys"]],_string:[".py","''\n\nimport re\n\nclass __loader__(object):\n pass\n \ndef formatter_field_name_split(fieldname):\n ''\n _list=[]\n for _name in fieldname:\n _parts=_name.split('.')\n for _item in _parts:\n is_attr=False\n if re.match('\\d+',_item):\n _list.append((int(_item),is_attr))\n else :\n _list.append((_item,is_attr))\n \n return _list[0][0],iter(_list[1:])\n \ndef formatter_parser(*args,**kw):\n ''\n \n assert len(args)==1\n assert isinstance(args[0],str)\n \n _result=[]\n for _match in re.finditer(\"([^{]*)?(\\{[^}]*\\})?\",args[0]):\n _pre,_fmt=_match.groups()\n if _fmt is None :\n _result.append((_pre,None ,None ,None ))\n elif _fmt =='{}':\n _result.append((_pre,'','',None ))\n else :\n _m=re.match(\"\\{([^!]*)!?(.*)?\\}\",_fmt)\n _name=_m.groups(0)\n _flags=_m.groups(1)\n \n _result.append((_pre,_name,_flags,None ))\n \n return _result\n",["re"]],_strptime:[".py","''\n\n\n\n\n\n\n\n\n\n\n\nimport time\nimport locale\nimport calendar\nfrom re import compile as re_compile\nfrom re import IGNORECASE\nfrom re import escape as re_escape\nfrom datetime import (date as datetime_date,\ntimedelta as datetime_timedelta,\ntimezone as datetime_timezone)\ntry :\n from _thread import allocate_lock as _thread_allocate_lock\nexcept ImportError:\n from _dummy_thread import allocate_lock as _thread_allocate_lock\n \n__all__=[]\n\ndef _getlang():\n\n return locale.getlocale(locale.LC_TIME)\n \nclass LocaleTime(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.lang=_getlang()\n self.__calc_weekday()\n self.__calc_month()\n self.__calc_am_pm()\n self.__calc_timezone()\n self.__calc_date_time()\n if _getlang()!=self.lang:\n raise ValueError(\"locale changed during initialization\")\n \n def __pad(self,seq,front):\n \n seq=list(seq)\n if front:\n seq.insert(0,'')\n else :\n seq.append('')\n return seq\n \n def __calc_weekday(self):\n \n \n a_weekday=[calendar.day_abbr[i].lower()for i in range(7)]\n f_weekday=[calendar.day_name[i].lower()for i in range(7)]\n self.a_weekday=a_weekday\n self.f_weekday=f_weekday\n \n def __calc_month(self):\n \n a_month=[calendar.month_abbr[i].lower()for i in range(13)]\n f_month=[calendar.month_name[i].lower()for i in range(13)]\n self.a_month=a_month\n self.f_month=f_month\n \n def __calc_am_pm(self):\n \n \n \n \n \n am_pm=[]\n for hour in (1,22):\n time_tuple=time.struct_time((1999,3,17,hour,44,55,2,76,0))\n am_pm.append(time.strftime(\"%p\",time_tuple).lower())\n self.am_pm=am_pm\n \n def __calc_date_time(self):\n \n \n \n \n \n \n \n time_tuple=time.struct_time((1999,3,17,22,44,55,2,76,0))\n date_time=[None ,None ,None ]\n date_time[0]=time.strftime(\"%c\",time_tuple).lower()\n date_time[1]=time.strftime(\"%x\",time_tuple).lower()\n date_time[2]=time.strftime(\"%X\",time_tuple).lower()\n replacement_pairs=[('%','%%'),(self.f_weekday[2],'%A'),\n (self.f_month[3],'%B'),(self.a_weekday[2],'%a'),\n (self.a_month[3],'%b'),(self.am_pm[1],'%p'),\n ('1999','%Y'),('99','%y'),('22','%H'),\n ('44','%M'),('55','%S'),('76','%j'),\n ('17','%d'),('03','%m'),('3','%m'),\n \n ('2','%w'),('10','%I')]\n replacement_pairs.extend([(tz,\"%Z\")for tz_values in self.timezone\n for tz in tz_values])\n for offset,directive in ((0,'%c'),(1,'%x'),(2,'%X')):\n current_format=date_time[offset]\n for old,new in replacement_pairs:\n \n \n \n \n if old:\n current_format=current_format.replace(old,new)\n \n \n \n time_tuple=time.struct_time((1999,1,3,1,1,1,6,3,0))\n if '00'in time.strftime(directive,time_tuple):\n U_W='%W'\n else :\n U_W='%U'\n date_time[offset]=current_format.replace('11',U_W)\n self.LC_date_time=date_time[0]\n self.LC_date=date_time[1]\n self.LC_time=date_time[2]\n \n def __calc_timezone(self):\n \n \n \n \n \n \n \n no_saving=frozenset([\"utc\",\"gmt\",time.tzname[0].lower()])\n if time.daylight:\n has_saving=frozenset([time.tzname[1].lower()])\n else :\n has_saving=frozenset()\n self.timezone=(no_saving,has_saving)\n \n \nclass TimeRE(dict):\n ''\n \n def __init__(self,locale_time=None ):\n ''\n\n\n\n \n if locale_time:\n self.locale_time=locale_time\n else :\n self.locale_time=LocaleTime()\n base=super()\n base.__init__({\n \n 'd':r\"(?P3[0-1]|[1-2]\\d|0[1-9]|[1-9]| [1-9])\",\n 'f':r\"(?P[0-9]{1,6})\",\n 'H':r\"(?P2[0-3]|[0-1]\\d|\\d)\",\n 'I':r\"(?P1[0-2]|0[1-9]|[1-9])\",\n 'j':r\"(?P36[0-6]|3[0-5]\\d|[1-2]\\d\\d|0[1-9]\\d|00[1-9]|[1-9]\\d|0[1-9]|[1-9])\",\n 'm':r\"(?P1[0-2]|0[1-9]|[1-9])\",\n 'M':r\"(?P[0-5]\\d|\\d)\",\n 'S':r\"(?P6[0-1]|[0-5]\\d|\\d)\",\n 'U':r\"(?P5[0-3]|[0-4]\\d|\\d)\",\n 'w':r\"(?P[0-6])\",\n \n 'y':r\"(?P\\d\\d)\",\n \n \n 'Y':r\"(?P\\d\\d\\d\\d)\",\n 'z':r\"(?P[+-]\\d\\d[0-5]\\d)\",\n 'A':self.__seqToRE(self.locale_time.f_weekday,'A'),\n 'a':self.__seqToRE(self.locale_time.a_weekday,'a'),\n 'B':self.__seqToRE(self.locale_time.f_month[1:],'B'),\n 'b':self.__seqToRE(self.locale_time.a_month[1:],'b'),\n 'p':self.__seqToRE(self.locale_time.am_pm,'p'),\n 'Z':self.__seqToRE((tz for tz_names in self.locale_time.timezone\n for tz in tz_names),\n 'Z'),\n '%':'%'})\n base.__setitem__('W',base.__getitem__('U').replace('U','W'))\n base.__setitem__('c',self.pattern(self.locale_time.LC_date_time))\n base.__setitem__('x',self.pattern(self.locale_time.LC_date))\n base.__setitem__('X',self.pattern(self.locale_time.LC_time))\n \n def __seqToRE(self,to_convert,directive):\n ''\n\n\n\n\n\n\n \n to_convert=sorted(to_convert,key=len,reverse=True )\n for value in to_convert:\n if value !='':\n break\n else :\n return ''\n regex='|'.join(re_escape(stuff)for stuff in to_convert)\n regex='(?P<%s>%s'%(directive,regex)\n return '%s)'%regex\n \n def pattern(self,format):\n ''\n\n\n\n\n \n processed_format=''\n \n \n \n regex_chars=re_compile(r\"([\\\\.^$*+?\\(\\){}\\[\\]|])\")\n format=regex_chars.sub(r\"\\\\\\1\",format)\n whitespace_replacement=re_compile('\\s+')\n format=whitespace_replacement.sub('\\s+',format)\n while '%'in format:\n directive_index=format.index('%')+1\n processed_format=\"%s%s%s\"%(processed_format,\n format[:directive_index -1],\n self[format[directive_index]])\n format=format[directive_index+1:]\n return \"%s%s\"%(processed_format,format)\n \n def compile(self,format):\n ''\n return re_compile(self.pattern(format),IGNORECASE)\n \n_cache_lock=_thread_allocate_lock()\n\n\n_TimeRE_cache=TimeRE()\n_CACHE_MAX_SIZE=5\n_regex_cache={}\n\ndef _calc_julian_from_U_or_W(year,week_of_year,day_of_week,week_starts_Mon):\n ''\n\n \n first_weekday=datetime_date(year,1,1).weekday()\n \n \n \n if not week_starts_Mon:\n first_weekday=(first_weekday+1)%7\n day_of_week=(day_of_week+1)%7\n \n \n week_0_length=(7 -first_weekday)%7\n if week_of_year ==0:\n return 1+day_of_week -first_weekday\n else :\n days_to_week=week_0_length+(7 *(week_of_year -1))\n return 1+days_to_week+day_of_week\n \n \ndef _strptime(data_string,format=\"%a %b %d %H:%M:%S %Y\"):\n ''\n\n \n \n for index,arg in enumerate([data_string,format]):\n if not isinstance(arg,str):\n msg=\"strptime() argument {} must be str, not {}\"\n raise TypeError(msg.format(index,type(arg)))\n \n global _TimeRE_cache,_regex_cache\n with _cache_lock:\n \n if _getlang()!=_TimeRE_cache.locale_time.lang:\n _TimeRE_cache=TimeRE()\n _regex_cache.clear()\n if len(_regex_cache)>_CACHE_MAX_SIZE:\n _regex_cache.clear()\n locale_time=_TimeRE_cache.locale_time\n format_regex=_regex_cache.get(format)\n if not format_regex:\n try :\n format_regex=_TimeRE_cache.compile(format)\n \n \n except KeyError as err:\n bad_directive=err.args[0]\n if bad_directive ==\"\\\\\":\n bad_directive=\"%\"\n del err\n raise ValueError(\"'%s' is a bad directive in format '%s'\"%\n (bad_directive,format))from None\n \n except IndexError:\n raise ValueError(\"stray %% in format '%s'\"%format)from None\n _regex_cache[format]=format_regex\n found=format_regex.match(data_string)\n if not found:\n raise ValueError(\"time data %r does not match format %r\"%\n (data_string,format))\n if len(data_string)!=found.end():\n raise ValueError(\"unconverted data remains: %s\"%\n data_string[found.end():])\n \n year=None\n month=day=1\n hour=minute=second=fraction=0\n tz=-1\n tzoffset=None\n \n \n week_of_year=-1\n week_of_year_start=-1\n \n \n weekday=julian=-1\n found_dict=found.groupdict()\n for group_key in found_dict.keys():\n \n \n \n \n \n if group_key =='y':\n year=int(found_dict['y'])\n \n \n \n if year <=68:\n year +=2000\n else :\n year +=1900\n elif group_key =='Y':\n year=int(found_dict['Y'])\n elif group_key =='m':\n month=int(found_dict['m'])\n elif group_key =='B':\n month=locale_time.f_month.index(found_dict['B'].lower())\n elif group_key =='b':\n month=locale_time.a_month.index(found_dict['b'].lower())\n elif group_key =='d':\n day=int(found_dict['d'])\n elif group_key =='H':\n hour=int(found_dict['H'])\n elif group_key =='I':\n hour=int(found_dict['I'])\n ampm=found_dict.get('p','').lower()\n \n if ampm in ('',locale_time.am_pm[0]):\n \n \n \n if hour ==12:\n hour=0\n elif ampm ==locale_time.am_pm[1]:\n \n \n \n if hour !=12:\n hour +=12\n elif group_key =='M':\n minute=int(found_dict['M'])\n elif group_key =='S':\n second=int(found_dict['S'])\n elif group_key =='f':\n s=found_dict['f']\n \n s +=\"0\"*(6 -len(s))\n fraction=int(s)\n elif group_key =='A':\n weekday=locale_time.f_weekday.index(found_dict['A'].lower())\n elif group_key =='a':\n weekday=locale_time.a_weekday.index(found_dict['a'].lower())\n elif group_key =='w':\n weekday=int(found_dict['w'])\n if weekday ==0:\n weekday=6\n else :\n weekday -=1\n elif group_key =='j':\n julian=int(found_dict['j'])\n elif group_key in ('U','W'):\n week_of_year=int(found_dict[group_key])\n if group_key =='U':\n \n week_of_year_start=6\n else :\n \n week_of_year_start=0\n elif group_key =='z':\n z=found_dict['z']\n tzoffset=int(z[1:3])*60+int(z[3:5])\n if z.startswith(\"-\"):\n tzoffset=-tzoffset\n elif group_key =='Z':\n \n \n found_zone=found_dict['Z'].lower()\n for value,tz_values in enumerate(locale_time.timezone):\n if found_zone in tz_values:\n \n \n \n if (time.tzname[0]==time.tzname[1]and\n time.daylight and found_zone not in (\"utc\",\"gmt\")):\n break\n else :\n tz=value\n break\n leap_year_fix=False\n if year is None and month ==2 and day ==29:\n year=1904\n leap_year_fix=True\n elif year is None :\n year=1900\n \n \n if julian ==-1 and week_of_year !=-1 and weekday !=-1:\n week_starts_Mon=True if week_of_year_start ==0 else False\n julian=_calc_julian_from_U_or_W(year,week_of_year,weekday,\n week_starts_Mon)\n \n \n \n if julian ==-1:\n \n julian=datetime_date(year,month,day).toordinal()-\\\n datetime_date(year,1,1).toordinal()+1\n else :\n \n datetime_result=datetime_date.fromordinal((julian -1)+datetime_date(year,1,1).toordinal())\n year=datetime_result.year\n month=datetime_result.month\n day=datetime_result.day\n if weekday ==-1:\n weekday=datetime_date(year,month,day).weekday()\n \n tzname=found_dict.get(\"Z\")\n if tzoffset is not None :\n gmtoff=tzoffset *60\n else :\n gmtoff=None\n \n if leap_year_fix:\n \n \n \n year=1900\n \n return (year,month,day,\n hour,minute,second,\n weekday,julian,tz,tzname,gmtoff),fraction\n \ndef _strptime_time(data_string,format=\"%a %b %d %H:%M:%S %Y\"):\n ''\n \n tt=_strptime(data_string,format)[0]\n return time.struct_time(tt[:time._STRUCT_TM_ITEMS])\n \ndef _strptime_datetime(cls,data_string,format=\"%a %b %d %H:%M:%S %Y\"):\n ''\n \n tt,fraction=_strptime(data_string,format)\n tzname,gmtoff=tt[-2:]\n args=tt[:6]+(fraction,)\n if gmtoff is not None :\n tzdelta=datetime_timedelta(seconds=gmtoff)\n if tzname:\n tz=datetime_timezone(tzdelta,tzname)\n else :\n tz=datetime_timezone(tzdelta)\n args +=(tz,)\n return cls(*args)\n",["_dummy_thread","_thread","calendar","datetime","locale","re","time"]],_struct:[".py","\n\n\n\n\n\n\n\n\n\n\n\"\"\"Functions to convert between Python values and C structs.\nPython strings are used to hold the data representing the C struct\nand also as format strings to describe the layout of data in the C struct.\n\nThe optional first format char indicates byte order, size and alignment:\n @: native order, size & alignment (default)\n =: native order, std. size & alignment\n <: little-endian, std. size & alignment\n >: big-endian, std. size & alignment\n !: same as >\n\nThe remaining chars indicate types of args and must match exactly;\nthese can be preceded by a decimal repeat count:\n x: pad byte (no data);\n c:char;\n b:signed byte;\n B:unsigned byte;\n h:short;\n H:unsigned short;\n i:int;\n I:unsigned int;\n l:long;\n L:unsigned long;\n f:float;\n d:double.\nSpecial cases (preceding decimal count indicates length):\n s:string (array of char); p: pascal string (with count byte).\nSpecial case (only available in native format):\n P:an integer type that is wide enough to hold a pointer.\nSpecial case (not in native mode unless 'long long' in platform C):\n q:long long;\n Q:unsigned long long\nWhitespace between formats is ignored.\n\nThe variable struct.error is an exception raised on errors.\"\"\"\n\nimport math,sys\n\n\nclass StructError(Exception):\n pass\nerror=StructError\ndef unpack_int(data,index,size,le):\n bytes=[b for b in data[index:index+size]]\n if le =='little':\n bytes.reverse()\n number=0\n for b in bytes:\n number=number <<8 |b\n return int(number)\n \ndef unpack_signed_int(data,index,size,le):\n number=unpack_int(data,index,size,le)\n max=2 **(size *8)\n if number >2 **(size *8 -1)-1:\n number=int(-1 *(max -number))\n return number\n \nINFINITY=1e200 *1e200\nNAN=INFINITY /INFINITY\n\ndef unpack_char(data,index,size,le):\n return data[index:index+size]\n \ndef pack_int(number,size,le):\n x=number\n res=[]\n for i in range(size):\n res.append(x&0xff)\n x >>=8\n if le =='big':\n res.reverse()\n return bytes(res)\n \ndef pack_signed_int(number,size,le):\n if not isinstance(number,int):\n raise StructError(\"argument for i,I,l,L,q,Q,h,H must be integer\")\n if number >2 **(8 *size -1)-1 or number <-1 *2 **(8 *size -1):\n raise OverflowError(\"Number:%i too large to convert\"%number)\n return pack_int(number,size,le)\n \ndef pack_unsigned_int(number,size,le):\n if not isinstance(number,int):\n raise StructError(\"argument for i,I,l,L,q,Q,h,H must be integer\")\n if number <0:\n raise TypeError(\"can't convert negative long to unsigned\")\n if number >2 **(8 *size)-1:\n raise OverflowError(\"Number:%i too large to convert\"%number)\n return pack_int(number,size,le)\n \ndef pack_char(char,size,le):\n return bytes(char)\n \ndef isinf(x):\n return x !=0.0 and x /2 ==x\ndef isnan(v):\n return v !=v *1.0 or (v ==1.0 and v ==2.0)\n \ndef pack_float(x,size,le):\n unsigned=float_pack(x,size)\n result=[]\n for i in range(size):\n result.append((unsigned >>(i *8))&0xFF)\n if le ==\"big\":\n result.reverse()\n return bytes(result)\n \ndef unpack_float(data,index,size,le):\n binary=[data[i]for i in range(index,index+size)]\n if le ==\"big\":\n binary.reverse()\n unsigned=0\n for i in range(size):\n unsigned |=binary[i]<<(i *8)\n return float_unpack(unsigned,size,le)\n \ndef round_to_nearest(x):\n ''\n\n\n\n\n\n\n\n\n \n int_part=int(x)\n frac_part=x -int_part\n if frac_part >0.5 or frac_part ==0.5 and int_part&1 ==1:\n int_part +=1\n return int_part\n \ndef float_unpack(Q,size,le):\n ''\n \n \n if size ==8:\n MIN_EXP=-1021\n MAX_EXP=1024\n MANT_DIG=53\n BITS=64\n elif size ==4:\n MIN_EXP=-125\n MAX_EXP=128\n MANT_DIG=24\n BITS=32\n else :\n raise ValueError(\"invalid size value\")\n \n if Q >>BITS:\n raise ValueError(\"input out of range\")\n \n \n sign=Q >>BITS -1\n exp=(Q&((1 <>MANT_DIG -1\n mant=Q&((1 <0:\n \n mant=round_to_nearest(m *(1 <=0:\n mant=round_to_nearest(m *(1 <=MAX_EXP -MIN_EXP+2:\n raise OverflowError(\"float too large to pack in this format\")\n \n \n assert 0 <=mant <1 <':(default,'big'),\n'!':(default,'big'),\n'=':(default,sys.byteorder),\n'@':(default,sys.byteorder)\n}\n\ndef getmode(fmt):\n try :\n formatdef,endianness=formatmode[fmt[0]]\n alignment=fmt[0]not in formatmode or fmt[0]=='@'\n index=1\n except (IndexError,KeyError):\n formatdef,endianness=formatmode['@']\n alignment=True\n index=0\n return formatdef,endianness,index,alignment\n \ndef getNum(fmt,i):\n num=None\n cur=fmt[i]\n while ('0'<=cur)and (cur <='9'):\n if num ==None :\n num=int(cur)\n else :\n num=10 *num+int(cur)\n i +=1\n cur=fmt[i]\n return num,i\n \ndef calcsize(fmt):\n ''\n\n \n \n formatdef,endianness,i,alignment=getmode(fmt)\n num=0\n result=0\n while i 0:\n result +=[bytes([len(args[0])])+args[0][:num -1]+b'\\0'*padding]\n else :\n if num <255:\n result +=[bytes([num -1])+args[0][:num -1]]\n else :\n result +=[bytes([255])+args[0][:num -1]]\n args.pop(0)\n else :\n raise StructError(\"arg for string format not a string\")\n \n else :\n if len(args)=num:\n n=num -1\n result.append(data[j+1:j+n+1])\n j +=num\n else :\n \n if j >0 and alignment:\n padding=format['size']-j %format['size']\n j +=padding\n for n in range(num):\n result +=[format['unpack'](data,j,format['size'],endianness)]\n j +=format['size']\n \n return tuple(result)\n \ndef pack_into(fmt,buf,offset,*args):\n data=pack(fmt,*args)\n buf[offset:offset+len(data)]=data\n \ndef unpack_from(fmt,buf,offset=0):\n size=calcsize(fmt)\n data=buf[offset:offset+size]\n if len(data)!=size:\n raise error(\"unpack_from requires a buffer of at least %d bytes\"\n %(size,))\n return unpack(fmt,data)\n \ndef _clearcache():\n ''\n \n \nclass Struct:\n\n def __init__(self,fmt):\n self.format=fmt\n \n def pack(self,*args):\n return pack(self.format,*args)\n \n def pack_into(self,*args):\n return pack_into(self.format,*args)\n \n def unpack(self,*args):\n return unpack(self.format,*args)\n \n def unpack_from(self,*args):\n return unpack_from(self.format,*args)\n \nif __name__ =='__main__':\n t=pack('Bf',1,2)\n print(t,len(t))\n print(unpack('Bf',t))\n print(calcsize('Bf'))\n \n",["math","sys"]],_sysconfigdata:[".py","build_time_vars={'HAVE_SYS_WAIT_H':1,'HAVE_UTIL_H':0,'HAVE_SYMLINKAT':1,'HAVE_LIBSENDFILE':0,'SRCDIRS':'Parser Grammar Objects Python Modules Mac','SIZEOF_OFF_T':8,'BASECFLAGS':'-Wno-unused-result','HAVE_UTIME_H':1,'EXTRAMACHDEPPATH':'','HAVE_SYS_TIME_H':1,'CFLAGSFORSHARED':'-fPIC','HAVE_HYPOT':1,'PGSRCS':'\\\\','HAVE_LIBUTIL_H':0,'HAVE_COMPUTED_GOTOS':1,'HAVE_LUTIMES':1,'HAVE_MAKEDEV':1,'HAVE_REALPATH':1,'HAVE_LINUX_TIPC_H':1,'MULTIARCH':'i386-linux-gnu','HAVE_GETWD':1,'HAVE_GCC_ASM_FOR_X64':0,'HAVE_INET_PTON':1,'HAVE_GETHOSTBYNAME_R_6_ARG':1,'SIZEOF__BOOL':1,'HAVE_ZLIB_COPY':1,'ASDLGEN':'python3.3 ../Parser/asdl_c.py','GRAMMAR_INPUT':'../Grammar/Grammar','HOST_GNU_TYPE':'i686-pc-linux-gnu','HAVE_SCHED_RR_GET_INTERVAL':1,'HAVE_BLUETOOTH_H':0,'HAVE_MKFIFO':1,'TIMEMODULE_LIB':0,'LIBM':'-lm','PGENOBJS':'\\\\ \\\\','PYTHONFRAMEWORK':'','GETPGRP_HAVE_ARG':0,'HAVE_MMAP':1,'SHLIB_SUFFIX':'.so','SIZEOF_FLOAT':4,'HAVE_RENAMEAT':1,'HAVE_LANGINFO_H':1,'HAVE_STDLIB_H':1,'PY_CORE_CFLAGS':'-Wno-unused-result -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -I. -IInclude -I../Include -D_FORTIFY_SOURCE=2 -fPIC -DPy_BUILD_CORE','HAVE_BROKEN_PIPE_BUF':0,'HAVE_CONFSTR':1,'HAVE_SIGTIMEDWAIT':1,'HAVE_FTELLO':1,'READELF':'readelf','HAVE_SIGALTSTACK':1,'TESTTIMEOUT':3600,'PYTHONPATH':':plat-i386-linux-gnu','SIZEOF_WCHAR_T':4,'LIBOBJS':'','HAVE_SYSCONF':1,'MAKESETUP':'../Modules/makesetup','HAVE_UTIMENSAT':1,'HAVE_FCHOWNAT':1,'HAVE_WORKING_TZSET':1,'HAVE_FINITE':1,'HAVE_ASINH':1,'HAVE_SETEUID':1,'CONFIGFILES':'configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in','HAVE_SETGROUPS':1,'PARSER_OBJS':'\\\\ Parser/myreadline.o Parser/parsetok.o Parser/tokenizer.o','HAVE_MBRTOWC':1,'SIZEOF_INT':4,'HAVE_STDARG_PROTOTYPES':1,'TM_IN_SYS_TIME':0,'HAVE_SYS_TIMES_H':1,'HAVE_LCHOWN':1,'HAVE_SSIZE_T':1,'HAVE_PAUSE':1,'SYSLIBS':'-lm','POSIX_SEMAPHORES_NOT_ENABLED':0,'HAVE_DEVICE_MACROS':1,'BLDSHARED':'i686-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wno-unused-result -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ','LIBSUBDIRS':'tkinter tkinter/test tkinter/test/test_tkinter \\\\','HAVE_SYS_UN_H':1,'HAVE_SYS_STAT_H':1,'VPATH':'..','INCLDIRSTOMAKE':'/usr/include /usr/include /usr/include/python3.3m /usr/include/python3.3m','HAVE_BROKEN_SEM_GETVALUE':0,'HAVE_TIMEGM':1,'PACKAGE_VERSION':0,'MAJOR_IN_SYSMACROS':0,'HAVE_ATANH':1,'HAVE_GAI_STRERROR':1,'HAVE_SYS_POLL_H':1,'SIZEOF_PTHREAD_T':4,'SIZEOF_FPOS_T':16,'HAVE_CTERMID':1,'HAVE_TMPFILE':1,'HAVE_SETUID':1,'CXX':'i686-linux-gnu-g++ -pthread','srcdir':'..','HAVE_UINT32_T':1,'HAVE_ADDRINFO':1,'HAVE_GETSPENT':1,'SIZEOF_DOUBLE':8,'HAVE_INT32_T':1,'LIBRARY_OBJS_OMIT_FROZEN':'\\\\','HAVE_FUTIMES':1,'CONFINCLUDEPY':'/usr/include/python3.3m','HAVE_RL_COMPLETION_APPEND_CHARACTER':1,'LIBFFI_INCLUDEDIR':'','HAVE_SETGID':1,'HAVE_UINT64_T':1,'EXEMODE':755,'UNIVERSALSDK':'','HAVE_LIBDL':1,'HAVE_GETNAMEINFO':1,'HAVE_STDINT_H':1,'COREPYTHONPATH':':plat-i386-linux-gnu','HAVE_SOCKADDR_STORAGE':1,'HAVE_WAITID':1,'EXTRAPLATDIR':'@EXTRAPLATDIR@','HAVE_ACCEPT4':1,'RUNSHARED':'LD_LIBRARY_PATH=/build/buildd/python3.3-3.3.1/build-shared:','EXE':'','HAVE_SIGACTION':1,'HAVE_CHOWN':1,'HAVE_GETLOGIN':1,'HAVE_TZNAME':0,'PACKAGE_NAME':0,'HAVE_GETPGID':1,'HAVE_GLIBC_MEMMOVE_BUG':0,'BUILD_GNU_TYPE':'i686-pc-linux-gnu','HAVE_LINUX_CAN_H':1,'DYNLOADFILE':'dynload_shlib.o','HAVE_PWRITE':1,'BUILDEXE':'','HAVE_OPENPTY':1,'HAVE_LOCKF':1,'HAVE_COPYSIGN':1,'HAVE_PREAD':1,'HAVE_DLOPEN':1,'HAVE_SYS_KERN_CONTROL_H':0,'PY_FORMAT_LONG_LONG':'\"ll\"','HAVE_TCSETPGRP':1,'HAVE_SETSID':1,'HAVE_STRUCT_STAT_ST_BIRTHTIME':0,'HAVE_STRING_H':1,'LDLIBRARY':'libpython3.3m.so','INSTALL_SCRIPT':'/usr/bin/install -c','HAVE_SYS_XATTR_H':1,'HAVE_CURSES_IS_TERM_RESIZED':1,'HAVE_TMPNAM_R':1,'STRICT_SYSV_CURSES':\"/* Don't use ncurses extensions */\",'WANT_SIGFPE_HANDLER':1,'HAVE_INT64_T':1,'HAVE_STAT_TV_NSEC':1,'HAVE_SYS_MKDEV_H':0,'HAVE_BROKEN_POLL':0,'HAVE_IF_NAMEINDEX':1,'HAVE_GETPWENT':1,'PSRCS':'\\\\','RANLIB':'ranlib','HAVE_WCSCOLL':1,'WITH_NEXT_FRAMEWORK':0,'ASDLGEN_FILES':'../Parser/asdl.py ../Parser/asdl_c.py','HAVE_RL_PRE_INPUT_HOOK':1,'PACKAGE_URL':0,'SHLIB_EXT':0,'HAVE_SYS_LOADAVG_H':0,'HAVE_LIBIEEE':0,'HAVE_SEM_OPEN':1,'HAVE_TERM_H':1,'IO_OBJS':'\\\\','IO_H':'Modules/_io/_iomodule.h','HAVE_STATVFS':1,'VERSION':'3.3','HAVE_GETC_UNLOCKED':1,'MACHDEPS':'plat-i386-linux-gnu @EXTRAPLATDIR@','SUBDIRSTOO':'Include Lib Misc','HAVE_SETREUID':1,'HAVE_ERFC':1,'HAVE_SETRESUID':1,'LINKFORSHARED':'-Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions','HAVE_SYS_TYPES_H':1,'HAVE_GETPAGESIZE':1,'HAVE_SETEGID':1,'HAVE_PTY_H':1,'HAVE_STRUCT_STAT_ST_FLAGS':0,'HAVE_WCHAR_H':1,'HAVE_FSEEKO':1,'Py_ENABLE_SHARED':1,'HAVE_SIGRELSE':1,'HAVE_PTHREAD_INIT':0,'FILEMODE':644,'HAVE_SYS_RESOURCE_H':1,'HAVE_READLINKAT':1,'PYLONG_BITS_IN_DIGIT':0,'LINKCC':'i686-linux-gnu-gcc -pthread','HAVE_SETLOCALE':1,'HAVE_CHROOT':1,'HAVE_OPENAT':1,'HAVE_FEXECVE':1,'LDCXXSHARED':'i686-linux-gnu-g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions','DIST':'README ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in Include Lib Misc Ext-dummy','HAVE_MKNOD':1,'PY_LDFLAGS':'-Wl,-Bsymbolic-functions -Wl,-z,relro','HAVE_BROKEN_MBSTOWCS':0,'LIBRARY_OBJS':'\\\\','HAVE_LOG1P':1,'SIZEOF_VOID_P':4,'HAVE_FCHOWN':1,'PYTHONFRAMEWORKPREFIX':'','HAVE_LIBDLD':0,'HAVE_TGAMMA':1,'HAVE_ERRNO_H':1,'HAVE_IO_H':0,'OTHER_LIBTOOL_OPT':'','HAVE_POLL_H':1,'PY_CPPFLAGS':'-I. -IInclude -I../Include -D_FORTIFY_SOURCE=2','XMLLIBSUBDIRS':'xml xml/dom xml/etree xml/parsers xml/sax','GRAMMAR_H':'Include/graminit.h','TANH_PRESERVES_ZERO_SIGN':1,'HAVE_GETLOADAVG':1,'UNICODE_DEPS':'\\\\ \\\\','HAVE_GETCWD':1,'MANDIR':'/usr/share/man','MACHDESTLIB':'/usr/lib/python3.3','GRAMMAR_C':'Python/graminit.c','PGOBJS':'\\\\','HAVE_DEV_PTMX':1,'HAVE_UINTPTR_T':1,'HAVE_SCHED_SETAFFINITY':1,'PURIFY':'','HAVE_DECL_ISINF':1,'HAVE_RL_CALLBACK':1,'HAVE_WRITEV':1,'HAVE_GETHOSTBYNAME_R_5_ARG':0,'HAVE_SYS_AUDIOIO_H':0,'EXT_SUFFIX':'.cpython-33m.so','SIZEOF_LONG_LONG':8,'DLINCLDIR':'.','HAVE_PATHCONF':1,'HAVE_UNLINKAT':1,'MKDIR_P':'/bin/mkdir -p','HAVE_ALTZONE':0,'SCRIPTDIR':'/usr/lib','OPCODETARGETGEN_FILES':'\\\\','HAVE_GETSPNAM':1,'HAVE_SYS_TERMIO_H':0,'HAVE_ATTRIBUTE_FORMAT_PARSETUPLE':0,'HAVE_PTHREAD_H':1,'Py_DEBUG':0,'HAVE_STRUCT_STAT_ST_BLOCKS':1,'X87_DOUBLE_ROUNDING':1,'SIZEOF_TIME_T':4,'HAVE_DYNAMIC_LOADING':1,'HAVE_DIRECT_H':0,'SRC_GDB_HOOKS':'../Tools/gdb/libpython.py','HAVE_GETADDRINFO':1,'HAVE_BROKEN_NICE':0,'HAVE_DIRENT_H':1,'HAVE_WCSXFRM':1,'HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK':1,'HAVE_FSTATVFS':1,'PYTHON':'python','HAVE_OSX105_SDK':0,'BINDIR':'/usr/bin','TESTPYTHON':'LD_LIBRARY_PATH=/build/buildd/python3.3-3.3.1/build-shared: ./python','ARFLAGS':'rc','PLATDIR':'plat-i386-linux-gnu','HAVE_ASM_TYPES_H':1,'PY3LIBRARY':'libpython3.so','HAVE_PLOCK':0,'FLOCK_NEEDS_LIBBSD':0,'WITH_TSC':0,'HAVE_LIBREADLINE':1,'MACHDEP':'linux','HAVE_SELECT':1,'LDFLAGS':'-Wl,-Bsymbolic-functions -Wl,-z,relro','HAVE_HSTRERROR':1,'SOABI':'cpython-33m','HAVE_GETTIMEOFDAY':1,'HAVE_LIBRESOLV':0,'HAVE_UNSETENV':1,'HAVE_TM_ZONE':1,'HAVE_GETPGRP':1,'HAVE_FLOCK':1,'HAVE_SYS_BSDTTY_H':0,'SUBDIRS':'','PYTHONFRAMEWORKINSTALLDIR':'','PACKAGE_BUGREPORT':0,'HAVE_CLOCK':1,'HAVE_GETPEERNAME':1,'SIZEOF_PID_T':4,'HAVE_CONIO_H':0,'HAVE_FSTATAT':1,'HAVE_NETPACKET_PACKET_H':1,'HAVE_WAIT3':1,'DESTPATH':'','HAVE_STAT_TV_NSEC2':0,'HAVE_GETRESGID':1,'HAVE_UCS4_TCL':0,'SIGNED_RIGHT_SHIFT_ZERO_FILLS':0,'HAVE_TIMES':1,'HAVE_UNAME':1,'HAVE_ERF':1,'SIZEOF_SHORT':2,'HAVE_NCURSES_H':1,'HAVE_SYS_SENDFILE_H':1,'HAVE_CTERMID_R':0,'HAVE_TMPNAM':1,'prefix':'/usr','HAVE_NICE':1,'WITH_THREAD':1,'LN':'ln','TESTRUNNER':'LD_LIBRARY_PATH=/build/buildd/python3.3-3.3.1/build-shared: ./python ../Tools/scripts/run_tests.py','HAVE_SIGINTERRUPT':1,'HAVE_SETPGID':1,'RETSIGTYPE':'void','HAVE_SCHED_GET_PRIORITY_MAX':1,'HAVE_SYS_SYS_DOMAIN_H':0,'HAVE_SYS_DIR_H':0,'HAVE__GETPTY':0,'HAVE_BLUETOOTH_BLUETOOTH_H':1,'HAVE_BIND_TEXTDOMAIN_CODESET':1,'HAVE_POLL':1,'PYTHON_OBJS':'\\\\','HAVE_WAITPID':1,'USE_INLINE':1,'HAVE_FUTIMENS':1,'USE_COMPUTED_GOTOS':1,'MAINCC':'i686-linux-gnu-gcc -pthread','HAVE_SOCKETPAIR':1,'HAVE_PROCESS_H':0,'HAVE_SETVBUF':1,'HAVE_FDOPENDIR':1,'CONFINCLUDEDIR':'/usr/include','BINLIBDEST':'/usr/lib/python3.3','HAVE_SYS_IOCTL_H':1,'HAVE_SYSEXITS_H':1,'LDLAST':'','HAVE_SYS_FILE_H':1,'HAVE_RL_COMPLETION_SUPPRESS_APPEND':1,'HAVE_RL_COMPLETION_MATCHES':1,'HAVE_TCGETPGRP':1,'SIZEOF_SIZE_T':4,'HAVE_EPOLL_CREATE1':1,'HAVE_SYS_SELECT_H':1,'HAVE_CLOCK_GETTIME':1,'CFLAGS':'-Wno-unused-result -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ','HAVE_SNPRINTF':1,'BLDLIBRARY':'-lpython3.3m','PARSER_HEADERS':'\\\\','SO':'.so','LIBRARY':'libpython3.3m.a','HAVE_FPATHCONF':1,'HAVE_TERMIOS_H':1,'HAVE_BROKEN_PTHREAD_SIGMASK':0,'AST_H':'Include/Python-ast.h','HAVE_GCC_UINT128_T':0,'HAVE_ACOSH':1,'MODOBJS':'Modules/_threadmodule.o Modules/signalmodule.o Modules/arraymodule.o Modules/mathmodule.o Modules/_math.o Modules/_struct.o Modules/timemodule.o Modules/_randommodule.o Modules/atexitmodule.o Modules/_elementtree.o Modules/_pickle.o Modules/_datetimemodule.o Modules/_bisectmodule.o Modules/_heapqmodule.o Modules/unicodedata.o Modules/fcntlmodule.o Modules/spwdmodule.o Modules/grpmodule.o Modules/selectmodule.o Modules/socketmodule.o Modules/_posixsubprocess.o Modules/md5module.o Modules/sha1module.o Modules/sha256module.o Modules/sha512module.o Modules/syslogmodule.o Modules/binascii.o Modules/zlibmodule.o Modules/pyexpat.o Modules/posixmodule.o Modules/errnomodule.o Modules/pwdmodule.o Modules/_sre.o Modules/_codecsmodule.o Modules/_weakref.o Modules/_functoolsmodule.o Modules/operator.o Modules/_collectionsmodule.o Modules/itertoolsmodule.o Modules/_localemodule.o Modules/_iomodule.o Modules/iobase.o Modules/fileio.o Modules/bytesio.o Modules/bufferedio.o Modules/textio.o Modules/stringio.o Modules/zipimport.o Modules/faulthandler.o Modules/symtablemodule.o Modules/xxsubtype.o','AST_C':'Python/Python-ast.c','HAVE_SYS_NDIR_H':0,'DESTDIRS':'/usr /usr/lib /usr/lib/python3.3 /usr/lib/python3.3/lib-dynload','HAVE_SIGNAL_H':1,'PACKAGE_TARNAME':0,'HAVE_GETPRIORITY':1,'INCLUDEDIR':'/usr/include','HAVE_INTTYPES_H':1,'SIGNAL_OBJS':'','HAVE_READV':1,'HAVE_SETHOSTNAME':1,'MODLIBS':'-lrt -lexpat -L/usr/lib -lz -lexpat','CC':'i686-linux-gnu-gcc -pthread','HAVE_LCHMOD':0,'SIZEOF_UINTPTR_T':4,'LIBPC':'/usr/lib/i386-linux-gnu/pkgconfig','BYTESTR_DEPS':'\\\\','HAVE_MKDIRAT':1,'LIBPL':'/usr/lib/python3.3/config-3.3m-i386-linux-gnu','HAVE_SHADOW_H':1,'HAVE_SYS_EVENT_H':0,'INSTALL':'/usr/bin/install -c','HAVE_GCC_ASM_FOR_X87':1,'HAVE_BROKEN_UNSETENV':0,'BASECPPFLAGS':'','DOUBLE_IS_BIG_ENDIAN_IEEE754':0,'HAVE_STRUCT_STAT_ST_RDEV':1,'HAVE_SEM_UNLINK':1,'BUILDPYTHON':'python','HAVE_RL_CATCH_SIGNAL':1,'HAVE_DECL_TZNAME':0,'RESSRCDIR':'Mac/Resources/framework','HAVE_PTHREAD_SIGMASK':1,'HAVE_UTIMES':1,'DISTDIRS':'Include Lib Misc Ext-dummy','HAVE_FDATASYNC':1,'HAVE_USABLE_WCHAR_T':0,'PY_FORMAT_SIZE_T':'\"z\"','HAVE_SCHED_SETSCHEDULER':1,'VA_LIST_IS_ARRAY':0,'HAVE_LINUX_NETLINK_H':1,'HAVE_SETREGID':1,'HAVE_STROPTS_H':1,'LDVERSION':'3.3m','abs_builddir':'/build/buildd/python3.3-3.3.1/build-shared','SITEPATH':'','HAVE_GETHOSTBYNAME':0,'HAVE_SIGPENDING':1,'HAVE_KQUEUE':0,'HAVE_SYNC':1,'HAVE_GETSID':1,'HAVE_ROUND':1,'HAVE_STRFTIME':1,'AST_H_DIR':'Include','HAVE_PIPE2':1,'AST_C_DIR':'Python','TESTPYTHONOPTS':'','HAVE_DEV_PTC':0,'GETTIMEOFDAY_NO_TZ':0,'HAVE_NET_IF_H':1,'HAVE_SENDFILE':1,'HAVE_SETPGRP':1,'HAVE_SEM_GETVALUE':1,'CONFIGURE_LDFLAGS':'-Wl,-Bsymbolic-functions -Wl,-z,relro','DLLLIBRARY':'','PYTHON_FOR_BUILD':'./python -E','SETPGRP_HAVE_ARG':0,'HAVE_INET_ATON':1,'INSTALL_SHARED':'/usr/bin/install -c -m 555','WITH_DOC_STRINGS':1,'OPCODETARGETS_H':'\\\\','HAVE_INITGROUPS':1,'HAVE_LINKAT':1,'BASEMODLIBS':'','SGI_ABI':'','HAVE_SCHED_SETPARAM':1,'OPT':'-DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes','HAVE_POSIX_FADVISE':1,'datarootdir':'/usr/share','HAVE_MEMRCHR':1,'HGTAG':'','HAVE_MEMMOVE':1,'HAVE_GETRESUID':1,'DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754':0,'HAVE_LSTAT':1,'AR':'ar','HAVE_WAIT4':1,'HAVE_SYS_MODEM_H':0,'INSTSONAME':'libpython3.3m.so.1.0','HAVE_SYS_STATVFS_H':1,'HAVE_LGAMMA':1,'HAVE_PROTOTYPES':1,'HAVE_SYS_UIO_H':1,'MAJOR_IN_MKDEV':0,'QUICKTESTOPTS':'-x test_subprocess test_io test_lib2to3 \\\\','HAVE_SYS_DEVPOLL_H':0,'HAVE_CHFLAGS':0,'HAVE_FSYNC':1,'HAVE_FCHMOD':1,'INCLUDEPY':'/usr/include/python3.3m','HAVE_SEM_TIMEDWAIT':1,'LDLIBRARYDIR':'','HAVE_STRUCT_TM_TM_ZONE':1,'HAVE_CURSES_H':1,'TIME_WITH_SYS_TIME':1,'HAVE_DUP2':1,'ENABLE_IPV6':1,'WITH_VALGRIND':0,'HAVE_SETITIMER':1,'THREADOBJ':'Python/thread.o','LOCALMODLIBS':'-lrt -lexpat -L/usr/lib -lz -lexpat','HAVE_MEMORY_H':1,'HAVE_GETITIMER':1,'HAVE_C99_BOOL':1,'INSTALL_DATA':'/usr/bin/install -c -m 644','PGEN':'Parser/pgen','HAVE_GRP_H':1,'HAVE_WCSFTIME':1,'AIX_GENUINE_CPLUSPLUS':0,'HAVE_LIBINTL_H':1,'SHELL':'/bin/sh','HAVE_UNISTD_H':1,'EXTRATESTOPTS':'','HAVE_EXECV':1,'HAVE_FSEEK64':0,'MVWDELCH_IS_EXPRESSION':1,'DESTSHARED':'/usr/lib/python3.3/lib-dynload','OPCODETARGETGEN':'\\\\','LIBDEST':'/usr/lib/python3.3','CCSHARED':'-fPIC','HAVE_EXPM1':1,'HAVE_DLFCN_H':1,'exec_prefix':'/usr','HAVE_READLINK':1,'WINDOW_HAS_FLAGS':1,'HAVE_FTELL64':0,'HAVE_STRLCPY':0,'MACOSX_DEPLOYMENT_TARGET':'','HAVE_SYS_SYSCALL_H':1,'DESTLIB':'/usr/lib/python3.3','LDSHARED':'i686-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wno-unused-result -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ','HGVERSION':'','PYTHON_HEADERS':'\\\\','HAVE_STRINGS_H':1,'DOUBLE_IS_LITTLE_ENDIAN_IEEE754':1,'HAVE_POSIX_FALLOCATE':1,'HAVE_DIRFD':1,'HAVE_LOG2':1,'HAVE_GETPID':1,'HAVE_ALARM':1,'MACHDEP_OBJS':'','HAVE_SPAWN_H':1,'HAVE_FORK':1,'HAVE_SETRESGID':1,'HAVE_FCHMODAT':1,'HAVE_CLOCK_GETRES':1,'MACHDEPPATH':':plat-i386-linux-gnu','STDC_HEADERS':1,'HAVE_SETPRIORITY':1,'LIBC':'','HAVE_SYS_EPOLL_H':1,'HAVE_SYS_UTSNAME_H':1,'HAVE_PUTENV':1,'HAVE_CURSES_RESIZE_TERM':1,'HAVE_FUTIMESAT':1,'WITH_DYLD':0,'INSTALL_PROGRAM':'/usr/bin/install -c','LIBS':'-lpthread -ldl -lutil','HAVE_TRUNCATE':1,'TESTOPTS':'','PROFILE_TASK':'../Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck','HAVE_CURSES_RESIZETERM':1,'ABIFLAGS':'m','HAVE_GETGROUPLIST':1,'OBJECT_OBJS':'\\\\','HAVE_MKNODAT':1,'HAVE_ST_BLOCKS':1,'HAVE_STRUCT_STAT_ST_GEN':0,'SYS_SELECT_WITH_SYS_TIME':1,'SHLIBS':'-lpthread -ldl -lutil','HAVE_GETGROUPS':1,'MODULE_OBJS':'\\\\','PYTHONFRAMEWORKDIR':'no-framework','HAVE_FCNTL_H':1,'HAVE_LINK':1,'HAVE_SIGWAIT':1,'HAVE_GAMMA':1,'HAVE_SYS_LOCK_H':0,'HAVE_FORKPTY':1,'HAVE_SOCKADDR_SA_LEN':0,'HAVE_TEMPNAM':1,'HAVE_STRUCT_STAT_ST_BLKSIZE':1,'HAVE_MKFIFOAT':1,'HAVE_SIGWAITINFO':1,'HAVE_FTIME':1,'HAVE_EPOLL':1,'HAVE_SYS_SOCKET_H':1,'HAVE_LARGEFILE_SUPPORT':1,'CONFIGURE_CFLAGS':'-g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security','HAVE_PTHREAD_DESTRUCTOR':0,'CONFIGURE_CPPFLAGS':'-D_FORTIFY_SOURCE=2','HAVE_SYMLINK':1,'HAVE_LONG_LONG':1,'HAVE_IEEEFP_H':0,'LIBDIR':'/usr/lib','HAVE_PTHREAD_KILL':1,'TESTPATH':'','HAVE_STRDUP':1,'POBJS':'\\\\','NO_AS_NEEDED':'-Wl,--no-as-needed','HAVE_LONG_DOUBLE':1,'HGBRANCH':'','DISTFILES':'README ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in','PTHREAD_SYSTEM_SCHED_SUPPORTED':1,'HAVE_FACCESSAT':1,'AST_ASDL':'../Parser/Python.asdl','CPPFLAGS':'-I. -IInclude -I../Include -D_FORTIFY_SOURCE=2','HAVE_MKTIME':1,'HAVE_NDIR_H':0,'PY_CFLAGS':'-Wno-unused-result -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ','LIBOBJDIR':'Python/','HAVE_LINUX_CAN_RAW_H':1,'HAVE_GETHOSTBYNAME_R_3_ARG':0,'PACKAGE_STRING':0,'GNULD':'yes','LOG1P_DROPS_ZERO_SIGN':0,'HAVE_FTRUNCATE':1,'WITH_LIBINTL':0,'HAVE_MREMAP':1,'HAVE_DECL_ISNAN':1,'HAVE_KILLPG':1,'SIZEOF_LONG':4,'HAVE_DECL_ISFINITE':1,'HAVE_IPA_PURE_CONST_BUG':0,'WITH_PYMALLOC':1,'abs_srcdir':'/build/buildd/python3.3-3.3.1/build-shared/..','HAVE_FCHDIR':1,'HAVE_BROKEN_POSIX_SEMAPHORES':0,'AC_APPLE_UNIVERSAL_BUILD':0,'PGENSRCS':'\\\\ \\\\','DIRMODE':755,'HAVE_GETHOSTBYNAME_R':1,'HAVE_LCHFLAGS':0,'HAVE_SYS_PARAM_H':1,'SIZEOF_LONG_DOUBLE':12,'CONFIG_ARGS':\"'--enable-shared' '--prefix=/usr' '--enable-ipv6' '--enable-loadable-sqlite-extensions' '--with-dbmliborder=bdb:gdbm' '--with-computed-gotos' '--with-system-expat' '--with-system-ffi' '--with-fpectl' 'CC=i686-linux-gnu-gcc' 'CFLAGS=-g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro' 'CPPFLAGS=-D_FORTIFY_SOURCE=2'\",'HAVE_SCHED_H':1,'HAVE_KILL':1}\n\n",[]],_testcapi:[".py","\nCHAR_MAX=127\n\nCHAR_MIN=-128\n\nDBL_MAX=1.7976931348623157e+308\n\nDBL_MIN=2.2250738585072014e-308\n\nFLT_MAX=3.4028234663852886e+38\n\nFLT_MIN=1.1754943508222875e-38\n\nINT_MAX=2147483647\n\nINT_MIN=-2147483648\n\nLLONG_MAX=9223372036854775807\n\nLLONG_MIN=-9223372036854775808\n\nLONG_MAX=2147483647\n\nLONG_MIN=-2147483648\n\nPY_SSIZE_T_MAX=2147483647\n\nPY_SSIZE_T_MIN=-2147483648\n\nSHRT_MAX=32767\n\nSHRT_MIN=-32768\n\nSIZEOF_PYGC_HEAD=16\n\nUCHAR_MAX=255\n\nUINT_MAX=4294967295\n\nULLONG_MAX=18446744073709551615\n\nULONG_MAX=4294967295\n\nUSHRT_MAX=65535\n\n__loader__=\"<_frozen_importlib.ExtensionFileLoader object at 0x00C98DD0>\"\n\ndef _pending_threadfunc(*args,**kw):\n pass\n \nclass _test_structmembersType(object):\n pass\n \ndef _test_thread_state(*args,**kw):\n pass\n \ndef argparsing(*args,**kw):\n pass\n \ndef code_newempty(*args,**kw):\n pass\n \ndef codec_incrementaldecoder(*args,**kw):\n pass\n \ndef codec_incrementalencoder(*args,**kw):\n pass\n \ndef crash_no_current_thread(*args,**kw):\n pass\n \nclass error(Exception):\n pass\n \ndef exception_print(*args,**kw):\n pass\n \ndef getargs_B(*args,**kw):\n pass\n \ndef getargs_H(*args,**kw):\n pass\n \ndef getargs_I(*args,**kw):\n pass\n \ndef getargs_K(*args,**kw):\n pass\n \ndef getargs_L(*args,**kw):\n pass\n \ndef getargs_Z(*args,**kw):\n pass\n \ndef getargs_Z_hash(*args,**kw):\n pass\n \ndef getargs_b(*args,**kw):\n pass\n \ndef getargs_c(*args,**kw):\n pass\n \ndef getargs_h(*args,**kw):\n pass\n \ndef getargs_i(*args,**kw):\n pass\n \ndef getargs_k(*args,**kw):\n pass\n \ndef getargs_keyword_only(*args,**kw):\n pass\n \ndef getargs_keywords(*args,**kw):\n pass\n \ndef getargs_l(*args,**kw):\n pass\n \ndef getargs_n(*args,**kw):\n pass\n \ndef getargs_p(*args,**kw):\n pass\n \ndef getargs_s(*args,**kw):\n pass\n \ndef getargs_s_hash(*args,**kw):\n pass\n \ndef getargs_s_star(*args,**kw):\n pass\n \ndef getargs_tuple(*args,**kw):\n pass\n \ndef getargs_u(*args,**kw):\n pass\n \ndef getargs_u_hash(*args,**kw):\n pass\n \ndef getargs_w_star(*args,**kw):\n pass\n \ndef getargs_y(*args,**kw):\n pass\n \ndef getargs_y_hash(*args,**kw):\n pass\n \ndef getargs_y_star(*args,**kw):\n pass\n \ndef getargs_z(*args,**kw):\n pass\n \ndef getargs_z_hash(*args,**kw):\n pass\n \ndef getargs_z_star(*args,**kw):\n pass\n \nclass instancemethod(object):\n pass\n \ndef make_exception_with_doc(*args,**kw):\n pass\n \ndef make_memoryview_from_NULL_pointer(*args,**kw):\n pass\n \ndef parse_tuple_and_keywords(*args,**kw):\n pass\n \ndef pytime_object_to_time_t(*args,**kw):\n pass\n \ndef pytime_object_to_timespec(*args,**kw):\n pass\n \ndef pytime_object_to_timeval(*args,**kw):\n pass\n \ndef raise_exception(*args,**kw):\n pass\n \ndef raise_memoryerror(*args,**kw):\n pass\n \ndef run_in_subinterp(*args,**kw):\n pass\n \ndef set_exc_info(*args,**kw):\n pass\n \ndef test_L_code(*args,**kw):\n pass\n \ndef test_Z_code(*args,**kw):\n pass\n \ndef test_capsule(*args,**kw):\n pass\n \ndef test_config(*args,**kw):\n pass\n \ndef test_datetime_capi(*args,**kw):\n pass\n \ndef test_dict_iteration(*args,**kw):\n pass\n \ndef test_empty_argparse(*args,**kw):\n pass\n \ndef test_k_code(*args,**kw):\n pass\n \ndef test_lazy_hash_inheritance(*args,**kw):\n pass\n \ndef test_list_api(*args,**kw):\n pass\n \ndef test_long_and_overflow(*args,**kw):\n pass\n \ndef test_long_api(*args,**kw):\n pass\n \ndef test_long_as_double(*args,**kw):\n pass\n \ndef test_long_as_size_t(*args,**kw):\n pass\n \ndef test_long_long_and_overflow(*args,**kw):\n pass\n \ndef test_long_numbits(*args,**kw):\n pass\n \ndef test_longlong_api(*args,**kw):\n pass\n \ndef test_null_strings(*args,**kw):\n pass\n \ndef test_s_code(*args,**kw):\n pass\n \ndef test_string_from_format(*args,**kw):\n pass\n \ndef test_string_to_double(*args,**kw):\n pass\n \ndef test_u_code(*args,**kw):\n pass\n \ndef test_unicode_compare_with_ascii(*args,**kw):\n pass\n \ndef test_widechar(*args,**kw):\n pass\n \ndef test_with_docstring(*args,**kw):\n ''\n pass\n \ndef traceback_print(*args,**kw):\n pass\n \ndef unicode_aswidechar(*args,**kw):\n pass\n \ndef unicode_aswidecharstring(*args,**kw):\n pass\n \ndef unicode_encodedecimal(*args,**kw):\n pass\n \ndef unicode_transformdecimaltoascii(*args,**kw):\n pass\n",[]],_thread:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=['error','start_new_thread','exit','get_ident','allocate_lock',\n'interrupt_main','LockType']\n\n\nTIMEOUT_MAX=2 **31\n\n\n\n\n\n\nerror=RuntimeError\n\ndef start_new_thread(function,args,kwargs={}):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if type(args)!=type(tuple()):\n raise TypeError(\"2nd arg must be a tuple\")\n if type(kwargs)!=type(dict()):\n raise TypeError(\"3rd arg must be a dict\")\n global _main\n _main=False\n try :\n function(*args,**kwargs)\n except SystemExit:\n pass\n except :\n import traceback\n traceback.print_exc()\n _main=True\n global _interrupt\n if _interrupt:\n _interrupt=False\n raise KeyboardInterrupt\n \ndef exit():\n ''\n raise SystemExit\n \ndef get_ident():\n ''\n\n\n\n\n \n return -1\n \ndef allocate_lock():\n ''\n return LockType()\n \ndef stack_size(size=None ):\n ''\n if size is not None :\n raise error(\"setting thread stack size not supported\")\n return 0\n \nclass LockType(object):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self):\n self.locked_status=False\n \n def acquire(self,waitflag=None ,timeout=-1):\n ''\n\n\n\n\n\n\n\n\n \n if waitflag is None or waitflag:\n self.locked_status=True\n return True\n else :\n if not self.locked_status:\n self.locked_status=True\n return True\n else :\n if timeout >0:\n import time\n time.sleep(timeout)\n return False\n \n __enter__=acquire\n \n def __exit__(self,typ,val,tb):\n self.release()\n \n def release(self):\n ''\n \n \n if not self.locked_status:\n raise error\n self.locked_status=False\n return True\n \n def locked(self):\n return self.locked_status\n \n \n_interrupt=False\n\n_main=True\n\ndef interrupt_main():\n ''\n \n if _main:\n raise KeyboardInterrupt\n else :\n global _interrupt\n _interrupt=True\n \n \nclass _local:\n pass\n",["time","traceback"]],_threading_local:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfrom weakref import ref\nfrom contextlib import contextmanager\n\n__all__=[\"local\"]\n\n\n\n\n\n\n\n\n\n\n\nclass _localimpl:\n ''\n __slots__='key','dicts','localargs','locallock','__weakref__'\n \n def __init__(self):\n \n \n \n self.key='_threading_local._localimpl.'+str(id(self))\n \n self.dicts={}\n \n def get_dict(self):\n ''\n \n thread=current_thread()\n return self.dicts[id(thread)][1]\n \n def create_dict(self):\n ''\n localdict={}\n key=self.key\n thread=current_thread()\n idt=id(thread)\n def local_deleted(_,key=key):\n \n thread=wrthread()\n if thread is not None :\n del thread.__dict__[key]\n def thread_deleted(_,idt=idt):\n \n \n \n \n local=wrlocal()\n if local is not None :\n dct=local.dicts.pop(idt)\n wrlocal=ref(self,local_deleted)\n wrthread=ref(thread,thread_deleted)\n thread.__dict__[key]=wrlocal\n self.dicts[idt]=wrthread,localdict\n return localdict\n \n \n@contextmanager\ndef _patch(self):\n impl=object.__getattribute__(self,'_local__impl')\n try :\n dct=impl.get_dict()\n except KeyError:\n dct=impl.create_dict()\n args,kw=impl.localargs\n self.__init__(*args,**kw)\n with impl.locallock:\n object.__setattr__(self,'__dict__',dct)\n yield\n \n \nclass local:\n __slots__='_local__impl','__dict__'\n \n def __new__(cls,*args,**kw):\n if (args or kw)and (cls.__init__ is object.__init__):\n raise TypeError(\"Initialization arguments are not supported\")\n self=object.__new__(cls)\n impl=_localimpl()\n impl.localargs=(args,kw)\n impl.locallock=RLock()\n object.__setattr__(self,'_local__impl',impl)\n \n \n \n impl.create_dict()\n return self\n \n def __getattribute__(self,name):\n with _patch(self):\n return object.__getattribute__(self,name)\n \n def __setattr__(self,name,value):\n if name =='__dict__':\n raise AttributeError(\n \"%r object attribute '__dict__' is read-only\"\n %self.__class__.__name__)\n with _patch(self):\n return object.__setattr__(self,name,value)\n \n def __delattr__(self,name):\n if name =='__dict__':\n raise AttributeError(\n \"%r object attribute '__dict__' is read-only\"\n %self.__class__.__name__)\n with _patch(self):\n return object.__delattr__(self,name)\n \n \nfrom threading import current_thread,RLock\n",["contextlib","threading","weakref"]],_warnings:[".py","''\n\n\n\ndefault_action=\"\"\"default\"\"\"\n\nfilters=[('ignore',None ,DeprecationWarning,None ,0),\n('ignore',None ,PendingDeprecationWarning,None ,0),\n('ignore',None ,ImportWarning,None ,0),\n('ignore',None ,BytesWarning,None ,0)]\n\nonce_registry={}\n\ndef warn(*args,**kw):\n ''\n pass\n \ndef warn_explicit(*args,**kw):\n ''\n pass\n",[]],_weakref:[".py","class ProxyType:\n\n def __init__(self,obj):\n self.obj=obj\n \nCallableProxyType=ProxyType\nProxyTypes=[ProxyType,CallableProxyType]\n\nclass ReferenceType:\n\n def __init__(self,obj,callback):\n self.obj=obj\n self.callback=callback\n \nclass ref:\n\n def __init__(self,obj,callback=None ):\n self.obj=ReferenceType(obj,callback)\n self.callback=callback\n \n def __call__(self):\n return self.obj.obj\n \n def __hash__(self):\n return hash(self.obj.obj)\n \n def __eq__(self,other):\n return self.obj.obj ==other.obj.obj\n \ndef getweakrefcount(obj):\n return 1\n \ndef getweakrefs(obj):\n return obj\n \n \ndef proxy(obj,callback=None ):\n return ProxyType(obj)\n \n",[]],_weakrefset:[".py","\n\n\n\nfrom _weakref import ref\n\n__all__=['WeakSet']\n\n\nclass _IterationGuard:\n\n\n\n\n\n def __init__(self,weakcontainer):\n \n self.weakcontainer=ref(weakcontainer)\n \n def __enter__(self):\n w=self.weakcontainer()\n if w is not None :\n w._iterating.add(self)\n return self\n \n def __exit__(self,e,t,b):\n w=self.weakcontainer()\n if w is not None :\n s=w._iterating\n s.remove(self)\n if not s:\n w._commit_removals()\n \n \nclass WeakSet:\n def __init__(self,data=None ):\n self.data=set()\n def _remove(item,selfref=ref(self)):\n self=selfref()\n if self is not None :\n if self._iterating:\n self._pending_removals.append(item)\n else :\n self.data.discard(item)\n self._remove=_remove\n \n self._pending_removals=[]\n self._iterating=set()\n if data is not None :\n self.update(data)\n \n def _commit_removals(self):\n l=self._pending_removals\n discard=self.data.discard\n while l:\n discard(l.pop())\n \n def __iter__(self):\n with _IterationGuard(self):\n for itemref in self.data:\n item=itemref()\n if item is not None :\n yield item\n \n def __len__(self):\n return len(self.data)-len(self._pending_removals)\n \n def __contains__(self,item):\n try :\n wr=ref(item)\n except TypeError:\n return False\n return wr in self.data\n \n def __reduce__(self):\n return (self.__class__,(list(self),),\n getattr(self,'__dict__',None ))\n \n def add(self,item):\n if self._pending_removals:\n self._commit_removals()\n self.data.add(ref(item,self._remove))\n \n def clear(self):\n if self._pending_removals:\n self._commit_removals()\n self.data.clear()\n \n def copy(self):\n return self.__class__(self)\n \n def pop(self):\n if self._pending_removals:\n self._commit_removals()\n while True :\n try :\n itemref=self.data.pop()\n except KeyError:\n raise KeyError('pop from empty WeakSet')\n item=itemref()\n if item is not None :\n return item\n \n def remove(self,item):\n if self._pending_removals:\n self._commit_removals()\n self.data.remove(ref(item))\n \n def discard(self,item):\n if self._pending_removals:\n self._commit_removals()\n self.data.discard(ref(item))\n \n def update(self,other):\n if self._pending_removals:\n self._commit_removals()\n for element in other:\n self.add(element)\n \n def __ior__(self,other):\n self.update(other)\n return self\n \n def difference(self,other):\n newset=self.copy()\n newset.difference_update(other)\n return newset\n __sub__=difference\n \n def difference_update(self,other):\n self.__isub__(other)\n def __isub__(self,other):\n if self._pending_removals:\n self._commit_removals()\n if self is other:\n self.data.clear()\n else :\n self.data.difference_update(ref(item)for item in other)\n return self\n \n def intersection(self,other):\n return self.__class__(item for item in other if item in self)\n __and__=intersection\n \n def intersection_update(self,other):\n self.__iand__(other)\n def __iand__(self,other):\n if self._pending_removals:\n self._commit_removals()\n self.data.intersection_update(ref(item)for item in other)\n return self\n \n def issubset(self,other):\n return self.data.issubset(ref(item)for item in other)\n __le__=issubset\n \n def __lt__(self,other):\n return self.data set(ref(item)for item in other)\n \n def __eq__(self,other):\n if not isinstance(other,self.__class__):\n return NotImplemented\n return self.data ==set(ref(item)for item in other)\n \n def symmetric_difference(self,other):\n newset=self.copy()\n newset.symmetric_difference_update(other)\n return newset\n __xor__=symmetric_difference\n \n def symmetric_difference_update(self,other):\n self.__ixor__(other)\n def __ixor__(self,other):\n if self._pending_removals:\n self._commit_removals()\n if self is other:\n self.data.clear()\n else :\n self.data.symmetric_difference_update(ref(item,self._remove)for item in other)\n return self\n \n def union(self,other):\n return self.__class__(e for s in (self,other)for e in s)\n __or__=union\n \n def isdisjoint(self,other):\n return len(self.intersection(other))==0\n",["_weakref"]],__future__:[".py",'\'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nall_feature_names=[\n"nested_scopes",\n"generators",\n"division",\n"absolute_import",\n"with_statement",\n"print_function",\n"unicode_literals",\n"barry_as_FLUFL",\n]\n\n__all__=["all_feature_names"]+all_feature_names\n\n\n\n\n\nCO_NESTED=0x0010\nCO_GENERATOR_ALLOWED=0\nCO_FUTURE_DIVISION=0x2000\nCO_FUTURE_ABSOLUTE_IMPORT=0x4000\nCO_FUTURE_WITH_STATEMENT=0x8000\nCO_FUTURE_PRINT_FUNCTION=0x10000\nCO_FUTURE_UNICODE_LITERALS=0x20000\nCO_FUTURE_BARRY_AS_BDFL=0x40000\n\nclass _Feature:\n def __init__(self,optionalRelease,mandatoryRelease,compiler_flag):\n self.optional=optionalRelease\n self.mandatory=mandatoryRelease\n self.compiler_flag=compiler_flag\n \n def getOptionalRelease(self):\n \'\'\n\n\n \n \n return self.optional\n \n def getMandatoryRelease(self):\n \'\'\n\n\n\n \n \n return self.mandatory\n \n def __repr__(self):\n return "_Feature"+repr((self.optional,\n self.mandatory,\n self.compiler_flag))\n \nnested_scopes=_Feature((2,1,0,"beta",1),\n(2,2,0,"alpha",0),\nCO_NESTED)\n\ngenerators=_Feature((2,2,0,"alpha",1),\n(2,3,0,"final",0),\nCO_GENERATOR_ALLOWED)\n\ndivision=_Feature((2,2,0,"alpha",2),\n(3,0,0,"alpha",0),\nCO_FUTURE_DIVISION)\n\nabsolute_import=_Feature((2,5,0,"alpha",1),\n(3,0,0,"alpha",0),\nCO_FUTURE_ABSOLUTE_IMPORT)\n\nwith_statement=_Feature((2,5,0,"alpha",1),\n(2,6,0,"alpha",0),\nCO_FUTURE_WITH_STATEMENT)\n\nprint_function=_Feature((2,6,0,"alpha",2),\n(3,0,0,"alpha",0),\nCO_FUTURE_PRINT_FUNCTION)\n\nunicode_literals=_Feature((2,6,0,"alpha",2),\n(3,0,0,"alpha",0),\nCO_FUTURE_UNICODE_LITERALS)\n\nbarry_as_FLUFL=_Feature((3,1,0,"alpha",2),\n(3,9,0,"alpha",0),\nCO_FUTURE_BARRY_AS_BDFL)\n',[]],"asyncio.coroutines":[".py",'from .futures import Future,CancelledError\nfrom ._utils import decorator,_isgenerator\n\nimport types\nimport dis\n\n@decorator\ndef coroutine(func):\n \'\'\n\n \n func.__coroutinefunction__=True\n return func\n \n"""\n def coro(*a, **k):\n res = func(*a, **k)\n if isinstance(res, Future) or _isgenerator(res):\n yield from res\n else:\n return res\n coro.__coroutinefunction__ = True\n return coro\n"""\n\ndef run_async(loop=None ):\n @decorator\n def _decorator(func):\n coro=coroutine(func)\n def task(*a,**k):\n return Task(coro(*a,**k),loop=loop,task_name=func.__name__)\n task.__async_task__=True\n return task\n return _decorator\n \n \ndef iscoroutinefunction(fun):\n return (hasattr(fun,\'__coroutinefunction__\')or\n fun.__code__.co_flags&dis.COROUTINE)\n \ndef iscoroutine(obj):\n return isinstance(obj,types.CoroutineType)or _isgenerator(obj)\n \n \nclass Task(Future):\n \'\'\n\n \n def __init__(self,coro_object,*,loop=None ,task_name=None ):\n super().__init__(loop)\n self._coro_obj=coro_object\n self._name=task_name\n self._loop.call_soon(self._step)\n \n def _step(self,val=None ,exc=None ):\n if self.done():\n return\n try :\n if exc:\n f=self._coro_obj.throw(exc)\n else :\n f=self._coro_obj.send(val)\n except StopIteration as e:\n self.set_result(e.value)\n except BaseException as e:\n self.set_exception(e)\n else :\n f.add_done_callback(self._wakeup)\n \n def _wakeup(self,fut):\n try :\n res=fut.result()\n except BaseException as e:\n self._step(None ,e)\n else :\n self._step(res,None )\n \n def __str__(self):\n ret="Task("+str(self._name)+"): "\n if self.done():\n if self._exception:\n ret +="finished with exception"\n else :\n ret +="finished with result:"+str(self._result)\n elif self.cancelled():\n ret +="canceled"\n else :\n ret +="pending"\n return ret\n \n \n \n \ndef ensure_future(fut_or_coroutine_obj,*,loop=None ):\n if isinstance(fut_or_coroutine_obj,Future):\n if loop is not None and loop is not fut_or_coroutine_obj._loop:\n raise ValueError(\'loop argument must agree with Future\')\n return fut_or_coroutine_obj\n elif iscoroutine(fut_or_coroutine_obj):\n return Task(fut_or_coroutine_obj,loop=loop,\n task_name=fut_or_coroutine_obj.__name__)\n else :\n raise TypeError(\'Expecting coroutine object or Future, got \'+\n str(fut_or_coroutine_obj)+\' instead.\')\n \n',["asyncio._utils","asyncio.futures","dis","types"]],"asyncio.events":[".py",'\'\'\n\nfrom browser import ajax\nfrom browser import timer\n\nimport asyncio\nimport time\n\n\nclass Handle:\n def __init__(self):\n self._cancelled=False\n \n def cancel(self):\n self._cancelled=True\n \n def cancelled(self):\n return self._cancelled\n \n \nclass TimerHandle(Handle):\n \'\'\n \n def __init__(self,timeout,when):\n self._cancelled=False\n self._timeout=timeout\n self._when=when\n \n \n def __hash__(self):\n return hash(self._when)\n \n def __lt__(self,other):\n return self._when other._when\n \n def __ge__(self,other):\n if self._when >other._when:\n return True\n return self.__eq__(other)\n \n def __eq__(self,other):\n if isinstance(other,TimerHandle):\n return self._timeout ==other._timeout\n return NotImplemented\n \n def __ne__(self,other):\n equal=self.__eq__(other)\n return NotImplemented if equal is NotImplemented else not equal\n \n def cancel(self):\n if not self._cancelled:\n timer.clear_timeout(self._timeout)\n self._cancelled=True\n \n \nclass PausableTimerHandle(TimerHandle):\n def __init__(self,callback,when,schedule_immediately=True ):\n super().__init__(None ,when)\n self._finished=False\n def _cb():\n self._finished=True\n callback()\n self._cb=_cb\n self._cb.__name__=callback.__name__\n if schedule_immediately:\n self.resume()\n \n def resume(self):\n if not self._finished and not self._timeout:\n tm=time.time()\n if tm >=self._when:\n delay=0\n else :\n delay=(self._when -tm)*1000\n self._timeout=timer.set_timeout(self._cb,delay)\n \n def pause(self):\n if not self._finished and self._timeout:\n timer.clear_timeout(self._timeout)\n \n def cancel(self):\n if not self._cancelled and not self._finished:\n if self._timeout:\n timer.clear_timeout(self._timeout)\n self._cancelled=True\n self._finished=True\n \n def finished(self):\n return self._finished\n \n \nclass BrowserEventLoop:\n def __init__(self):\n self._debug=False\n self._pending=[]\n self._running=True\n self._scheduled=[]\n self._cleanup_timer=timer.set_interval(self._clean_schedule,1000)\n \n def _clean_schedule(self):\n updated=[]\n for handle in self._scheduled:\n if not handle.finished():\n updated.append(handle)\n self._scheduled=updated\n \n def _register_future(self,fut):\n self._pending.append(fut)\n fut.add_done_callback(self._future_done)\n \n def _future_done(self,fut):\n self._pending.remove(fut)\n \n def pending_futures(self):\n return self._pending\n \n def send_exception_to_pending_futures(self,ex):\n for fut in self._pending:\n try :\n if not fut.done():\n fut.set_exception(ex)\n except BaseException as exc:\n console.log("Error sending exception",ex,"to",fut,":",exc)\n \n def close(self):\n self.stop()\n if self._debug:\n self._clean_schedule()\n if len(self._scheduled)>0:\n print("Warning, pending callbacks",self._scheduled)\n if len(self._pending)>0:\n print("Warning, pending futures",self._pending)\n \n def stop(self,*args):\n if self._running:\n for handle in self._scheduled:\n handle.pause()\n self._clean_schedule()\n timer.clear_interval(self._cleanup_timer)\n self._cleanup_timer=None\n self._running=False\n \n def run_forever(self):\n if not self._running:\n for handle in self._scheduled:\n handle.resume()\n self._clean_schedule()\n self._cleanup_timer=timer.set_interval(self._clean_schedule,1000)\n self._running=True\n \n def run_until_complete(self,coro_or_fut):\n if not self._running:\n self.run_forever()\n fut=asyncio.ensure_future(coro_or_fut,loop=self)\n fut.add_done_callback(self.stop)\n return fut\n \n def is_running(self):\n return self._running\n \n def call_soon(self,callback,*args):\n return self.call_at(self.time(),callback,*args)\n \n def call_later(self,delay,callback,*args):\n return self.call_at(self.time()+delay,callback,*args)\n \n def call_at(self,when,callback,*args):\n def _callback():\n callback(*args)\n _callback.__name__=callback.__name__\n handle=PausableTimerHandle(_callback,when,schedule_immediately=self._running)\n self._scheduled.append(handle)\n return handle\n \n def time(self):\n return time.time()\n \n def get_debug(self):\n return self._debug\n \n def set_debug(self,enabled):\n self._debug=enabled\n \n \nclass AbstractEventLoopPolicy:\n def __init__(self):\n loop=self.new_event_loop()\n self.set_event_loop(loop)\n \n def get_event_loop(self):\n return self._loop\n \n def set_event_loop(self,loop):\n self._loop=loop\n \n def new_event_loop(self):\n return BrowserEventLoop()\n \n \n_default_policy=AbstractEventLoopPolicy()\n_current_policy=_default_policy\n\n\ndef get_event_loop_policy():\n return _current_policy\n \n \ndef set_event_loop_policy(policy):\n global current_policy\n _current_policy=policy or _default_policy\n \n \ndef get_event_loop():\n return _current_policy.get_event_loop()\n \n \ndef set_event_loop(loop):\n _current_policy.set_event_loop(loop)\n \n \ndef new_event_loop():\n return _current_policy.new_event_loop()\n \n \n \n \n',["asyncio","browser","browser.ajax","browser.timer","time"]],"asyncio.filereader":[".py","from browser import window\n\nfrom .futures import Future\n\n\nMODE_BINARY=0\nMODE_TEXT=1\nMODE_DATAURL=2\n\nclass FileFuture(Future):\n\n def __init__(self,file,mode=MODE_TEXT):\n super().__init__()\n self._reader=window.FileReader.new()\n self._reader.bind('load',self._load_handler)\n self._mode=mode\n if self._mode ==MODE_BINARY:\n raise NotImplementedError()\n if mode ==MODE_BINARY:\n self._reader.readAsBinaryString(file)\n elif mode ==MODE_TEXT:\n self._reader.readAsText(file)\n elif mode ==MODE_DATAURL:\n self._reader.readAsDataURL(file)\n \n def _load_handler(self,evt):\n self.set_result(evt.target.result)\n \n \n \n \ndef read(file,mode):\n return FileFuture(file,mode)\n",["asyncio.futures","browser"]],"asyncio.fs":[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport io\nimport base64\n\nfrom browser import window,document as doc,html\n\nfrom .futures import Future\nfrom .http import HTTPRequest\nfrom .coroutines import run_async\n\n\nclass BrowserFile(io.StringIO):\n def __init__(self,name,content='',mime_type='text/plain;charset=utf-8'):\n super().__init__(content)\n self._mime_tp=mime_type\n self._name=name\n \n def as_data_url(self,mime_type=None ):\n ''\n\n\n \n if mime_type is None :\n mime_type=self._mime_tp\n return 'data:'+self._mime_tp+';base64,'+base64.b64encode(self.getvalue().encode('utf-8')).decode('ascii')\n \n def save(self):\n ''\n\n\n\n\n\n\n \n link=html.A(href=self.as_data_url(),download=self._name)\n doc <=link\n link.click()\n doc.body.removeChild(link)\n \n \nclass FutureLocalFile(Future):\n def __init__(self,file):\n super().__init__()\n self._reader=window.FileReader.new()\n self._reader.bind('load',self._load_handler)\n self._reader.bind('error',self._error_handler)\n self._reader.readAsText(file)\n self._name=file.name\n self._mime=file.type\n \n def cancel(self):\n self._reader.abort()\n \n def _load_handler(self,evt):\n self.set_result(BrowserFile(self._name,evt.target.result,mime_type=self._mime))\n \n def _error_handler(self,evt):\n self.set_exception(IOError(str(self._reader.error)))\n \n \ndef open_local():\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n i=html.INPUT(type='file')\n result=Future()\n \n @run_async()\n def change_handler(evt):\n ret=yield open(i.files[0])\n result.set_result(ret)\n \n i.bind('change',change_handler)\n doc <=i\n i.click()\n doc.body.removeChild(i)\n return result\n \n \n@run_async()\ndef open(file,mode='r',size_limit=None ):\n ''\n\n\n\n\n\n\n\n\n \n if 'r'in mode:\n if type(file)==str:\n req=yield HTTPRequest(file)\n if size_limit is not None and req.response.length >size_limit:\n raise IOError(\"Maximum file size exceeded:\"+str(req.response.length)+\"(max allowed:\"+str(size_limit)+\")\")\n ret=BrowserFile(file,req.response)\n else :\n if size_limit is not None and file.size >size_limit:\n raise IOError(\"Maximum file size exceeded:\"+str(file.size)+\"(max allowed:\"+str(size_limit)+\")\")\n ret=yield FutureLocalFile(file)\n else :\n ret=BrowserFile(file,'')\n return ret\n",["asyncio.coroutines","asyncio.futures","asyncio.http","base64","browser","browser.html","io"]],"asyncio.futures":[".py","\nfrom .events import get_event_loop\n\n\nclass InvalidStateError(Exception):\n pass\n \n \nclass CancelledError(Exception):\n pass\n \n \nclass TimeoutError(Exception):\n pass\n \n \nclass Future:\n ''\n\n\n\n\n\n\n\n\n\n \n STATUS_STARTED=0\n STATUS_CANCELED=1\n STATUS_FINISHED=2\n STATUS_ERROR=3\n \n def __init__(self,loop=None ):\n if loop is None :\n loop=get_event_loop()\n self._loop=loop\n self._status=Future.STATUS_STARTED\n self._result=None\n self._exception=None\n self._callbacks=[]\n self._loop._register_future(self)\n \n def _schedule_callbacks(self):\n for cb in self._callbacks:\n self._loop.call_soon(cb,self)\n \n def cancel(self):\n ''\n\n\n \n if self._status !=Future.STATUS_STARTED:\n return False\n self._status=Future.STATUS_CANCELED\n self._schedule_callbacks()\n return True\n \n def cancelled(self):\n ''\n return self._status ==Future.STATUS_CANCELED\n \n def done(self):\n ''\n\n\n\n \n return self._status !=Future.STATUS_STARTED\n \n def result(self):\n ''\n\n\n\n \n if self._status ==Future.STATUS_STARTED:\n raise InvalidStateError()\n if self._status ==Future.STATUS_CANCELED:\n raise CancelledError()\n if self._status ==Future.STATUS_ERROR:\n raise self._exception\n return self._result\n \n def exception(self):\n ''\n\n\n\n \n if self._status ==Future.STATUS_STARTED:\n raise InvalidStateError()\n if self._status ==Future.STATUS_CANCELED:\n raise CancelledError()\n if self._status ==Future.STATUS_ERROR:\n return self._exception\n \n def add_done_callback(self,fn):\n ''\n\n\n\n\n\n \n if self.done():\n self._loop.call_soon(fn,self)\n else :\n self._callbacks.append(fn)\n \n def remove_done_callback(self,fn):\n ''\n\n\n\n \n removed=0\n retain=[]\n for cb in self._callbacks:\n if cb ==fn:\n removed +=1\n else :\n retain.append(cb)\n self._callbacks=retain\n return removed\n \n def set_result(self,result):\n ''\n\n\n\n \n if self._status !=Future.STATUS_STARTED:\n raise InvalidStateError()\n self._result=result\n self._status=Future.STATUS_FINISHED\n self._schedule_callbacks()\n \n def set_exception(self,exception):\n ''\n\n\n\n \n if self._status !=Future.STATUS_STARTED:\n raise InvalidStateError()\n self._exception=exception\n self._status=Future.STATUS_ERROR\n self._schedule_callbacks()\n \n def __iter__(self):\n if not self.done():\n yield self\n return self.result()\n \n \nclass GatheredFuture(Future):\n def __init__(self,futures,return_exceptions=False ,loop=None ):\n super().__init__(loop=None )\n self._futures=futures\n self._ret_exceptions=return_exceptions\n for fut in futures:\n fut.add_done_callback(lambda :self._done(fut))\n \n def _done(self,fut):\n if self.done():\n return\n \n if fut.canceled():\n if not self._ret_exceptions:\n self.set_exception(CancelledError())\n return\n else :\n exc=fut.exception()\n if exc is not None and not self._ret_exceptions:\n self.set_exception(exc)\n return\n self._check_finished()\n \n def cancel(self):\n for fut in self._futures:\n if not fut.done():\n fut.cancel()\n super().cancel()\n \n def _check_finished(self):\n results=[]\n for fut in self._futures:\n if not fut.done():\n return\n elif fut.canceled():\n results.append(CancelledError())\n exc=fut.exception()\n if exc is not None :\n results.append(exc)\n else :\n results.append(fut.result())\n self.set_result(results)\n \n \nclass SleepFuture(Future):\n def __init__(self,seconds,result=None ,loop=None ):\n super().__init__(loop)\n self._loop.call_later(seconds,self.set_result,result)\n \n def set_result(self,result):\n if not self.done():\n super().set_result(result)\n else :\n print(\"Sleep already finished with ex:\",self.exception())\n \n \ndef gather(*coros_or_futures,return_exceptions=False ,loop=None ):\n fut_list=[ensure_future(c,loop=loop)for c in coros_or_futures]\n return GatheredFuture(fut_list,return_exceptions=False )\n",["asyncio.events"]],"asyncio.http":[".py","from browser import ajax\n\nfrom .futures import Future\n\n\nclass HTTPException(Exception):\n ''\n\n \n def __init__(self,request):\n super(HTTPException,self).__init__()\n self.req=request\n \n \nclass HTTPRequest(Future):\n ''\n\n \n METHOD_POST='POST'\n METHOD_GET='GET'\n \n def __init__(self,url,method='GET',data=None ,**kwargs):\n super(HTTPRequest,self).__init__(**kwargs)\n self._url=url\n self._req=ajax.ajax()\n self._req.bind(\"complete\",self._complete_handler)\n self._data=data\n self._method=method\n self._req.open(self._method,self._url,True )\n self._req.set_header('content-type','application/x-www-form-urlencoded')\n if self._data is None :\n self._req.send()\n else :\n self._req.send(self._data)\n \n def cancel(self):\n self._req.abort()\n super().cancel()\n \n def _complete_handler(self,req):\n if req.status ==200 or req.status ==0:\n self.set_result(req)\n else :\n self.set_exception(HTTPException(req))\n",["asyncio.futures","browser","browser.ajax"]],"asyncio.locks":[".py","__all__=['Lock','Event','Condition','Semaphore','BoundedSemaphore']\n\nfrom . import futures\nfrom .coroutines import coroutine\n\n\nclass _ContextManager:\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,lock):\n self._lock=lock\n \n def __enter__(self):\n \n \n return None\n \n def __exit__(self,*args):\n try :\n self._lock.release()\n finally :\n self._lock=None\n \n \nclass Lock:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self):\n self._waiters=[]\n self._locked=False\n \n def __repr__(self):\n res=super().__repr__()\n extra='locked'if self._locked else 'unlocked'\n if self._waiters:\n extra='{},waiters:{}'.format(extra,len(self._waiters))\n return '<{} [{}]>'.format(res[1:-1],extra)\n \n def locked(self):\n ''\n return self._locked\n \n @coroutine\n def acquire(self):\n ''\n\n\n\n \n if not self._waiters and not self._locked:\n self._locked=True\n return True\n \n fut=futures.Future()\n self._waiters.append(fut)\n try :\n yield from fut\n self._locked=True\n return True\n finally :\n self._waiters.remove(fut)\n \n def release(self):\n ''\n\n\n\n\n\n\n\n\n \n if self._locked:\n self._locked=False\n \n for fut in self._waiters:\n if not fut.done():\n fut.set_result(True )\n break\n else :\n raise RuntimeError('Lock is not acquired.')\n \n def __enter__(self):\n raise RuntimeError(\n '\"yield from\" should be used as context manager expression')\n \n def __exit__(self,*args):\n \n \n pass\n \n def __iter__(self):\n \n \n \n \n \n \n \n \n \n \n \n \n yield from self.acquire()\n return _ContextManager(self)\n \n \nclass Event:\n ''\n\n\n\n\n\n \n \n def __init__(self):\n self._waiters=[]\n self._value=False\n \n def __repr__(self):\n res=super().__repr__()\n extra='set'if self._value else 'unset'\n if self._waiters:\n extra='{},waiters:{}'.format(extra,len(self._waiters))\n return '<{} [{}]>'.format(res[1:-1],extra)\n \n def is_set(self):\n ''\n return self._value\n \n def set(self):\n ''\n\n\n \n if not self._value:\n self._value=True\n \n for fut in self._waiters:\n if not fut.done():\n fut.set_result(True )\n \n def clear(self):\n ''\n\n \n self._value=False\n \n @coroutine\n def wait(self):\n ''\n\n\n\n\n \n if self._value:\n return True\n \n fut=futures.Future()\n self._waiters.append(fut)\n try :\n yield from fut\n return True\n finally :\n self._waiters.remove(fut)\n \n \nclass Condition:\n ''\n\n\n\n\n\n\n \n \n def __init__(self,lock=None ):\n \n if lock is None :\n lock=Lock()\n \n self._lock=lock\n \n self.locked=lock.locked\n self.acquire=lock.acquire\n self.release=lock.release\n \n self._waiters=[]\n \n def __repr__(self):\n res=super().__repr__()\n extra='locked'if self.locked()else 'unlocked'\n if self._waiters:\n extra='{},waiters:{}'.format(extra,len(self._waiters))\n return '<{} [{}]>'.format(res[1:-1],extra)\n \n @coroutine\n def wait(self):\n ''\n\n\n\n\n\n\n\n\n \n if not self.locked():\n raise RuntimeError('cannot wait on un-acquired lock')\n \n self.release()\n try :\n fut=futures.Future()\n self._waiters.append(fut)\n try :\n yield from fut\n return True\n finally :\n self._waiters.remove(fut)\n \n finally :\n yield from self.acquire()\n \n @coroutine\n def wait_for(self,predicate):\n ''\n\n\n\n\n \n result=predicate()\n while not result:\n yield from self.wait()\n result=predicate()\n return result\n \n def notify(self,n=1):\n ''\n\n\n\n\n\n\n\n\n\n \n if not self.locked():\n raise RuntimeError('cannot notify on un-acquired lock')\n \n idx=0\n for fut in self._waiters:\n if idx >=n:\n break\n \n if not fut.done():\n idx +=1\n fut.set_result(False )\n \n def notify_all(self):\n ''\n\n\n\n \n self.notify(len(self._waiters))\n \n def __enter__(self):\n raise RuntimeError(\n '\"yield from\" should be used as context manager expression')\n \n def __exit__(self,*args):\n pass\n \n def __iter__(self):\n \n yield from self.acquire()\n return _ContextManager(self)\n \n \nclass Semaphore:\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,value=1):\n if value <0:\n raise ValueError(\"Semaphore initial value must be >= 0\")\n self._value=value\n self._waiters=[]\n \n def __repr__(self):\n res=super().__repr__()\n extra='locked'if self.locked()else 'unlocked,value:{}'.format(\n self._value)\n if self._waiters:\n extra='{},waiters:{}'.format(extra,len(self._waiters))\n return '<{} [{}]>'.format(res[1:-1],extra)\n \n def locked(self):\n ''\n return self._value ==0\n \n @coroutine\n def acquire(self):\n ''\n\n\n\n\n\n\n \n if not self._waiters and self._value >0:\n self._value -=1\n return True\n \n fut=futures.Future()\n self._waiters.append(fut)\n try :\n yield from fut\n self._value -=1\n return True\n finally :\n self._waiters.remove(fut)\n \n def release(self):\n ''\n\n\n \n self._value +=1\n for waiter in self._waiters:\n if not waiter.done():\n waiter.set_result(True )\n break\n \n def __enter__(self):\n raise RuntimeError(\n '\"yield from\" should be used as context manager expression')\n \n def __exit__(self,*args):\n pass\n \n def __iter__(self):\n \n yield from self.acquire()\n return _ContextManager(self)\n \n \nclass BoundedSemaphore(Semaphore):\n ''\n\n\n\n \n \n def __init__(self,value=1):\n self._bound_value=value\n super().__init__(value)\n \n def release(self):\n if self._value >=self._bound_value:\n raise ValueError('BoundedSemaphore released too many times')\n super().release()\n",["asyncio","asyncio.coroutines","asyncio.futures"]],"asyncio.objects":[".py","from .coroutines import coroutine,ensure_future\nfrom .futures import Future,gather\nfrom ._utils import decorator\n\nimport logging\nlogger=logging.getLogger(__package__)\n\nclass AsyncObjectInitCanceledError(Exception):\n def __str__(self):\n return \"Async object initialization canceled\"\n \nclass AsyncObjectInitExceptionError(Exception):\n def __init__(self,ex):\n super().__init__(\"Init threw an exception:\"+str(ex))\n self._init_ex=ex\n \nclass AsyncObjectUninitializedError(Exception):\n def __str__(self):\n return \"Async object not initialized\"\n \n@decorator\ndef async_init(init):\n ''\n\n \n def new_init(self,*args,**kwargs):\n logger.debug(\"Calling decorated init for %s\",self.__class__.__name__)\n cls=str(self.__class__)\n def _init_cb(fut):\n if fut.cancelled():\n logger.error(\"Constructor for %s canceled.\",cls)\n elif fut.exception()is not None :\n print(fut.exception())\n logger.error(\"Constructor for %s raised an exception: %s\",cls,str(fut.exception()))\n self._init_future=coroutine(init)(self,*args,**kwargs)\n self._init_future.add_done_callback(_init_cb)\n \n return new_init\n \n \n \ndef defer(future,func,*args,**kwargs):\n ret=Future()\n def cb(fut):\n if fut.canceled():\n logger.error(\"Unable to call deferred method %s object init canceled.\",str(func.__decorated))\n ret.set_exception(AsyncObjectInitCanceledError())\n if fut.exception()is not None :\n logger.error(\"Unable to call deferred method %s object init raised an exception:\",str(fut.exception))\n ret.set_exception(AsyncObjectInitExceptionError(fut.exception()))\n else :\n try :\n ret.set_result(func(*args,**kwargs))\n except Exception as ex:\n ret.set_exception(ex)\n future.add_done_callback(cb)\n return ret\n \n@decorator\ndef _generate_guard(func):\n def guard(self,*args,**kwargs):\n if self._init_future.cancelled():\n logger.error(\"Unable to call deferred method %s object init canceled.\",str(func))\n raise AsyncObjectInitCanceledError()\n elif self._init_future.exception()is not None :\n raise AsyncObjectInitExceptionError(self._init_future.exception())\n elif self._init_future.done():\n return func(self,*args,**kwargs)\n else :\n if hasattr(func,'__async_task__'):\n logger.info(\"Defering method %s until object is initialized.\",str(func))\n return defer(self._init_future,func,self,*args,**kwargs)\n else :\n logger.error(\"Calling method on Uninitialized object\")\n raise AsyncObjectUninitializedError()\n return guard\n \n \ndef async_class(cls):\n ''\n\n\n\n\n \n for member in dir(cls):\n if not member[0:2]=='__':\n meth=getattr(cls,member)\n if hasattr(meth,'__call__'):\n setattr(cls,member,_generate_guard(meth))\n return cls\n \n \nclass FutureCall(Future):\n ''\n\n\n \n \n def __init__(self,fn,fut,loop=None ):\n super().__init__(loop=loop)\n self._fn=fn\n ensure_future(fut,loop=loop).add_done_callback(self._done)\n \n def _done(self,fut):\n ex=fut.exception()\n if ex is None :\n res=self._fn(fut.result())\n if isinstance(res,Future):\n res.add_done_callback(self._done)\n else :\n self.set_result(res)\n else :\n self.set_exception(fut.exception())\n \n \ndef val(fut_or_val):\n ''\n\n\n\n \n if isinstance(fut_or_val,Future):\n return fut_or_val.result()\n return fut_or_val\n \n \ndef wrap_in_future(res,loop=None ):\n ''\n\n\n\n\n \n try :\n return ensure_future(res,loop=loop)\n except TypeError:\n pass\n fut=Future()\n fut.set_result(res)\n return fut\n \n \ndef wait_for(*args,loop=None ):\n ''\n\n\n \n return gather(*[FullyResolved(wrap_in_future(a,loop=loop))for a in args])\n \n \nclass FullyResolved(Future):\n ''\n\n\n\n \n def __init__(self,fut,loop=None ):\n super().__init__(loop=loop)\n self._fut=wrap_in_future(fut,loop=loop)\n self._fut.add_done_callback(self._done)\n \n def _done(self,fut):\n if fut.exception()is not None :\n self.set_exception(fut.exception())\n else :\n try :\n self._fut=ensure_future(fut.result())\n self._fut.add_done_callback(self._done)\n except TypeError:\n self.set_result(fut.result())\n \n \nclass FutureObject(Future):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n FORBIDDEN=[name for name in dir(Future)if not name.startswith('__')]+\\\n ['_loop','_callbacks']+\\\n ['__getattr__','__setattr__','__call__']+\\\n ['_fut','_done']\n \n @classmethod\n def future_or_val(cls,x,loop=None ):\n ''\n\n\n \n try :\n return FutureObject(ensure_future(x,loop=loop))\n except TypeError:\n return x\n return x\n \n def __init__(self,fut,loop=None ):\n super().__init__(loop=loop)\n self._fut=ensure_future(fut,loop=loop)\n self._fut.add_done_callback(self._done)\n \n def _done(self,fut):\n if fut.exception()is None :\n self.set_result(fut.result())\n else :\n self.set_exception(fut.exception())\n \n def __getattr__(self,name):\n if name in FutureObject.FORBIDDEN:\n return super().__getattribute__(name)\n \n if self.done():\n return self.future_or_val(getattr(self.result(),name),loop=self._loop)\n \n ret=Future()\n \n def resolve(fut):\n ex=fut.exception()\n if ex is None :\n ret.set_result(self.future_or_val(getattr(fut.result(),name),loop=self._loop))\n else :\n ret.set_exception(fut.exception())\n \n self._fut.add_done_callback(resolve)\n \n return FutureObject(ret)\n \n def __setattr__(self,name,value):\n if name in FutureObject.FORBIDDEN:\n return super().__setattr__(name,value)\n \n ready_fut=wait_for(self,value,loop=self._loop)\n \n if ready_fut.done():\n return self.future_or_val(setattr(self.result(),name,val(value)),loop=self._loop)\n \n ret=Future()\n \n def resolve(fut):\n ex=fut.exception()\n if ex is None :\n ret.set_result(self.future_or_val(setattr(self.result(),name,val(value)),loop=self._loop))\n else :\n ret.set_exception(fut.exception())\n \n self._fut.add_done_callback(resolve)\n \n return FutureObject(ret)\n \n def __call__(self,*args,**kwargs):\n \n ready_fut=wait_for(self,*args,*kwargs.values(),loop=self._loop)\n \n if ready_fut.done():\n return self.future_or_val(self.result()(*[val(a)for a in args],**{k:val(v)for k,v in kwargs.items()}),loop=self._loop)\n \n ret=Future()\n \n def resolve(fut):\n ex=fut.exception()\n if ex is None :\n ret.set_result(self.future_or_val(self.result()(*[val(a)for a in args],**{k:val(v)for k,v in kwargs.items()}),loop=self._loop))\n else :\n ret.set_exception(fut.exception())\n \n ready_fut.add_done_callback(resolve)\n \n return FutureObject(ret)\n \n \n \n",["asyncio._utils","asyncio.coroutines","asyncio.futures","logging"]],"asyncio.queues":[".py","''\n\n__all__=['Queue','PriorityQueue','LifoQueue','JoinableQueue',\n'QueueFull','QueueEmpty']\n\nimport heapq\n\nfrom . import events\nfrom . import futures\nfrom . import locks\n\nfrom .coroutines import coroutine\n\nclass _deque(list):\n\n def popleft(self):\n ret=self[0]\n del self[0]\n return ret\n \n \nclass QueueEmpty(Exception):\n ''\n\n \n pass\n \n \nclass QueueFull(Exception):\n ''\n\n \n pass\n \n \nclass Queue:\n ''\n\n\n\n\n\n\n\n\n \n \n def __init__(self,maxsize=0):\n self._loop=events.get_event_loop()\n self._maxsize=maxsize\n \n \n self._getters=_deque()\n \n self._putters=_deque()\n self._init(maxsize)\n \n def _init(self,maxsize):\n self._queue=_deque()\n \n def _get(self):\n return self._queue.popleft()\n \n def _put(self,item):\n self._queue.append(item)\n \n def __repr__(self):\n return '<{} at {:#x} {}>'.format(\n type(self).__name__,id(self),self._format())\n \n def __str__(self):\n return '<{} {}>'.format(type(self).__name__,self._format())\n \n def _format(self):\n result='maxsize={!r}'.format(self._maxsize)\n if getattr(self,'_queue',None ):\n result +=' _queue={!r}'.format(list(self._queue))\n if self._getters:\n result +=' _getters[{}]'.format(len(self._getters))\n if self._putters:\n result +=' _putters[{}]'.format(len(self._putters))\n return result\n \n def _consume_done_getters(self):\n \n while self._getters and self._getters[0].done():\n self._getters.popleft()\n \n def _consume_done_putters(self):\n \n while self._putters and self._putters[0][1].done():\n self._putters.popleft()\n \n def qsize(self):\n ''\n return len(self._queue)\n \n @property\n def maxsize(self):\n ''\n return self._maxsize\n \n def empty(self):\n ''\n return not self._queue\n \n def full(self):\n ''\n\n\n\n \n if self._maxsize <=0:\n return False\n else :\n return self.qsize()>=self._maxsize\n \n @coroutine\n def put(self,item):\n ''\n\n\n\n\n\n \n self._consume_done_getters()\n if self._getters:\n assert not self._queue,(\n 'queue non-empty, why are getters waiting?')\n \n getter=self._getters.popleft()\n \n \n \n self._put(item)\n \n \n getter.set_result(self._get())\n \n elif self._maxsize >0 and self._maxsize <=self.qsize():\n waiter=futures.Future()\n \n self._putters.append((item,waiter))\n yield from waiter\n \n else :\n self._put(item)\n \n def put_nowait(self,item):\n ''\n\n\n \n self._consume_done_getters()\n if self._getters:\n assert not self._queue,(\n 'queue non-empty, why are getters waiting?')\n \n getter=self._getters.popleft()\n \n \n \n self._put(item)\n \n \n getter.set_result(self._get())\n \n elif self._maxsize >0 and self._maxsize <=self.qsize():\n raise QueueFull\n else :\n self._put(item)\n \n @coroutine\n def get(self):\n ''\n\n\n\n\n \n self._consume_done_putters()\n if self._putters:\n assert self.full(),'queue not full, why are putters waiting?'\n item,putter=self._putters.popleft()\n self._put(item)\n \n \n \n \n \n self._loop.call_soon(putter._set_result_unless_cancelled,None )\n \n return self._get()\n \n elif self.qsize():\n return self._get()\n else :\n waiter=futures.Future()\n \n self._getters.append(waiter)\n return (yield from waiter)\n \n def get_nowait(self):\n ''\n\n\n \n self._consume_done_putters()\n if self._putters:\n assert self.full(),'queue not full, why are putters waiting?'\n item,putter=self._putters.popleft()\n self._put(item)\n \n \n \n putter.set_result(None )\n \n return self._get()\n \n elif self.qsize():\n return self._get()\n else :\n raise QueueEmpty\n \n \nclass PriorityQueue(Queue):\n ''\n\n\n \n \n def _init(self,maxsize):\n self._queue=[]\n \n def _put(self,item,heappush=heapq.heappush):\n heappush(self._queue,item)\n \n def _get(self,heappop=heapq.heappop):\n return heappop(self._queue)\n \n \nclass LifoQueue(Queue):\n ''\n \n def _init(self,maxsize):\n self._queue=[]\n \n def _put(self,item):\n self._queue.append(item)\n \n def _get(self):\n return self._queue.pop()\n \n \nclass JoinableQueue(Queue):\n ''\n \n def __init__(self,maxsize=0):\n super().__init__(maxsize=maxsize)\n self._unfinished_tasks=0\n self._finished=locks.Event()\n self._finished.set()\n \n def _format(self):\n result=Queue._format(self)\n if self._unfinished_tasks:\n result +=' tasks={}'.format(self._unfinished_tasks)\n return result\n \n def _put(self,item):\n super()._put(item)\n self._unfinished_tasks +=1\n self._finished.clear()\n \n def task_done(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if self._unfinished_tasks <=0:\n raise ValueError('task_done() called too many times')\n self._unfinished_tasks -=1\n if self._unfinished_tasks ==0:\n self._finished.set()\n \n @coroutine\n def join(self):\n ''\n\n\n\n\n\n \n if self._unfinished_tasks >0:\n yield from self._finished.wait()\n",["asyncio","asyncio.coroutines","asyncio.events","asyncio.futures","asyncio.locks","heapq"]],"asyncio._utils":[".py","import types\n\ndef decorator(dec):\n def new_dec(fn):\n ret=dec(fn)\n ret.__decorated=fn\n ret.__name__=fn.__name__\n return ret\n return new_dec\n \ndef _isgenerator_function(val):\n return hasattr(val,'__code__')and val.__code__.co_flags&0x20\n \ndef _isgenerator(val):\n return isinstance(val,types.GeneratorType)\n \n \n",["types"]],asyncio:[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfrom .coroutines import *\nfrom .events import *\nfrom .futures import *\nfrom .locks import *\nfrom .queues import *\n\nfrom .http import *\nfrom .objects import *\n\n\nFIRST_COMPLETED=0\nFIRST_EXCEPTION=0\nALL_COMPLETED=0\n\n\n\ndef wait_for(coro_or_future,timeout,*args,loop=None ):\n if loop is None :\n loop=get_event_loop()\n fut=ensure_future(coro_or_future(*args),loop=loop)\n if timeout:\n def timeout_handler():\n if fut.done():\n pass\n else :\n fut.set_exception(TimeoutError())\n loop.call_later(timeout,timeout_handler)\n return fut\n \ndef shield(arg,loop=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n inner=ensure_future(arg)\n if inner.done():\n \n return inner\n if loop is None :\n loop=get_event_loop()\n outer=Future()\n \n def _done_callback(inner):\n if outer.cancelled():\n if not inner.cancelled():\n \n inner.exception()\n return\n \n if inner.cancelled():\n outer.cancel()\n else :\n exc=inner.exception()\n if exc is not None :\n outer.set_exception(exc)\n else :\n outer.set_result(inner.result())\n \n inner.add_done_callback(_done_callback)\n return outer\n \ndef sleep(seconds,result=None ,loop=None ):\n return futures.SleepFuture(seconds,result,loop=loop)\n",["asyncio.coroutines","asyncio.events","asyncio.futures","asyncio.http","asyncio.locks","asyncio.objects","asyncio.queues"],1],"browser.ajax":[".py",'from _ajax import *\n\nclass Request:\n\n def __init__(self,url,method="GET",headers={},\n data=None ,sync=False ,timeout=None ):\n self.req=ajax1()\n self.req.open(method,url,not sync)\n self.method=method\n self.headers=headers\n self.req.timeout_secs=timeout\n if timeout is not None :\n if not isinstance(timeout,[int,float]):\n raise ValueError(\'timeout is not a number\')\n self._timeout()\n self.req.bind("complete",self._complete)\n \n self.ct_set=False\n for key,value in self.headers.items():\n self.req.set_header(key,value)\n if key.lower()==\'content-type\':\n self.ct_set=True\n if not self.ct_set:\n if self.method =="POST":\n self.req.set_header("Content-Type",\n "application/x-www-form-urlencoded")\n if data is None :\n self.req.send()\n else :\n self.req.send(data)\n \n def _complete(self):\n \'\'\n\n\n \n if hasattr(self,"timer"):\n \n self.req.clearTimeout(self.timer)\n del self.timer\n if 200 <=self.req.status <300:\n return self._success()\n return self._error()\n \n def _error(self):\n \'\'\n\n \n error=getattr(self,"error",None )\n if error is not None :\n self.req.text=self.req.responseText\n error.__func__(self.req)\n \n def _success(self):\n \'\'\n\n \n success=getattr(self,"success",None )\n if success is not None :\n self.req.text=self.req.responseText\n success.__func__(self.req)\n \n def _timeout(self):\n \'\'\n\n\n \n timeout_method=getattr(self,"timeout",None )\n if timeout_method is not None :\n def func(*args):\n return timeout_method.__func__(self.req)\n self.req.set_timeout(self.req.timeout_secs,func)\n',["_ajax"]],"browser.highlight":[".py","import keyword\nimport _jsre as re\n\nfrom browser import html\n\nletters='abcdefghijklmnopqrstuvwxyz'\nletters +=letters.upper()+'_'\ndigits='0123456789'\n\nbuiltin_funcs=\"\"\"abs|dict|help|min|setattr|\nall|dir|hex|next|slice|\nany|divmod|id|object|sorted|\nascii|enumerate|input|oct|staticmethod|\nbin|eval|int|open|str|\nbool|exec|isinstance|ord|sum|\nbytearray|filter|issubclass|pow|super|\nbytes|float|iter|print|tuple|\ncallable|format|len|property|type|\nchr|frozenset|list|range|vars|\nclassmethod|getattr|locals|repr|zip|\ncompile|globals|map|reversed|__import__|\ncomplex|hasattr|max|round|\ndelattr|hash|memoryview|set|\n\"\"\"\n\nkw_pattern='^('+'|'.join(keyword.kwlist)+')$'\nbf_pattern='^('+builtin_funcs.replace(\"\\n\",\"\")+')$'\n\ndef escape(txt):\n txt=txt.replace('<','<')\n txt=txt.replace('>','>')\n return txt\n \ndef highlight(txt):\n res=html.PRE()\n i=0\n name=''\n while i 3:\n self.info=line[3:]\n else :\n self.info=\"block\"\n elif line.startswith(\"`\")and len(line)>1:\n self.info=line[1:]\n elif line.startswith(\">>>\"):\n self.info=\"python-console\"\n else :\n self.info=None\n \n def to_html(self):\n if self.lines[0].startswith(\"`\"):\n self.lines.pop(0)\n res=escape('\\n'.join(self.lines))\n res=unmark(res)\n _class=self.info or \"marked\"\n res='
%s
\\n'%(_class,res)\n return res,[]\n \n \nclass HtmlBlock:\n\n def __init__(self,src):\n self.src=src\n \n def to_html(self):\n return self.src\n \nclass Marked:\n\n def __init__(self,line=''):\n self.line=line\n self.children=[]\n \n def to_html(self):\n return apply_markdown(self.line)\n \n \nrefs={}\nref_pattern=r\"^\\[(.*)\\]:\\s+(.*)\"\n\ndef mark(src):\n\n global refs\n refs={}\n \n \n \n \n \n \n \n \n src=src.replace('\\r\\n','\\n')\n \n \n src=re.sub(r'(.*?)\\n=+\\n','\\n# \\\\1\\n',src)\n src=re.sub(r'(.*?)\\n-+\\n','\\n## \\\\1\\n',src)\n \n lines=src.split('\\n')+['']\n \n i=bq=0\n ul=ol=0\n \n while i '):\n nb=1\n while nb ':\n nb +=1\n lines[i]=lines[i][nb:]\n if nb >bq:\n lines.insert(i,'
'*(nb -bq))\n i +=1\n bq=nb\n elif nb '*(bq -nb))\n i +=1\n bq=nb\n elif bq >0:\n lines.insert(i,'
'*bq)\n i +=1\n bq=0\n \n \n if (lines[i].strip()and lines[i].lstrip()[0]in '-+*'\n and len(lines[i].lstrip())>1\n and lines[i].lstrip()[1]==' '\n and (i ==0 or ul or not lines[i -1].strip())):\n \n nb=1+len(lines[i])-len(lines[i].lstrip())\n lines[i]='
  • '+lines[i][nb:]\n if nb >ul:\n lines.insert(i,'
      '*(nb -ul))\n i +=1\n elif nb '*(ul -nb))\n i +=1\n ul=nb\n elif ul and not lines[i].strip():\n if (i 1 and nline[1]==' ':\n pass\n else :\n lines.insert(i,'
    '*ul)\n i +=1\n ul=0\n \n \n mo=re.search(r'^(\\d+\\.)',lines[i])\n if mo:\n if not ol:\n lines.insert(i,'
      ')\n i +=1\n lines[i]='
    1. '+lines[i][len(mo.groups()[0]):]\n ol=1\n elif (ol and not lines[i].strip()and i ')\n i +=1\n ol=0\n \n i +=1\n \n if ul:\n lines.append(''*ul)\n if ol:\n lines.append('
    '*ol)\n if bq:\n lines.append(''*bq)\n \n sections=[]\n scripts=[]\n section=Marked()\n \n i=0\n while i '):\n scripts.append('\\n'.join(lines[i+1:j]))\n for k in range(i,j+1):\n lines[k]=''\n break\n j +=1\n i=j\n continue\n \n \n elif line.startswith('#'):\n level=1\n line=lines[i]\n while level ','>')\n czone=czone.replace('_','_')\n czone=czone.replace('*','*')\n return czone\n \ndef s_escape(mo):\n\n czone=mo.string[mo.start():mo.end()]\n return escape(czone)\n \ndef unmark(code_zone):\n\n code_zone=code_zone.replace('_','_')\n return code_zone\n \ndef s_unmark(mo):\n\n code_zone=mo.string[mo.start():mo.end()]\n code_zone=code_zone.replace('_','_')\n return code_zone\n \ndef apply_markdown(src):\n\n scripts=[]\n key=None\n \n i=0\n while i -1 and src[start_a:end_a].find('\\n')==-1:\n link=src[start_a:end_a]\n rest=src[end_a+1:].lstrip()\n if rest and rest[0]=='(':\n j=0\n while True :\n end_href=rest.find(')',j)\n if end_href ==-1:\n break\n if rest[end_href -1]=='\\\\':\n j=end_href+1\n else :\n break\n if end_href >-1 and rest[:end_href].find('\\n')==-1:\n tag=(''+link\n +'')\n src=src[:start_a -1]+tag+rest[end_href+1:]\n i=start_a+len(tag)\n elif rest and rest[0]=='[':\n j=0\n while True :\n end_key=rest.find(']',j)\n if end_key ==-1:\n break\n if rest[end_key -1]=='\\\\':\n j=end_key+1\n else :\n break\n if end_key >-1 and rest[:end_key].find('\\n')==-1:\n if not key:\n key=link\n if key.lower()not in refs:\n raise KeyError('unknown reference %s'%key)\n url=refs[key.lower()]\n tag=''+link+''\n src=src[:start_a -1]+tag+rest[end_key+1:]\n i=start_a+len(tag)\n \n i +=1\n \n \n \n \n \n \n \n \n \n rstr=' '+''.join(random.choice(letters)for i in range(16))+' '\n \n i=0\n state=None\n start=-1\n data=''\n tags=[]\n while i 'and state is None :\n tags.append(src[i:j+1])\n src=src[:i]+rstr+src[j+1:]\n i +=len(rstr)\n break\n elif state =='\"'or state ==\"'\":\n data +=src[j]\n elif src[j]=='\\n':\n \n \n src=src[:i]+'<'+src[i+1:]\n j=i+4\n break\n j +=1\n elif src[i]=='`'and i >0 and src[i -1]!='\\\\':\n \n j=i+1\n while j \\1'%(tag,tag),src)\n \n \n src=re.sub(r'\\*(.*?)\\*',r'<%s>\\1'%('EM','EM'),src)\n \n \n \n src=re.sub(r'\\b_(.*?)_\\b',r'\\1',src,\n flags=re.M)\n \n \n code_pattern=r'\\`(.*?)\\`'\n src=re.sub(code_pattern,r'\\1',src)\n \n \n while True :\n pos=src.rfind(rstr)\n if pos ==-1:\n break\n repl=tags.pop()\n src=src[:pos]+repl+src[pos+len(rstr):]\n \n src='

    '+src+'

    '\n \n return src,scripts\n",["_jsre","random","re"]],"browser.object_storage":[".py","import json\n\nclass _UnProvided():\n pass\n \n \nclass ObjectStorage():\n\n def __init__(self,storage):\n self.storage=storage\n \n def __delitem__(self,key):\n del self.storage[json.dumps(key)]\n \n def __getitem__(self,key):\n return json.loads(self.storage[json.dumps(key)])\n \n def __setitem__(self,key,value):\n self.storage[json.dumps(key)]=json.dumps(value)\n \n def __contains__(self,key):\n return json.dumps(key)in self.storage\n \n def get(self,key,default=None ):\n if json.dumps(key)in self.storage:\n return self.storage[json.dumps(key)]\n return default\n \n def pop(self,key,default=_UnProvided()):\n if type(default)is _UnProvided or json.dumps(key)in self.storage:\n return json.loads(self.storage.pop(json.dumps(key)))\n return default\n \n def __iter__(self):\n keys=self.keys()\n return keys.__iter__()\n \n def keys(self):\n return [json.loads(key)for key in self.storage.keys()]\n \n def values(self):\n return [json.loads(val)for val in self.storage.values()]\n \n def items(self):\n return list(zip(self.keys(),self.values()))\n \n def clear(self):\n self.storage.clear()\n \n def __len__(self):\n return len(self.storage)\n",["json"]],"browser.session_storage":[".py",'\nimport sys\nfrom browser import window\nfrom .local_storage import LocalStorage\n\nhas_session_storage=hasattr(window,\'sessionStorage\')\n\nclass SessionStorage(LocalStorage):\n\n storage_type="session_storage"\n \n def __init__(self):\n if not has_session_storage:\n raise EnvironmentError("SessionStorage not available")\n self.store=window.sessionStorage\n \nif has_session_storage:\n storage=SessionStorage()\n',["browser","browser.local_storage","sys"]],"browser.svg":[".py","from _svg import *\n",["_svg"]],"browser.template":[".py",'\'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport traceback\nfrom browser import document,html\n\n\n\nvoid_elements=["AREA","BASE","BR","COL","EMBED","HR","IMG","INPUT",\n"LINK","META","PARAM","SOURCE","TRACK","WBR"]\n\ndef copy(obj):\n if isinstance(obj,dict):\n res={}\n for key,value in obj.items():\n res[key]=copy(value)\n return res\n elif isinstance(obj,(list,tuple)):\n return obj[:]\n elif isinstance(obj,set):\n return {x for x in obj}\n else :\n return obj\n \n \nclass ElementData:\n \'\'\n \n \n def __init__(self,**kw):\n \'\'\n\n\n \n self.__keys__=set()\n for key,value in kw.items():\n object.__setattr__(self,key,value)\n self.__keys__.add(key)\n \n def __setattr__(self,attr,value):\n \'\'\n\n\n \n object.__setattr__(self,attr,value)\n if attr !="__keys__":\n self.__keys__.add(attr)\n \n def to_dict(self):\n \'\'\n return {k:getattr(self,k)for k in self.__keys__}\n \n def clone(self):\n \'\'\n\n\n \n return copy(self.to_dict())\n \n \nclass TemplateError(Exception):\n pass\n \n \nclass Template:\n\n def __init__(self,element,callbacks=[]):\n if isinstance(element,str):\n element=document[element]\n self.element=element\n self.line_mapping={}\n self.line_num=1\n self.indent=0\n self.python=""\n self.parse(element)\n self.callbacks=callbacks\n \n def add(self,content,elt):\n self.python +=content\n self.line_mapping[self.line_num]=elt\n if content.endswith("\\n"):\n self.line_num +=1\n \n def add_indent(self,content,elt):\n self.add(" "*self.indent+content,elt)\n \n def write(self,content):\n self.html +=str(content)+"\\n"\n \n def parse(self,elt):\n \'\'\n\n \n \n \n is_block=False\n \n if elt.nodeType ==3:\n \n if elt.text.strip():\n text=elt.text.replace(\'"\',""")\n text=text.replace("\\n","\\\\n")\n text=\'"\'+text+\'"\'\n \n nb_braces=elt.text.count("{")\n if nb_braces:\n nb_double_braces=elt.text.count("{{")\n if nb_double_braces !=nb_braces:\n lines=[line for line in elt.text.split("\\n")\n if line.strip()]\n text=" ".join(lines).replace(\'"\',""")\n text=\'f"""\'+text+\'"""\'\n self.add_indent("__write__("+text+")\\n",elt)\n \n elif hasattr(elt,"tagName"):\n start_tag="__write__(\'<"+elt.tagName\n block=None\n \n \n static_attrs=[]\n dynamic_attrs=[]\n for item in elt.attributes:\n if item.name =="b-code":\n \n block=item.value.rstrip(":")+":"\n elif item.name =="b-include":\n \n elt.html=open(item.value).read()\n else :\n value=item.value.replace("\\n","")\n if "{"in value:\n dynamic_attrs.append("\'"+item.name+"\', f\'"+\n value.replace("\'","\\\\\'")+"\'")\n else :\n static_attrs.append(item.name+\'="\'+value+\'"\')\n \n if block:\n self.add_indent(block+"\\n",elt)\n self.indent +=1\n is_block=True\n \n self.add_indent(start_tag,elt)\n \n if static_attrs or dynamic_attrs:\n self.add(" ",elt)\n \n for attr in static_attrs:\n self.add_indent(attr+" ",elt)\n \n if dynamic_attrs:\n self.add("\')\\n",elt)\n for attr in dynamic_attrs:\n self.add_indent("__render_attr__("+attr+")\\n",elt)\n self.add_indent("__write__(\'>\')\\n",elt)\n else :\n self.add_indent(">\')\\n",elt)\n \n for child in elt.childNodes:\n self.parse(child)\n \n if hasattr(elt,"tagName")and elt.tagName not in void_elements:\n self.add_indent("__write__(\'\')\\n",elt)\n \n if is_block:\n self.indent -=1\n \n def on(self,element,event,callback):\n def func(evt):\n cache=self.data.clone()\n callback(evt,self)\n new_data=self.data.to_dict()\n if new_data !=cache:\n self.render(**new_data)\n element.bind(event,func)\n \n def render_attr(self,name,value):\n \'\'\n\n\n\n\n\n \n if isinstance(value,bool):\n self.html +=""if not value else " "+name\n else :\n self.html +=" "+name+\'="\'+str(value)+\'"\'\n \n def render(self,**ns):\n \'\'\n\n \n \n self.data=ElementData(**ns)\n \n \n ns.update({"__write__":self.write,\n "__render_attr__":self.render_attr})\n \n self.html=""\n \n \n try :\n exec(self.python,ns)\n except Exception as exc:\n msg=traceback.format_exc()\n if self.element.nodeType !=9:\n print("Error rendering template:\\n"+self.element.outerHTML)\n else :\n print("Error rendering template:\\n"+self.element.html)\n print("Namespace passed to render():\\n",self.data.to_dict())\n if isinstance(exc,SyntaxError):\n line_no=exc.args[2]\n else :\n line_no=exc.traceback.tb_lineno\n elt=self.line_mapping[line_no]\n print("The error is raised when rendering the element:")\n try :\n print(elt.outerHTML)\n except AttributeError:\n print(\'no outerHTML for\',elt)\n print(elt.html)\n print("Python traceback:")\n print(msg)\n return\n \n \n \n \n \n \n \n if self.element.nodeType !=9:\n rank=self.element.index()\n parent=self.element.parent\n self.element.outerHTML=self.html\n self.element=parent.childNodes[rank]\n else :\n \n self.element.html=self.html\n \n \n self.element.unbind()\n callbacks={}\n for callback in self.callbacks:\n callbacks[callback.__name__]=callback\n \n \n \n for element in self.element.select("*[b-on]"):\n bindings=element.getAttribute("b-on")\n bindings=bindings.split(";")\n for binding in bindings:\n parts=binding.split(":")\n if not len(parts)==2:\n raise TemplateError(f"wrong binding: {binding}")\n event,func_name=[x.strip()for x in parts]\n if not func_name in callbacks:\n print(element.outerHTML)\n raise TemplateError(f"unknown callback: {func_name}")\n self.on(element,event,callbacks[func_name])\n',["browser","browser.html","traceback"]],"browser.timer":[".py","from browser import window\nfrom browser import console\ndef wrap(func):\n\n\n def f(*args,**kw):\n try :\n return func(*args,**kw)\n except Exception as exc:\n msg=''\n try :\n if exc.args:\n msg='{0.info}\\n{0.__name__}: {0.args[0]}'.format(exc)\n else :\n msg=str(exc)\n import sys\n sys.stderr.write(msg)\n except Exception as exc2:\n console.log(\"Error printing exception traceback\",exc2,func,args,kw)\n return f\n \nclear_interval=window.clearInterval\n\nclear_timeout=window.clearTimeout\n\ndef set_interval(func,interval):\n return window.setInterval(wrap(func),interval)\n \ndef set_timeout(func,interval):\n return int(window.setTimeout(wrap(func),interval))\n \ndef request_animation_frame(func):\n return int(window.requestAnimationFrame(func))\n \ndef cancel_animation_frame(int_id):\n window.cancelAnimationFrame(int_id)\n \ndef set_loop_timeout(x):\n\n assert isinstance(x,int)\n __BRYTHON__.loop_timeout=x\n",["browser","sys"]],"browser.websocket":[".py","from browser import window\n\nif hasattr(window,'WebSocket'):\n supported=True\n WebSocket=window.WebSocket.new\nelse :\n supported=False\n \n class WebSocket:\n def __init__(self,*args):\n raise NotImplementedError\n",["browser"]],"browser.webworker":[".py","''\n\n\n\n\n\nfrom browser import window\n\nimport asyncio\nimport os\nimport sys\n\nDEFAULT_BRYTHON_OPTIONS={\n}\n\nCHILD_WORKERS=[]\n\n\n\n\n\nS_CREATED=0\nS_LOADING=1\nS_LOADED=2\n\nS_RUNNING=3\n\nS_FINISHED=4\nS_TERMINATED=5\n\ntry :\n _Worker=window.Worker.new\n _can_launch_workers=True\nexcept :\n _can_launch_workers=False\n \nclass WorkerError(Exception):\n pass\n \n \nclass Message:\n ''\n\n\n\n \n def __init__(self,name,data,src=None ,id=-1):\n self.name=name\n self.data=data\n self.id=id\n self.is_reply=False\n self.src=None\n \n def __str__(self):\n return \"MSG(\"+str(self.name)+\":\"+str(self.id)+\"):\"+str(self.data)\n \nclass Reply(asyncio.Future):\n ''\n\n\n\n \n _LAST_MESSAGE_ID=0\n _WAITING_REPLIES={}\n \n @classmethod\n def _next_id(cls):\n cls._LAST_MESSAGE_ID +=1\n return cls._LAST_MESSAGE_ID\n \n @classmethod\n def terminate(cls,worker):\n wr={}\n for id,reply in cls._WAITING_REPLIES.items():\n if reply._worker ==worker:\n reply.set_exception(WorkerError(\"Worker Terminated\"))\n else :\n wr[id]=reply\n cls._WAITING_REPLIES=wr\n \n \n def __init__(self,message,timeout,worker=None ):\n super().__init__()\n message.id=self._next_id()\n self._wait_id=message.id\n self._WAITING_REPLIES[message.id]=self\n self._worker=worker\n self.add_done_callback(self.finish_waiting)\n if timeout:\n self._timeout=self._loop.call_later(timeout,self.set_exception,asyncio.TimeoutError())\n else :\n self._timeout=None\n \n def finish_waiting(self,*args,**kwargs):\n if self._timeout:\n self._timeout.cancel()\n del self._WAITING_REPLIES[self._wait_id]\n \n def set_result(self,result):\n super().set_result(result)\n \nclass WorkerCommon:\n ''\n\n\n \n \n \n @property\n def status(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n return self._status\n \n def __init__(self,worker):\n self._status=S_CREATED\n self._event_handlers={}\n self._message_handlers={}\n self._worker=worker\n self._worker.addEventListener('message',self._event_handler)\n self._worker.addEventListener('error',self.__error_handler)\n self._queued_messages=[]\n self.bind_event('message',self._message_handler)\n self.bind_event('ready',self._post_queued_messages)\n \n def post_message(self,message,want_reply=False ,timeout=None ):\n ''\n\n\n\n\n\n \n if self.status >S_RUNNING:\n raise WorkerError(\"Invalid state\")\n if want_reply:\n ret=Reply(message,timeout,worker=self)\n else :\n ret=None\n self._queued_messages.append({'type':'message','name':message.name,'id':message.id,'data':message.data})\n if self.status ==S_RUNNING:\n self._post_queued_messages()\n return ret\n \n def post_reply(self,message,reply):\n ''\n\n \n payload={'type':'message','name':reply.name,'id':reply.id,'data':reply.data}\n if message.id:\n payload['reply_to']=message.id\n self._queued_messages.append(payload)\n if self.status ==S_RUNNING:\n self._post_queued_messages()\n \n def _post_queued_messages(self,*_,**kwargs):\n for payload in self._queued_messages:\n self._worker.postMessage(payload)\n \n def bind_event(self,event,handler):\n ''\n\n\n\n\n\n\n\n\n \n self._bind(self._event_handlers,event,handler)\n \n def unbind_event(self,event=None ,handler=None ):\n self._unbind(self._event_handlers,event,handler)\n \n def bind_message(self,message,handler):\n ''\n\n\n \n self._bind(self._message_handlers,message,handler)\n \n def unbind_message(self,message=None ,handler=None ):\n self._unbind(self._message_handlers,message,handler)\n \n \n def _bind(self,handler_list,event,handler):\n handlers=handler_list.get(event,[])\n handlers.append(handler)\n handler_list[event]=handlers\n \n def _unbind(self,handler_list,event=None ,handler=None ):\n if event is None and handler is None :\n handler_list={}\n elif handler is None :\n handler_list[event]=[]\n elif event is None :\n for ev,handlers in handler_list.items():\n if handler in handlers:\n handlers.remove(handler)\n else :\n handlers=handler_list.get(event,[])\n if handler in handlers:\n handlers.remove(handler)\n \n def _emit_event(self,event,data=None ):\n self._emit(self._event_handlers,event,data)\n \n def _emit_message(self,message,msg):\n self._emit(self._message_handlers,message,msg)\n \n def _emit(self,handler_list,event,data=None ):\n try :\n handlers=handler_list.get(event,[])\n for h in handlers:\n h(event,data,src=self)\n except Exception as ex:\n \n print(\"Exception\",str(ex),\"while handling\",event,\"data=\",str(data.data))\n \n \n def __error_handler(self,error,*_,**kwargs):\n self._emit_event('error',error)\n \n def _event_handler(self,event,*_,**kwargs):\n try :\n event_type=event.data['type']\n self._emit_event(event_type,event.data)\n except :\n pass\n \n def _message_handler(self,event,data,*_,**kwargs):\n msg=Message(data['name'],data['data'],src=self,id=data['id'])\n if 'reply_to'in data:\n msg.is_reply=True\n reply=Reply._WAITING_REPLIES.get(data['reply_to'],None )\n if reply:\n reply.set_result(msg)\n else :\n self._emit_message(msg.name,msg)\n \n \nclass WorkerParent(WorkerCommon):\n ''\n\n \n WORKER_SCRIPT=sys.base_exec_prefix+'/web_workers/worker.js'\n CHILD_CLASS='browser.webworker.WorkerChild'\n \n def __init__(self,url,argv=[],environ={},brython_options=DEFAULT_BRYTHON_OPTIONS):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if not _can_launch_workers:\n raise WorkerError(\"Cannot spawn workers (webkit based browsers don't support running webworkers inside webworkers)\")\n super().__init__(_Worker(self.WORKER_SCRIPT,{\"name\":url}))\n self.bind_event('status',self._status_handler)\n self.bind_event('error',self._error_handler)\n self._status_waiters=[]\n self._status=S_LOADING\n self._worker.postMessage({\n 'program':{'url':url},\n 'brython_options':brython_options,\n 'argv':[url]+argv,\n 'env':environ,\n 'worker_class':self.CHILD_CLASS\n })\n CHILD_WORKERS.append(self)\n \n def terminate(self):\n ''\n\n\n\n \n if self.status >S_RUNNING:\n raise WorkerError(\"Invalid state\")\n self._worker.terminate()\n self._status=S_TERMINATED\n Reply.terminate(self)\n self._emit_event('exited')\n \n def wait_for_status(self,status):\n ''\n\n\n \n fut=asyncio.Future()\n setattr(fut,'waiting_for',status)\n if status <=self.status:\n fut.set_result(True )\n else :\n self._status_waiters.append(fut)\n return fut\n \n \n def _status_handler(self,event,data,*_,**kwargs):\n self._status=data.status\n keep=[]\n for f in self._status_waiters:\n if f.waiting_for <=self._status:\n f.set_result(True )\n else :\n keep.append(f)\n self._status_waiters=keep\n if self._status >=S_FINISHED:\n self._emit_event('exited')\n Reply.terminate(self)\n CHILD_WORKERS.remove(self)\n elif self._status ==S_LOADED:\n self._emit_event('loaded')\n elif self._status ==S_RUNNING:\n self._emit_event('ready')\n \n def _error_handler(self,error,data,*_,**kwargs):\n self._error=data\n self.terminate()\n \n \nclass WorkerChild(WorkerCommon):\n ''\n\n\n\n\n \n def __init__(self):\n super().__init__(__BRYTHON__.__WORKER)\n self._argv=sys.argv\n self._environ=__BRYTHON__.__ENV\n self._status=S_LOADED\n \n def exec(self):\n ''\n\n\n \n self._status=S_RUNNING\n self._worker.postMessage({'type':'status','status':S_RUNNING})\n self._emit_event('ready')\n \n def terminate(self):\n ''\n\n \n if self.status >S_RUNNING:\n raise WorkerError(\"Invalid state\")\n self._status=S_FINISHED\n self._emit_event('exited')\n self._worker.postMessage({'type':'status','status':S_FINISHED})\n self._worker.close()\n \nclass RPCWorkerParent(WorkerParent):\n CHILD_CLASS='browser.webworker.RPCWorkerChild'\n \n def __init__(self,url,argv=[],environ={},brython_options=DEFAULT_BRYTHON_OPTIONS):\n super().__init__(url,argv,environ,brython_options)\n self.bind_message('register',self._register)\n \n def _register(self,msg_name,message,*_,**kwargs):\n for method,doc in message.data:\n self._generate_method(method,doc)\n \n def _generate_method(self,method,doc):\n @asyncio.coroutine\n def meth(*args,**kwargs):\n msg=Message('call',{'method':method,'args':args,'kwargs':kwargs})\n reply=yield self.post_message(msg,want_reply=True )\n if reply.data['status']=='ok':\n return reply.data['ret']\n else :\n raise WorkerError(reply.data['error'])\n \n meth.__doc__=doc\n meth.__name__=method\n setattr(self,method,meth)\n \nclass RPCWorkerChild(WorkerChild):\n def __init__(self):\n super().__init__()\n self._methods={}\n self.bind_message('call',self._call)\n \n def register_method(self,m):\n m_name=m.__name__.split('.')[-1]\n m_doc=m.__doc__ or ''\n self._methods[m_name]=m\n msg=Message('register',[(m_name,m_doc)])\n self.post_message(msg)\n \n def _call(self,msg_name,message,*_,**kw):\n \n m_name=message.data['method']\n args=message.data['args']\n kwargs=message.data['kwargs']\n if m_name not in self._methods:\n self.post_reply(message,Message('result',{'status':'error','error':'Method not registered'}))\n m=self._methods.get(m_name)\n try :\n ret=m(*args,**kwargs)\n msg=Message('result',{'status':'ok','ret':ret})\n self.post_reply(message,msg)\n except Exception as e:\n msg=Message('result',{'status':'error','error':\"Exception raised in call:\"+str(e)})\n self.post_reply(message,msg)\n \nif __BRYTHON__.isa_web_worker:\n w_cls=__BRYTHON__.__WORKER_CLASS\n elements=w_cls.split('.')\n cls_name=elements[-1]\n cls_module='.'.join(elements[:-1])\n try :\n mod=__import__(cls_module,fromlist=[cls_name])\n current_worker=getattr(mod,cls_name)()\n except Exception as ex:\n print(\"Error importing child worker class\",ex)\n __BRYTHON__.__WORKER.postMessage({'type':'status','status':S_TERMINATED,'error':str(ex)})\n __BRYTHON__.__WORKER.close()\n \n os.environ.update(dict(current_worker._environ))\nelse :\n current_worker=None\n",["asyncio","browser","os","sys"]],browser:[".py","import javascript\n\nfrom _browser import *\n\nfrom .local_storage import LocalStorage\nfrom .session_storage import SessionStorage\nfrom .object_storage import ObjectStorage\n\nWebSocket=window.WebSocket.new\n",["_browser","browser.local_storage","browser.object_storage","browser.session_storage","javascript"],1],"collections.abc":[".py","from _collections_abc import *\nfrom _collections_abc import __all__\n",["_collections_abc"]],collections:[".py","\n\nfrom _collections import deque,defaultdict\n\n\n\n__all__=['deque','defaultdict','namedtuple','UserDict','UserList',\n'UserString','Counter','OrderedDict']\n\n\n\n\n\n\nfrom _abcoll import MutableMapping\n\n\n\nfrom collections.abc import *\nimport collections.abc\n__all__ +=collections.abc.__all__\n\nfrom _collections import deque,defaultdict,namedtuple\nfrom operator import itemgetter as _itemgetter\nfrom keyword import iskeyword as _iskeyword\nimport sys as _sys\nimport heapq as _heapq\n\n\nfrom itertools import repeat as _repeat,chain as _chain,starmap as _starmap\nfrom reprlib import recursive_repr as _recursive_repr\n\nclass Set(set):\n pass\n \nclass Sequence(list):\n pass\n \ndef _proxy(obj):\n return obj\n \n \n \n \n \nclass _Link(object):\n __slots__='prev','next','key','__weakref__'\n \nclass OrderedDict(dict):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n def __init__(self,*args,**kwds):\n ''\n\n\n\n \n if len(args)>1:\n raise TypeError('expected at most 1 arguments, got %d'%len(args))\n try :\n self.__root\n except AttributeError:\n self.__hardroot=_Link()\n self.__root=root=_proxy(self.__hardroot)\n root.prev=root.next=root\n self.__map={}\n self.__update(*args,**kwds)\n \n def __setitem__(self,key,value,\n dict_setitem=dict.__setitem__,proxy=_proxy,Link=_Link):\n ''\n \n \n if key not in self:\n self.__map[key]=link=Link()\n root=self.__root\n last=root.prev\n link.prev,link.next,link.key=last,root,key\n last.next=link\n root.prev=proxy(link)\n dict_setitem(self,key,value)\n \n def __delitem__(self,key,dict_delitem=dict.__delitem__):\n ''\n \n \n dict_delitem(self,key)\n link=self.__map.pop(key)\n link_prev=link.prev\n link_next=link.next\n link_prev.next=link_next\n link_next.prev=link_prev\n \n def __iter__(self):\n ''\n \n root=self.__root\n curr=root.next\n while curr is not root:\n yield curr.key\n curr=curr.next\n \n def __reversed__(self):\n ''\n \n root=self.__root\n curr=root.prev\n while curr is not root:\n yield curr.key\n curr=curr.prev\n \n def clear(self):\n ''\n root=self.__root\n root.prev=root.next=root\n self.__map.clear()\n dict.clear(self)\n \n def popitem(self,last=True ):\n ''\n\n\n \n if not self:\n raise KeyError('dictionary is empty')\n root=self.__root\n if last:\n link=root.prev\n link_prev=link.prev\n link_prev.next=root\n root.prev=link_prev\n else :\n link=root.next\n link_next=link.next\n root.next=link_next\n link_next.prev=root\n key=link.key\n del self.__map[key]\n value=dict.pop(self,key)\n return key,value\n \n def move_to_end(self,key,last=True ):\n ''\n\n\n\n\n \n link=self.__map[key]\n link_prev=link.prev\n link_next=link.next\n link_prev.next=link_next\n link_next.prev=link_prev\n root=self.__root\n if last:\n last=root.prev\n link.prev=last\n link.next=root\n last.next=root.prev=link\n else :\n first=root.next\n link.prev=root\n link.next=first\n root.next=first.prev=link\n \n def __sizeof__(self):\n sizeof=_sys.getsizeof\n n=len(self)+1\n size=sizeof(self.__dict__)\n size +=sizeof(self.__map)*2\n size +=sizeof(self.__hardroot)*n\n size +=sizeof(self.__root)*n\n return size\n \n \n update=__update=MutableMapping.update\n keys=MutableMapping.keys\n values=MutableMapping.values\n items=MutableMapping.items\n __ne__=MutableMapping.__ne__\n \n __marker=object()\n \n def pop(self,key,default=__marker):\n ''\n\n\n\n \n if key in self:\n result=self[key]\n del self[key]\n return result\n if default is self.__marker:\n raise KeyError(key)\n return default\n \n def setdefault(self,key,default=None ):\n ''\n if key in self:\n return self[key]\n self[key]=default\n return default\n \n \n \n def __repr__(self):\n ''\n if not self:\n return '%s()'%(self.__class__.__name__,)\n return '%s(%r)'%(self.__class__.__name__,list(self.items()))\n \n def __reduce__(self):\n ''\n items=[[k,self[k]]for k in self]\n inst_dict=vars(self).copy()\n for k in vars(OrderedDict()):\n inst_dict.pop(k,None )\n if inst_dict:\n return (self.__class__,(items,),inst_dict)\n return self.__class__,(items,)\n \n def copy(self):\n ''\n return self.__class__(self)\n \n @classmethod\n def fromkeys(cls,iterable,value=None ):\n ''\n\n\n \n self=cls()\n for key in iterable:\n self[key]=value\n return self\n \n def __eq__(self,other):\n ''\n\n\n \n if isinstance(other,OrderedDict):\n return len(self)==len(other)and\\\n all(p ==q for p,q in zip(self.items(),other.items()))\n return dict.__eq__(self,other)\n \n \n \n \n \n \n \ndef _count_elements(mapping,iterable):\n ''\n mapping_get=mapping.get\n for elem in iterable:\n mapping[elem]=mapping_get(elem,0)+1\n \n \n \n \n \n \nclass Counter(dict):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n def __init__(self,iterable=None ,**kwds):\n ''\n\n\n\n\n\n\n\n\n \n \n dict.__init__(self)\n self.update(iterable,**kwds)\n \n def __missing__(self,key):\n ''\n \n return 0\n \n def most_common(self,n=None ):\n ''\n\n\n\n\n\n \n \n if n is None :\n return sorted(self.items(),key=_itemgetter(1),reverse=True )\n return _heapq.nlargest(n,self.items(),key=_itemgetter(1))\n \n def elements(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n return _chain.from_iterable(_starmap(_repeat,self.items()))\n \n \n \n @classmethod\n def fromkeys(cls,iterable,v=None ):\n \n \n raise NotImplementedError(\n 'Counter.fromkeys() is undefined. Use Counter(iterable) instead.')\n \n def update(self,iterable=None ,**kwds):\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n if iterable is not None :\n if isinstance(iterable,Mapping):\n if self:\n self_get=self.get\n for elem,count in iterable.items():\n self[elem]=count+self_get(elem,0)\n else :\n super().update(iterable)\n else :\n _count_elements(self,iterable)\n if kwds:\n self.update(kwds)\n \n def subtract(self,iterable=None ,**kwds):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if iterable is not None :\n self_get=self.get\n if isinstance(iterable,Mapping):\n for elem,count in iterable.items():\n self[elem]=self_get(elem,0)-count\n else :\n for elem in iterable:\n self[elem]=self_get(elem,0)-1\n if kwds:\n self.subtract(kwds)\n \n def copy(self):\n ''\n return self.__class__(self)\n \n def __reduce__(self):\n return self.__class__,(dict(self),)\n \n def __delitem__(self,elem):\n ''\n if elem in self:\n super().__delitem__(elem)\n \n def __repr__(self):\n if not self:\n return '%s()'%self.__class__.__name__\n try :\n items=', '.join(map('%r: %r'.__mod__,self.most_common()))\n return '%s({%s})'%(self.__class__.__name__,items)\n except TypeError:\n \n return '{0}({1!r})'.format(self.__class__.__name__,dict(self))\n \n \n \n \n \n \n \n \n \n \n def __add__(self,other):\n ''\n\n\n\n\n \n if not isinstance(other,Counter):\n return NotImplemented\n result=Counter()\n for elem,count in self.items():\n newcount=count+other[elem]\n if newcount >0:\n result[elem]=newcount\n for elem,count in other.items():\n if elem not in self and count >0:\n result[elem]=count\n return result\n \n def __sub__(self,other):\n ''\n\n\n\n\n \n if not isinstance(other,Counter):\n return NotImplemented\n result=Counter()\n for elem,count in self.items():\n newcount=count -other[elem]\n if newcount >0:\n result[elem]=newcount\n for elem,count in other.items():\n if elem not in self and count <0:\n result[elem]=0 -count\n return result\n \n def __or__(self,other):\n ''\n\n\n\n\n \n if not isinstance(other,Counter):\n return NotImplemented\n result=Counter()\n for elem,count in self.items():\n other_count=other[elem]\n newcount=other_count if count 0:\n result[elem]=newcount\n for elem,count in other.items():\n if elem not in self and count >0:\n result[elem]=count\n return result\n \n def __and__(self,other):\n ''\n\n\n\n\n \n if not isinstance(other,Counter):\n return NotImplemented\n result=Counter()\n for elem,count in self.items():\n other_count=other[elem]\n newcount=count if count 0:\n result[elem]=newcount\n return result\n \n \n \n \n \n \nclass ChainMap(MutableMapping):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,*maps):\n ''\n\n\n \n self.maps=list(maps)or [{}]\n \n def __missing__(self,key):\n raise KeyError(key)\n \n def __getitem__(self,key):\n for mapping in self.maps:\n try :\n return mapping[key]\n except KeyError:\n pass\n return self.__missing__(key)\n \n def get(self,key,default=None ):\n return self[key]if key in self else default\n \n def __len__(self):\n return len(set().union(*self.maps))\n \n def __iter__(self):\n return iter(set().union(*self.maps))\n \n def __contains__(self,key):\n return any(key in m for m in self.maps)\n \n def __bool__(self):\n return any(self.maps)\n \n \n \n def __repr__(self):\n return '{0.__class__.__name__}({1})'.format(\n self,', '.join(map(repr,self.maps)))\n \n def __repr__(self):\n return ','.join(str(_map)for _map in self.maps)\n \n @classmethod\n def fromkeys(cls,iterable,*args):\n ''\n return cls(dict.fromkeys(iterable,*args))\n \n def copy(self):\n ''\n return self.__class__(self.maps[0].copy(),*self.maps[1:])\n \n __copy__=copy\n \n def new_child(self):\n ''\n return self.__class__({},*self.maps)\n \n @property\n def parents(self):\n ''\n return self.__class__(*self.maps[1:])\n \n def __setitem__(self,key,value):\n self.maps[0][key]=value\n \n def __delitem__(self,key):\n try :\n del self.maps[0][key]\n except KeyError:\n raise KeyError('Key not found in the first mapping: {!r}'.format(key))\n \n def popitem(self):\n ''\n try :\n return self.maps[0].popitem()\n except KeyError:\n raise KeyError('No keys found in the first mapping.')\n \n def pop(self,key,*args):\n ''\n try :\n return self.maps[0].pop(key,*args)\n except KeyError:\n \n raise KeyError('Key not found in the first mapping: %s'%key)\n \n def clear(self):\n ''\n self.maps[0].clear()\n \n \n \n \n \n \nclass UserDict(MutableMapping):\n\n\n def __init__(self,dict=None ,**kwargs):\n self.data={}\n if dict is not None :\n self.update(dict)\n if len(kwargs):\n self.update(kwargs)\n def __len__(self):return len(self.data)\n def __getitem__(self,key):\n if key in self.data:\n return self.data[key]\n if hasattr(self.__class__,\"__missing__\"):\n return self.__class__.__missing__(self,key)\n raise KeyError(key)\n def __setitem__(self,key,item):self.data[key]=item\n def __delitem__(self,key):del self.data[key]\n def __iter__(self):\n return iter(self.data)\n \n \n def __contains__(self,key):\n return key in self.data\n \n \n def __repr__(self):return repr(self.data)\n def copy(self):\n if self.__class__ is UserDict:\n return UserDict(self.data.copy())\n import copy\n data=self.data\n try :\n self.data={}\n c=copy.copy(self)\n finally :\n self.data=data\n c.update(self)\n return c\n @classmethod\n def fromkeys(cls,iterable,value=None ):\n d=cls()\n for key in iterable:\n d[key]=value\n return d\n \n \n \n \n \nclass UserList(MutableSequence):\n ''\n def __init__(self,initlist=None ):\n self.data=[]\n if initlist is not None :\n \n if type(initlist)==type(self.data):\n self.data[:]=initlist\n elif isinstance(initlist,UserList):\n self.data[:]=initlist.data[:]\n else :\n self.data=list(initlist)\n def __repr__(self):return repr(self.data)\n def __lt__(self,other):return self.data self.__cast(other)\n def __ge__(self,other):return self.data >=self.__cast(other)\n def __cast(self,other):\n return other.data if isinstance(other,UserList)else other\n def __contains__(self,item):return item in self.data\n def __len__(self):return len(self.data)\n def __getitem__(self,i):return self.data[i]\n def __setitem__(self,i,item):self.data[i]=item\n def __delitem__(self,i):del self.data[i]\n def __add__(self,other):\n if isinstance(other,UserList):\n return self.__class__(self.data+other.data)\n elif isinstance(other,type(self.data)):\n return self.__class__(self.data+other)\n return self.__class__(self.data+list(other))\n def __radd__(self,other):\n if isinstance(other,UserList):\n return self.__class__(other.data+self.data)\n elif isinstance(other,type(self.data)):\n return self.__class__(other+self.data)\n return self.__class__(list(other)+self.data)\n def __iadd__(self,other):\n if isinstance(other,UserList):\n self.data +=other.data\n elif isinstance(other,type(self.data)):\n self.data +=other\n else :\n self.data +=list(other)\n return self\n def __mul__(self,n):\n return self.__class__(self.data *n)\n __rmul__=__mul__\n def __imul__(self,n):\n self.data *=n\n return self\n def append(self,item):self.data.append(item)\n def insert(self,i,item):self.data.insert(i,item)\n def pop(self,i=-1):return self.data.pop(i)\n def remove(self,item):self.data.remove(item)\n def clear(self):self.data.clear()\n def copy(self):return self.__class__(self)\n def count(self,item):return self.data.count(item)\n def index(self,item,*args):return self.data.index(item,*args)\n def reverse(self):self.data.reverse()\n def sort(self,*args,**kwds):self.data.sort(*args,**kwds)\n def extend(self,other):\n if isinstance(other,UserList):\n self.data.extend(other.data)\n else :\n self.data.extend(other)\n \n \n \n \n \n \n \nclass UserString(Sequence):\n def __init__(self,seq):\n if isinstance(seq,str):\n self.data=seq\n elif isinstance(seq,UserString):\n self.data=seq.data[:]\n else :\n self.data=str(seq)\n def __str__(self):return str(self.data)\n def __repr__(self):return repr(self.data)\n def __int__(self):return int(self.data)\n def __float__(self):return float(self.data)\n def __complex__(self):return complex(self.data)\n def __hash__(self):return hash(self.data)\n \n def __eq__(self,string):\n if isinstance(string,UserString):\n return self.data ==string.data\n return self.data ==string\n def __ne__(self,string):\n if isinstance(string,UserString):\n return self.data !=string.data\n return self.data !=string\n def __lt__(self,string):\n if isinstance(string,UserString):\n return self.data string.data\n return self.data >string\n def __ge__(self,string):\n if isinstance(string,UserString):\n return self.data >=string.data\n return self.data >=string\n \n def __contains__(self,char):\n if isinstance(char,UserString):\n char=char.data\n return char in self.data\n \n def __len__(self):return len(self.data)\n def __getitem__(self,index):return self.__class__(self.data[index])\n def __add__(self,other):\n if isinstance(other,UserString):\n return self.__class__(self.data+other.data)\n elif isinstance(other,str):\n return self.__class__(self.data+other)\n return self.__class__(self.data+str(other))\n def __radd__(self,other):\n if isinstance(other,str):\n return self.__class__(other+self.data)\n return self.__class__(str(other)+self.data)\n def __mul__(self,n):\n return self.__class__(self.data *n)\n __rmul__=__mul__\n def __mod__(self,args):\n return self.__class__(self.data %args)\n \n \n def capitalize(self):return self.__class__(self.data.capitalize())\n def center(self,width,*args):\n return self.__class__(self.data.center(width,*args))\n def count(self,sub,start=0,end=_sys.maxsize):\n if isinstance(sub,UserString):\n sub=sub.data\n return self.data.count(sub,start,end)\n def encode(self,encoding=None ,errors=None ):\n if encoding:\n if errors:\n return self.__class__(self.data.encode(encoding,errors))\n return self.__class__(self.data.encode(encoding))\n return self.__class__(self.data.encode())\n def endswith(self,suffix,start=0,end=_sys.maxsize):\n return self.data.endswith(suffix,start,end)\n def expandtabs(self,tabsize=8):\n return self.__class__(self.data.expandtabs(tabsize))\n def find(self,sub,start=0,end=_sys.maxsize):\n if isinstance(sub,UserString):\n sub=sub.data\n return self.data.find(sub,start,end)\n def format(self,*args,**kwds):\n return self.data.format(*args,**kwds)\n def index(self,sub,start=0,end=_sys.maxsize):\n return self.data.index(sub,start,end)\n def isalpha(self):return self.data.isalpha()\n def isalnum(self):return self.data.isalnum()\n def isdecimal(self):return self.data.isdecimal()\n def isdigit(self):return self.data.isdigit()\n def isidentifier(self):return self.data.isidentifier()\n def islower(self):return self.data.islower()\n def isnumeric(self):return self.data.isnumeric()\n def isspace(self):return self.data.isspace()\n def istitle(self):return self.data.istitle()\n def isupper(self):return self.data.isupper()\n def join(self,seq):return self.data.join(seq)\n def ljust(self,width,*args):\n return self.__class__(self.data.ljust(width,*args))\n def lower(self):return self.__class__(self.data.lower())\n def lstrip(self,chars=None ):return self.__class__(self.data.lstrip(chars))\n def partition(self,sep):\n return self.data.partition(sep)\n def replace(self,old,new,maxsplit=-1):\n if isinstance(old,UserString):\n old=old.data\n if isinstance(new,UserString):\n new=new.data\n return self.__class__(self.data.replace(old,new,maxsplit))\n def rfind(self,sub,start=0,end=_sys.maxsize):\n if isinstance(sub,UserString):\n sub=sub.data\n return self.data.rfind(sub,start,end)\n def rindex(self,sub,start=0,end=_sys.maxsize):\n return self.data.rindex(sub,start,end)\n def rjust(self,width,*args):\n return self.__class__(self.data.rjust(width,*args))\n def rpartition(self,sep):\n return self.data.rpartition(sep)\n def rstrip(self,chars=None ):\n return self.__class__(self.data.rstrip(chars))\n def split(self,sep=None ,maxsplit=-1):\n return self.data.split(sep,maxsplit)\n def rsplit(self,sep=None ,maxsplit=-1):\n return self.data.rsplit(sep,maxsplit)\n def splitlines(self,keepends=False ):return self.data.splitlines(keepends)\n def startswith(self,prefix,start=0,end=_sys.maxsize):\n return self.data.startswith(prefix,start,end)\n def strip(self,chars=None ):return self.__class__(self.data.strip(chars))\n def swapcase(self):return self.__class__(self.data.swapcase())\n def title(self):return self.__class__(self.data.title())\n def translate(self,*args):\n return self.__class__(self.data.translate(*args))\n def upper(self):return self.__class__(self.data.upper())\n def zfill(self,width):return self.__class__(self.data.zfill(width))\n",["_abcoll","_collections","collections.abc","copy","heapq","itertools","keyword","operator","reprlib","sys"],1],concurrent:[".py","",[],1],"concurrent.futures.process":[".py",'\n\n\n"""Implements ProcessPoolExecutor.\n\nThe follow diagram and text describe the data-flow through the system:\n\n|======================= In-process =====================|== Out-of-process ==|\n\n+----------+ +----------+ +--------+ +-----------+ +---------+\n| | => | Work Ids | => | | => | Call Q | => | |\n| | +----------+ | | +-----------+ | |\n| | | ... | | | | ... | | |\n| | | 6 | | | | 5, call() | | |\n| | | 7 | | | | ... | | |\n| Process | | ... | | Local | +-----------+ | Process |\n| Pool | +----------+ | Worker | | #1..n |\n| Executor | | Thread | | |\n| | +----------- + | | +-----------+ | |\n| | <=> | Work Items | <=> | | <= | Result Q | <= | |\n| | +------------+ | | +-----------+ | |\n| | | 6: call() | | | | ... | | |\n| | | future | | | | 4, result | | |\n| | | ... | | | | 3, except | | |\n+----------+ +------------+ +--------+ +-----------+ +---------+\n\nExecutor.submit() called:\n- creates a uniquely numbered _WorkItem and adds it to the "Work Items" dict\n- adds the id of the _WorkItem to the "Work Ids" queue\n\nLocal worker thread:\n- reads work ids from the "Work Ids" queue and looks up the corresponding\n WorkItem from the "Work Items" dict: if the work item has been cancelled then\n it is simply removed from the dict, otherwise it is repackaged as a\n _CallItem and put in the "Call Q". New _CallItems are put in the "Call Q"\n until "Call Q" is full. NOTE: the size of the "Call Q" is kept small because\n calls placed in the "Call Q" can no longer be cancelled with Future.cancel().\n- reads _ResultItems from "Result Q", updates the future stored in the\n "Work Items" dict and deletes the dict entry\n\nProcess #1..n:\n- reads _CallItems from "Call Q", executes the calls, and puts the resulting\n _ResultItems in "Result Q"\n"""\n\n__author__=\'Brian Quinlan (brian@sweetapp.com)\'\n\nimport atexit\nimport os\nfrom concurrent.futures import _base\nimport queue\nfrom queue import Full\nimport multiprocessing\nfrom multiprocessing import SimpleQueue\nfrom multiprocessing.connection import wait\nimport threading\nimport weakref\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_threads_queues=weakref.WeakKeyDictionary()\n_shutdown=False\n\ndef _python_exit():\n global _shutdown\n _shutdown=True\n items=list(_threads_queues.items())\n for t,q in items:\n q.put(None )\n for t,q in items:\n t.join()\n \n \n \n \n \nEXTRA_QUEUED_CALLS=1\n\nclass _WorkItem(object):\n def __init__(self,future,fn,args,kwargs):\n self.future=future\n self.fn=fn\n self.args=args\n self.kwargs=kwargs\n \nclass _ResultItem(object):\n def __init__(self,work_id,exception=None ,result=None ):\n self.work_id=work_id\n self.exception=exception\n self.result=result\n \nclass _CallItem(object):\n def __init__(self,work_id,fn,args,kwargs):\n self.work_id=work_id\n self.fn=fn\n self.args=args\n self.kwargs=kwargs\n \ndef _process_worker(call_queue,result_queue):\n \'\'\n\n\n\n\n\n\n\n\n\n\n \n while True :\n call_item=call_queue.get(block=True )\n if call_item is None :\n \n result_queue.put(os.getpid())\n return\n try :\n r=call_item.fn(*call_item.args,**call_item.kwargs)\n except BaseException as e:\n result_queue.put(_ResultItem(call_item.work_id,\n exception=e))\n else :\n result_queue.put(_ResultItem(call_item.work_id,\n result=r))\n \ndef _add_call_item_to_queue(pending_work_items,\nwork_ids,\ncall_queue):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n \n while True :\n if call_queue.full():\n return\n try :\n work_id=work_ids.get(block=False )\n except queue.Empty:\n return\n else :\n work_item=pending_work_items[work_id]\n \n if work_item.future.set_running_or_notify_cancel():\n call_queue.put(_CallItem(work_id,\n work_item.fn,\n work_item.args,\n work_item.kwargs),\n block=True )\n else :\n del pending_work_items[work_id]\n continue\n \ndef _queue_management_worker(executor_reference,\nprocesses,\npending_work_items,\nwork_ids_queue,\ncall_queue,\nresult_queue):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n executor=None\n \n def shutting_down():\n return _shutdown or executor is None or executor._shutdown_thread\n \n def shutdown_worker():\n \n nb_children_alive=sum(p.is_alive()for p in processes.values())\n for i in range(0,nb_children_alive):\n call_queue.put_nowait(None )\n \n call_queue.close()\n \n \n for p in processes.values():\n p.join()\n \n reader=result_queue._reader\n \n while True :\n _add_call_item_to_queue(pending_work_items,\n work_ids_queue,\n call_queue)\n \n sentinels=[p.sentinel for p in processes.values()]\n assert sentinels\n ready=wait([reader]+sentinels)\n if reader in ready:\n result_item=reader.recv()\n else :\n \n executor=executor_reference()\n if executor is not None :\n executor._broken=True\n executor._shutdown_thread=True\n executor=None\n \n for work_id,work_item in pending_work_items.items():\n work_item.future.set_exception(\n BrokenProcessPool(\n "A process in the process pool was "\n "terminated abruptly while the future was "\n "running or pending."\n ))\n \n del work_item\n pending_work_items.clear()\n \n \n for p in processes.values():\n p.terminate()\n shutdown_worker()\n return\n if isinstance(result_item,int):\n \n \n assert shutting_down()\n p=processes.pop(result_item)\n p.join()\n if not processes:\n shutdown_worker()\n return\n elif result_item is not None :\n work_item=pending_work_items.pop(result_item.work_id,None )\n \n if work_item is not None :\n if result_item.exception:\n work_item.future.set_exception(result_item.exception)\n else :\n work_item.future.set_result(result_item.result)\n \n del work_item\n \n executor=executor_reference()\n \n \n \n \n if shutting_down():\n try :\n \n \n if not pending_work_items:\n shutdown_worker()\n return\n except Full:\n \n \n pass\n executor=None\n \n_system_limits_checked=False\n_system_limited=None\ndef _check_system_limits():\n global _system_limits_checked,_system_limited\n if _system_limits_checked:\n if _system_limited:\n raise NotImplementedError(_system_limited)\n _system_limits_checked=True\n try :\n nsems_max=os.sysconf("SC_SEM_NSEMS_MAX")\n except (AttributeError,ValueError):\n \n return\n if nsems_max ==-1:\n \n \n return\n if nsems_max >=256:\n \n \n return\n _system_limited="system provides too few semaphores (%d available, 256 necessary)"%nsems_max\n raise NotImplementedError(_system_limited)\n \n \nclass BrokenProcessPool(RuntimeError):\n \'\'\n\n\n \n \n \nclass ProcessPoolExecutor(_base.Executor):\n def __init__(self,max_workers=None ):\n \'\'\n\n\n\n\n\n \n _check_system_limits()\n \n if max_workers is None :\n self._max_workers=os.cpu_count()or 1\n else :\n self._max_workers=max_workers\n \n \n \n \n self._call_queue=multiprocessing.Queue(self._max_workers+\n EXTRA_QUEUED_CALLS)\n \n \n \n self._call_queue._ignore_epipe=True\n self._result_queue=SimpleQueue()\n self._work_ids=queue.Queue()\n self._queue_management_thread=None\n \n self._processes={}\n \n \n self._shutdown_thread=False\n self._shutdown_lock=threading.Lock()\n self._broken=False\n self._queue_count=0\n self._pending_work_items={}\n \n def _start_queue_management_thread(self):\n \n \n def weakref_cb(_,q=self._result_queue):\n q.put(None )\n if self._queue_management_thread is None :\n \n self._adjust_process_count()\n self._queue_management_thread=threading.Thread(\n target=_queue_management_worker,\n args=(weakref.ref(self,weakref_cb),\n self._processes,\n self._pending_work_items,\n self._work_ids,\n self._call_queue,\n self._result_queue))\n self._queue_management_thread.daemon=True\n self._queue_management_thread.start()\n _threads_queues[self._queue_management_thread]=self._result_queue\n \n def _adjust_process_count(self):\n for _ in range(len(self._processes),self._max_workers):\n p=multiprocessing.Process(\n target=_process_worker,\n args=(self._call_queue,\n self._result_queue))\n p.start()\n self._processes[p.pid]=p\n \n def submit(self,fn,*args,**kwargs):\n with self._shutdown_lock:\n if self._broken:\n raise BrokenProcessPool(\'A child process terminated \'\n \'abruptly, the process pool is not usable anymore\')\n if self._shutdown_thread:\n raise RuntimeError(\'cannot schedule new futures after shutdown\')\n \n f=_base.Future()\n w=_WorkItem(f,fn,args,kwargs)\n \n self._pending_work_items[self._queue_count]=w\n self._work_ids.put(self._queue_count)\n self._queue_count +=1\n \n self._result_queue.put(None )\n \n self._start_queue_management_thread()\n return f\n submit.__doc__=_base.Executor.submit.__doc__\n \n def shutdown(self,wait=True ):\n with self._shutdown_lock:\n self._shutdown_thread=True\n if self._queue_management_thread:\n \n self._result_queue.put(None )\n if wait:\n self._queue_management_thread.join()\n \n \n self._queue_management_thread=None\n self._call_queue=None\n self._result_queue=None\n self._processes=None\n shutdown.__doc__=_base.Executor.shutdown.__doc__\n \natexit.register(_python_exit)\n',["atexit","concurrent.futures","concurrent.futures._base","multiprocessing","multiprocessing.connection","os","queue","threading","weakref"]],"concurrent.futures.thread":[".py","\n\n\n\"\"\"Implements ThreadPoolExecutor.\"\"\"\n\n__author__='Brian Quinlan (brian@sweetapp.com)'\n\nimport atexit\nfrom concurrent.futures import _base\nimport queue\nimport threading\nimport weakref\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_threads_queues=weakref.WeakKeyDictionary()\n_shutdown=False\n\ndef _python_exit():\n global _shutdown\n _shutdown=True\n items=list(_threads_queues.items())\n for t,q in items:\n q.put(None )\n for t,q in items:\n t.join()\n \natexit.register(_python_exit)\n\nclass _WorkItem(object):\n def __init__(self,future,fn,args,kwargs):\n self.future=future\n self.fn=fn\n self.args=args\n self.kwargs=kwargs\n \n def run(self):\n if not self.future.set_running_or_notify_cancel():\n return\n \n try :\n result=self.fn(*self.args,**self.kwargs)\n except BaseException as e:\n self.future.set_exception(e)\n else :\n self.future.set_result(result)\n \ndef _worker(executor_reference,work_queue):\n try :\n while True :\n work_item=work_queue.get(block=True )\n if work_item is not None :\n work_item.run()\n \n del work_item\n continue\n executor=executor_reference()\n \n \n \n \n if _shutdown or executor is None or executor._shutdown:\n \n work_queue.put(None )\n return\n del executor\n except BaseException:\n _base.LOGGER.critical('Exception in worker',exc_info=True )\n \nclass ThreadPoolExecutor(_base.Executor):\n def __init__(self,max_workers):\n ''\n\n\n\n\n \n self._max_workers=max_workers\n self._work_queue=queue.Queue()\n self._threads=set()\n self._shutdown=False\n self._shutdown_lock=threading.Lock()\n \n def submit(self,fn,*args,**kwargs):\n with self._shutdown_lock:\n if self._shutdown:\n raise RuntimeError('cannot schedule new futures after shutdown')\n \n f=_base.Future()\n w=_WorkItem(f,fn,args,kwargs)\n \n self._work_queue.put(w)\n self._adjust_thread_count()\n return f\n submit.__doc__=_base.Executor.submit.__doc__\n \n def _adjust_thread_count(self):\n \n \n def weakref_cb(_,q=self._work_queue):\n q.put(None )\n \n \n if len(self._threads) | Work Ids | => | | => | Call Q | => | |\n| | +----------+ | | +-----------+ | |\n| | | ... | | | | ... | | |\n| | | 6 | | | | 5, call() | | |\n| | | 7 | | | | ... | | |\n| Process | | ... | | Local | +-----------+ | Process |\n| Pool | +----------+ | Worker | | #1..n |\n| Executor | | Thread | | |\n| | +----------- + | | +-----------+ | |\n| | <=> | Work Items | <=> | | <= | Result Q | <= | |\n| | +------------+ | | +-----------+ | |\n| | | 6: call() | | | | ... | | |\n| | | future | | | | 4, result | | |\n| | | ... | | | | 3, except | | |\n+----------+ +------------+ +--------+ +-----------+ +---------+\n\nExecutor.submit() called:\n- creates a uniquely numbered _WorkItem and adds it to the "Work Items" dict\n- adds the id of the _WorkItem to the "Work Ids" queue\n\nLocal worker thread:\n- reads work ids from the "Work Ids" queue and looks up the corresponding\n WorkItem from the "Work Items" dict: if the work item has been cancelled then\n it is simply removed from the dict, otherwise it is repackaged as a\n _CallItem and put in the "Call Q". New _CallItems are put in the "Call Q"\n until "Call Q" is full. NOTE: the size of the "Call Q" is kept small because\n calls placed in the "Call Q" can no longer be cancelled with Future.cancel().\n- reads _ResultItems from "Result Q", updates the future stored in the\n "Work Items" dict and deletes the dict entry\n\nProcess #1..n:\n- reads _CallItems from "Call Q", executes the calls, and puts the resulting\n _ResultItems in "Result Q"\n"""\n\n__author__=\'Brian Quinlan (brian@sweetapp.com)\'\n\nimport atexit\nimport os\nfrom concurrent.futures import _base\nimport queue\nfrom queue import Full\nimport multiprocessing\nfrom multiprocessing import SimpleQueue\nimport threading\nimport weakref\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_threads_queues=weakref.WeakKeyDictionary()\n_shutdown=False\n\ndef _python_exit():\n global _shutdown\n _shutdown=True\n items=list(_threads_queues.items())\n for t,q in items:\n q.put(None )\n for t,q in items:\n t.join()\n \n \n \n \n \nEXTRA_QUEUED_CALLS=1\n\nclass _WorkItem(object):\n def __init__(self,future,fn,args,kwargs):\n self.future=future\n self.fn=fn\n self.args=args\n self.kwargs=kwargs\n \nclass _ResultItem(object):\n def __init__(self,work_id,exception=None ,result=None ):\n self.work_id=work_id\n self.exception=exception\n self.result=result\n \nclass _CallItem(object):\n def __init__(self,work_id,fn,args,kwargs):\n self.work_id=work_id\n self.fn=fn\n self.args=args\n self.kwargs=kwargs\n \ndef _web_worker(call_queue,result_queue):\n \'\'\n\n\n\n\n\n\n\n\n\n\n \n while True :\n call_item=call_queue.get(block=True )\n if call_item is None :\n \n result_queue.put(os.getpid())\n return\n try :\n r=call_item.fn(*call_item.args,**call_item.kwargs)\n except BaseException as e:\n result_queue.put(_ResultItem(call_item.work_id,\n exception=e))\n else :\n result_queue.put(_ResultItem(call_item.work_id,\n result=r))\n \ndef _add_call_item_to_queue(pending_work_items,\nwork_ids,\ncall_queue):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n \n while True :\n if call_queue.full():\n return\n try :\n work_id=work_ids.get(block=False )\n except queue.Empty:\n return\n else :\n work_item=pending_work_items[work_id]\n \n if work_item.future.set_running_or_notify_cancel():\n call_queue.put(_CallItem(work_id,\n work_item.fn,\n work_item.args,\n work_item.kwargs),\n block=True )\n else :\n del pending_work_items[work_id]\n continue\n \ndef _queue_management_worker(executor_reference,\nprocesses,\npending_work_items,\nwork_ids_queue,\ncall_queue,\nresult_queue):\n \'\'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n executor=None\n \n def shutting_down():\n return _shutdown or executor is None or executor._shutdown_thread\n \n def shutdown_worker():\n \n nb_children_alive=sum(p.is_alive()for p in processes.values())\n for i in range(0,nb_children_alive):\n call_queue.put_nowait(None )\n \n call_queue.close()\n \n \n for p in processes.values():\n p.join()\n \n reader=result_queue._reader\n \n while True :\n _add_call_item_to_queue(pending_work_items,\n work_ids_queue,\n call_queue)\n \n sentinels=[p.sentinel for p in processes.values()]\n assert sentinels\n \n ready=[reader]+sentinels\n if reader in ready:\n result_item=reader.recv()\n else :\n \n executor=executor_reference()\n if executor is not None :\n executor._broken=True\n executor._shutdown_thread=True\n executor=None\n \n for work_id,work_item in pending_work_items.items():\n work_item.future.set_exception(\n BrokenProcessPool(\n "A process in the process pool was "\n "terminated abruptly while the future was "\n "running or pending."\n ))\n \n del work_item\n pending_work_items.clear()\n \n \n for p in processes.values():\n p.terminate()\n shutdown_worker()\n return\n if isinstance(result_item,int):\n \n \n assert shutting_down()\n p=processes.pop(result_item)\n p.join()\n if not processes:\n shutdown_worker()\n return\n elif result_item is not None :\n work_item=pending_work_items.pop(result_item.work_id,None )\n \n if work_item is not None :\n if result_item.exception:\n work_item.future.set_exception(result_item.exception)\n else :\n work_item.future.set_result(result_item.result)\n \n del work_item\n \n executor=executor_reference()\n \n \n \n \n if shutting_down():\n try :\n \n \n if not pending_work_items:\n shutdown_worker()\n return\n except Full:\n \n \n pass\n executor=None\n \n_system_limits_checked=False\n_system_limited=None\ndef _check_system_limits():\n global _system_limits_checked,_system_limited\n if _system_limits_checked:\n if _system_limited:\n raise NotImplementedError(_system_limited)\n _system_limits_checked=True\n try :\n nsems_max=os.sysconf("SC_SEM_NSEMS_MAX")\n except (AttributeError,ValueError):\n \n return\n if nsems_max ==-1:\n \n \n return\n if nsems_max >=256:\n \n \n return\n _system_limited="system provides too few semaphores (%d available, 256 necessary)"%nsems_max\n raise NotImplementedError(_system_limited)\n \n \nclass BrokenProcessPool(RuntimeError):\n \'\'\n\n\n \n \n \nclass WebWorkerExecutor(_base.Executor):\n def __init__(self,max_workers=None ):\n \'\'\n\n\n\n\n\n \n _check_system_limits()\n \n if max_workers is None :\n self._max_workers=os.cpu_count()or 1\n else :\n self._max_workers=max_workers\n \n \n \n \n self._call_queue=multiprocessing.Queue(self._max_workers+\n EXTRA_QUEUED_CALLS)\n \n \n \n self._call_queue._ignore_epipe=True\n self._result_queue=SimpleQueue()\n self._work_ids=queue.Queue()\n self._queue_management_thread=None\n \n self._webworkers={}\n \n \n self._shutdown_thread=False\n self._shutdown_lock=threading.Lock()\n self._broken=False\n self._queue_count=0\n self._pending_work_items={}\n \n def _start_queue_management_thread(self):\n \n \n def weakref_cb(_,q=self._result_queue):\n q.put(None )\n if self._queue_management_thread is None :\n \n self._adjust_process_count()\n self._queue_management_thread=threading.Thread(\n target=_queue_management_worker,\n args=(weakref.ref(self,weakref_cb),\n self._webworkers,\n self._pending_work_items,\n self._work_ids,\n self._call_queue,\n self._result_queue))\n self._queue_management_thread.daemon=True\n self._queue_management_thread.start()\n _threads_queues[self._queue_management_thread]=self._result_queue\n \n def _adjust_process_count(self):\n for _ in range(len(self._webworkers),self._max_workers):\n p=multiprocessing.Process(\n target=_web_worker,\n args=(self._call_queue,\n self._result_queue))\n p.start()\n self._webworkers[p.pid]=p\n \n def submit(self,fn,*args,**kwargs):\n with self._shutdown_lock:\n if self._broken:\n raise BrokenProcessPool(\'A child process terminated \'\n \'abruptly, the process pool is not usable anymore\')\n if self._shutdown_thread:\n raise RuntimeError(\'cannot schedule new futures after shutdown\')\n \n f=_base.Future()\n w=_WorkItem(f,fn,args,kwargs)\n \n self._pending_work_items[self._queue_count]=w\n self._work_ids.put(self._queue_count)\n self._queue_count +=1\n \n self._result_queue.put(None )\n \n self._start_queue_management_thread()\n return f\n submit.__doc__=_base.Executor.submit.__doc__\n \n def shutdown(self,wait=True ):\n with self._shutdown_lock:\n self._shutdown_thread=True\n if self._queue_management_thread:\n \n self._result_queue.put(None )\n if wait:\n self._queue_management_thread.join()\n \n \n self._queue_management_thread=None\n self._call_queue=None\n self._result_queue=None\n self._webworkers=None\n shutdown.__doc__=_base.Executor.shutdown.__doc__\n \natexit.register(_python_exit)\n',["atexit","concurrent.futures","concurrent.futures._base","multiprocessing","os","queue","threading","weakref"]],"concurrent.futures._base":[".py","\n\n\n__author__='Brian Quinlan (brian@sweetapp.com)'\n\nimport collections\nimport logging\nimport threading\nimport time\n\nFIRST_COMPLETED='FIRST_COMPLETED'\nFIRST_EXCEPTION='FIRST_EXCEPTION'\nALL_COMPLETED='ALL_COMPLETED'\n_AS_COMPLETED='_AS_COMPLETED'\n\n\nPENDING='PENDING'\nRUNNING='RUNNING'\n\nCANCELLED='CANCELLED'\n\nCANCELLED_AND_NOTIFIED='CANCELLED_AND_NOTIFIED'\nFINISHED='FINISHED'\n\n_FUTURE_STATES=[\nPENDING,\nRUNNING,\nCANCELLED,\nCANCELLED_AND_NOTIFIED,\nFINISHED\n]\n\n_STATE_TO_DESCRIPTION_MAP={\nPENDING:\"pending\",\nRUNNING:\"running\",\nCANCELLED:\"cancelled\",\nCANCELLED_AND_NOTIFIED:\"cancelled\",\nFINISHED:\"finished\"\n}\n\n\nLOGGER=logging.getLogger(\"concurrent.futures\")\n\nclass Error(Exception):\n ''\n pass\n \nclass CancelledError(Error):\n ''\n pass\n \nclass TimeoutError(Error):\n ''\n pass\n \nclass _Waiter(object):\n ''\n def __init__(self):\n self.event=threading.Event()\n self.finished_futures=[]\n \n def add_result(self,future):\n self.finished_futures.append(future)\n \n def add_exception(self,future):\n self.finished_futures.append(future)\n \n def add_cancelled(self,future):\n self.finished_futures.append(future)\n \nclass _AsCompletedWaiter(_Waiter):\n ''\n \n def __init__(self):\n super(_AsCompletedWaiter,self).__init__()\n self.lock=threading.Lock()\n \n def add_result(self,future):\n with self.lock:\n super(_AsCompletedWaiter,self).add_result(future)\n self.event.set()\n \n def add_exception(self,future):\n with self.lock:\n super(_AsCompletedWaiter,self).add_exception(future)\n self.event.set()\n \n def add_cancelled(self,future):\n with self.lock:\n super(_AsCompletedWaiter,self).add_cancelled(future)\n self.event.set()\n \nclass _FirstCompletedWaiter(_Waiter):\n ''\n \n def add_result(self,future):\n super().add_result(future)\n self.event.set()\n \n def add_exception(self,future):\n super().add_exception(future)\n self.event.set()\n \n def add_cancelled(self,future):\n super().add_cancelled(future)\n self.event.set()\n \nclass _AllCompletedWaiter(_Waiter):\n ''\n \n def __init__(self,num_pending_calls,stop_on_exception):\n self.num_pending_calls=num_pending_calls\n self.stop_on_exception=stop_on_exception\n self.lock=threading.Lock()\n super().__init__()\n \n def _decrement_pending_calls(self):\n with self.lock:\n self.num_pending_calls -=1\n if not self.num_pending_calls:\n self.event.set()\n \n def add_result(self,future):\n super().add_result(future)\n self._decrement_pending_calls()\n \n def add_exception(self,future):\n super().add_exception(future)\n if self.stop_on_exception:\n self.event.set()\n else :\n self._decrement_pending_calls()\n \n def add_cancelled(self,future):\n super().add_cancelled(future)\n self._decrement_pending_calls()\n \nclass _AcquireFutures(object):\n ''\n \n def __init__(self,futures):\n self.futures=sorted(futures,key=id)\n \n def __enter__(self):\n for future in self.futures:\n future._condition.acquire()\n \n def __exit__(self,*args):\n for future in self.futures:\n future._condition.release()\n \ndef _create_and_install_waiters(fs,return_when):\n if return_when ==_AS_COMPLETED:\n waiter=_AsCompletedWaiter()\n elif return_when ==FIRST_COMPLETED:\n waiter=_FirstCompletedWaiter()\n else :\n pending_count=sum(\n f._state not in [CANCELLED_AND_NOTIFIED,FINISHED]for f in fs)\n \n if return_when ==FIRST_EXCEPTION:\n waiter=_AllCompletedWaiter(pending_count,stop_on_exception=True )\n elif return_when ==ALL_COMPLETED:\n waiter=_AllCompletedWaiter(pending_count,stop_on_exception=False )\n else :\n raise ValueError(\"Invalid return condition: %r\"%return_when)\n \n for f in fs:\n f._waiters.append(waiter)\n \n return waiter\n \ndef as_completed(fs,timeout=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if timeout is not None :\n end_time=timeout+time.time()\n \n fs=set(fs)\n with _AcquireFutures(fs):\n finished=set(\n f for f in fs\n if f._state in [CANCELLED_AND_NOTIFIED,FINISHED])\n pending=fs -finished\n waiter=_create_and_install_waiters(fs,_AS_COMPLETED)\n \n try :\n yield from finished\n \n while pending:\n if timeout is None :\n wait_timeout=None\n else :\n wait_timeout=end_time -time.time()\n if wait_timeout <0:\n raise TimeoutError(\n '%d (of %d) futures unfinished'%(\n len(pending),len(fs)))\n \n waiter.event.wait(wait_timeout)\n \n with waiter.lock:\n finished=waiter.finished_futures\n waiter.finished_futures=[]\n waiter.event.clear()\n \n for future in finished:\n yield future\n pending.remove(future)\n \n finally :\n for f in fs:\n with f._condition:\n f._waiters.remove(waiter)\n \nDoneAndNotDoneFutures=collections.namedtuple(\n'DoneAndNotDoneFutures','done not_done')\ndef wait(fs,timeout=None ,return_when=ALL_COMPLETED):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n with _AcquireFutures(fs):\n done=set(f for f in fs\n if f._state in [CANCELLED_AND_NOTIFIED,FINISHED])\n not_done=set(fs)-done\n \n if (return_when ==FIRST_COMPLETED)and done:\n return DoneAndNotDoneFutures(done,not_done)\n elif (return_when ==FIRST_EXCEPTION)and done:\n if any(f for f in done\n if not f.cancelled()and f.exception()is not None ):\n return DoneAndNotDoneFutures(done,not_done)\n \n if len(done)==len(fs):\n return DoneAndNotDoneFutures(done,not_done)\n \n waiter=_create_and_install_waiters(fs,return_when)\n \n waiter.event.wait(timeout)\n for f in fs:\n with f._condition:\n f._waiters.remove(waiter)\n \n done.update(waiter.finished_futures)\n return DoneAndNotDoneFutures(done,set(fs)-done)\n \nclass Future(object):\n ''\n \n def __init__(self):\n ''\n self._condition=threading.Condition()\n self._state=PENDING\n self._result=None\n self._exception=None\n self._waiters=[]\n self._done_callbacks=[]\n \n def _invoke_callbacks(self):\n for callback in self._done_callbacks:\n try :\n callback(self)\n except Exception:\n LOGGER.exception('exception calling callback for %r',self)\n \n def __repr__(self):\n with self._condition:\n if self._state ==FINISHED:\n if self._exception:\n return ''%(\n hex(id(self)),\n _STATE_TO_DESCRIPTION_MAP[self._state],\n self._exception.__class__.__name__)\n else :\n return ''%(\n hex(id(self)),\n _STATE_TO_DESCRIPTION_MAP[self._state],\n self._result.__class__.__name__)\n return ''%(\n hex(id(self)),\n _STATE_TO_DESCRIPTION_MAP[self._state])\n \n def cancel(self):\n ''\n\n\n\n \n with self._condition:\n if self._state in [RUNNING,FINISHED]:\n return False\n \n if self._state in [CANCELLED,CANCELLED_AND_NOTIFIED]:\n return True\n \n self._state=CANCELLED\n self._condition.notify_all()\n \n self._invoke_callbacks()\n return True\n \n def cancelled(self):\n ''\n with self._condition:\n return self._state in [CANCELLED,CANCELLED_AND_NOTIFIED]\n \n def running(self):\n ''\n with self._condition:\n return self._state ==RUNNING\n \n def done(self):\n ''\n with self._condition:\n return self._state in [CANCELLED,CANCELLED_AND_NOTIFIED,FINISHED]\n \n def __get_result(self):\n if self._exception:\n raise self._exception\n else :\n return self._result\n \n def add_done_callback(self,fn):\n ''\n\n\n\n\n\n\n\n\n \n with self._condition:\n if self._state not in [CANCELLED,CANCELLED_AND_NOTIFIED,FINISHED]:\n self._done_callbacks.append(fn)\n return\n fn(self)\n \n def result(self,timeout=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n with self._condition:\n if self._state in [CANCELLED,CANCELLED_AND_NOTIFIED]:\n raise CancelledError()\n elif self._state ==FINISHED:\n return self.__get_result()\n \n self._condition.wait(timeout)\n \n if self._state in [CANCELLED,CANCELLED_AND_NOTIFIED]:\n raise CancelledError()\n elif self._state ==FINISHED:\n return self.__get_result()\n else :\n raise TimeoutError()\n \n def exception(self,timeout=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n with self._condition:\n if self._state in [CANCELLED,CANCELLED_AND_NOTIFIED]:\n raise CancelledError()\n elif self._state ==FINISHED:\n return self._exception\n \n self._condition.wait(timeout)\n \n if self._state in [CANCELLED,CANCELLED_AND_NOTIFIED]:\n raise CancelledError()\n elif self._state ==FINISHED:\n return self._exception\n else :\n raise TimeoutError()\n \n \n def set_running_or_notify_cancel(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n with self._condition:\n if self._state ==CANCELLED:\n self._state=CANCELLED_AND_NOTIFIED\n for waiter in self._waiters:\n waiter.add_cancelled(self)\n \n \n return False\n elif self._state ==PENDING:\n self._state=RUNNING\n return True\n else :\n LOGGER.critical('Future %s in unexpected state: %s',\n id(self),\n self._state)\n raise RuntimeError('Future in unexpected state')\n \n def set_result(self,result):\n ''\n\n\n \n with self._condition:\n self._result=result\n self._state=FINISHED\n for waiter in self._waiters:\n waiter.add_result(self)\n self._condition.notify_all()\n self._invoke_callbacks()\n \n def set_exception(self,exception):\n ''\n\n\n \n with self._condition:\n self._exception=exception\n self._state=FINISHED\n for waiter in self._waiters:\n waiter.add_exception(self)\n self._condition.notify_all()\n self._invoke_callbacks()\n \nclass Executor(object):\n ''\n \n def submit(self,fn,*args,**kwargs):\n ''\n\n\n\n\n\n\n \n raise NotImplementedError()\n \n def map(self,fn,*iterables,timeout=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if timeout is not None :\n end_time=timeout+time.time()\n \n fs=[self.submit(fn,*args)for args in zip(*iterables)]\n \n \n \n def result_iterator():\n try :\n for future in fs:\n if timeout is None :\n yield future.result()\n else :\n yield future.result(end_time -time.time())\n finally :\n for future in fs:\n future.cancel()\n return result_iterator()\n \n def shutdown(self,wait=True ):\n ''\n\n\n\n\n\n\n\n\n \n pass\n \n def __enter__(self):\n return self\n \n def __exit__(self,exc_type,exc_val,exc_tb):\n self.shutdown(wait=True )\n return False\n",["collections","logging","threading","time"]],"concurrent.futures":[".py",'\n\n\n\n"""Execute computations asynchronously using threads or processes."""\n\n__author__=\'Brian Quinlan (brian@sweetapp.com)\'\n\nfrom concurrent.futures._base import (FIRST_COMPLETED,\nFIRST_EXCEPTION,\nALL_COMPLETED,\nCancelledError,\nTimeoutError,\nFuture,\nExecutor,\nwait,\nas_completed)\nfrom concurrent.futures.webworker import WebWorkerExecutor\n\n',["concurrent.futures._base","concurrent.futures.webworker"],1],"encodings.aliases":[".py","''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\naliases={\n\n\n\n\n'646':'ascii',\n'ansi_x3.4_1968':'ascii',\n'ansi_x3_4_1968':'ascii',\n'ansi_x3.4_1986':'ascii',\n'cp367':'ascii',\n'csascii':'ascii',\n'ibm367':'ascii',\n'iso646_us':'ascii',\n'iso_646.irv_1991':'ascii',\n'iso_ir_6':'ascii',\n'us':'ascii',\n'us_ascii':'ascii',\n\n\n'base64':'base64_codec',\n'base_64':'base64_codec',\n\n\n'big5_tw':'big5',\n'csbig5':'big5',\n\n\n'big5_hkscs':'big5hkscs',\n'hkscs':'big5hkscs',\n\n\n'bz2':'bz2_codec',\n\n\n'037':'cp037',\n'csibm037':'cp037',\n'ebcdic_cp_ca':'cp037',\n'ebcdic_cp_nl':'cp037',\n'ebcdic_cp_us':'cp037',\n'ebcdic_cp_wt':'cp037',\n'ibm037':'cp037',\n'ibm039':'cp037',\n\n\n'1026':'cp1026',\n'csibm1026':'cp1026',\n'ibm1026':'cp1026',\n\n\n'1125':'cp1125',\n'ibm1125':'cp1125',\n'cp866u':'cp1125',\n'ruscii':'cp1125',\n\n\n'1140':'cp1140',\n'ibm1140':'cp1140',\n\n\n'1250':'cp1250',\n'windows_1250':'cp1250',\n\n\n'1251':'cp1251',\n'windows_1251':'cp1251',\n\n\n'1252':'cp1252',\n'windows_1252':'cp1252',\n\n\n'1253':'cp1253',\n'windows_1253':'cp1253',\n\n\n'1254':'cp1254',\n'windows_1254':'cp1254',\n\n\n'1255':'cp1255',\n'windows_1255':'cp1255',\n\n\n'1256':'cp1256',\n'windows_1256':'cp1256',\n\n\n'1257':'cp1257',\n'windows_1257':'cp1257',\n\n\n'1258':'cp1258',\n'windows_1258':'cp1258',\n\n\n'273':'cp273',\n'ibm273':'cp273',\n'csibm273':'cp273',\n\n\n'424':'cp424',\n'csibm424':'cp424',\n'ebcdic_cp_he':'cp424',\n'ibm424':'cp424',\n\n\n'437':'cp437',\n'cspc8codepage437':'cp437',\n'ibm437':'cp437',\n\n\n'500':'cp500',\n'csibm500':'cp500',\n'ebcdic_cp_be':'cp500',\n'ebcdic_cp_ch':'cp500',\n'ibm500':'cp500',\n\n\n'775':'cp775',\n'cspc775baltic':'cp775',\n'ibm775':'cp775',\n\n\n'850':'cp850',\n'cspc850multilingual':'cp850',\n'ibm850':'cp850',\n\n\n'852':'cp852',\n'cspcp852':'cp852',\n'ibm852':'cp852',\n\n\n'855':'cp855',\n'csibm855':'cp855',\n'ibm855':'cp855',\n\n\n'857':'cp857',\n'csibm857':'cp857',\n'ibm857':'cp857',\n\n\n'858':'cp858',\n'csibm858':'cp858',\n'ibm858':'cp858',\n\n\n'860':'cp860',\n'csibm860':'cp860',\n'ibm860':'cp860',\n\n\n'861':'cp861',\n'cp_is':'cp861',\n'csibm861':'cp861',\n'ibm861':'cp861',\n\n\n'862':'cp862',\n'cspc862latinhebrew':'cp862',\n'ibm862':'cp862',\n\n\n'863':'cp863',\n'csibm863':'cp863',\n'ibm863':'cp863',\n\n\n'864':'cp864',\n'csibm864':'cp864',\n'ibm864':'cp864',\n\n\n'865':'cp865',\n'csibm865':'cp865',\n'ibm865':'cp865',\n\n\n'866':'cp866',\n'csibm866':'cp866',\n'ibm866':'cp866',\n\n\n'869':'cp869',\n'cp_gr':'cp869',\n'csibm869':'cp869',\n'ibm869':'cp869',\n\n\n'932':'cp932',\n'ms932':'cp932',\n'mskanji':'cp932',\n'ms_kanji':'cp932',\n\n\n'949':'cp949',\n'ms949':'cp949',\n'uhc':'cp949',\n\n\n'950':'cp950',\n'ms950':'cp950',\n\n\n'jisx0213':'euc_jis_2004',\n'eucjis2004':'euc_jis_2004',\n'euc_jis2004':'euc_jis_2004',\n\n\n'eucjisx0213':'euc_jisx0213',\n\n\n'eucjp':'euc_jp',\n'ujis':'euc_jp',\n'u_jis':'euc_jp',\n\n\n'euckr':'euc_kr',\n'korean':'euc_kr',\n'ksc5601':'euc_kr',\n'ks_c_5601':'euc_kr',\n'ks_c_5601_1987':'euc_kr',\n'ksx1001':'euc_kr',\n'ks_x_1001':'euc_kr',\n\n\n'gb18030_2000':'gb18030',\n\n\n'chinese':'gb2312',\n'csiso58gb231280':'gb2312',\n'euc_cn':'gb2312',\n'euccn':'gb2312',\n'eucgb2312_cn':'gb2312',\n'gb2312_1980':'gb2312',\n'gb2312_80':'gb2312',\n'iso_ir_58':'gb2312',\n\n\n'936':'gbk',\n'cp936':'gbk',\n'ms936':'gbk',\n\n\n'hex':'hex_codec',\n\n\n'roman8':'hp_roman8',\n'r8':'hp_roman8',\n'csHPRoman8':'hp_roman8',\n\n\n'hzgb':'hz',\n'hz_gb':'hz',\n'hz_gb_2312':'hz',\n\n\n'csiso2022jp':'iso2022_jp',\n'iso2022jp':'iso2022_jp',\n'iso_2022_jp':'iso2022_jp',\n\n\n'iso2022jp_1':'iso2022_jp_1',\n'iso_2022_jp_1':'iso2022_jp_1',\n\n\n'iso2022jp_2':'iso2022_jp_2',\n'iso_2022_jp_2':'iso2022_jp_2',\n\n\n'iso_2022_jp_2004':'iso2022_jp_2004',\n'iso2022jp_2004':'iso2022_jp_2004',\n\n\n'iso2022jp_3':'iso2022_jp_3',\n'iso_2022_jp_3':'iso2022_jp_3',\n\n\n'iso2022jp_ext':'iso2022_jp_ext',\n'iso_2022_jp_ext':'iso2022_jp_ext',\n\n\n'csiso2022kr':'iso2022_kr',\n'iso2022kr':'iso2022_kr',\n'iso_2022_kr':'iso2022_kr',\n\n\n'csisolatin6':'iso8859_10',\n'iso_8859_10':'iso8859_10',\n'iso_8859_10_1992':'iso8859_10',\n'iso_ir_157':'iso8859_10',\n'l6':'iso8859_10',\n'latin6':'iso8859_10',\n\n\n'thai':'iso8859_11',\n'iso_8859_11':'iso8859_11',\n'iso_8859_11_2001':'iso8859_11',\n\n\n'iso_8859_13':'iso8859_13',\n'l7':'iso8859_13',\n'latin7':'iso8859_13',\n\n\n'iso_8859_14':'iso8859_14',\n'iso_8859_14_1998':'iso8859_14',\n'iso_celtic':'iso8859_14',\n'iso_ir_199':'iso8859_14',\n'l8':'iso8859_14',\n'latin8':'iso8859_14',\n\n\n'iso_8859_15':'iso8859_15',\n'l9':'iso8859_15',\n'latin9':'iso8859_15',\n\n\n'iso_8859_16':'iso8859_16',\n'iso_8859_16_2001':'iso8859_16',\n'iso_ir_226':'iso8859_16',\n'l10':'iso8859_16',\n'latin10':'iso8859_16',\n\n\n'csisolatin2':'iso8859_2',\n'iso_8859_2':'iso8859_2',\n'iso_8859_2_1987':'iso8859_2',\n'iso_ir_101':'iso8859_2',\n'l2':'iso8859_2',\n'latin2':'iso8859_2',\n\n\n'csisolatin3':'iso8859_3',\n'iso_8859_3':'iso8859_3',\n'iso_8859_3_1988':'iso8859_3',\n'iso_ir_109':'iso8859_3',\n'l3':'iso8859_3',\n'latin3':'iso8859_3',\n\n\n'csisolatin4':'iso8859_4',\n'iso_8859_4':'iso8859_4',\n'iso_8859_4_1988':'iso8859_4',\n'iso_ir_110':'iso8859_4',\n'l4':'iso8859_4',\n'latin4':'iso8859_4',\n\n\n'csisolatincyrillic':'iso8859_5',\n'cyrillic':'iso8859_5',\n'iso_8859_5':'iso8859_5',\n'iso_8859_5_1988':'iso8859_5',\n'iso_ir_144':'iso8859_5',\n\n\n'arabic':'iso8859_6',\n'asmo_708':'iso8859_6',\n'csisolatinarabic':'iso8859_6',\n'ecma_114':'iso8859_6',\n'iso_8859_6':'iso8859_6',\n'iso_8859_6_1987':'iso8859_6',\n'iso_ir_127':'iso8859_6',\n\n\n'csisolatingreek':'iso8859_7',\n'ecma_118':'iso8859_7',\n'elot_928':'iso8859_7',\n'greek':'iso8859_7',\n'greek8':'iso8859_7',\n'iso_8859_7':'iso8859_7',\n'iso_8859_7_1987':'iso8859_7',\n'iso_ir_126':'iso8859_7',\n\n\n'csisolatinhebrew':'iso8859_8',\n'hebrew':'iso8859_8',\n'iso_8859_8':'iso8859_8',\n'iso_8859_8_1988':'iso8859_8',\n'iso_ir_138':'iso8859_8',\n\n\n'csisolatin5':'iso8859_9',\n'iso_8859_9':'iso8859_9',\n'iso_8859_9_1989':'iso8859_9',\n'iso_ir_148':'iso8859_9',\n'l5':'iso8859_9',\n'latin5':'iso8859_9',\n\n\n'cp1361':'johab',\n'ms1361':'johab',\n\n\n'cskoi8r':'koi8_r',\n\n\n\n\n\n\n\n\n'8859':'latin_1',\n'cp819':'latin_1',\n'csisolatin1':'latin_1',\n'ibm819':'latin_1',\n'iso8859':'latin_1',\n'iso8859_1':'latin_1',\n'iso_8859_1':'latin_1',\n'iso_8859_1_1987':'latin_1',\n'iso_ir_100':'latin_1',\n'l1':'latin_1',\n'latin':'latin_1',\n'latin1':'latin_1',\n\n\n'maccyrillic':'mac_cyrillic',\n\n\n'macgreek':'mac_greek',\n\n\n'maciceland':'mac_iceland',\n\n\n'maccentraleurope':'mac_latin2',\n'maclatin2':'mac_latin2',\n\n\n'macintosh':'mac_roman',\n'macroman':'mac_roman',\n\n\n'macturkish':'mac_turkish',\n\n\n'dbcs':'mbcs',\n\n\n'csptcp154':'ptcp154',\n'pt154':'ptcp154',\n'cp154':'ptcp154',\n'cyrillic_asian':'ptcp154',\n\n\n'quopri':'quopri_codec',\n'quoted_printable':'quopri_codec',\n'quotedprintable':'quopri_codec',\n\n\n'rot13':'rot_13',\n\n\n'csshiftjis':'shift_jis',\n'shiftjis':'shift_jis',\n'sjis':'shift_jis',\n's_jis':'shift_jis',\n\n\n'shiftjis2004':'shift_jis_2004',\n'sjis_2004':'shift_jis_2004',\n's_jis_2004':'shift_jis_2004',\n\n\n'shiftjisx0213':'shift_jisx0213',\n'sjisx0213':'shift_jisx0213',\n's_jisx0213':'shift_jisx0213',\n\n\n'tis260':'tactis',\n\n\n'tis620':'tis_620',\n'tis_620_0':'tis_620',\n'tis_620_2529_0':'tis_620',\n'tis_620_2529_1':'tis_620',\n'iso_ir_166':'tis_620',\n\n\n'u16':'utf_16',\n'utf16':'utf_16',\n\n\n'unicodebigunmarked':'utf_16_be',\n'utf_16be':'utf_16_be',\n\n\n'unicodelittleunmarked':'utf_16_le',\n'utf_16le':'utf_16_le',\n\n\n'u32':'utf_32',\n'utf32':'utf_32',\n\n\n'utf_32be':'utf_32_be',\n\n\n'utf_32le':'utf_32_le',\n\n\n'u7':'utf_7',\n'utf7':'utf_7',\n'unicode_1_1_utf_7':'utf_7',\n\n\n'u8':'utf_8',\n'utf':'utf_8',\n'utf8':'utf_8',\n'utf8_ucs2':'utf_8',\n'utf8_ucs4':'utf_8',\n\n\n'uu':'uu_codec',\n\n\n'zip':'zlib_codec',\n'zlib':'zlib_codec',\n\n\n'x_mac_japanese':'shift_jis',\n'x_mac_korean':'euc_kr',\n'x_mac_simp_chinese':'gb2312',\n'x_mac_trad_chinese':'big5',\n}\n",[]],"encodings.cp037":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp037',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xf1'\n'\\xa2'\n'.'\n'<'\n'('\n'+'\n'|'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'\\xdf'\n'!'\n'$'\n'*'\n')'\n';'\n'\\xac'\n'-'\n'/'\n'\\xc2'\n'\\xc4'\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'\\xc7'\n'\\xd1'\n'\\xa6'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'`'\n':'\n'#'\n'@'\n\"'\"\n'='\n'\"'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'\\xf0'\n'\\xfd'\n'\\xfe'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\xa4'\n'\\xb5'\n'~'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n'\\xd0'\n'\\xdd'\n'\\xde'\n'\\xae'\n'^'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'['\n']'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'{'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'}'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'\\xfc'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\\\'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'\\xd6'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n'\\xdc'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1006":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1006',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u06f0'\n'\\u06f1'\n'\\u06f2'\n'\\u06f3'\n'\\u06f4'\n'\\u06f5'\n'\\u06f6'\n'\\u06f7'\n'\\u06f8'\n'\\u06f9'\n'\\u060c'\n'\\u061b'\n'\\xad'\n'\\u061f'\n'\\ufe81'\n'\\ufe8d'\n'\\ufe8e'\n'\\ufe8e'\n'\\ufe8f'\n'\\ufe91'\n'\\ufb56'\n'\\ufb58'\n'\\ufe93'\n'\\ufe95'\n'\\ufe97'\n'\\ufb66'\n'\\ufb68'\n'\\ufe99'\n'\\ufe9b'\n'\\ufe9d'\n'\\ufe9f'\n'\\ufb7a'\n'\\ufb7c'\n'\\ufea1'\n'\\ufea3'\n'\\ufea5'\n'\\ufea7'\n'\\ufea9'\n'\\ufb84'\n'\\ufeab'\n'\\ufead'\n'\\ufb8c'\n'\\ufeaf'\n'\\ufb8a'\n'\\ufeb1'\n'\\ufeb3'\n'\\ufeb5'\n'\\ufeb7'\n'\\ufeb9'\n'\\ufebb'\n'\\ufebd'\n'\\ufebf'\n'\\ufec1'\n'\\ufec5'\n'\\ufec9'\n'\\ufeca'\n'\\ufecb'\n'\\ufecc'\n'\\ufecd'\n'\\ufece'\n'\\ufecf'\n'\\ufed0'\n'\\ufed1'\n'\\ufed3'\n'\\ufed5'\n'\\ufed7'\n'\\ufed9'\n'\\ufedb'\n'\\ufb92'\n'\\ufb94'\n'\\ufedd'\n'\\ufedf'\n'\\ufee0'\n'\\ufee1'\n'\\ufee3'\n'\\ufb9e'\n'\\ufee5'\n'\\ufee7'\n'\\ufe85'\n'\\ufeed'\n'\\ufba6'\n'\\ufba8'\n'\\ufba9'\n'\\ufbaa'\n'\\ufe80'\n'\\ufe89'\n'\\ufe8a'\n'\\ufe8b'\n'\\ufef1'\n'\\ufef2'\n'\\ufef3'\n'\\ufbb0'\n'\\ufbae'\n'\\ufe7c'\n'\\ufe7d'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1026":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1026',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'{'\n'\\xf1'\n'\\xc7'\n'.'\n'<'\n'('\n'+'\n'!'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'\\xdf'\n'\\u011e'\n'\\u0130'\n'*'\n')'\n';'\n'^'\n'-'\n'/'\n'\\xc2'\n'\\xc4'\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'['\n'\\xd1'\n'\\u015f'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\u0131'\n':'\n'\\xd6'\n'\\u015e'\n\"'\"\n'='\n'\\xdc'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'}'\n'`'\n'\\xa6'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\xa4'\n'\\xb5'\n'\\xf6'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n']'\n'$'\n'@'\n'\\xae'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xac'\n'|'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'\\xe7'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'~'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'\\u011f'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'\\\\'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\xfc'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'#'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n'\"'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1125":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1125',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0410,\n0x0081:0x0411,\n0x0082:0x0412,\n0x0083:0x0413,\n0x0084:0x0414,\n0x0085:0x0415,\n0x0086:0x0416,\n0x0087:0x0417,\n0x0088:0x0418,\n0x0089:0x0419,\n0x008a:0x041a,\n0x008b:0x041b,\n0x008c:0x041c,\n0x008d:0x041d,\n0x008e:0x041e,\n0x008f:0x041f,\n0x0090:0x0420,\n0x0091:0x0421,\n0x0092:0x0422,\n0x0093:0x0423,\n0x0094:0x0424,\n0x0095:0x0425,\n0x0096:0x0426,\n0x0097:0x0427,\n0x0098:0x0428,\n0x0099:0x0429,\n0x009a:0x042a,\n0x009b:0x042b,\n0x009c:0x042c,\n0x009d:0x042d,\n0x009e:0x042e,\n0x009f:0x042f,\n0x00a0:0x0430,\n0x00a1:0x0431,\n0x00a2:0x0432,\n0x00a3:0x0433,\n0x00a4:0x0434,\n0x00a5:0x0435,\n0x00a6:0x0436,\n0x00a7:0x0437,\n0x00a8:0x0438,\n0x00a9:0x0439,\n0x00aa:0x043a,\n0x00ab:0x043b,\n0x00ac:0x043c,\n0x00ad:0x043d,\n0x00ae:0x043e,\n0x00af:0x043f,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x0440,\n0x00e1:0x0441,\n0x00e2:0x0442,\n0x00e3:0x0443,\n0x00e4:0x0444,\n0x00e5:0x0445,\n0x00e6:0x0446,\n0x00e7:0x0447,\n0x00e8:0x0448,\n0x00e9:0x0449,\n0x00ea:0x044a,\n0x00eb:0x044b,\n0x00ec:0x044c,\n0x00ed:0x044d,\n0x00ee:0x044e,\n0x00ef:0x044f,\n0x00f0:0x0401,\n0x00f1:0x0451,\n0x00f2:0x0490,\n0x00f3:0x0491,\n0x00f4:0x0404,\n0x00f5:0x0454,\n0x00f6:0x0406,\n0x00f7:0x0456,\n0x00f8:0x0407,\n0x00f9:0x0457,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x2116,\n0x00fd:0x00a4,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n'\\u0401'\n'\\u0451'\n'\\u0490'\n'\\u0491'\n'\\u0404'\n'\\u0454'\n'\\u0406'\n'\\u0456'\n'\\u0407'\n'\\u0457'\n'\\xb7'\n'\\u221a'\n'\\u2116'\n'\\xa4'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a4:0x00fd,\n0x00b7:0x00fa,\n0x0401:0x00f0,\n0x0404:0x00f4,\n0x0406:0x00f6,\n0x0407:0x00f8,\n0x0410:0x0080,\n0x0411:0x0081,\n0x0412:0x0082,\n0x0413:0x0083,\n0x0414:0x0084,\n0x0415:0x0085,\n0x0416:0x0086,\n0x0417:0x0087,\n0x0418:0x0088,\n0x0419:0x0089,\n0x041a:0x008a,\n0x041b:0x008b,\n0x041c:0x008c,\n0x041d:0x008d,\n0x041e:0x008e,\n0x041f:0x008f,\n0x0420:0x0090,\n0x0421:0x0091,\n0x0422:0x0092,\n0x0423:0x0093,\n0x0424:0x0094,\n0x0425:0x0095,\n0x0426:0x0096,\n0x0427:0x0097,\n0x0428:0x0098,\n0x0429:0x0099,\n0x042a:0x009a,\n0x042b:0x009b,\n0x042c:0x009c,\n0x042d:0x009d,\n0x042e:0x009e,\n0x042f:0x009f,\n0x0430:0x00a0,\n0x0431:0x00a1,\n0x0432:0x00a2,\n0x0433:0x00a3,\n0x0434:0x00a4,\n0x0435:0x00a5,\n0x0436:0x00a6,\n0x0437:0x00a7,\n0x0438:0x00a8,\n0x0439:0x00a9,\n0x043a:0x00aa,\n0x043b:0x00ab,\n0x043c:0x00ac,\n0x043d:0x00ad,\n0x043e:0x00ae,\n0x043f:0x00af,\n0x0440:0x00e0,\n0x0441:0x00e1,\n0x0442:0x00e2,\n0x0443:0x00e3,\n0x0444:0x00e4,\n0x0445:0x00e5,\n0x0446:0x00e6,\n0x0447:0x00e7,\n0x0448:0x00e8,\n0x0449:0x00e9,\n0x044a:0x00ea,\n0x044b:0x00eb,\n0x044c:0x00ec,\n0x044d:0x00ed,\n0x044e:0x00ee,\n0x044f:0x00ef,\n0x0451:0x00f1,\n0x0454:0x00f5,\n0x0456:0x00f7,\n0x0457:0x00f9,\n0x0490:0x00f2,\n0x0491:0x00f3,\n0x2116:0x00fc,\n0x221a:0x00fb,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp1140":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1140',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xf1'\n'\\xa2'\n'.'\n'<'\n'('\n'+'\n'|'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'\\xdf'\n'!'\n'$'\n'*'\n')'\n';'\n'\\xac'\n'-'\n'/'\n'\\xc2'\n'\\xc4'\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'\\xc7'\n'\\xd1'\n'\\xa6'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'`'\n':'\n'#'\n'@'\n\"'\"\n'='\n'\"'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'\\xf0'\n'\\xfd'\n'\\xfe'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\u20ac'\n'\\xb5'\n'~'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n'\\xd0'\n'\\xdd'\n'\\xde'\n'\\xae'\n'^'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'['\n']'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'{'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'}'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'\\xfc'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\\\'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'\\xd6'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n'\\xdc'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1250":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1250',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\ufffe'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\ufffe'\n'\\u2030'\n'\\u0160'\n'\\u2039'\n'\\u015a'\n'\\u0164'\n'\\u017d'\n'\\u0179'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\ufffe'\n'\\u2122'\n'\\u0161'\n'\\u203a'\n'\\u015b'\n'\\u0165'\n'\\u017e'\n'\\u017a'\n'\\xa0'\n'\\u02c7'\n'\\u02d8'\n'\\u0141'\n'\\xa4'\n'\\u0104'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\u015e'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\u017b'\n'\\xb0'\n'\\xb1'\n'\\u02db'\n'\\u0142'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\u0105'\n'\\u015f'\n'\\xbb'\n'\\u013d'\n'\\u02dd'\n'\\u013e'\n'\\u017c'\n'\\u0154'\n'\\xc1'\n'\\xc2'\n'\\u0102'\n'\\xc4'\n'\\u0139'\n'\\u0106'\n'\\xc7'\n'\\u010c'\n'\\xc9'\n'\\u0118'\n'\\xcb'\n'\\u011a'\n'\\xcd'\n'\\xce'\n'\\u010e'\n'\\u0110'\n'\\u0143'\n'\\u0147'\n'\\xd3'\n'\\xd4'\n'\\u0150'\n'\\xd6'\n'\\xd7'\n'\\u0158'\n'\\u016e'\n'\\xda'\n'\\u0170'\n'\\xdc'\n'\\xdd'\n'\\u0162'\n'\\xdf'\n'\\u0155'\n'\\xe1'\n'\\xe2'\n'\\u0103'\n'\\xe4'\n'\\u013a'\n'\\u0107'\n'\\xe7'\n'\\u010d'\n'\\xe9'\n'\\u0119'\n'\\xeb'\n'\\u011b'\n'\\xed'\n'\\xee'\n'\\u010f'\n'\\u0111'\n'\\u0144'\n'\\u0148'\n'\\xf3'\n'\\xf4'\n'\\u0151'\n'\\xf6'\n'\\xf7'\n'\\u0159'\n'\\u016f'\n'\\xfa'\n'\\u0171'\n'\\xfc'\n'\\xfd'\n'\\u0163'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1251":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1251',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0402'\n'\\u0403'\n'\\u201a'\n'\\u0453'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u20ac'\n'\\u2030'\n'\\u0409'\n'\\u2039'\n'\\u040a'\n'\\u040c'\n'\\u040b'\n'\\u040f'\n'\\u0452'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\ufffe'\n'\\u2122'\n'\\u0459'\n'\\u203a'\n'\\u045a'\n'\\u045c'\n'\\u045b'\n'\\u045f'\n'\\xa0'\n'\\u040e'\n'\\u045e'\n'\\u0408'\n'\\xa4'\n'\\u0490'\n'\\xa6'\n'\\xa7'\n'\\u0401'\n'\\xa9'\n'\\u0404'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\u0407'\n'\\xb0'\n'\\xb1'\n'\\u0406'\n'\\u0456'\n'\\u0491'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\u0451'\n'\\u2116'\n'\\u0454'\n'\\xbb'\n'\\u0458'\n'\\u0405'\n'\\u0455'\n'\\u0457'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1252":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1252',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\u0160'\n'\\u2039'\n'\\u0152'\n'\\ufffe'\n'\\u017d'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\u0161'\n'\\u203a'\n'\\u0153'\n'\\ufffe'\n'\\u017e'\n'\\u0178'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1253":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1253',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\ufffe'\n'\\u2030'\n'\\ufffe'\n'\\u2039'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\ufffe'\n'\\u2122'\n'\\ufffe'\n'\\u203a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa0'\n'\\u0385'\n'\\u0386'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\ufffe'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\u2015'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\u0384'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\u0388'\n'\\u0389'\n'\\u038a'\n'\\xbb'\n'\\u038c'\n'\\xbd'\n'\\u038e'\n'\\u038f'\n'\\u0390'\n'\\u0391'\n'\\u0392'\n'\\u0393'\n'\\u0394'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\u0398'\n'\\u0399'\n'\\u039a'\n'\\u039b'\n'\\u039c'\n'\\u039d'\n'\\u039e'\n'\\u039f'\n'\\u03a0'\n'\\u03a1'\n'\\ufffe'\n'\\u03a3'\n'\\u03a4'\n'\\u03a5'\n'\\u03a6'\n'\\u03a7'\n'\\u03a8'\n'\\u03a9'\n'\\u03aa'\n'\\u03ab'\n'\\u03ac'\n'\\u03ad'\n'\\u03ae'\n'\\u03af'\n'\\u03b0'\n'\\u03b1'\n'\\u03b2'\n'\\u03b3'\n'\\u03b4'\n'\\u03b5'\n'\\u03b6'\n'\\u03b7'\n'\\u03b8'\n'\\u03b9'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\u03bd'\n'\\u03be'\n'\\u03bf'\n'\\u03c0'\n'\\u03c1'\n'\\u03c2'\n'\\u03c3'\n'\\u03c4'\n'\\u03c5'\n'\\u03c6'\n'\\u03c7'\n'\\u03c8'\n'\\u03c9'\n'\\u03ca'\n'\\u03cb'\n'\\u03cc'\n'\\u03cd'\n'\\u03ce'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1254":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1254',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\u0160'\n'\\u2039'\n'\\u0152'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\u0161'\n'\\u203a'\n'\\u0153'\n'\\ufffe'\n'\\ufffe'\n'\\u0178'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u011e'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u0130'\n'\\u015e'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\u011f'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u0131'\n'\\u015f'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1255":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1255',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\ufffe'\n'\\u2039'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\ufffe'\n'\\u203a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\u20aa'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xd7'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xf7'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\u05b0'\n'\\u05b1'\n'\\u05b2'\n'\\u05b3'\n'\\u05b4'\n'\\u05b5'\n'\\u05b6'\n'\\u05b7'\n'\\u05b8'\n'\\u05b9'\n'\\ufffe'\n'\\u05bb'\n'\\u05bc'\n'\\u05bd'\n'\\u05be'\n'\\u05bf'\n'\\u05c0'\n'\\u05c1'\n'\\u05c2'\n'\\u05c3'\n'\\u05f0'\n'\\u05f1'\n'\\u05f2'\n'\\u05f3'\n'\\u05f4'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\u05ea'\n'\\ufffe'\n'\\ufffe'\n'\\u200e'\n'\\u200f'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1256":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1256',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\u067e'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\u0679'\n'\\u2039'\n'\\u0152'\n'\\u0686'\n'\\u0698'\n'\\u0688'\n'\\u06af'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u06a9'\n'\\u2122'\n'\\u0691'\n'\\u203a'\n'\\u0153'\n'\\u200c'\n'\\u200d'\n'\\u06ba'\n'\\xa0'\n'\\u060c'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\u06be'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\u061b'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\u061f'\n'\\u06c1'\n'\\u0621'\n'\\u0622'\n'\\u0623'\n'\\u0624'\n'\\u0625'\n'\\u0626'\n'\\u0627'\n'\\u0628'\n'\\u0629'\n'\\u062a'\n'\\u062b'\n'\\u062c'\n'\\u062d'\n'\\u062e'\n'\\u062f'\n'\\u0630'\n'\\u0631'\n'\\u0632'\n'\\u0633'\n'\\u0634'\n'\\u0635'\n'\\u0636'\n'\\xd7'\n'\\u0637'\n'\\u0638'\n'\\u0639'\n'\\u063a'\n'\\u0640'\n'\\u0641'\n'\\u0642'\n'\\u0643'\n'\\xe0'\n'\\u0644'\n'\\xe2'\n'\\u0645'\n'\\u0646'\n'\\u0647'\n'\\u0648'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\u0649'\n'\\u064a'\n'\\xee'\n'\\xef'\n'\\u064b'\n'\\u064c'\n'\\u064d'\n'\\u064e'\n'\\xf4'\n'\\u064f'\n'\\u0650'\n'\\xf7'\n'\\u0651'\n'\\xf9'\n'\\u0652'\n'\\xfb'\n'\\xfc'\n'\\u200e'\n'\\u200f'\n'\\u06d2'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1257":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1257',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\ufffe'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\ufffe'\n'\\u2030'\n'\\ufffe'\n'\\u2039'\n'\\ufffe'\n'\\xa8'\n'\\u02c7'\n'\\xb8'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\ufffe'\n'\\u2122'\n'\\ufffe'\n'\\u203a'\n'\\ufffe'\n'\\xaf'\n'\\u02db'\n'\\ufffe'\n'\\xa0'\n'\\ufffe'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\ufffe'\n'\\xa6'\n'\\xa7'\n'\\xd8'\n'\\xa9'\n'\\u0156'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xc6'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xf8'\n'\\xb9'\n'\\u0157'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xe6'\n'\\u0104'\n'\\u012e'\n'\\u0100'\n'\\u0106'\n'\\xc4'\n'\\xc5'\n'\\u0118'\n'\\u0112'\n'\\u010c'\n'\\xc9'\n'\\u0179'\n'\\u0116'\n'\\u0122'\n'\\u0136'\n'\\u012a'\n'\\u013b'\n'\\u0160'\n'\\u0143'\n'\\u0145'\n'\\xd3'\n'\\u014c'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\u0172'\n'\\u0141'\n'\\u015a'\n'\\u016a'\n'\\xdc'\n'\\u017b'\n'\\u017d'\n'\\xdf'\n'\\u0105'\n'\\u012f'\n'\\u0101'\n'\\u0107'\n'\\xe4'\n'\\xe5'\n'\\u0119'\n'\\u0113'\n'\\u010d'\n'\\xe9'\n'\\u017a'\n'\\u0117'\n'\\u0123'\n'\\u0137'\n'\\u012b'\n'\\u013c'\n'\\u0161'\n'\\u0144'\n'\\u0146'\n'\\xf3'\n'\\u014d'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\u0173'\n'\\u0142'\n'\\u015b'\n'\\u016b'\n'\\xfc'\n'\\u017c'\n'\\u017e'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp1258":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1258',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\ufffe'\n'\\u2039'\n'\\u0152'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\ufffe'\n'\\u203a'\n'\\u0153'\n'\\ufffe'\n'\\ufffe'\n'\\u0178'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\u0102'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\u0300'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u0110'\n'\\xd1'\n'\\u0309'\n'\\xd3'\n'\\xd4'\n'\\u01a0'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u01af'\n'\\u0303'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\u0103'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\u0301'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\u0111'\n'\\xf1'\n'\\u0323'\n'\\xf3'\n'\\xf4'\n'\\u01a1'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u01b0'\n'\\u20ab'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp273":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp273',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'{'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xf1'\n'\\xc4'\n'.'\n'<'\n'('\n'+'\n'!'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'~'\n'\\xdc'\n'$'\n'*'\n')'\n';'\n'^'\n'-'\n'/'\n'\\xc2'\n'['\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'\\xc7'\n'\\xd1'\n'\\xf6'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'`'\n':'\n'#'\n'\\xa7'\n\"'\"\n'='\n'\"'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'\\xf0'\n'\\xfd'\n'\\xfe'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\xa4'\n'\\xb5'\n'\\xdf'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n'\\xd0'\n'\\xdd'\n'\\xde'\n'\\xae'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'@'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xac'\n'|'\n'\\u203e'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'\\xe4'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'\\xa6'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'\\xfc'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'}'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\xd6'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'\\\\'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n']'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp424":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp424',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\xa2'\n'.'\n'<'\n'('\n'+'\n'|'\n'&'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'!'\n'$'\n'*'\n')'\n';'\n'\\xac'\n'-'\n'/'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\xa6'\n','\n'%'\n'_'\n'>'\n'?'\n'\\ufffe'\n'\\u05ea'\n'\\ufffe'\n'\\ufffe'\n'\\xa0'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2017'\n'`'\n':'\n'#'\n'@'\n\"'\"\n'='\n'\"'\n'\\ufffe'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xb8'\n'\\ufffe'\n'\\xa4'\n'\\xb5'\n'~'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xae'\n'^'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'['\n']'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'{'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'}'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\\\'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp437":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp437',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x00ec,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00ff,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00a2,\n0x009c:0x00a3,\n0x009d:0x00a5,\n0x009e:0x20a7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x2310,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\xec'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\xff'\n'\\xd6'\n'\\xdc'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\u20a7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\u2310'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x009b,\n0x00a3:0x009c,\n0x00a5:0x009d,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b5:0x00e6,\n0x00b7:0x00fa,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00bf:0x00a8,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c9:0x0090,\n0x00d1:0x00a5,\n0x00d6:0x0099,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00ff:0x0098,\n0x0192:0x009f,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x207f:0x00fc,\n0x20a7:0x009e,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2310:0x00a9,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp500":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp500',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xf1'\n'['\n'.'\n'<'\n'('\n'+'\n'!'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'\\xdf'\n']'\n'$'\n'*'\n')'\n';'\n'^'\n'-'\n'/'\n'\\xc2'\n'\\xc4'\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'\\xc7'\n'\\xd1'\n'\\xa6'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'`'\n':'\n'#'\n'@'\n\"'\"\n'='\n'\"'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'\\xf0'\n'\\xfd'\n'\\xfe'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\xa4'\n'\\xb5'\n'~'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n'\\xd0'\n'\\xdd'\n'\\xde'\n'\\xae'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xac'\n'|'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'{'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'}'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'\\xfc'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\\\'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'\\xd6'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n'\\xdc'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp720":[".py","''\n\n\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp720',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\xe9'\n'\\xe2'\n'\\x84'\n'\\xe0'\n'\\x86'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\u0651'\n'\\u0652'\n'\\xf4'\n'\\xa4'\n'\\u0640'\n'\\xfb'\n'\\xf9'\n'\\u0621'\n'\\u0622'\n'\\u0623'\n'\\u0624'\n'\\xa3'\n'\\u0625'\n'\\u0626'\n'\\u0627'\n'\\u0628'\n'\\u0629'\n'\\u062a'\n'\\u062b'\n'\\u062c'\n'\\u062d'\n'\\u062e'\n'\\u062f'\n'\\u0630'\n'\\u0631'\n'\\u0632'\n'\\u0633'\n'\\u0634'\n'\\u0635'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u0636'\n'\\u0637'\n'\\u0638'\n'\\u0639'\n'\\u063a'\n'\\u0641'\n'\\xb5'\n'\\u0642'\n'\\u0643'\n'\\u0644'\n'\\u0645'\n'\\u0646'\n'\\u0647'\n'\\u0648'\n'\\u0649'\n'\\u064a'\n'\\u2261'\n'\\u064b'\n'\\u064c'\n'\\u064d'\n'\\u064e'\n'\\u064f'\n'\\u0650'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp737":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp737',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0391,\n0x0081:0x0392,\n0x0082:0x0393,\n0x0083:0x0394,\n0x0084:0x0395,\n0x0085:0x0396,\n0x0086:0x0397,\n0x0087:0x0398,\n0x0088:0x0399,\n0x0089:0x039a,\n0x008a:0x039b,\n0x008b:0x039c,\n0x008c:0x039d,\n0x008d:0x039e,\n0x008e:0x039f,\n0x008f:0x03a0,\n0x0090:0x03a1,\n0x0091:0x03a3,\n0x0092:0x03a4,\n0x0093:0x03a5,\n0x0094:0x03a6,\n0x0095:0x03a7,\n0x0096:0x03a8,\n0x0097:0x03a9,\n0x0098:0x03b1,\n0x0099:0x03b2,\n0x009a:0x03b3,\n0x009b:0x03b4,\n0x009c:0x03b5,\n0x009d:0x03b6,\n0x009e:0x03b7,\n0x009f:0x03b8,\n0x00a0:0x03b9,\n0x00a1:0x03ba,\n0x00a2:0x03bb,\n0x00a3:0x03bc,\n0x00a4:0x03bd,\n0x00a5:0x03be,\n0x00a6:0x03bf,\n0x00a7:0x03c0,\n0x00a8:0x03c1,\n0x00a9:0x03c3,\n0x00aa:0x03c2,\n0x00ab:0x03c4,\n0x00ac:0x03c5,\n0x00ad:0x03c6,\n0x00ae:0x03c7,\n0x00af:0x03c8,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03c9,\n0x00e1:0x03ac,\n0x00e2:0x03ad,\n0x00e3:0x03ae,\n0x00e4:0x03ca,\n0x00e5:0x03af,\n0x00e6:0x03cc,\n0x00e7:0x03cd,\n0x00e8:0x03cb,\n0x00e9:0x03ce,\n0x00ea:0x0386,\n0x00eb:0x0388,\n0x00ec:0x0389,\n0x00ed:0x038a,\n0x00ee:0x038c,\n0x00ef:0x038e,\n0x00f0:0x038f,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x03aa,\n0x00f5:0x03ab,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0391'\n'\\u0392'\n'\\u0393'\n'\\u0394'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\u0398'\n'\\u0399'\n'\\u039a'\n'\\u039b'\n'\\u039c'\n'\\u039d'\n'\\u039e'\n'\\u039f'\n'\\u03a0'\n'\\u03a1'\n'\\u03a3'\n'\\u03a4'\n'\\u03a5'\n'\\u03a6'\n'\\u03a7'\n'\\u03a8'\n'\\u03a9'\n'\\u03b1'\n'\\u03b2'\n'\\u03b3'\n'\\u03b4'\n'\\u03b5'\n'\\u03b6'\n'\\u03b7'\n'\\u03b8'\n'\\u03b9'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\u03bd'\n'\\u03be'\n'\\u03bf'\n'\\u03c0'\n'\\u03c1'\n'\\u03c3'\n'\\u03c2'\n'\\u03c4'\n'\\u03c5'\n'\\u03c6'\n'\\u03c7'\n'\\u03c8'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03c9'\n'\\u03ac'\n'\\u03ad'\n'\\u03ae'\n'\\u03ca'\n'\\u03af'\n'\\u03cc'\n'\\u03cd'\n'\\u03cb'\n'\\u03ce'\n'\\u0386'\n'\\u0388'\n'\\u0389'\n'\\u038a'\n'\\u038c'\n'\\u038e'\n'\\u038f'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u03aa'\n'\\u03ab'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b7:0x00fa,\n0x00f7:0x00f6,\n0x0386:0x00ea,\n0x0388:0x00eb,\n0x0389:0x00ec,\n0x038a:0x00ed,\n0x038c:0x00ee,\n0x038e:0x00ef,\n0x038f:0x00f0,\n0x0391:0x0080,\n0x0392:0x0081,\n0x0393:0x0082,\n0x0394:0x0083,\n0x0395:0x0084,\n0x0396:0x0085,\n0x0397:0x0086,\n0x0398:0x0087,\n0x0399:0x0088,\n0x039a:0x0089,\n0x039b:0x008a,\n0x039c:0x008b,\n0x039d:0x008c,\n0x039e:0x008d,\n0x039f:0x008e,\n0x03a0:0x008f,\n0x03a1:0x0090,\n0x03a3:0x0091,\n0x03a4:0x0092,\n0x03a5:0x0093,\n0x03a6:0x0094,\n0x03a7:0x0095,\n0x03a8:0x0096,\n0x03a9:0x0097,\n0x03aa:0x00f4,\n0x03ab:0x00f5,\n0x03ac:0x00e1,\n0x03ad:0x00e2,\n0x03ae:0x00e3,\n0x03af:0x00e5,\n0x03b1:0x0098,\n0x03b2:0x0099,\n0x03b3:0x009a,\n0x03b4:0x009b,\n0x03b5:0x009c,\n0x03b6:0x009d,\n0x03b7:0x009e,\n0x03b8:0x009f,\n0x03b9:0x00a0,\n0x03ba:0x00a1,\n0x03bb:0x00a2,\n0x03bc:0x00a3,\n0x03bd:0x00a4,\n0x03be:0x00a5,\n0x03bf:0x00a6,\n0x03c0:0x00a7,\n0x03c1:0x00a8,\n0x03c2:0x00aa,\n0x03c3:0x00a9,\n0x03c4:0x00ab,\n0x03c5:0x00ac,\n0x03c6:0x00ad,\n0x03c7:0x00ae,\n0x03c8:0x00af,\n0x03c9:0x00e0,\n0x03ca:0x00e4,\n0x03cb:0x00e8,\n0x03cc:0x00e6,\n0x03cd:0x00e7,\n0x03ce:0x00e9,\n0x207f:0x00fc,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x2248:0x00f7,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp775":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp775',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0106,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x0101,\n0x0084:0x00e4,\n0x0085:0x0123,\n0x0086:0x00e5,\n0x0087:0x0107,\n0x0088:0x0142,\n0x0089:0x0113,\n0x008a:0x0156,\n0x008b:0x0157,\n0x008c:0x012b,\n0x008d:0x0179,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x014d,\n0x0094:0x00f6,\n0x0095:0x0122,\n0x0096:0x00a2,\n0x0097:0x015a,\n0x0098:0x015b,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x00d7,\n0x009f:0x00a4,\n0x00a0:0x0100,\n0x00a1:0x012a,\n0x00a2:0x00f3,\n0x00a3:0x017b,\n0x00a4:0x017c,\n0x00a5:0x017a,\n0x00a6:0x201d,\n0x00a7:0x00a6,\n0x00a8:0x00a9,\n0x00a9:0x00ae,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x0141,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x0104,\n0x00b6:0x010c,\n0x00b7:0x0118,\n0x00b8:0x0116,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x012e,\n0x00be:0x0160,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x0172,\n0x00c7:0x016a,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x017d,\n0x00d0:0x0105,\n0x00d1:0x010d,\n0x00d2:0x0119,\n0x00d3:0x0117,\n0x00d4:0x012f,\n0x00d5:0x0161,\n0x00d6:0x0173,\n0x00d7:0x016b,\n0x00d8:0x017e,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x014c,\n0x00e3:0x0143,\n0x00e4:0x00f5,\n0x00e5:0x00d5,\n0x00e6:0x00b5,\n0x00e7:0x0144,\n0x00e8:0x0136,\n0x00e9:0x0137,\n0x00ea:0x013b,\n0x00eb:0x013c,\n0x00ec:0x0146,\n0x00ed:0x0112,\n0x00ee:0x0145,\n0x00ef:0x2019,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:0x201c,\n0x00f3:0x00be,\n0x00f4:0x00b6,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x201e,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x00b9,\n0x00fc:0x00b3,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0106'\n'\\xfc'\n'\\xe9'\n'\\u0101'\n'\\xe4'\n'\\u0123'\n'\\xe5'\n'\\u0107'\n'\\u0142'\n'\\u0113'\n'\\u0156'\n'\\u0157'\n'\\u012b'\n'\\u0179'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\u014d'\n'\\xf6'\n'\\u0122'\n'\\xa2'\n'\\u015a'\n'\\u015b'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\xd7'\n'\\xa4'\n'\\u0100'\n'\\u012a'\n'\\xf3'\n'\\u017b'\n'\\u017c'\n'\\u017a'\n'\\u201d'\n'\\xa6'\n'\\xa9'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\u0141'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u0104'\n'\\u010c'\n'\\u0118'\n'\\u0116'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u012e'\n'\\u0160'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u0172'\n'\\u016a'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u017d'\n'\\u0105'\n'\\u010d'\n'\\u0119'\n'\\u0117'\n'\\u012f'\n'\\u0161'\n'\\u0173'\n'\\u016b'\n'\\u017e'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\u014c'\n'\\u0143'\n'\\xf5'\n'\\xd5'\n'\\xb5'\n'\\u0144'\n'\\u0136'\n'\\u0137'\n'\\u013b'\n'\\u013c'\n'\\u0146'\n'\\u0112'\n'\\u0145'\n'\\u2019'\n'\\xad'\n'\\xb1'\n'\\u201c'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\u201e'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a2:0x0096,\n0x00a3:0x009c,\n0x00a4:0x009f,\n0x00a6:0x00a7,\n0x00a7:0x00f5,\n0x00a9:0x00a8,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00ae:0x00a9,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00fc,\n0x00b5:0x00e6,\n0x00b6:0x00f4,\n0x00b7:0x00fa,\n0x00b9:0x00fb,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00f3,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c9:0x0090,\n0x00d3:0x00e0,\n0x00d5:0x00e5,\n0x00d6:0x0099,\n0x00d7:0x009e,\n0x00d8:0x009d,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e9:0x0082,\n0x00f3:0x00a2,\n0x00f5:0x00e4,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00fc:0x0081,\n0x0100:0x00a0,\n0x0101:0x0083,\n0x0104:0x00b5,\n0x0105:0x00d0,\n0x0106:0x0080,\n0x0107:0x0087,\n0x010c:0x00b6,\n0x010d:0x00d1,\n0x0112:0x00ed,\n0x0113:0x0089,\n0x0116:0x00b8,\n0x0117:0x00d3,\n0x0118:0x00b7,\n0x0119:0x00d2,\n0x0122:0x0095,\n0x0123:0x0085,\n0x012a:0x00a1,\n0x012b:0x008c,\n0x012e:0x00bd,\n0x012f:0x00d4,\n0x0136:0x00e8,\n0x0137:0x00e9,\n0x013b:0x00ea,\n0x013c:0x00eb,\n0x0141:0x00ad,\n0x0142:0x0088,\n0x0143:0x00e3,\n0x0144:0x00e7,\n0x0145:0x00ee,\n0x0146:0x00ec,\n0x014c:0x00e2,\n0x014d:0x0093,\n0x0156:0x008a,\n0x0157:0x008b,\n0x015a:0x0097,\n0x015b:0x0098,\n0x0160:0x00be,\n0x0161:0x00d5,\n0x016a:0x00c7,\n0x016b:0x00d7,\n0x0172:0x00c6,\n0x0173:0x00d6,\n0x0179:0x008d,\n0x017a:0x00a5,\n0x017b:0x00a3,\n0x017c:0x00a4,\n0x017d:0x00cf,\n0x017e:0x00d8,\n0x2019:0x00ef,\n0x201c:0x00f2,\n0x201d:0x00a6,\n0x201e:0x00f7,\n0x2219:0x00f9,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp850":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp850',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x00ec,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00ff,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x00d7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x00ae,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x00c1,\n0x00b6:0x00c2,\n0x00b7:0x00c0,\n0x00b8:0x00a9,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x00a2,\n0x00be:0x00a5,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x00e3,\n0x00c7:0x00c3,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x00f0,\n0x00d1:0x00d0,\n0x00d2:0x00ca,\n0x00d3:0x00cb,\n0x00d4:0x00c8,\n0x00d5:0x0131,\n0x00d6:0x00cd,\n0x00d7:0x00ce,\n0x00d8:0x00cf,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x00a6,\n0x00de:0x00cc,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x00d4,\n0x00e3:0x00d2,\n0x00e4:0x00f5,\n0x00e5:0x00d5,\n0x00e6:0x00b5,\n0x00e7:0x00fe,\n0x00e8:0x00de,\n0x00e9:0x00da,\n0x00ea:0x00db,\n0x00eb:0x00d9,\n0x00ec:0x00fd,\n0x00ed:0x00dd,\n0x00ee:0x00af,\n0x00ef:0x00b4,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:0x2017,\n0x00f3:0x00be,\n0x00f4:0x00b6,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x00b8,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x00b7,\n0x00fb:0x00b9,\n0x00fc:0x00b3,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\xec'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\xff'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\xd7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\xc1'\n'\\xc2'\n'\\xc0'\n'\\xa9'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\xa2'\n'\\xa5'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\xe3'\n'\\xc3'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\xf0'\n'\\xd0'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\u0131'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\xa6'\n'\\xcc'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\xd4'\n'\\xd2'\n'\\xf5'\n'\\xd5'\n'\\xb5'\n'\\xfe'\n'\\xde'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\xfd'\n'\\xdd'\n'\\xaf'\n'\\xb4'\n'\\xad'\n'\\xb1'\n'\\u2017'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x00bd,\n0x00a3:0x009c,\n0x00a4:0x00cf,\n0x00a5:0x00be,\n0x00a6:0x00dd,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00a9:0x00b8,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00ae:0x00a9,\n0x00af:0x00ee,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00fc,\n0x00b4:0x00ef,\n0x00b5:0x00e6,\n0x00b6:0x00f4,\n0x00b7:0x00fa,\n0x00b8:0x00f7,\n0x00b9:0x00fb,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00f3,\n0x00bf:0x00a8,\n0x00c0:0x00b7,\n0x00c1:0x00b5,\n0x00c2:0x00b6,\n0x00c3:0x00c7,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c8:0x00d4,\n0x00c9:0x0090,\n0x00ca:0x00d2,\n0x00cb:0x00d3,\n0x00cc:0x00de,\n0x00cd:0x00d6,\n0x00ce:0x00d7,\n0x00cf:0x00d8,\n0x00d0:0x00d1,\n0x00d1:0x00a5,\n0x00d2:0x00e3,\n0x00d3:0x00e0,\n0x00d4:0x00e2,\n0x00d5:0x00e5,\n0x00d6:0x0099,\n0x00d7:0x009e,\n0x00d8:0x009d,\n0x00d9:0x00eb,\n0x00da:0x00e9,\n0x00db:0x00ea,\n0x00dc:0x009a,\n0x00dd:0x00ed,\n0x00de:0x00e8,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e3:0x00c6,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f0:0x00d0,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f5:0x00e4,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00fd:0x00ec,\n0x00fe:0x00e7,\n0x00ff:0x0098,\n0x0131:0x00d5,\n0x0192:0x009f,\n0x2017:0x00f2,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp852":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp852',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x016f,\n0x0086:0x0107,\n0x0087:0x00e7,\n0x0088:0x0142,\n0x0089:0x00eb,\n0x008a:0x0150,\n0x008b:0x0151,\n0x008c:0x00ee,\n0x008d:0x0179,\n0x008e:0x00c4,\n0x008f:0x0106,\n0x0090:0x00c9,\n0x0091:0x0139,\n0x0092:0x013a,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x013d,\n0x0096:0x013e,\n0x0097:0x015a,\n0x0098:0x015b,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x0164,\n0x009c:0x0165,\n0x009d:0x0141,\n0x009e:0x00d7,\n0x009f:0x010d,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x0104,\n0x00a5:0x0105,\n0x00a6:0x017d,\n0x00a7:0x017e,\n0x00a8:0x0118,\n0x00a9:0x0119,\n0x00aa:0x00ac,\n0x00ab:0x017a,\n0x00ac:0x010c,\n0x00ad:0x015f,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x00c1,\n0x00b6:0x00c2,\n0x00b7:0x011a,\n0x00b8:0x015e,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x017b,\n0x00be:0x017c,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x0102,\n0x00c7:0x0103,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x0111,\n0x00d1:0x0110,\n0x00d2:0x010e,\n0x00d3:0x00cb,\n0x00d4:0x010f,\n0x00d5:0x0147,\n0x00d6:0x00cd,\n0x00d7:0x00ce,\n0x00d8:0x011b,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x0162,\n0x00de:0x016e,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x00d4,\n0x00e3:0x0143,\n0x00e4:0x0144,\n0x00e5:0x0148,\n0x00e6:0x0160,\n0x00e7:0x0161,\n0x00e8:0x0154,\n0x00e9:0x00da,\n0x00ea:0x0155,\n0x00eb:0x0170,\n0x00ec:0x00fd,\n0x00ed:0x00dd,\n0x00ee:0x0163,\n0x00ef:0x00b4,\n0x00f0:0x00ad,\n0x00f1:0x02dd,\n0x00f2:0x02db,\n0x00f3:0x02c7,\n0x00f4:0x02d8,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x00b8,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x02d9,\n0x00fb:0x0171,\n0x00fc:0x0158,\n0x00fd:0x0159,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\u016f'\n'\\u0107'\n'\\xe7'\n'\\u0142'\n'\\xeb'\n'\\u0150'\n'\\u0151'\n'\\xee'\n'\\u0179'\n'\\xc4'\n'\\u0106'\n'\\xc9'\n'\\u0139'\n'\\u013a'\n'\\xf4'\n'\\xf6'\n'\\u013d'\n'\\u013e'\n'\\u015a'\n'\\u015b'\n'\\xd6'\n'\\xdc'\n'\\u0164'\n'\\u0165'\n'\\u0141'\n'\\xd7'\n'\\u010d'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\u0104'\n'\\u0105'\n'\\u017d'\n'\\u017e'\n'\\u0118'\n'\\u0119'\n'\\xac'\n'\\u017a'\n'\\u010c'\n'\\u015f'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\xc1'\n'\\xc2'\n'\\u011a'\n'\\u015e'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u017b'\n'\\u017c'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u0102'\n'\\u0103'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\u0111'\n'\\u0110'\n'\\u010e'\n'\\xcb'\n'\\u010f'\n'\\u0147'\n'\\xcd'\n'\\xce'\n'\\u011b'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u0162'\n'\\u016e'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\xd4'\n'\\u0143'\n'\\u0144'\n'\\u0148'\n'\\u0160'\n'\\u0161'\n'\\u0154'\n'\\xda'\n'\\u0155'\n'\\u0170'\n'\\xfd'\n'\\xdd'\n'\\u0163'\n'\\xb4'\n'\\xad'\n'\\u02dd'\n'\\u02db'\n'\\u02c7'\n'\\u02d8'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\u02d9'\n'\\u0171'\n'\\u0158'\n'\\u0159'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a4:0x00cf,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00b0:0x00f8,\n0x00b4:0x00ef,\n0x00b8:0x00f7,\n0x00bb:0x00af,\n0x00c1:0x00b5,\n0x00c2:0x00b6,\n0x00c4:0x008e,\n0x00c7:0x0080,\n0x00c9:0x0090,\n0x00cb:0x00d3,\n0x00cd:0x00d6,\n0x00ce:0x00d7,\n0x00d3:0x00e0,\n0x00d4:0x00e2,\n0x00d6:0x0099,\n0x00d7:0x009e,\n0x00da:0x00e9,\n0x00dc:0x009a,\n0x00dd:0x00ed,\n0x00df:0x00e1,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e4:0x0084,\n0x00e7:0x0087,\n0x00e9:0x0082,\n0x00eb:0x0089,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00fa:0x00a3,\n0x00fc:0x0081,\n0x00fd:0x00ec,\n0x0102:0x00c6,\n0x0103:0x00c7,\n0x0104:0x00a4,\n0x0105:0x00a5,\n0x0106:0x008f,\n0x0107:0x0086,\n0x010c:0x00ac,\n0x010d:0x009f,\n0x010e:0x00d2,\n0x010f:0x00d4,\n0x0110:0x00d1,\n0x0111:0x00d0,\n0x0118:0x00a8,\n0x0119:0x00a9,\n0x011a:0x00b7,\n0x011b:0x00d8,\n0x0139:0x0091,\n0x013a:0x0092,\n0x013d:0x0095,\n0x013e:0x0096,\n0x0141:0x009d,\n0x0142:0x0088,\n0x0143:0x00e3,\n0x0144:0x00e4,\n0x0147:0x00d5,\n0x0148:0x00e5,\n0x0150:0x008a,\n0x0151:0x008b,\n0x0154:0x00e8,\n0x0155:0x00ea,\n0x0158:0x00fc,\n0x0159:0x00fd,\n0x015a:0x0097,\n0x015b:0x0098,\n0x015e:0x00b8,\n0x015f:0x00ad,\n0x0160:0x00e6,\n0x0161:0x00e7,\n0x0162:0x00dd,\n0x0163:0x00ee,\n0x0164:0x009b,\n0x0165:0x009c,\n0x016e:0x00de,\n0x016f:0x0085,\n0x0170:0x00eb,\n0x0171:0x00fb,\n0x0179:0x008d,\n0x017a:0x00ab,\n0x017b:0x00bd,\n0x017c:0x00be,\n0x017d:0x00a6,\n0x017e:0x00a7,\n0x02c7:0x00f3,\n0x02d8:0x00f4,\n0x02d9:0x00fa,\n0x02db:0x00f2,\n0x02dd:0x00f1,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp855":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp855',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0452,\n0x0081:0x0402,\n0x0082:0x0453,\n0x0083:0x0403,\n0x0084:0x0451,\n0x0085:0x0401,\n0x0086:0x0454,\n0x0087:0x0404,\n0x0088:0x0455,\n0x0089:0x0405,\n0x008a:0x0456,\n0x008b:0x0406,\n0x008c:0x0457,\n0x008d:0x0407,\n0x008e:0x0458,\n0x008f:0x0408,\n0x0090:0x0459,\n0x0091:0x0409,\n0x0092:0x045a,\n0x0093:0x040a,\n0x0094:0x045b,\n0x0095:0x040b,\n0x0096:0x045c,\n0x0097:0x040c,\n0x0098:0x045e,\n0x0099:0x040e,\n0x009a:0x045f,\n0x009b:0x040f,\n0x009c:0x044e,\n0x009d:0x042e,\n0x009e:0x044a,\n0x009f:0x042a,\n0x00a0:0x0430,\n0x00a1:0x0410,\n0x00a2:0x0431,\n0x00a3:0x0411,\n0x00a4:0x0446,\n0x00a5:0x0426,\n0x00a6:0x0434,\n0x00a7:0x0414,\n0x00a8:0x0435,\n0x00a9:0x0415,\n0x00aa:0x0444,\n0x00ab:0x0424,\n0x00ac:0x0433,\n0x00ad:0x0413,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x0445,\n0x00b6:0x0425,\n0x00b7:0x0438,\n0x00b8:0x0418,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x0439,\n0x00be:0x0419,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x043a,\n0x00c7:0x041a,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x043b,\n0x00d1:0x041b,\n0x00d2:0x043c,\n0x00d3:0x041c,\n0x00d4:0x043d,\n0x00d5:0x041d,\n0x00d6:0x043e,\n0x00d7:0x041e,\n0x00d8:0x043f,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x041f,\n0x00de:0x044f,\n0x00df:0x2580,\n0x00e0:0x042f,\n0x00e1:0x0440,\n0x00e2:0x0420,\n0x00e3:0x0441,\n0x00e4:0x0421,\n0x00e5:0x0442,\n0x00e6:0x0422,\n0x00e7:0x0443,\n0x00e8:0x0423,\n0x00e9:0x0436,\n0x00ea:0x0416,\n0x00eb:0x0432,\n0x00ec:0x0412,\n0x00ed:0x044c,\n0x00ee:0x042c,\n0x00ef:0x2116,\n0x00f0:0x00ad,\n0x00f1:0x044b,\n0x00f2:0x042b,\n0x00f3:0x0437,\n0x00f4:0x0417,\n0x00f5:0x0448,\n0x00f6:0x0428,\n0x00f7:0x044d,\n0x00f8:0x042d,\n0x00f9:0x0449,\n0x00fa:0x0429,\n0x00fb:0x0447,\n0x00fc:0x0427,\n0x00fd:0x00a7,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0452'\n'\\u0402'\n'\\u0453'\n'\\u0403'\n'\\u0451'\n'\\u0401'\n'\\u0454'\n'\\u0404'\n'\\u0455'\n'\\u0405'\n'\\u0456'\n'\\u0406'\n'\\u0457'\n'\\u0407'\n'\\u0458'\n'\\u0408'\n'\\u0459'\n'\\u0409'\n'\\u045a'\n'\\u040a'\n'\\u045b'\n'\\u040b'\n'\\u045c'\n'\\u040c'\n'\\u045e'\n'\\u040e'\n'\\u045f'\n'\\u040f'\n'\\u044e'\n'\\u042e'\n'\\u044a'\n'\\u042a'\n'\\u0430'\n'\\u0410'\n'\\u0431'\n'\\u0411'\n'\\u0446'\n'\\u0426'\n'\\u0434'\n'\\u0414'\n'\\u0435'\n'\\u0415'\n'\\u0444'\n'\\u0424'\n'\\u0433'\n'\\u0413'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u0445'\n'\\u0425'\n'\\u0438'\n'\\u0418'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u0439'\n'\\u0419'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u043a'\n'\\u041a'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\u043b'\n'\\u041b'\n'\\u043c'\n'\\u041c'\n'\\u043d'\n'\\u041d'\n'\\u043e'\n'\\u041e'\n'\\u043f'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u041f'\n'\\u044f'\n'\\u2580'\n'\\u042f'\n'\\u0440'\n'\\u0420'\n'\\u0441'\n'\\u0421'\n'\\u0442'\n'\\u0422'\n'\\u0443'\n'\\u0423'\n'\\u0436'\n'\\u0416'\n'\\u0432'\n'\\u0412'\n'\\u044c'\n'\\u042c'\n'\\u2116'\n'\\xad'\n'\\u044b'\n'\\u042b'\n'\\u0437'\n'\\u0417'\n'\\u0448'\n'\\u0428'\n'\\u044d'\n'\\u042d'\n'\\u0449'\n'\\u0429'\n'\\u0447'\n'\\u0427'\n'\\xa7'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a4:0x00cf,\n0x00a7:0x00fd,\n0x00ab:0x00ae,\n0x00ad:0x00f0,\n0x00bb:0x00af,\n0x0401:0x0085,\n0x0402:0x0081,\n0x0403:0x0083,\n0x0404:0x0087,\n0x0405:0x0089,\n0x0406:0x008b,\n0x0407:0x008d,\n0x0408:0x008f,\n0x0409:0x0091,\n0x040a:0x0093,\n0x040b:0x0095,\n0x040c:0x0097,\n0x040e:0x0099,\n0x040f:0x009b,\n0x0410:0x00a1,\n0x0411:0x00a3,\n0x0412:0x00ec,\n0x0413:0x00ad,\n0x0414:0x00a7,\n0x0415:0x00a9,\n0x0416:0x00ea,\n0x0417:0x00f4,\n0x0418:0x00b8,\n0x0419:0x00be,\n0x041a:0x00c7,\n0x041b:0x00d1,\n0x041c:0x00d3,\n0x041d:0x00d5,\n0x041e:0x00d7,\n0x041f:0x00dd,\n0x0420:0x00e2,\n0x0421:0x00e4,\n0x0422:0x00e6,\n0x0423:0x00e8,\n0x0424:0x00ab,\n0x0425:0x00b6,\n0x0426:0x00a5,\n0x0427:0x00fc,\n0x0428:0x00f6,\n0x0429:0x00fa,\n0x042a:0x009f,\n0x042b:0x00f2,\n0x042c:0x00ee,\n0x042d:0x00f8,\n0x042e:0x009d,\n0x042f:0x00e0,\n0x0430:0x00a0,\n0x0431:0x00a2,\n0x0432:0x00eb,\n0x0433:0x00ac,\n0x0434:0x00a6,\n0x0435:0x00a8,\n0x0436:0x00e9,\n0x0437:0x00f3,\n0x0438:0x00b7,\n0x0439:0x00bd,\n0x043a:0x00c6,\n0x043b:0x00d0,\n0x043c:0x00d2,\n0x043d:0x00d4,\n0x043e:0x00d6,\n0x043f:0x00d8,\n0x0440:0x00e1,\n0x0441:0x00e3,\n0x0442:0x00e5,\n0x0443:0x00e7,\n0x0444:0x00aa,\n0x0445:0x00b5,\n0x0446:0x00a4,\n0x0447:0x00fb,\n0x0448:0x00f5,\n0x0449:0x00f9,\n0x044a:0x009e,\n0x044b:0x00f1,\n0x044c:0x00ed,\n0x044d:0x00f7,\n0x044e:0x009c,\n0x044f:0x00de,\n0x0451:0x0084,\n0x0452:0x0080,\n0x0453:0x0082,\n0x0454:0x0086,\n0x0455:0x0088,\n0x0456:0x008a,\n0x0457:0x008c,\n0x0458:0x008e,\n0x0459:0x0090,\n0x045a:0x0092,\n0x045b:0x0094,\n0x045c:0x0096,\n0x045e:0x0098,\n0x045f:0x009a,\n0x2116:0x00ef,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp856":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp856',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\u05ea'\n'\\ufffe'\n'\\xa3'\n'\\ufffe'\n'\\xd7'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\ufffe'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa9'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\xa2'\n'\\xa5'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\ufffe'\n'\\ufffe'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\xa6'\n'\\ufffe'\n'\\u2580'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xb5'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xaf'\n'\\xb4'\n'\\xad'\n'\\xb1'\n'\\u2017'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp857":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp857',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x0131,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x0130,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x015e,\n0x009f:0x015f,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x011e,\n0x00a7:0x011f,\n0x00a8:0x00bf,\n0x00a9:0x00ae,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x00c1,\n0x00b6:0x00c2,\n0x00b7:0x00c0,\n0x00b8:0x00a9,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x00a2,\n0x00be:0x00a5,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x00e3,\n0x00c7:0x00c3,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x00ba,\n0x00d1:0x00aa,\n0x00d2:0x00ca,\n0x00d3:0x00cb,\n0x00d4:0x00c8,\n0x00d5:None ,\n0x00d6:0x00cd,\n0x00d7:0x00ce,\n0x00d8:0x00cf,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x00a6,\n0x00de:0x00cc,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x00d4,\n0x00e3:0x00d2,\n0x00e4:0x00f5,\n0x00e5:0x00d5,\n0x00e6:0x00b5,\n0x00e7:None ,\n0x00e8:0x00d7,\n0x00e9:0x00da,\n0x00ea:0x00db,\n0x00eb:0x00d9,\n0x00ed:0x00ff,\n0x00ee:0x00af,\n0x00ef:0x00b4,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:None ,\n0x00f3:0x00be,\n0x00f4:0x00b6,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x00b8,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x00b7,\n0x00fb:0x00b9,\n0x00fc:0x00b3,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\u0131'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\u0130'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\u015e'\n'\\u015f'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\u011e'\n'\\u011f'\n'\\xbf'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\xc1'\n'\\xc2'\n'\\xc0'\n'\\xa9'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\xa2'\n'\\xa5'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\xe3'\n'\\xc3'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\xba'\n'\\xaa'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\ufffe'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\xa6'\n'\\xcc'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\xd4'\n'\\xd2'\n'\\xf5'\n'\\xd5'\n'\\xb5'\n'\\ufffe'\n'\\xd7'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\xec'\n'\\xff'\n'\\xaf'\n'\\xb4'\n'\\xad'\n'\\xb1'\n'\\ufffe'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x00bd,\n0x00a3:0x009c,\n0x00a4:0x00cf,\n0x00a5:0x00be,\n0x00a6:0x00dd,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00a9:0x00b8,\n0x00aa:0x00d1,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00ae:0x00a9,\n0x00af:0x00ee,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00fc,\n0x00b4:0x00ef,\n0x00b5:0x00e6,\n0x00b6:0x00f4,\n0x00b7:0x00fa,\n0x00b8:0x00f7,\n0x00b9:0x00fb,\n0x00ba:0x00d0,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00f3,\n0x00bf:0x00a8,\n0x00c0:0x00b7,\n0x00c1:0x00b5,\n0x00c2:0x00b6,\n0x00c3:0x00c7,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c8:0x00d4,\n0x00c9:0x0090,\n0x00ca:0x00d2,\n0x00cb:0x00d3,\n0x00cc:0x00de,\n0x00cd:0x00d6,\n0x00ce:0x00d7,\n0x00cf:0x00d8,\n0x00d1:0x00a5,\n0x00d2:0x00e3,\n0x00d3:0x00e0,\n0x00d4:0x00e2,\n0x00d5:0x00e5,\n0x00d6:0x0099,\n0x00d7:0x00e8,\n0x00d8:0x009d,\n0x00d9:0x00eb,\n0x00da:0x00e9,\n0x00db:0x00ea,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e3:0x00c6,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x00ec,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f5:0x00e4,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00ff:0x00ed,\n0x011e:0x00a6,\n0x011f:0x00a7,\n0x0130:0x0098,\n0x0131:0x008d,\n0x015e:0x009e,\n0x015f:0x009f,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp858":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp858',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x00ec,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00ff,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x00d7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x00ae,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x00c1,\n0x00b6:0x00c2,\n0x00b7:0x00c0,\n0x00b8:0x00a9,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x00a2,\n0x00be:0x00a5,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x00e3,\n0x00c7:0x00c3,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x00f0,\n0x00d1:0x00d0,\n0x00d2:0x00ca,\n0x00d3:0x00cb,\n0x00d4:0x00c8,\n0x00d5:0x20ac,\n0x00d6:0x00cd,\n0x00d7:0x00ce,\n0x00d8:0x00cf,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x00a6,\n0x00de:0x00cc,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x00d4,\n0x00e3:0x00d2,\n0x00e4:0x00f5,\n0x00e5:0x00d5,\n0x00e6:0x00b5,\n0x00e7:0x00fe,\n0x00e8:0x00de,\n0x00e9:0x00da,\n0x00ea:0x00db,\n0x00eb:0x00d9,\n0x00ec:0x00fd,\n0x00ed:0x00dd,\n0x00ee:0x00af,\n0x00ef:0x00b4,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:0x2017,\n0x00f3:0x00be,\n0x00f4:0x00b6,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x00b8,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x00b7,\n0x00fb:0x00b9,\n0x00fc:0x00b3,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\xec'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\xff'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\xd7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\xc1'\n'\\xc2'\n'\\xc0'\n'\\xa9'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\xa2'\n'\\xa5'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\xe3'\n'\\xc3'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\xf0'\n'\\xd0'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\u20ac'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\xa6'\n'\\xcc'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\xd4'\n'\\xd2'\n'\\xf5'\n'\\xd5'\n'\\xb5'\n'\\xfe'\n'\\xde'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\xfd'\n'\\xdd'\n'\\xaf'\n'\\xb4'\n'\\xad'\n'\\xb1'\n'\\u2017'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x00bd,\n0x00a3:0x009c,\n0x00a4:0x00cf,\n0x00a5:0x00be,\n0x00a6:0x00dd,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00a9:0x00b8,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00ae:0x00a9,\n0x00af:0x00ee,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00fc,\n0x00b4:0x00ef,\n0x00b5:0x00e6,\n0x00b6:0x00f4,\n0x00b7:0x00fa,\n0x00b8:0x00f7,\n0x00b9:0x00fb,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00f3,\n0x00bf:0x00a8,\n0x00c0:0x00b7,\n0x00c1:0x00b5,\n0x00c2:0x00b6,\n0x00c3:0x00c7,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c8:0x00d4,\n0x00c9:0x0090,\n0x00ca:0x00d2,\n0x00cb:0x00d3,\n0x00cc:0x00de,\n0x00cd:0x00d6,\n0x00ce:0x00d7,\n0x00cf:0x00d8,\n0x00d0:0x00d1,\n0x00d1:0x00a5,\n0x00d2:0x00e3,\n0x00d3:0x00e0,\n0x00d4:0x00e2,\n0x00d5:0x00e5,\n0x00d6:0x0099,\n0x00d7:0x009e,\n0x00d8:0x009d,\n0x00d9:0x00eb,\n0x00da:0x00e9,\n0x00db:0x00ea,\n0x00dc:0x009a,\n0x00dd:0x00ed,\n0x00de:0x00e8,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e3:0x00c6,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f0:0x00d0,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f5:0x00e4,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00fd:0x00ec,\n0x00fe:0x00e7,\n0x00ff:0x0098,\n0x20ac:0x00d5,\n0x0192:0x009f,\n0x2017:0x00f2,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp860":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp860',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e3,\n0x0085:0x00e0,\n0x0086:0x00c1,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00ca,\n0x008a:0x00e8,\n0x008b:0x00cd,\n0x008c:0x00d4,\n0x008d:0x00ec,\n0x008e:0x00c3,\n0x008f:0x00c2,\n0x0090:0x00c9,\n0x0091:0x00c0,\n0x0092:0x00c8,\n0x0093:0x00f4,\n0x0094:0x00f5,\n0x0095:0x00f2,\n0x0096:0x00da,\n0x0097:0x00f9,\n0x0098:0x00cc,\n0x0099:0x00d5,\n0x009a:0x00dc,\n0x009b:0x00a2,\n0x009c:0x00a3,\n0x009d:0x00d9,\n0x009e:0x20a7,\n0x009f:0x00d3,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x00d2,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe3'\n'\\xe0'\n'\\xc1'\n'\\xe7'\n'\\xea'\n'\\xca'\n'\\xe8'\n'\\xcd'\n'\\xd4'\n'\\xec'\n'\\xc3'\n'\\xc2'\n'\\xc9'\n'\\xc0'\n'\\xc8'\n'\\xf4'\n'\\xf5'\n'\\xf2'\n'\\xda'\n'\\xf9'\n'\\xcc'\n'\\xd5'\n'\\xdc'\n'\\xa2'\n'\\xa3'\n'\\xd9'\n'\\u20a7'\n'\\xd3'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\xd2'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x009b,\n0x00a3:0x009c,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b5:0x00e6,\n0x00b7:0x00fa,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00bf:0x00a8,\n0x00c0:0x0091,\n0x00c1:0x0086,\n0x00c2:0x008f,\n0x00c3:0x008e,\n0x00c7:0x0080,\n0x00c8:0x0092,\n0x00c9:0x0090,\n0x00ca:0x0089,\n0x00cc:0x0098,\n0x00cd:0x008b,\n0x00d1:0x00a5,\n0x00d2:0x00a9,\n0x00d3:0x009f,\n0x00d4:0x008c,\n0x00d5:0x0099,\n0x00d9:0x009d,\n0x00da:0x0096,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e3:0x0084,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f5:0x0094,\n0x00f7:0x00f6,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fc:0x0081,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x207f:0x00fc,\n0x20a7:0x009e,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp861":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp861',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00d0,\n0x008c:0x00f0,\n0x008d:0x00de,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00fe,\n0x0096:0x00fb,\n0x0097:0x00dd,\n0x0098:0x00fd,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x20a7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00c1,\n0x00a5:0x00cd,\n0x00a6:0x00d3,\n0x00a7:0x00da,\n0x00a8:0x00bf,\n0x00a9:0x2310,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xd0'\n'\\xf0'\n'\\xde'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xfe'\n'\\xfb'\n'\\xdd'\n'\\xfd'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\u20a7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xc1'\n'\\xcd'\n'\\xd3'\n'\\xda'\n'\\xbf'\n'\\u2310'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a3:0x009c,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b5:0x00e6,\n0x00b7:0x00fa,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00bf:0x00a8,\n0x00c1:0x00a4,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c9:0x0090,\n0x00cd:0x00a5,\n0x00d0:0x008b,\n0x00d3:0x00a6,\n0x00d6:0x0099,\n0x00d8:0x009d,\n0x00da:0x00a7,\n0x00dc:0x009a,\n0x00dd:0x0097,\n0x00de:0x008d,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ed:0x00a1,\n0x00f0:0x008c,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00fd:0x0098,\n0x00fe:0x0095,\n0x0192:0x009f,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x207f:0x00fc,\n0x20a7:0x009e,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2310:0x00a9,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp862":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp862',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x05d0,\n0x0081:0x05d1,\n0x0082:0x05d2,\n0x0083:0x05d3,\n0x0084:0x05d4,\n0x0085:0x05d5,\n0x0086:0x05d6,\n0x0087:0x05d7,\n0x0088:0x05d8,\n0x0089:0x05d9,\n0x008a:0x05da,\n0x008b:0x05db,\n0x008c:0x05dc,\n0x008d:0x05dd,\n0x008e:0x05de,\n0x008f:0x05df,\n0x0090:0x05e0,\n0x0091:0x05e1,\n0x0092:0x05e2,\n0x0093:0x05e3,\n0x0094:0x05e4,\n0x0095:0x05e5,\n0x0096:0x05e6,\n0x0097:0x05e7,\n0x0098:0x05e8,\n0x0099:0x05e9,\n0x009a:0x05ea,\n0x009b:0x00a2,\n0x009c:0x00a3,\n0x009d:0x00a5,\n0x009e:0x20a7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x2310,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\u05ea'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\u20a7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\u2310'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x009b,\n0x00a3:0x009c,\n0x00a5:0x009d,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b5:0x00e6,\n0x00b7:0x00fa,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00bf:0x00a8,\n0x00d1:0x00a5,\n0x00df:0x00e1,\n0x00e1:0x00a0,\n0x00ed:0x00a1,\n0x00f1:0x00a4,\n0x00f3:0x00a2,\n0x00f7:0x00f6,\n0x00fa:0x00a3,\n0x0192:0x009f,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x05d0:0x0080,\n0x05d1:0x0081,\n0x05d2:0x0082,\n0x05d3:0x0083,\n0x05d4:0x0084,\n0x05d5:0x0085,\n0x05d6:0x0086,\n0x05d7:0x0087,\n0x05d8:0x0088,\n0x05d9:0x0089,\n0x05da:0x008a,\n0x05db:0x008b,\n0x05dc:0x008c,\n0x05dd:0x008d,\n0x05de:0x008e,\n0x05df:0x008f,\n0x05e0:0x0090,\n0x05e1:0x0091,\n0x05e2:0x0092,\n0x05e3:0x0093,\n0x05e4:0x0094,\n0x05e5:0x0095,\n0x05e6:0x0096,\n0x05e7:0x0097,\n0x05e8:0x0098,\n0x05e9:0x0099,\n0x05ea:0x009a,\n0x207f:0x00fc,\n0x20a7:0x009e,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2310:0x00a9,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp863":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp863',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00c2,\n0x0085:0x00e0,\n0x0086:0x00b6,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x2017,\n0x008e:0x00c0,\n0x008f:0x00a7,\n0x0090:0x00c9,\n0x0091:0x00c8,\n0x0092:0x00ca,\n0x0093:0x00f4,\n0x0094:0x00cb,\n0x0095:0x00cf,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00a4,\n0x0099:0x00d4,\n0x009a:0x00dc,\n0x009b:0x00a2,\n0x009c:0x00a3,\n0x009d:0x00d9,\n0x009e:0x00db,\n0x009f:0x0192,\n0x00a0:0x00a6,\n0x00a1:0x00b4,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00a8,\n0x00a5:0x00b8,\n0x00a6:0x00b3,\n0x00a7:0x00af,\n0x00a8:0x00ce,\n0x00a9:0x2310,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00be,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xc2'\n'\\xe0'\n'\\xb6'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\u2017'\n'\\xc0'\n'\\xa7'\n'\\xc9'\n'\\xc8'\n'\\xca'\n'\\xf4'\n'\\xcb'\n'\\xcf'\n'\\xfb'\n'\\xf9'\n'\\xa4'\n'\\xd4'\n'\\xdc'\n'\\xa2'\n'\\xa3'\n'\\xd9'\n'\\xdb'\n'\\u0192'\n'\\xa6'\n'\\xb4'\n'\\xf3'\n'\\xfa'\n'\\xa8'\n'\\xb8'\n'\\xb3'\n'\\xaf'\n'\\xce'\n'\\u2310'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xbe'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a2:0x009b,\n0x00a3:0x009c,\n0x00a4:0x0098,\n0x00a6:0x00a0,\n0x00a7:0x008f,\n0x00a8:0x00a4,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00af:0x00a7,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00a6,\n0x00b4:0x00a1,\n0x00b5:0x00e6,\n0x00b6:0x0086,\n0x00b7:0x00fa,\n0x00b8:0x00a5,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00ad,\n0x00c0:0x008e,\n0x00c2:0x0084,\n0x00c7:0x0080,\n0x00c8:0x0091,\n0x00c9:0x0090,\n0x00ca:0x0092,\n0x00cb:0x0094,\n0x00ce:0x00a8,\n0x00cf:0x0095,\n0x00d4:0x0099,\n0x00d9:0x009d,\n0x00db:0x009e,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e2:0x0083,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f7:0x00f6,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x0192:0x009f,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x2017:0x008d,\n0x207f:0x00fc,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2310:0x00a9,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp864":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp864',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0025:0x066a,\n0x0080:0x00b0,\n0x0081:0x00b7,\n0x0082:0x2219,\n0x0083:0x221a,\n0x0084:0x2592,\n0x0085:0x2500,\n0x0086:0x2502,\n0x0087:0x253c,\n0x0088:0x2524,\n0x0089:0x252c,\n0x008a:0x251c,\n0x008b:0x2534,\n0x008c:0x2510,\n0x008d:0x250c,\n0x008e:0x2514,\n0x008f:0x2518,\n0x0090:0x03b2,\n0x0091:0x221e,\n0x0092:0x03c6,\n0x0093:0x00b1,\n0x0094:0x00bd,\n0x0095:0x00bc,\n0x0096:0x2248,\n0x0097:0x00ab,\n0x0098:0x00bb,\n0x0099:0xfef7,\n0x009a:0xfef8,\n0x009b:None ,\n0x009c:None ,\n0x009d:0xfefb,\n0x009e:0xfefc,\n0x009f:None ,\n0x00a1:0x00ad,\n0x00a2:0xfe82,\n0x00a5:0xfe84,\n0x00a6:None ,\n0x00a7:None ,\n0x00a8:0xfe8e,\n0x00a9:0xfe8f,\n0x00aa:0xfe95,\n0x00ab:0xfe99,\n0x00ac:0x060c,\n0x00ad:0xfe9d,\n0x00ae:0xfea1,\n0x00af:0xfea5,\n0x00b0:0x0660,\n0x00b1:0x0661,\n0x00b2:0x0662,\n0x00b3:0x0663,\n0x00b4:0x0664,\n0x00b5:0x0665,\n0x00b6:0x0666,\n0x00b7:0x0667,\n0x00b8:0x0668,\n0x00b9:0x0669,\n0x00ba:0xfed1,\n0x00bb:0x061b,\n0x00bc:0xfeb1,\n0x00bd:0xfeb5,\n0x00be:0xfeb9,\n0x00bf:0x061f,\n0x00c0:0x00a2,\n0x00c1:0xfe80,\n0x00c2:0xfe81,\n0x00c3:0xfe83,\n0x00c4:0xfe85,\n0x00c5:0xfeca,\n0x00c6:0xfe8b,\n0x00c7:0xfe8d,\n0x00c8:0xfe91,\n0x00c9:0xfe93,\n0x00ca:0xfe97,\n0x00cb:0xfe9b,\n0x00cc:0xfe9f,\n0x00cd:0xfea3,\n0x00ce:0xfea7,\n0x00cf:0xfea9,\n0x00d0:0xfeab,\n0x00d1:0xfead,\n0x00d2:0xfeaf,\n0x00d3:0xfeb3,\n0x00d4:0xfeb7,\n0x00d5:0xfebb,\n0x00d6:0xfebf,\n0x00d7:0xfec1,\n0x00d8:0xfec5,\n0x00d9:0xfecb,\n0x00da:0xfecf,\n0x00db:0x00a6,\n0x00dc:0x00ac,\n0x00dd:0x00f7,\n0x00de:0x00d7,\n0x00df:0xfec9,\n0x00e0:0x0640,\n0x00e1:0xfed3,\n0x00e2:0xfed7,\n0x00e3:0xfedb,\n0x00e4:0xfedf,\n0x00e5:0xfee3,\n0x00e6:0xfee7,\n0x00e7:0xfeeb,\n0x00e8:0xfeed,\n0x00e9:0xfeef,\n0x00ea:0xfef3,\n0x00eb:0xfebd,\n0x00ec:0xfecc,\n0x00ed:0xfece,\n0x00ee:0xfecd,\n0x00ef:0xfee1,\n0x00f0:0xfe7d,\n0x00f1:0x0651,\n0x00f2:0xfee5,\n0x00f3:0xfee9,\n0x00f4:0xfeec,\n0x00f5:0xfef0,\n0x00f6:0xfef2,\n0x00f7:0xfed0,\n0x00f8:0xfed5,\n0x00f9:0xfef5,\n0x00fa:0xfef6,\n0x00fb:0xfedd,\n0x00fc:0xfed9,\n0x00fd:0xfef1,\n0x00fe:0x25a0,\n0x00ff:None ,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'\\u066a'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xb0'\n'\\xb7'\n'\\u2219'\n'\\u221a'\n'\\u2592'\n'\\u2500'\n'\\u2502'\n'\\u253c'\n'\\u2524'\n'\\u252c'\n'\\u251c'\n'\\u2534'\n'\\u2510'\n'\\u250c'\n'\\u2514'\n'\\u2518'\n'\\u03b2'\n'\\u221e'\n'\\u03c6'\n'\\xb1'\n'\\xbd'\n'\\xbc'\n'\\u2248'\n'\\xab'\n'\\xbb'\n'\\ufef7'\n'\\ufef8'\n'\\ufffe'\n'\\ufffe'\n'\\ufefb'\n'\\ufefc'\n'\\ufffe'\n'\\xa0'\n'\\xad'\n'\\ufe82'\n'\\xa3'\n'\\xa4'\n'\\ufe84'\n'\\ufffe'\n'\\ufffe'\n'\\ufe8e'\n'\\ufe8f'\n'\\ufe95'\n'\\ufe99'\n'\\u060c'\n'\\ufe9d'\n'\\ufea1'\n'\\ufea5'\n'\\u0660'\n'\\u0661'\n'\\u0662'\n'\\u0663'\n'\\u0664'\n'\\u0665'\n'\\u0666'\n'\\u0667'\n'\\u0668'\n'\\u0669'\n'\\ufed1'\n'\\u061b'\n'\\ufeb1'\n'\\ufeb5'\n'\\ufeb9'\n'\\u061f'\n'\\xa2'\n'\\ufe80'\n'\\ufe81'\n'\\ufe83'\n'\\ufe85'\n'\\ufeca'\n'\\ufe8b'\n'\\ufe8d'\n'\\ufe91'\n'\\ufe93'\n'\\ufe97'\n'\\ufe9b'\n'\\ufe9f'\n'\\ufea3'\n'\\ufea7'\n'\\ufea9'\n'\\ufeab'\n'\\ufead'\n'\\ufeaf'\n'\\ufeb3'\n'\\ufeb7'\n'\\ufebb'\n'\\ufebf'\n'\\ufec1'\n'\\ufec5'\n'\\ufecb'\n'\\ufecf'\n'\\xa6'\n'\\xac'\n'\\xf7'\n'\\xd7'\n'\\ufec9'\n'\\u0640'\n'\\ufed3'\n'\\ufed7'\n'\\ufedb'\n'\\ufedf'\n'\\ufee3'\n'\\ufee7'\n'\\ufeeb'\n'\\ufeed'\n'\\ufeef'\n'\\ufef3'\n'\\ufebd'\n'\\ufecc'\n'\\ufece'\n'\\ufecd'\n'\\ufee1'\n'\\ufe7d'\n'\\u0651'\n'\\ufee5'\n'\\ufee9'\n'\\ufeec'\n'\\ufef0'\n'\\ufef2'\n'\\ufed0'\n'\\ufed5'\n'\\ufef5'\n'\\ufef6'\n'\\ufedd'\n'\\ufed9'\n'\\ufef1'\n'\\u25a0'\n'\\ufffe'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00a0,\n0x00a2:0x00c0,\n0x00a3:0x00a3,\n0x00a4:0x00a4,\n0x00a6:0x00db,\n0x00ab:0x0097,\n0x00ac:0x00dc,\n0x00ad:0x00a1,\n0x00b0:0x0080,\n0x00b1:0x0093,\n0x00b7:0x0081,\n0x00bb:0x0098,\n0x00bc:0x0095,\n0x00bd:0x0094,\n0x00d7:0x00de,\n0x00f7:0x00dd,\n0x03b2:0x0090,\n0x03c6:0x0092,\n0x060c:0x00ac,\n0x061b:0x00bb,\n0x061f:0x00bf,\n0x0640:0x00e0,\n0x0651:0x00f1,\n0x0660:0x00b0,\n0x0661:0x00b1,\n0x0662:0x00b2,\n0x0663:0x00b3,\n0x0664:0x00b4,\n0x0665:0x00b5,\n0x0666:0x00b6,\n0x0667:0x00b7,\n0x0668:0x00b8,\n0x0669:0x00b9,\n0x066a:0x0025,\n0x2219:0x0082,\n0x221a:0x0083,\n0x221e:0x0091,\n0x2248:0x0096,\n0x2500:0x0085,\n0x2502:0x0086,\n0x250c:0x008d,\n0x2510:0x008c,\n0x2514:0x008e,\n0x2518:0x008f,\n0x251c:0x008a,\n0x2524:0x0088,\n0x252c:0x0089,\n0x2534:0x008b,\n0x253c:0x0087,\n0x2592:0x0084,\n0x25a0:0x00fe,\n0xfe7d:0x00f0,\n0xfe80:0x00c1,\n0xfe81:0x00c2,\n0xfe82:0x00a2,\n0xfe83:0x00c3,\n0xfe84:0x00a5,\n0xfe85:0x00c4,\n0xfe8b:0x00c6,\n0xfe8d:0x00c7,\n0xfe8e:0x00a8,\n0xfe8f:0x00a9,\n0xfe91:0x00c8,\n0xfe93:0x00c9,\n0xfe95:0x00aa,\n0xfe97:0x00ca,\n0xfe99:0x00ab,\n0xfe9b:0x00cb,\n0xfe9d:0x00ad,\n0xfe9f:0x00cc,\n0xfea1:0x00ae,\n0xfea3:0x00cd,\n0xfea5:0x00af,\n0xfea7:0x00ce,\n0xfea9:0x00cf,\n0xfeab:0x00d0,\n0xfead:0x00d1,\n0xfeaf:0x00d2,\n0xfeb1:0x00bc,\n0xfeb3:0x00d3,\n0xfeb5:0x00bd,\n0xfeb7:0x00d4,\n0xfeb9:0x00be,\n0xfebb:0x00d5,\n0xfebd:0x00eb,\n0xfebf:0x00d6,\n0xfec1:0x00d7,\n0xfec5:0x00d8,\n0xfec9:0x00df,\n0xfeca:0x00c5,\n0xfecb:0x00d9,\n0xfecc:0x00ec,\n0xfecd:0x00ee,\n0xfece:0x00ed,\n0xfecf:0x00da,\n0xfed0:0x00f7,\n0xfed1:0x00ba,\n0xfed3:0x00e1,\n0xfed5:0x00f8,\n0xfed7:0x00e2,\n0xfed9:0x00fc,\n0xfedb:0x00e3,\n0xfedd:0x00fb,\n0xfedf:0x00e4,\n0xfee1:0x00ef,\n0xfee3:0x00e5,\n0xfee5:0x00f2,\n0xfee7:0x00e6,\n0xfee9:0x00f3,\n0xfeeb:0x00e7,\n0xfeec:0x00f4,\n0xfeed:0x00e8,\n0xfeef:0x00e9,\n0xfef0:0x00f5,\n0xfef1:0x00fd,\n0xfef2:0x00f6,\n0xfef3:0x00ea,\n0xfef5:0x00f9,\n0xfef6:0x00fa,\n0xfef7:0x0099,\n0xfef8:0x009a,\n0xfefb:0x009d,\n0xfefc:0x009e,\n}\n",["codecs"]],"encodings.cp865":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp865',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x00ec,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00ff,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x20a7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x2310,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00a4,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\xec'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\xff'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\u20a7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\u2310'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xa4'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a3:0x009c,\n0x00a4:0x00af,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b5:0x00e6,\n0x00b7:0x00fa,\n0x00ba:0x00a7,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00bf:0x00a8,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c9:0x0090,\n0x00d1:0x00a5,\n0x00d6:0x0099,\n0x00d8:0x009d,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00ff:0x0098,\n0x0192:0x009f,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x207f:0x00fc,\n0x20a7:0x009e,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2310:0x00a9,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp866":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp866',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0410,\n0x0081:0x0411,\n0x0082:0x0412,\n0x0083:0x0413,\n0x0084:0x0414,\n0x0085:0x0415,\n0x0086:0x0416,\n0x0087:0x0417,\n0x0088:0x0418,\n0x0089:0x0419,\n0x008a:0x041a,\n0x008b:0x041b,\n0x008c:0x041c,\n0x008d:0x041d,\n0x008e:0x041e,\n0x008f:0x041f,\n0x0090:0x0420,\n0x0091:0x0421,\n0x0092:0x0422,\n0x0093:0x0423,\n0x0094:0x0424,\n0x0095:0x0425,\n0x0096:0x0426,\n0x0097:0x0427,\n0x0098:0x0428,\n0x0099:0x0429,\n0x009a:0x042a,\n0x009b:0x042b,\n0x009c:0x042c,\n0x009d:0x042d,\n0x009e:0x042e,\n0x009f:0x042f,\n0x00a0:0x0430,\n0x00a1:0x0431,\n0x00a2:0x0432,\n0x00a3:0x0433,\n0x00a4:0x0434,\n0x00a5:0x0435,\n0x00a6:0x0436,\n0x00a7:0x0437,\n0x00a8:0x0438,\n0x00a9:0x0439,\n0x00aa:0x043a,\n0x00ab:0x043b,\n0x00ac:0x043c,\n0x00ad:0x043d,\n0x00ae:0x043e,\n0x00af:0x043f,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x0440,\n0x00e1:0x0441,\n0x00e2:0x0442,\n0x00e3:0x0443,\n0x00e4:0x0444,\n0x00e5:0x0445,\n0x00e6:0x0446,\n0x00e7:0x0447,\n0x00e8:0x0448,\n0x00e9:0x0449,\n0x00ea:0x044a,\n0x00eb:0x044b,\n0x00ec:0x044c,\n0x00ed:0x044d,\n0x00ee:0x044e,\n0x00ef:0x044f,\n0x00f0:0x0401,\n0x00f1:0x0451,\n0x00f2:0x0404,\n0x00f3:0x0454,\n0x00f4:0x0407,\n0x00f5:0x0457,\n0x00f6:0x040e,\n0x00f7:0x045e,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x2116,\n0x00fd:0x00a4,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n'\\u0401'\n'\\u0451'\n'\\u0404'\n'\\u0454'\n'\\u0407'\n'\\u0457'\n'\\u040e'\n'\\u045e'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u2116'\n'\\xa4'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a4:0x00fd,\n0x00b0:0x00f8,\n0x00b7:0x00fa,\n0x0401:0x00f0,\n0x0404:0x00f2,\n0x0407:0x00f4,\n0x040e:0x00f6,\n0x0410:0x0080,\n0x0411:0x0081,\n0x0412:0x0082,\n0x0413:0x0083,\n0x0414:0x0084,\n0x0415:0x0085,\n0x0416:0x0086,\n0x0417:0x0087,\n0x0418:0x0088,\n0x0419:0x0089,\n0x041a:0x008a,\n0x041b:0x008b,\n0x041c:0x008c,\n0x041d:0x008d,\n0x041e:0x008e,\n0x041f:0x008f,\n0x0420:0x0090,\n0x0421:0x0091,\n0x0422:0x0092,\n0x0423:0x0093,\n0x0424:0x0094,\n0x0425:0x0095,\n0x0426:0x0096,\n0x0427:0x0097,\n0x0428:0x0098,\n0x0429:0x0099,\n0x042a:0x009a,\n0x042b:0x009b,\n0x042c:0x009c,\n0x042d:0x009d,\n0x042e:0x009e,\n0x042f:0x009f,\n0x0430:0x00a0,\n0x0431:0x00a1,\n0x0432:0x00a2,\n0x0433:0x00a3,\n0x0434:0x00a4,\n0x0435:0x00a5,\n0x0436:0x00a6,\n0x0437:0x00a7,\n0x0438:0x00a8,\n0x0439:0x00a9,\n0x043a:0x00aa,\n0x043b:0x00ab,\n0x043c:0x00ac,\n0x043d:0x00ad,\n0x043e:0x00ae,\n0x043f:0x00af,\n0x0440:0x00e0,\n0x0441:0x00e1,\n0x0442:0x00e2,\n0x0443:0x00e3,\n0x0444:0x00e4,\n0x0445:0x00e5,\n0x0446:0x00e6,\n0x0447:0x00e7,\n0x0448:0x00e8,\n0x0449:0x00e9,\n0x044a:0x00ea,\n0x044b:0x00eb,\n0x044c:0x00ec,\n0x044d:0x00ed,\n0x044e:0x00ee,\n0x044f:0x00ef,\n0x0451:0x00f1,\n0x0454:0x00f3,\n0x0457:0x00f5,\n0x045e:0x00f7,\n0x2116:0x00fc,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp869":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp869',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:None ,\n0x0081:None ,\n0x0082:None ,\n0x0083:None ,\n0x0084:None ,\n0x0085:None ,\n0x0086:0x0386,\n0x0087:None ,\n0x0088:0x00b7,\n0x0089:0x00ac,\n0x008a:0x00a6,\n0x008b:0x2018,\n0x008c:0x2019,\n0x008d:0x0388,\n0x008e:0x2015,\n0x008f:0x0389,\n0x0090:0x038a,\n0x0091:0x03aa,\n0x0092:0x038c,\n0x0093:None ,\n0x0094:None ,\n0x0095:0x038e,\n0x0096:0x03ab,\n0x0097:0x00a9,\n0x0098:0x038f,\n0x0099:0x00b2,\n0x009a:0x00b3,\n0x009b:0x03ac,\n0x009c:0x00a3,\n0x009d:0x03ad,\n0x009e:0x03ae,\n0x009f:0x03af,\n0x00a0:0x03ca,\n0x00a1:0x0390,\n0x00a2:0x03cc,\n0x00a3:0x03cd,\n0x00a4:0x0391,\n0x00a5:0x0392,\n0x00a6:0x0393,\n0x00a7:0x0394,\n0x00a8:0x0395,\n0x00a9:0x0396,\n0x00aa:0x0397,\n0x00ab:0x00bd,\n0x00ac:0x0398,\n0x00ad:0x0399,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x039a,\n0x00b6:0x039b,\n0x00b7:0x039c,\n0x00b8:0x039d,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x039e,\n0x00be:0x039f,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x03a0,\n0x00c7:0x03a1,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x03a3,\n0x00d0:0x03a4,\n0x00d1:0x03a5,\n0x00d2:0x03a6,\n0x00d3:0x03a7,\n0x00d4:0x03a8,\n0x00d5:0x03a9,\n0x00d6:0x03b1,\n0x00d7:0x03b2,\n0x00d8:0x03b3,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x03b4,\n0x00de:0x03b5,\n0x00df:0x2580,\n0x00e0:0x03b6,\n0x00e1:0x03b7,\n0x00e2:0x03b8,\n0x00e3:0x03b9,\n0x00e4:0x03ba,\n0x00e5:0x03bb,\n0x00e6:0x03bc,\n0x00e7:0x03bd,\n0x00e8:0x03be,\n0x00e9:0x03bf,\n0x00ea:0x03c0,\n0x00eb:0x03c1,\n0x00ec:0x03c3,\n0x00ed:0x03c2,\n0x00ee:0x03c4,\n0x00ef:0x0384,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:0x03c5,\n0x00f3:0x03c6,\n0x00f4:0x03c7,\n0x00f5:0x00a7,\n0x00f6:0x03c8,\n0x00f7:0x0385,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x03c9,\n0x00fb:0x03cb,\n0x00fc:0x03b0,\n0x00fd:0x03ce,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0386'\n'\\ufffe'\n'\\xb7'\n'\\xac'\n'\\xa6'\n'\\u2018'\n'\\u2019'\n'\\u0388'\n'\\u2015'\n'\\u0389'\n'\\u038a'\n'\\u03aa'\n'\\u038c'\n'\\ufffe'\n'\\ufffe'\n'\\u038e'\n'\\u03ab'\n'\\xa9'\n'\\u038f'\n'\\xb2'\n'\\xb3'\n'\\u03ac'\n'\\xa3'\n'\\u03ad'\n'\\u03ae'\n'\\u03af'\n'\\u03ca'\n'\\u0390'\n'\\u03cc'\n'\\u03cd'\n'\\u0391'\n'\\u0392'\n'\\u0393'\n'\\u0394'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\xbd'\n'\\u0398'\n'\\u0399'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u039a'\n'\\u039b'\n'\\u039c'\n'\\u039d'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u039e'\n'\\u039f'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u03a0'\n'\\u03a1'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u03a3'\n'\\u03a4'\n'\\u03a5'\n'\\u03a6'\n'\\u03a7'\n'\\u03a8'\n'\\u03a9'\n'\\u03b1'\n'\\u03b2'\n'\\u03b3'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u03b4'\n'\\u03b5'\n'\\u2580'\n'\\u03b6'\n'\\u03b7'\n'\\u03b8'\n'\\u03b9'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\u03bd'\n'\\u03be'\n'\\u03bf'\n'\\u03c0'\n'\\u03c1'\n'\\u03c3'\n'\\u03c2'\n'\\u03c4'\n'\\u0384'\n'\\xad'\n'\\xb1'\n'\\u03c5'\n'\\u03c6'\n'\\u03c7'\n'\\xa7'\n'\\u03c8'\n'\\u0385'\n'\\xb0'\n'\\xa8'\n'\\u03c9'\n'\\u03cb'\n'\\u03b0'\n'\\u03ce'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a3:0x009c,\n0x00a6:0x008a,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00a9:0x0097,\n0x00ab:0x00ae,\n0x00ac:0x0089,\n0x00ad:0x00f0,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x0099,\n0x00b3:0x009a,\n0x00b7:0x0088,\n0x00bb:0x00af,\n0x00bd:0x00ab,\n0x0384:0x00ef,\n0x0385:0x00f7,\n0x0386:0x0086,\n0x0388:0x008d,\n0x0389:0x008f,\n0x038a:0x0090,\n0x038c:0x0092,\n0x038e:0x0095,\n0x038f:0x0098,\n0x0390:0x00a1,\n0x0391:0x00a4,\n0x0392:0x00a5,\n0x0393:0x00a6,\n0x0394:0x00a7,\n0x0395:0x00a8,\n0x0396:0x00a9,\n0x0397:0x00aa,\n0x0398:0x00ac,\n0x0399:0x00ad,\n0x039a:0x00b5,\n0x039b:0x00b6,\n0x039c:0x00b7,\n0x039d:0x00b8,\n0x039e:0x00bd,\n0x039f:0x00be,\n0x03a0:0x00c6,\n0x03a1:0x00c7,\n0x03a3:0x00cf,\n0x03a4:0x00d0,\n0x03a5:0x00d1,\n0x03a6:0x00d2,\n0x03a7:0x00d3,\n0x03a8:0x00d4,\n0x03a9:0x00d5,\n0x03aa:0x0091,\n0x03ab:0x0096,\n0x03ac:0x009b,\n0x03ad:0x009d,\n0x03ae:0x009e,\n0x03af:0x009f,\n0x03b0:0x00fc,\n0x03b1:0x00d6,\n0x03b2:0x00d7,\n0x03b3:0x00d8,\n0x03b4:0x00dd,\n0x03b5:0x00de,\n0x03b6:0x00e0,\n0x03b7:0x00e1,\n0x03b8:0x00e2,\n0x03b9:0x00e3,\n0x03ba:0x00e4,\n0x03bb:0x00e5,\n0x03bc:0x00e6,\n0x03bd:0x00e7,\n0x03be:0x00e8,\n0x03bf:0x00e9,\n0x03c0:0x00ea,\n0x03c1:0x00eb,\n0x03c2:0x00ed,\n0x03c3:0x00ec,\n0x03c4:0x00ee,\n0x03c5:0x00f2,\n0x03c6:0x00f3,\n0x03c7:0x00f4,\n0x03c8:0x00f6,\n0x03c9:0x00fa,\n0x03ca:0x00a0,\n0x03cb:0x00fb,\n0x03cc:0x00a2,\n0x03cd:0x00a3,\n0x03ce:0x00fd,\n0x2015:0x008e,\n0x2018:0x008b,\n0x2019:0x008c,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n",["codecs"]],"encodings.cp874":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp874',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2026'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa0'\n'\\u0e01'\n'\\u0e02'\n'\\u0e03'\n'\\u0e04'\n'\\u0e05'\n'\\u0e06'\n'\\u0e07'\n'\\u0e08'\n'\\u0e09'\n'\\u0e0a'\n'\\u0e0b'\n'\\u0e0c'\n'\\u0e0d'\n'\\u0e0e'\n'\\u0e0f'\n'\\u0e10'\n'\\u0e11'\n'\\u0e12'\n'\\u0e13'\n'\\u0e14'\n'\\u0e15'\n'\\u0e16'\n'\\u0e17'\n'\\u0e18'\n'\\u0e19'\n'\\u0e1a'\n'\\u0e1b'\n'\\u0e1c'\n'\\u0e1d'\n'\\u0e1e'\n'\\u0e1f'\n'\\u0e20'\n'\\u0e21'\n'\\u0e22'\n'\\u0e23'\n'\\u0e24'\n'\\u0e25'\n'\\u0e26'\n'\\u0e27'\n'\\u0e28'\n'\\u0e29'\n'\\u0e2a'\n'\\u0e2b'\n'\\u0e2c'\n'\\u0e2d'\n'\\u0e2e'\n'\\u0e2f'\n'\\u0e30'\n'\\u0e31'\n'\\u0e32'\n'\\u0e33'\n'\\u0e34'\n'\\u0e35'\n'\\u0e36'\n'\\u0e37'\n'\\u0e38'\n'\\u0e39'\n'\\u0e3a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0e3f'\n'\\u0e40'\n'\\u0e41'\n'\\u0e42'\n'\\u0e43'\n'\\u0e44'\n'\\u0e45'\n'\\u0e46'\n'\\u0e47'\n'\\u0e48'\n'\\u0e49'\n'\\u0e4a'\n'\\u0e4b'\n'\\u0e4c'\n'\\u0e4d'\n'\\u0e4e'\n'\\u0e4f'\n'\\u0e50'\n'\\u0e51'\n'\\u0e52'\n'\\u0e53'\n'\\u0e54'\n'\\u0e55'\n'\\u0e56'\n'\\u0e57'\n'\\u0e58'\n'\\u0e59'\n'\\u0e5a'\n'\\u0e5b'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.cp875":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp875',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\u0391'\n'\\u0392'\n'\\u0393'\n'\\u0394'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\u0398'\n'\\u0399'\n'['\n'.'\n'<'\n'('\n'+'\n'!'\n'&'\n'\\u039a'\n'\\u039b'\n'\\u039c'\n'\\u039d'\n'\\u039e'\n'\\u039f'\n'\\u03a0'\n'\\u03a1'\n'\\u03a3'\n']'\n'$'\n'*'\n')'\n';'\n'^'\n'-'\n'/'\n'\\u03a4'\n'\\u03a5'\n'\\u03a6'\n'\\u03a7'\n'\\u03a8'\n'\\u03a9'\n'\\u03aa'\n'\\u03ab'\n'|'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xa8'\n'\\u0386'\n'\\u0388'\n'\\u0389'\n'\\xa0'\n'\\u038a'\n'\\u038c'\n'\\u038e'\n'\\u038f'\n'`'\n':'\n'#'\n'@'\n\"'\"\n'='\n'\"'\n'\\u0385'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\u03b1'\n'\\u03b2'\n'\\u03b3'\n'\\u03b4'\n'\\u03b5'\n'\\u03b6'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\u03b7'\n'\\u03b8'\n'\\u03b9'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\xb4'\n'~'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\u03bd'\n'\\u03be'\n'\\u03bf'\n'\\u03c0'\n'\\u03c1'\n'\\u03c3'\n'\\xa3'\n'\\u03ac'\n'\\u03ad'\n'\\u03ae'\n'\\u03ca'\n'\\u03af'\n'\\u03cc'\n'\\u03cd'\n'\\u03cb'\n'\\u03ce'\n'\\u03c2'\n'\\u03c4'\n'\\u03c5'\n'\\u03c6'\n'\\u03c7'\n'\\u03c8'\n'{'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\u03c9'\n'\\u0390'\n'\\u03b0'\n'\\u2018'\n'\\u2015'\n'}'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb1'\n'\\xbd'\n'\\x1a'\n'\\u0387'\n'\\u2019'\n'\\xa6'\n'\\\\'\n'\\x1a'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xa7'\n'\\x1a'\n'\\x1a'\n'\\xab'\n'\\xac'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xa9'\n'\\x1a'\n'\\x1a'\n'\\xbb'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.hp_roman8":[".py","''\n\n\n\n\n\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='hp-roman8',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamwriter=StreamWriter,\n streamreader=StreamReader,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\xc0'\n'\\xc2'\n'\\xc8'\n'\\xca'\n'\\xcb'\n'\\xce'\n'\\xcf'\n'\\xb4'\n'\\u02cb'\n'\\u02c6'\n'\\xa8'\n'\\u02dc'\n'\\xd9'\n'\\xdb'\n'\\u20a4'\n'\\xaf'\n'\\xdd'\n'\\xfd'\n'\\xb0'\n'\\xc7'\n'\\xe7'\n'\\xd1'\n'\\xf1'\n'\\xa1'\n'\\xbf'\n'\\xa4'\n'\\xa3'\n'\\xa5'\n'\\xa7'\n'\\u0192'\n'\\xa2'\n'\\xe2'\n'\\xea'\n'\\xf4'\n'\\xfb'\n'\\xe1'\n'\\xe9'\n'\\xf3'\n'\\xfa'\n'\\xe0'\n'\\xe8'\n'\\xf2'\n'\\xf9'\n'\\xe4'\n'\\xeb'\n'\\xf6'\n'\\xfc'\n'\\xc5'\n'\\xee'\n'\\xd8'\n'\\xc6'\n'\\xe5'\n'\\xed'\n'\\xf8'\n'\\xe6'\n'\\xc4'\n'\\xec'\n'\\xd6'\n'\\xdc'\n'\\xc9'\n'\\xef'\n'\\xdf'\n'\\xd4'\n'\\xc1'\n'\\xc3'\n'\\xe3'\n'\\xd0'\n'\\xf0'\n'\\xcd'\n'\\xcc'\n'\\xd3'\n'\\xd2'\n'\\xd5'\n'\\xf5'\n'\\u0160'\n'\\u0161'\n'\\xda'\n'\\u0178'\n'\\xff'\n'\\xde'\n'\\xfe'\n'\\xb7'\n'\\xb5'\n'\\xb6'\n'\\xbe'\n'\\u2014'\n'\\xbc'\n'\\xbd'\n'\\xaa'\n'\\xba'\n'\\xab'\n'\\u25a0'\n'\\xbb'\n'\\xb1'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_1":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-1',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_10":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-10',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0104'\n'\\u0112'\n'\\u0122'\n'\\u012a'\n'\\u0128'\n'\\u0136'\n'\\xa7'\n'\\u013b'\n'\\u0110'\n'\\u0160'\n'\\u0166'\n'\\u017d'\n'\\xad'\n'\\u016a'\n'\\u014a'\n'\\xb0'\n'\\u0105'\n'\\u0113'\n'\\u0123'\n'\\u012b'\n'\\u0129'\n'\\u0137'\n'\\xb7'\n'\\u013c'\n'\\u0111'\n'\\u0161'\n'\\u0167'\n'\\u017e'\n'\\u2015'\n'\\u016b'\n'\\u014b'\n'\\u0100'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\u012e'\n'\\u010c'\n'\\xc9'\n'\\u0118'\n'\\xcb'\n'\\u0116'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\u0145'\n'\\u014c'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\u0168'\n'\\xd8'\n'\\u0172'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\u0101'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\u012f'\n'\\u010d'\n'\\xe9'\n'\\u0119'\n'\\xeb'\n'\\u0117'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\u0146'\n'\\u014d'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\u0169'\n'\\xf8'\n'\\u0173'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\u0138'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_11":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-11',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0e01'\n'\\u0e02'\n'\\u0e03'\n'\\u0e04'\n'\\u0e05'\n'\\u0e06'\n'\\u0e07'\n'\\u0e08'\n'\\u0e09'\n'\\u0e0a'\n'\\u0e0b'\n'\\u0e0c'\n'\\u0e0d'\n'\\u0e0e'\n'\\u0e0f'\n'\\u0e10'\n'\\u0e11'\n'\\u0e12'\n'\\u0e13'\n'\\u0e14'\n'\\u0e15'\n'\\u0e16'\n'\\u0e17'\n'\\u0e18'\n'\\u0e19'\n'\\u0e1a'\n'\\u0e1b'\n'\\u0e1c'\n'\\u0e1d'\n'\\u0e1e'\n'\\u0e1f'\n'\\u0e20'\n'\\u0e21'\n'\\u0e22'\n'\\u0e23'\n'\\u0e24'\n'\\u0e25'\n'\\u0e26'\n'\\u0e27'\n'\\u0e28'\n'\\u0e29'\n'\\u0e2a'\n'\\u0e2b'\n'\\u0e2c'\n'\\u0e2d'\n'\\u0e2e'\n'\\u0e2f'\n'\\u0e30'\n'\\u0e31'\n'\\u0e32'\n'\\u0e33'\n'\\u0e34'\n'\\u0e35'\n'\\u0e36'\n'\\u0e37'\n'\\u0e38'\n'\\u0e39'\n'\\u0e3a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0e3f'\n'\\u0e40'\n'\\u0e41'\n'\\u0e42'\n'\\u0e43'\n'\\u0e44'\n'\\u0e45'\n'\\u0e46'\n'\\u0e47'\n'\\u0e48'\n'\\u0e49'\n'\\u0e4a'\n'\\u0e4b'\n'\\u0e4c'\n'\\u0e4d'\n'\\u0e4e'\n'\\u0e4f'\n'\\u0e50'\n'\\u0e51'\n'\\u0e52'\n'\\u0e53'\n'\\u0e54'\n'\\u0e55'\n'\\u0e56'\n'\\u0e57'\n'\\u0e58'\n'\\u0e59'\n'\\u0e5a'\n'\\u0e5b'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_13":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-13',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u201d'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\u201e'\n'\\xa6'\n'\\xa7'\n'\\xd8'\n'\\xa9'\n'\\u0156'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xc6'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\u201c'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xf8'\n'\\xb9'\n'\\u0157'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xe6'\n'\\u0104'\n'\\u012e'\n'\\u0100'\n'\\u0106'\n'\\xc4'\n'\\xc5'\n'\\u0118'\n'\\u0112'\n'\\u010c'\n'\\xc9'\n'\\u0179'\n'\\u0116'\n'\\u0122'\n'\\u0136'\n'\\u012a'\n'\\u013b'\n'\\u0160'\n'\\u0143'\n'\\u0145'\n'\\xd3'\n'\\u014c'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\u0172'\n'\\u0141'\n'\\u015a'\n'\\u016a'\n'\\xdc'\n'\\u017b'\n'\\u017d'\n'\\xdf'\n'\\u0105'\n'\\u012f'\n'\\u0101'\n'\\u0107'\n'\\xe4'\n'\\xe5'\n'\\u0119'\n'\\u0113'\n'\\u010d'\n'\\xe9'\n'\\u017a'\n'\\u0117'\n'\\u0123'\n'\\u0137'\n'\\u012b'\n'\\u013c'\n'\\u0161'\n'\\u0144'\n'\\u0146'\n'\\xf3'\n'\\u014d'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\u0173'\n'\\u0142'\n'\\u015b'\n'\\u016b'\n'\\xfc'\n'\\u017c'\n'\\u017e'\n'\\u2019'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_14":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-14',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u1e02'\n'\\u1e03'\n'\\xa3'\n'\\u010a'\n'\\u010b'\n'\\u1e0a'\n'\\xa7'\n'\\u1e80'\n'\\xa9'\n'\\u1e82'\n'\\u1e0b'\n'\\u1ef2'\n'\\xad'\n'\\xae'\n'\\u0178'\n'\\u1e1e'\n'\\u1e1f'\n'\\u0120'\n'\\u0121'\n'\\u1e40'\n'\\u1e41'\n'\\xb6'\n'\\u1e56'\n'\\u1e81'\n'\\u1e57'\n'\\u1e83'\n'\\u1e60'\n'\\u1ef3'\n'\\u1e84'\n'\\u1e85'\n'\\u1e61'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u0174'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\u1e6a'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\u0176'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\u0175'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\u1e6b'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\u0177'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_15":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-15',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\u20ac'\n'\\xa5'\n'\\u0160'\n'\\xa7'\n'\\u0161'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\u017d'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\u017e'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\u0152'\n'\\u0153'\n'\\u0178'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_16":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-16',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0104'\n'\\u0105'\n'\\u0141'\n'\\u20ac'\n'\\u201e'\n'\\u0160'\n'\\xa7'\n'\\u0161'\n'\\xa9'\n'\\u0218'\n'\\xab'\n'\\u0179'\n'\\xad'\n'\\u017a'\n'\\u017b'\n'\\xb0'\n'\\xb1'\n'\\u010c'\n'\\u0142'\n'\\u017d'\n'\\u201d'\n'\\xb6'\n'\\xb7'\n'\\u017e'\n'\\u010d'\n'\\u0219'\n'\\xbb'\n'\\u0152'\n'\\u0153'\n'\\u0178'\n'\\u017c'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\u0102'\n'\\xc4'\n'\\u0106'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u0110'\n'\\u0143'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\u0150'\n'\\xd6'\n'\\u015a'\n'\\u0170'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u0118'\n'\\u021a'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\u0103'\n'\\xe4'\n'\\u0107'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\u0111'\n'\\u0144'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\u0151'\n'\\xf6'\n'\\u015b'\n'\\u0171'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u0119'\n'\\u021b'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_2":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-2',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0104'\n'\\u02d8'\n'\\u0141'\n'\\xa4'\n'\\u013d'\n'\\u015a'\n'\\xa7'\n'\\xa8'\n'\\u0160'\n'\\u015e'\n'\\u0164'\n'\\u0179'\n'\\xad'\n'\\u017d'\n'\\u017b'\n'\\xb0'\n'\\u0105'\n'\\u02db'\n'\\u0142'\n'\\xb4'\n'\\u013e'\n'\\u015b'\n'\\u02c7'\n'\\xb8'\n'\\u0161'\n'\\u015f'\n'\\u0165'\n'\\u017a'\n'\\u02dd'\n'\\u017e'\n'\\u017c'\n'\\u0154'\n'\\xc1'\n'\\xc2'\n'\\u0102'\n'\\xc4'\n'\\u0139'\n'\\u0106'\n'\\xc7'\n'\\u010c'\n'\\xc9'\n'\\u0118'\n'\\xcb'\n'\\u011a'\n'\\xcd'\n'\\xce'\n'\\u010e'\n'\\u0110'\n'\\u0143'\n'\\u0147'\n'\\xd3'\n'\\xd4'\n'\\u0150'\n'\\xd6'\n'\\xd7'\n'\\u0158'\n'\\u016e'\n'\\xda'\n'\\u0170'\n'\\xdc'\n'\\xdd'\n'\\u0162'\n'\\xdf'\n'\\u0155'\n'\\xe1'\n'\\xe2'\n'\\u0103'\n'\\xe4'\n'\\u013a'\n'\\u0107'\n'\\xe7'\n'\\u010d'\n'\\xe9'\n'\\u0119'\n'\\xeb'\n'\\u011b'\n'\\xed'\n'\\xee'\n'\\u010f'\n'\\u0111'\n'\\u0144'\n'\\u0148'\n'\\xf3'\n'\\xf4'\n'\\u0151'\n'\\xf6'\n'\\xf7'\n'\\u0159'\n'\\u016f'\n'\\xfa'\n'\\u0171'\n'\\xfc'\n'\\xfd'\n'\\u0163'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_3":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-3',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0126'\n'\\u02d8'\n'\\xa3'\n'\\xa4'\n'\\ufffe'\n'\\u0124'\n'\\xa7'\n'\\xa8'\n'\\u0130'\n'\\u015e'\n'\\u011e'\n'\\u0134'\n'\\xad'\n'\\ufffe'\n'\\u017b'\n'\\xb0'\n'\\u0127'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\u0125'\n'\\xb7'\n'\\xb8'\n'\\u0131'\n'\\u015f'\n'\\u011f'\n'\\u0135'\n'\\xbd'\n'\\ufffe'\n'\\u017c'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\ufffe'\n'\\xc4'\n'\\u010a'\n'\\u0108'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\ufffe'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\u0120'\n'\\xd6'\n'\\xd7'\n'\\u011c'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u016c'\n'\\u015c'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\ufffe'\n'\\xe4'\n'\\u010b'\n'\\u0109'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\ufffe'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\u0121'\n'\\xf6'\n'\\xf7'\n'\\u011d'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u016d'\n'\\u015d'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_4":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-4',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0104'\n'\\u0138'\n'\\u0156'\n'\\xa4'\n'\\u0128'\n'\\u013b'\n'\\xa7'\n'\\xa8'\n'\\u0160'\n'\\u0112'\n'\\u0122'\n'\\u0166'\n'\\xad'\n'\\u017d'\n'\\xaf'\n'\\xb0'\n'\\u0105'\n'\\u02db'\n'\\u0157'\n'\\xb4'\n'\\u0129'\n'\\u013c'\n'\\u02c7'\n'\\xb8'\n'\\u0161'\n'\\u0113'\n'\\u0123'\n'\\u0167'\n'\\u014a'\n'\\u017e'\n'\\u014b'\n'\\u0100'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\u012e'\n'\\u010c'\n'\\xc9'\n'\\u0118'\n'\\xcb'\n'\\u0116'\n'\\xcd'\n'\\xce'\n'\\u012a'\n'\\u0110'\n'\\u0145'\n'\\u014c'\n'\\u0136'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\u0172'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u0168'\n'\\u016a'\n'\\xdf'\n'\\u0101'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\u012f'\n'\\u010d'\n'\\xe9'\n'\\u0119'\n'\\xeb'\n'\\u0117'\n'\\xed'\n'\\xee'\n'\\u012b'\n'\\u0111'\n'\\u0146'\n'\\u014d'\n'\\u0137'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\u0173'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u0169'\n'\\u016b'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_5":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-5',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0401'\n'\\u0402'\n'\\u0403'\n'\\u0404'\n'\\u0405'\n'\\u0406'\n'\\u0407'\n'\\u0408'\n'\\u0409'\n'\\u040a'\n'\\u040b'\n'\\u040c'\n'\\xad'\n'\\u040e'\n'\\u040f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n'\\u2116'\n'\\u0451'\n'\\u0452'\n'\\u0453'\n'\\u0454'\n'\\u0455'\n'\\u0456'\n'\\u0457'\n'\\u0458'\n'\\u0459'\n'\\u045a'\n'\\u045b'\n'\\u045c'\n'\\xa7'\n'\\u045e'\n'\\u045f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_6":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-6',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa4'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u060c'\n'\\xad'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u061b'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u061f'\n'\\ufffe'\n'\\u0621'\n'\\u0622'\n'\\u0623'\n'\\u0624'\n'\\u0625'\n'\\u0626'\n'\\u0627'\n'\\u0628'\n'\\u0629'\n'\\u062a'\n'\\u062b'\n'\\u062c'\n'\\u062d'\n'\\u062e'\n'\\u062f'\n'\\u0630'\n'\\u0631'\n'\\u0632'\n'\\u0633'\n'\\u0634'\n'\\u0635'\n'\\u0636'\n'\\u0637'\n'\\u0638'\n'\\u0639'\n'\\u063a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0640'\n'\\u0641'\n'\\u0642'\n'\\u0643'\n'\\u0644'\n'\\u0645'\n'\\u0646'\n'\\u0647'\n'\\u0648'\n'\\u0649'\n'\\u064a'\n'\\u064b'\n'\\u064c'\n'\\u064d'\n'\\u064e'\n'\\u064f'\n'\\u0650'\n'\\u0651'\n'\\u0652'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_7":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-7',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u2018'\n'\\u2019'\n'\\xa3'\n'\\u20ac'\n'\\u20af'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\u037a'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\ufffe'\n'\\u2015'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\u0384'\n'\\u0385'\n'\\u0386'\n'\\xb7'\n'\\u0388'\n'\\u0389'\n'\\u038a'\n'\\xbb'\n'\\u038c'\n'\\xbd'\n'\\u038e'\n'\\u038f'\n'\\u0390'\n'\\u0391'\n'\\u0392'\n'\\u0393'\n'\\u0394'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\u0398'\n'\\u0399'\n'\\u039a'\n'\\u039b'\n'\\u039c'\n'\\u039d'\n'\\u039e'\n'\\u039f'\n'\\u03a0'\n'\\u03a1'\n'\\ufffe'\n'\\u03a3'\n'\\u03a4'\n'\\u03a5'\n'\\u03a6'\n'\\u03a7'\n'\\u03a8'\n'\\u03a9'\n'\\u03aa'\n'\\u03ab'\n'\\u03ac'\n'\\u03ad'\n'\\u03ae'\n'\\u03af'\n'\\u03b0'\n'\\u03b1'\n'\\u03b2'\n'\\u03b3'\n'\\u03b4'\n'\\u03b5'\n'\\u03b6'\n'\\u03b7'\n'\\u03b8'\n'\\u03b9'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\u03bd'\n'\\u03be'\n'\\u03bf'\n'\\u03c0'\n'\\u03c1'\n'\\u03c2'\n'\\u03c3'\n'\\u03c4'\n'\\u03c5'\n'\\u03c6'\n'\\u03c7'\n'\\u03c8'\n'\\u03c9'\n'\\u03ca'\n'\\u03cb'\n'\\u03cc'\n'\\u03cd'\n'\\u03ce'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_8":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-8',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\ufffe'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xd7'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xf7'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2017'\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\u05ea'\n'\\ufffe'\n'\\ufffe'\n'\\u200e'\n'\\u200f'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.iso8859_9":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-9',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u011e'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u0130'\n'\\u015e'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\u011f'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u0131'\n'\\u015f'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.koi8_r":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='koi8-r',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u2500'\n'\\u2502'\n'\\u250c'\n'\\u2510'\n'\\u2514'\n'\\u2518'\n'\\u251c'\n'\\u2524'\n'\\u252c'\n'\\u2534'\n'\\u253c'\n'\\u2580'\n'\\u2584'\n'\\u2588'\n'\\u258c'\n'\\u2590'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2320'\n'\\u25a0'\n'\\u2219'\n'\\u221a'\n'\\u2248'\n'\\u2264'\n'\\u2265'\n'\\xa0'\n'\\u2321'\n'\\xb0'\n'\\xb2'\n'\\xb7'\n'\\xf7'\n'\\u2550'\n'\\u2551'\n'\\u2552'\n'\\u0451'\n'\\u2553'\n'\\u2554'\n'\\u2555'\n'\\u2556'\n'\\u2557'\n'\\u2558'\n'\\u2559'\n'\\u255a'\n'\\u255b'\n'\\u255c'\n'\\u255d'\n'\\u255e'\n'\\u255f'\n'\\u2560'\n'\\u2561'\n'\\u0401'\n'\\u2562'\n'\\u2563'\n'\\u2564'\n'\\u2565'\n'\\u2566'\n'\\u2567'\n'\\u2568'\n'\\u2569'\n'\\u256a'\n'\\u256b'\n'\\u256c'\n'\\xa9'\n'\\u044e'\n'\\u0430'\n'\\u0431'\n'\\u0446'\n'\\u0434'\n'\\u0435'\n'\\u0444'\n'\\u0433'\n'\\u0445'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u044f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0436'\n'\\u0432'\n'\\u044c'\n'\\u044b'\n'\\u0437'\n'\\u0448'\n'\\u044d'\n'\\u0449'\n'\\u0447'\n'\\u044a'\n'\\u042e'\n'\\u0410'\n'\\u0411'\n'\\u0426'\n'\\u0414'\n'\\u0415'\n'\\u0424'\n'\\u0413'\n'\\u0425'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u042f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0416'\n'\\u0412'\n'\\u042c'\n'\\u042b'\n'\\u0417'\n'\\u0428'\n'\\u042d'\n'\\u0429'\n'\\u0427'\n'\\u042a'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.koi8_u":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='koi8-u',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u2500'\n'\\u2502'\n'\\u250c'\n'\\u2510'\n'\\u2514'\n'\\u2518'\n'\\u251c'\n'\\u2524'\n'\\u252c'\n'\\u2534'\n'\\u253c'\n'\\u2580'\n'\\u2584'\n'\\u2588'\n'\\u258c'\n'\\u2590'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2320'\n'\\u25a0'\n'\\u2219'\n'\\u221a'\n'\\u2248'\n'\\u2264'\n'\\u2265'\n'\\xa0'\n'\\u2321'\n'\\xb0'\n'\\xb2'\n'\\xb7'\n'\\xf7'\n'\\u2550'\n'\\u2551'\n'\\u2552'\n'\\u0451'\n'\\u0454'\n'\\u2554'\n'\\u0456'\n'\\u0457'\n'\\u2557'\n'\\u2558'\n'\\u2559'\n'\\u255a'\n'\\u255b'\n'\\u0491'\n'\\u255d'\n'\\u255e'\n'\\u255f'\n'\\u2560'\n'\\u2561'\n'\\u0401'\n'\\u0404'\n'\\u2563'\n'\\u0406'\n'\\u0407'\n'\\u2566'\n'\\u2567'\n'\\u2568'\n'\\u2569'\n'\\u256a'\n'\\u0490'\n'\\u256c'\n'\\xa9'\n'\\u044e'\n'\\u0430'\n'\\u0431'\n'\\u0446'\n'\\u0434'\n'\\u0435'\n'\\u0444'\n'\\u0433'\n'\\u0445'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u044f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0436'\n'\\u0432'\n'\\u044c'\n'\\u044b'\n'\\u0437'\n'\\u0448'\n'\\u044d'\n'\\u0449'\n'\\u0447'\n'\\u044a'\n'\\u042e'\n'\\u0410'\n'\\u0411'\n'\\u0426'\n'\\u0414'\n'\\u0415'\n'\\u0424'\n'\\u0413'\n'\\u0425'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u042f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0416'\n'\\u0412'\n'\\u042c'\n'\\u042b'\n'\\u0417'\n'\\u0428'\n'\\u042d'\n'\\u0429'\n'\\u0427'\n'\\u042a'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.mac_arabic":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-arabic',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c4,\n0x0081:0x00a0,\n0x0082:0x00c7,\n0x0083:0x00c9,\n0x0084:0x00d1,\n0x0085:0x00d6,\n0x0086:0x00dc,\n0x0087:0x00e1,\n0x0088:0x00e0,\n0x0089:0x00e2,\n0x008a:0x00e4,\n0x008b:0x06ba,\n0x008c:0x00ab,\n0x008d:0x00e7,\n0x008e:0x00e9,\n0x008f:0x00e8,\n0x0090:0x00ea,\n0x0091:0x00eb,\n0x0092:0x00ed,\n0x0093:0x2026,\n0x0094:0x00ee,\n0x0095:0x00ef,\n0x0096:0x00f1,\n0x0097:0x00f3,\n0x0098:0x00bb,\n0x0099:0x00f4,\n0x009a:0x00f6,\n0x009b:0x00f7,\n0x009c:0x00fa,\n0x009d:0x00f9,\n0x009e:0x00fb,\n0x009f:0x00fc,\n0x00a0:0x0020,\n0x00a1:0x0021,\n0x00a2:0x0022,\n0x00a3:0x0023,\n0x00a4:0x0024,\n0x00a5:0x066a,\n0x00a6:0x0026,\n0x00a7:0x0027,\n0x00a8:0x0028,\n0x00a9:0x0029,\n0x00aa:0x002a,\n0x00ab:0x002b,\n0x00ac:0x060c,\n0x00ad:0x002d,\n0x00ae:0x002e,\n0x00af:0x002f,\n0x00b0:0x0660,\n0x00b1:0x0661,\n0x00b2:0x0662,\n0x00b3:0x0663,\n0x00b4:0x0664,\n0x00b5:0x0665,\n0x00b6:0x0666,\n0x00b7:0x0667,\n0x00b8:0x0668,\n0x00b9:0x0669,\n0x00ba:0x003a,\n0x00bb:0x061b,\n0x00bc:0x003c,\n0x00bd:0x003d,\n0x00be:0x003e,\n0x00bf:0x061f,\n0x00c0:0x274a,\n0x00c1:0x0621,\n0x00c2:0x0622,\n0x00c3:0x0623,\n0x00c4:0x0624,\n0x00c5:0x0625,\n0x00c6:0x0626,\n0x00c7:0x0627,\n0x00c8:0x0628,\n0x00c9:0x0629,\n0x00ca:0x062a,\n0x00cb:0x062b,\n0x00cc:0x062c,\n0x00cd:0x062d,\n0x00ce:0x062e,\n0x00cf:0x062f,\n0x00d0:0x0630,\n0x00d1:0x0631,\n0x00d2:0x0632,\n0x00d3:0x0633,\n0x00d4:0x0634,\n0x00d5:0x0635,\n0x00d6:0x0636,\n0x00d7:0x0637,\n0x00d8:0x0638,\n0x00d9:0x0639,\n0x00da:0x063a,\n0x00db:0x005b,\n0x00dc:0x005c,\n0x00dd:0x005d,\n0x00de:0x005e,\n0x00df:0x005f,\n0x00e0:0x0640,\n0x00e1:0x0641,\n0x00e2:0x0642,\n0x00e3:0x0643,\n0x00e4:0x0644,\n0x00e5:0x0645,\n0x00e6:0x0646,\n0x00e7:0x0647,\n0x00e8:0x0648,\n0x00e9:0x0649,\n0x00ea:0x064a,\n0x00eb:0x064b,\n0x00ec:0x064c,\n0x00ed:0x064d,\n0x00ee:0x064e,\n0x00ef:0x064f,\n0x00f0:0x0650,\n0x00f1:0x0651,\n0x00f2:0x0652,\n0x00f3:0x067e,\n0x00f4:0x0679,\n0x00f5:0x0686,\n0x00f6:0x06d5,\n0x00f7:0x06a4,\n0x00f8:0x06af,\n0x00f9:0x0688,\n0x00fa:0x0691,\n0x00fb:0x007b,\n0x00fc:0x007c,\n0x00fd:0x007d,\n0x00fe:0x0698,\n0x00ff:0x06d2,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xa0'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\u06ba'\n'\\xab'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\u2026'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xbb'\n'\\xf4'\n'\\xf6'\n'\\xf7'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n' '\n'!'\n'\"'\n'#'\n'$'\n'\\u066a'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n'\\u060c'\n'-'\n'.'\n'/'\n'\\u0660'\n'\\u0661'\n'\\u0662'\n'\\u0663'\n'\\u0664'\n'\\u0665'\n'\\u0666'\n'\\u0667'\n'\\u0668'\n'\\u0669'\n':'\n'\\u061b'\n'<'\n'='\n'>'\n'\\u061f'\n'\\u274a'\n'\\u0621'\n'\\u0622'\n'\\u0623'\n'\\u0624'\n'\\u0625'\n'\\u0626'\n'\\u0627'\n'\\u0628'\n'\\u0629'\n'\\u062a'\n'\\u062b'\n'\\u062c'\n'\\u062d'\n'\\u062e'\n'\\u062f'\n'\\u0630'\n'\\u0631'\n'\\u0632'\n'\\u0633'\n'\\u0634'\n'\\u0635'\n'\\u0636'\n'\\u0637'\n'\\u0638'\n'\\u0639'\n'\\u063a'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'\\u0640'\n'\\u0641'\n'\\u0642'\n'\\u0643'\n'\\u0644'\n'\\u0645'\n'\\u0646'\n'\\u0647'\n'\\u0648'\n'\\u0649'\n'\\u064a'\n'\\u064b'\n'\\u064c'\n'\\u064d'\n'\\u064e'\n'\\u064f'\n'\\u0650'\n'\\u0651'\n'\\u0652'\n'\\u067e'\n'\\u0679'\n'\\u0686'\n'\\u06d5'\n'\\u06a4'\n'\\u06af'\n'\\u0688'\n'\\u0691'\n'{'\n'|'\n'}'\n'\\u0698'\n'\\u06d2'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0020:0x00a0,\n0x0021:0x0021,\n0x0021:0x00a1,\n0x0022:0x0022,\n0x0022:0x00a2,\n0x0023:0x0023,\n0x0023:0x00a3,\n0x0024:0x0024,\n0x0024:0x00a4,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0026:0x00a6,\n0x0027:0x0027,\n0x0027:0x00a7,\n0x0028:0x0028,\n0x0028:0x00a8,\n0x0029:0x0029,\n0x0029:0x00a9,\n0x002a:0x002a,\n0x002a:0x00aa,\n0x002b:0x002b,\n0x002b:0x00ab,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002d:0x00ad,\n0x002e:0x002e,\n0x002e:0x00ae,\n0x002f:0x002f,\n0x002f:0x00af,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003a:0x00ba,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003c:0x00bc,\n0x003d:0x003d,\n0x003d:0x00bd,\n0x003e:0x003e,\n0x003e:0x00be,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005b:0x00db,\n0x005c:0x005c,\n0x005c:0x00dc,\n0x005d:0x005d,\n0x005d:0x00dd,\n0x005e:0x005e,\n0x005e:0x00de,\n0x005f:0x005f,\n0x005f:0x00df,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007b:0x00fb,\n0x007c:0x007c,\n0x007c:0x00fc,\n0x007d:0x007d,\n0x007d:0x00fd,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x0081,\n0x00ab:0x008c,\n0x00bb:0x0098,\n0x00c4:0x0080,\n0x00c7:0x0082,\n0x00c9:0x0083,\n0x00d1:0x0084,\n0x00d6:0x0085,\n0x00dc:0x0086,\n0x00e0:0x0088,\n0x00e1:0x0087,\n0x00e2:0x0089,\n0x00e4:0x008a,\n0x00e7:0x008d,\n0x00e8:0x008f,\n0x00e9:0x008e,\n0x00ea:0x0090,\n0x00eb:0x0091,\n0x00ed:0x0092,\n0x00ee:0x0094,\n0x00ef:0x0095,\n0x00f1:0x0096,\n0x00f3:0x0097,\n0x00f4:0x0099,\n0x00f6:0x009a,\n0x00f7:0x009b,\n0x00f9:0x009d,\n0x00fa:0x009c,\n0x00fb:0x009e,\n0x00fc:0x009f,\n0x060c:0x00ac,\n0x061b:0x00bb,\n0x061f:0x00bf,\n0x0621:0x00c1,\n0x0622:0x00c2,\n0x0623:0x00c3,\n0x0624:0x00c4,\n0x0625:0x00c5,\n0x0626:0x00c6,\n0x0627:0x00c7,\n0x0628:0x00c8,\n0x0629:0x00c9,\n0x062a:0x00ca,\n0x062b:0x00cb,\n0x062c:0x00cc,\n0x062d:0x00cd,\n0x062e:0x00ce,\n0x062f:0x00cf,\n0x0630:0x00d0,\n0x0631:0x00d1,\n0x0632:0x00d2,\n0x0633:0x00d3,\n0x0634:0x00d4,\n0x0635:0x00d5,\n0x0636:0x00d6,\n0x0637:0x00d7,\n0x0638:0x00d8,\n0x0639:0x00d9,\n0x063a:0x00da,\n0x0640:0x00e0,\n0x0641:0x00e1,\n0x0642:0x00e2,\n0x0643:0x00e3,\n0x0644:0x00e4,\n0x0645:0x00e5,\n0x0646:0x00e6,\n0x0647:0x00e7,\n0x0648:0x00e8,\n0x0649:0x00e9,\n0x064a:0x00ea,\n0x064b:0x00eb,\n0x064c:0x00ec,\n0x064d:0x00ed,\n0x064e:0x00ee,\n0x064f:0x00ef,\n0x0650:0x00f0,\n0x0651:0x00f1,\n0x0652:0x00f2,\n0x0660:0x00b0,\n0x0661:0x00b1,\n0x0662:0x00b2,\n0x0663:0x00b3,\n0x0664:0x00b4,\n0x0665:0x00b5,\n0x0666:0x00b6,\n0x0667:0x00b7,\n0x0668:0x00b8,\n0x0669:0x00b9,\n0x066a:0x00a5,\n0x0679:0x00f4,\n0x067e:0x00f3,\n0x0686:0x00f5,\n0x0688:0x00f9,\n0x0691:0x00fa,\n0x0698:0x00fe,\n0x06a4:0x00f7,\n0x06af:0x00f8,\n0x06ba:0x008b,\n0x06d2:0x00ff,\n0x06d5:0x00f6,\n0x2026:0x0093,\n0x274a:0x00c0,\n}\n",["codecs"]],"encodings.mac_centeuro":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-centeuro',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\u0100'\n'\\u0101'\n'\\xc9'\n'\\u0104'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\u0105'\n'\\u010c'\n'\\xe4'\n'\\u010d'\n'\\u0106'\n'\\u0107'\n'\\xe9'\n'\\u0179'\n'\\u017a'\n'\\u010e'\n'\\xed'\n'\\u010f'\n'\\u0112'\n'\\u0113'\n'\\u0116'\n'\\xf3'\n'\\u0117'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\u011a'\n'\\u011b'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\u0118'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\u0119'\n'\\xa8'\n'\\u2260'\n'\\u0123'\n'\\u012e'\n'\\u012f'\n'\\u012a'\n'\\u2264'\n'\\u2265'\n'\\u012b'\n'\\u0136'\n'\\u2202'\n'\\u2211'\n'\\u0142'\n'\\u013b'\n'\\u013c'\n'\\u013d'\n'\\u013e'\n'\\u0139'\n'\\u013a'\n'\\u0145'\n'\\u0146'\n'\\u0143'\n'\\xac'\n'\\u221a'\n'\\u0144'\n'\\u0147'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\u0148'\n'\\u0150'\n'\\xd5'\n'\\u0151'\n'\\u014c'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\u014d'\n'\\u0154'\n'\\u0155'\n'\\u0158'\n'\\u2039'\n'\\u203a'\n'\\u0159'\n'\\u0156'\n'\\u0157'\n'\\u0160'\n'\\u201a'\n'\\u201e'\n'\\u0161'\n'\\u015a'\n'\\u015b'\n'\\xc1'\n'\\u0164'\n'\\u0165'\n'\\xcd'\n'\\u017d'\n'\\u017e'\n'\\u016a'\n'\\xd3'\n'\\xd4'\n'\\u016b'\n'\\u016e'\n'\\xda'\n'\\u016f'\n'\\u0170'\n'\\u0171'\n'\\u0172'\n'\\u0173'\n'\\xdd'\n'\\xfd'\n'\\u0137'\n'\\u017b'\n'\\u0141'\n'\\u017c'\n'\\u0122'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.mac_croatian":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-croatian',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\u0160'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\u017d'\n'\\xd8'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\u2206'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u0161'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\u017e'\n'\\xf8'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u0106'\n'\\xab'\n'\\u010c'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u0110'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\uf8ff'\n'\\xa9'\n'\\u2044'\n'\\u20ac'\n'\\u2039'\n'\\u203a'\n'\\xc6'\n'\\xbb'\n'\\u2013'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\u0107'\n'\\xc1'\n'\\u010d'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\u0111'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\u0131'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u03c0'\n'\\xcb'\n'\\u02da'\n'\\xb8'\n'\\xca'\n'\\xe6'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.mac_cyrillic":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-cyrillic',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u2020'\n'\\xb0'\n'\\u0490'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\u0406'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\u0402'\n'\\u0452'\n'\\u2260'\n'\\u0403'\n'\\u0453'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\u0456'\n'\\xb5'\n'\\u0491'\n'\\u0408'\n'\\u0404'\n'\\u0454'\n'\\u0407'\n'\\u0457'\n'\\u0409'\n'\\u0459'\n'\\u040a'\n'\\u045a'\n'\\u0458'\n'\\u0405'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\u040b'\n'\\u045b'\n'\\u040c'\n'\\u045c'\n'\\u0455'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u201e'\n'\\u040e'\n'\\u045e'\n'\\u040f'\n'\\u045f'\n'\\u2116'\n'\\u0401'\n'\\u0451'\n'\\u044f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u20ac'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.mac_farsi":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-farsi',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xa0'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\u06ba'\n'\\xab'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\u2026'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xbb'\n'\\xf4'\n'\\xf6'\n'\\xf7'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n' '\n'!'\n'\"'\n'#'\n'$'\n'\\u066a'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n'\\u060c'\n'-'\n'.'\n'/'\n'\\u06f0'\n'\\u06f1'\n'\\u06f2'\n'\\u06f3'\n'\\u06f4'\n'\\u06f5'\n'\\u06f6'\n'\\u06f7'\n'\\u06f8'\n'\\u06f9'\n':'\n'\\u061b'\n'<'\n'='\n'>'\n'\\u061f'\n'\\u274a'\n'\\u0621'\n'\\u0622'\n'\\u0623'\n'\\u0624'\n'\\u0625'\n'\\u0626'\n'\\u0627'\n'\\u0628'\n'\\u0629'\n'\\u062a'\n'\\u062b'\n'\\u062c'\n'\\u062d'\n'\\u062e'\n'\\u062f'\n'\\u0630'\n'\\u0631'\n'\\u0632'\n'\\u0633'\n'\\u0634'\n'\\u0635'\n'\\u0636'\n'\\u0637'\n'\\u0638'\n'\\u0639'\n'\\u063a'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'\\u0640'\n'\\u0641'\n'\\u0642'\n'\\u0643'\n'\\u0644'\n'\\u0645'\n'\\u0646'\n'\\u0647'\n'\\u0648'\n'\\u0649'\n'\\u064a'\n'\\u064b'\n'\\u064c'\n'\\u064d'\n'\\u064e'\n'\\u064f'\n'\\u0650'\n'\\u0651'\n'\\u0652'\n'\\u067e'\n'\\u0679'\n'\\u0686'\n'\\u06d5'\n'\\u06a4'\n'\\u06af'\n'\\u0688'\n'\\u0691'\n'{'\n'|'\n'}'\n'\\u0698'\n'\\u06d2'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.mac_greek":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-greek',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xb9'\n'\\xb2'\n'\\xc9'\n'\\xb3'\n'\\xd6'\n'\\xdc'\n'\\u0385'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\u0384'\n'\\xa8'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xa3'\n'\\u2122'\n'\\xee'\n'\\xef'\n'\\u2022'\n'\\xbd'\n'\\u2030'\n'\\xf4'\n'\\xf6'\n'\\xa6'\n'\\u20ac'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\u0393'\n'\\u0394'\n'\\u0398'\n'\\u039b'\n'\\u039e'\n'\\u03a0'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u03a3'\n'\\u03aa'\n'\\xa7'\n'\\u2260'\n'\\xb0'\n'\\xb7'\n'\\u0391'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\xa5'\n'\\u0392'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\u0399'\n'\\u039a'\n'\\u039c'\n'\\u03a6'\n'\\u03ab'\n'\\u03a8'\n'\\u03a9'\n'\\u03ac'\n'\\u039d'\n'\\xac'\n'\\u039f'\n'\\u03a1'\n'\\u2248'\n'\\u03a4'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\u03a5'\n'\\u03a7'\n'\\u0386'\n'\\u0388'\n'\\u0153'\n'\\u2013'\n'\\u2015'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u0389'\n'\\u038a'\n'\\u038c'\n'\\u038e'\n'\\u03ad'\n'\\u03ae'\n'\\u03af'\n'\\u03cc'\n'\\u038f'\n'\\u03cd'\n'\\u03b1'\n'\\u03b2'\n'\\u03c8'\n'\\u03b4'\n'\\u03b5'\n'\\u03c6'\n'\\u03b3'\n'\\u03b7'\n'\\u03b9'\n'\\u03be'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\u03bd'\n'\\u03bf'\n'\\u03c0'\n'\\u03ce'\n'\\u03c1'\n'\\u03c3'\n'\\u03c4'\n'\\u03b8'\n'\\u03c9'\n'\\u03c2'\n'\\u03c7'\n'\\u03c5'\n'\\u03b6'\n'\\u03ca'\n'\\u03cb'\n'\\u0390'\n'\\u03b0'\n'\\xad'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.mac_iceland":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-iceland',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\xdd'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\xc6'\n'\\xd8'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\xa5'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u03c0'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\xe6'\n'\\xf8'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\xff'\n'\\u0178'\n'\\u2044'\n'\\u20ac'\n'\\xd0'\n'\\xf0'\n'\\xde'\n'\\xfe'\n'\\xfd'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\xca'\n'\\xc1'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\uf8ff'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\u0131'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u02d8'\n'\\u02d9'\n'\\u02da'\n'\\xb8'\n'\\u02dd'\n'\\u02db'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.mac_latin2":[".py","''\n\n\n\n\n\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-latin2',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\u0100'\n'\\u0101'\n'\\xc9'\n'\\u0104'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\u0105'\n'\\u010c'\n'\\xe4'\n'\\u010d'\n'\\u0106'\n'\\u0107'\n'\\xe9'\n'\\u0179'\n'\\u017a'\n'\\u010e'\n'\\xed'\n'\\u010f'\n'\\u0112'\n'\\u0113'\n'\\u0116'\n'\\xf3'\n'\\u0117'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\u011a'\n'\\u011b'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\u0118'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\u0119'\n'\\xa8'\n'\\u2260'\n'\\u0123'\n'\\u012e'\n'\\u012f'\n'\\u012a'\n'\\u2264'\n'\\u2265'\n'\\u012b'\n'\\u0136'\n'\\u2202'\n'\\u2211'\n'\\u0142'\n'\\u013b'\n'\\u013c'\n'\\u013d'\n'\\u013e'\n'\\u0139'\n'\\u013a'\n'\\u0145'\n'\\u0146'\n'\\u0143'\n'\\xac'\n'\\u221a'\n'\\u0144'\n'\\u0147'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\u0148'\n'\\u0150'\n'\\xd5'\n'\\u0151'\n'\\u014c'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\u014d'\n'\\u0154'\n'\\u0155'\n'\\u0158'\n'\\u2039'\n'\\u203a'\n'\\u0159'\n'\\u0156'\n'\\u0157'\n'\\u0160'\n'\\u201a'\n'\\u201e'\n'\\u0161'\n'\\u015a'\n'\\u015b'\n'\\xc1'\n'\\u0164'\n'\\u0165'\n'\\xcd'\n'\\u017d'\n'\\u017e'\n'\\u016a'\n'\\xd3'\n'\\xd4'\n'\\u016b'\n'\\u016e'\n'\\xda'\n'\\u016f'\n'\\u0170'\n'\\u0171'\n'\\u0172'\n'\\u0173'\n'\\xdd'\n'\\xfd'\n'\\u0137'\n'\\u017b'\n'\\u0141'\n'\\u017c'\n'\\u0122'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.mac_roman":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-roman',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\xc6'\n'\\xd8'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\xa5'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u03c0'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\xe6'\n'\\xf8'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\xff'\n'\\u0178'\n'\\u2044'\n'\\u20ac'\n'\\u2039'\n'\\u203a'\n'\\ufb01'\n'\\ufb02'\n'\\u2021'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\xca'\n'\\xc1'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\uf8ff'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\u0131'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u02d8'\n'\\u02d9'\n'\\u02da'\n'\\xb8'\n'\\u02dd'\n'\\u02db'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.mac_romanian":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-romanian',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\u0102'\n'\\u0218'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\xa5'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u03c0'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\u0103'\n'\\u0219'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\xff'\n'\\u0178'\n'\\u2044'\n'\\u20ac'\n'\\u2039'\n'\\u203a'\n'\\u021a'\n'\\u021b'\n'\\u2021'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\xca'\n'\\xc1'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\uf8ff'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\u0131'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u02d8'\n'\\u02d9'\n'\\u02da'\n'\\xb8'\n'\\u02dd'\n'\\u02db'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.mac_turkish":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-turkish',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\xc6'\n'\\xd8'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\xa5'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u03c0'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\xe6'\n'\\xf8'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\xff'\n'\\u0178'\n'\\u011e'\n'\\u011f'\n'\\u0130'\n'\\u0131'\n'\\u015e'\n'\\u015f'\n'\\u2021'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\xca'\n'\\xc1'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\uf8ff'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\uf8a0'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u02d8'\n'\\u02d9'\n'\\u02da'\n'\\xb8'\n'\\u02dd'\n'\\u02db'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.palmos":[".py","''\n\n\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='palmos',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\x81'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\u0160'\n'\\u2039'\n'\\u0152'\n'\\u2666'\n'\\u2663'\n'\\u2665'\n'\\u2660'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\u0161'\n'\\x9b'\n'\\u0153'\n'\\x9d'\n'\\x9e'\n'\\u0178'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.ptcp154":[".py","''\n\n\n\n\n\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='ptcp154',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0496'\n'\\u0492'\n'\\u04ee'\n'\\u0493'\n'\\u201e'\n'\\u2026'\n'\\u04b6'\n'\\u04ae'\n'\\u04b2'\n'\\u04af'\n'\\u04a0'\n'\\u04e2'\n'\\u04a2'\n'\\u049a'\n'\\u04ba'\n'\\u04b8'\n'\\u0497'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u04b3'\n'\\u04b7'\n'\\u04a1'\n'\\u04e3'\n'\\u04a3'\n'\\u049b'\n'\\u04bb'\n'\\u04b9'\n'\\xa0'\n'\\u040e'\n'\\u045e'\n'\\u0408'\n'\\u04e8'\n'\\u0498'\n'\\u04b0'\n'\\xa7'\n'\\u0401'\n'\\xa9'\n'\\u04d8'\n'\\xab'\n'\\xac'\n'\\u04ef'\n'\\xae'\n'\\u049c'\n'\\xb0'\n'\\u04b1'\n'\\u0406'\n'\\u0456'\n'\\u0499'\n'\\u04e9'\n'\\xb6'\n'\\xb7'\n'\\u0451'\n'\\u2116'\n'\\u04d9'\n'\\xbb'\n'\\u0458'\n'\\u04aa'\n'\\u04ab'\n'\\u049d'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],"encodings.tis_620":[".py","''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='tis-620',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\ufffe'\n'\\u0e01'\n'\\u0e02'\n'\\u0e03'\n'\\u0e04'\n'\\u0e05'\n'\\u0e06'\n'\\u0e07'\n'\\u0e08'\n'\\u0e09'\n'\\u0e0a'\n'\\u0e0b'\n'\\u0e0c'\n'\\u0e0d'\n'\\u0e0e'\n'\\u0e0f'\n'\\u0e10'\n'\\u0e11'\n'\\u0e12'\n'\\u0e13'\n'\\u0e14'\n'\\u0e15'\n'\\u0e16'\n'\\u0e17'\n'\\u0e18'\n'\\u0e19'\n'\\u0e1a'\n'\\u0e1b'\n'\\u0e1c'\n'\\u0e1d'\n'\\u0e1e'\n'\\u0e1f'\n'\\u0e20'\n'\\u0e21'\n'\\u0e22'\n'\\u0e23'\n'\\u0e24'\n'\\u0e25'\n'\\u0e26'\n'\\u0e27'\n'\\u0e28'\n'\\u0e29'\n'\\u0e2a'\n'\\u0e2b'\n'\\u0e2c'\n'\\u0e2d'\n'\\u0e2e'\n'\\u0e2f'\n'\\u0e30'\n'\\u0e31'\n'\\u0e32'\n'\\u0e33'\n'\\u0e34'\n'\\u0e35'\n'\\u0e36'\n'\\u0e37'\n'\\u0e38'\n'\\u0e39'\n'\\u0e3a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0e3f'\n'\\u0e40'\n'\\u0e41'\n'\\u0e42'\n'\\u0e43'\n'\\u0e44'\n'\\u0e45'\n'\\u0e46'\n'\\u0e47'\n'\\u0e48'\n'\\u0e49'\n'\\u0e4a'\n'\\u0e4b'\n'\\u0e4c'\n'\\u0e4d'\n'\\u0e4e'\n'\\u0e4f'\n'\\u0e50'\n'\\u0e51'\n'\\u0e52'\n'\\u0e53'\n'\\u0e54'\n'\\u0e55'\n'\\u0e56'\n'\\u0e57'\n'\\u0e58'\n'\\u0e59'\n'\\u0e5a'\n'\\u0e5b'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n",["codecs"]],encodings:[".py","",[],1],"html.entities":[".py","''\n\n\nname2codepoint={\n'AElig':0x00c6,\n'Aacute':0x00c1,\n'Acirc':0x00c2,\n'Agrave':0x00c0,\n'Alpha':0x0391,\n'Aring':0x00c5,\n'Atilde':0x00c3,\n'Auml':0x00c4,\n'Beta':0x0392,\n'Ccedil':0x00c7,\n'Chi':0x03a7,\n'Dagger':0x2021,\n'Delta':0x0394,\n'ETH':0x00d0,\n'Eacute':0x00c9,\n'Ecirc':0x00ca,\n'Egrave':0x00c8,\n'Epsilon':0x0395,\n'Eta':0x0397,\n'Euml':0x00cb,\n'Gamma':0x0393,\n'Iacute':0x00cd,\n'Icirc':0x00ce,\n'Igrave':0x00cc,\n'Iota':0x0399,\n'Iuml':0x00cf,\n'Kappa':0x039a,\n'Lambda':0x039b,\n'Mu':0x039c,\n'Ntilde':0x00d1,\n'Nu':0x039d,\n'OElig':0x0152,\n'Oacute':0x00d3,\n'Ocirc':0x00d4,\n'Ograve':0x00d2,\n'Omega':0x03a9,\n'Omicron':0x039f,\n'Oslash':0x00d8,\n'Otilde':0x00d5,\n'Ouml':0x00d6,\n'Phi':0x03a6,\n'Pi':0x03a0,\n'Prime':0x2033,\n'Psi':0x03a8,\n'Rho':0x03a1,\n'Scaron':0x0160,\n'Sigma':0x03a3,\n'THORN':0x00de,\n'Tau':0x03a4,\n'Theta':0x0398,\n'Uacute':0x00da,\n'Ucirc':0x00db,\n'Ugrave':0x00d9,\n'Upsilon':0x03a5,\n'Uuml':0x00dc,\n'Xi':0x039e,\n'Yacute':0x00dd,\n'Yuml':0x0178,\n'Zeta':0x0396,\n'aacute':0x00e1,\n'acirc':0x00e2,\n'acute':0x00b4,\n'aelig':0x00e6,\n'agrave':0x00e0,\n'alefsym':0x2135,\n'alpha':0x03b1,\n'amp':0x0026,\n'and':0x2227,\n'ang':0x2220,\n'aring':0x00e5,\n'asymp':0x2248,\n'atilde':0x00e3,\n'auml':0x00e4,\n'bdquo':0x201e,\n'beta':0x03b2,\n'brvbar':0x00a6,\n'bull':0x2022,\n'cap':0x2229,\n'ccedil':0x00e7,\n'cedil':0x00b8,\n'cent':0x00a2,\n'chi':0x03c7,\n'circ':0x02c6,\n'clubs':0x2663,\n'cong':0x2245,\n'copy':0x00a9,\n'crarr':0x21b5,\n'cup':0x222a,\n'curren':0x00a4,\n'dArr':0x21d3,\n'dagger':0x2020,\n'darr':0x2193,\n'deg':0x00b0,\n'delta':0x03b4,\n'diams':0x2666,\n'divide':0x00f7,\n'eacute':0x00e9,\n'ecirc':0x00ea,\n'egrave':0x00e8,\n'empty':0x2205,\n'emsp':0x2003,\n'ensp':0x2002,\n'epsilon':0x03b5,\n'equiv':0x2261,\n'eta':0x03b7,\n'eth':0x00f0,\n'euml':0x00eb,\n'euro':0x20ac,\n'exist':0x2203,\n'fnof':0x0192,\n'forall':0x2200,\n'frac12':0x00bd,\n'frac14':0x00bc,\n'frac34':0x00be,\n'frasl':0x2044,\n'gamma':0x03b3,\n'ge':0x2265,\n'gt':0x003e,\n'hArr':0x21d4,\n'harr':0x2194,\n'hearts':0x2665,\n'hellip':0x2026,\n'iacute':0x00ed,\n'icirc':0x00ee,\n'iexcl':0x00a1,\n'igrave':0x00ec,\n'image':0x2111,\n'infin':0x221e,\n'int':0x222b,\n'iota':0x03b9,\n'iquest':0x00bf,\n'isin':0x2208,\n'iuml':0x00ef,\n'kappa':0x03ba,\n'lArr':0x21d0,\n'lambda':0x03bb,\n'lang':0x2329,\n'laquo':0x00ab,\n'larr':0x2190,\n'lceil':0x2308,\n'ldquo':0x201c,\n'le':0x2264,\n'lfloor':0x230a,\n'lowast':0x2217,\n'loz':0x25ca,\n'lrm':0x200e,\n'lsaquo':0x2039,\n'lsquo':0x2018,\n'lt':0x003c,\n'macr':0x00af,\n'mdash':0x2014,\n'micro':0x00b5,\n'middot':0x00b7,\n'minus':0x2212,\n'mu':0x03bc,\n'nabla':0x2207,\n'nbsp':0x00a0,\n'ndash':0x2013,\n'ne':0x2260,\n'ni':0x220b,\n'not':0x00ac,\n'notin':0x2209,\n'nsub':0x2284,\n'ntilde':0x00f1,\n'nu':0x03bd,\n'oacute':0x00f3,\n'ocirc':0x00f4,\n'oelig':0x0153,\n'ograve':0x00f2,\n'oline':0x203e,\n'omega':0x03c9,\n'omicron':0x03bf,\n'oplus':0x2295,\n'or':0x2228,\n'ordf':0x00aa,\n'ordm':0x00ba,\n'oslash':0x00f8,\n'otilde':0x00f5,\n'otimes':0x2297,\n'ouml':0x00f6,\n'para':0x00b6,\n'part':0x2202,\n'permil':0x2030,\n'perp':0x22a5,\n'phi':0x03c6,\n'pi':0x03c0,\n'piv':0x03d6,\n'plusmn':0x00b1,\n'pound':0x00a3,\n'prime':0x2032,\n'prod':0x220f,\n'prop':0x221d,\n'psi':0x03c8,\n'quot':0x0022,\n'rArr':0x21d2,\n'radic':0x221a,\n'rang':0x232a,\n'raquo':0x00bb,\n'rarr':0x2192,\n'rceil':0x2309,\n'rdquo':0x201d,\n'real':0x211c,\n'reg':0x00ae,\n'rfloor':0x230b,\n'rho':0x03c1,\n'rlm':0x200f,\n'rsaquo':0x203a,\n'rsquo':0x2019,\n'sbquo':0x201a,\n'scaron':0x0161,\n'sdot':0x22c5,\n'sect':0x00a7,\n'shy':0x00ad,\n'sigma':0x03c3,\n'sigmaf':0x03c2,\n'sim':0x223c,\n'spades':0x2660,\n'sub':0x2282,\n'sube':0x2286,\n'sum':0x2211,\n'sup':0x2283,\n'sup1':0x00b9,\n'sup2':0x00b2,\n'sup3':0x00b3,\n'supe':0x2287,\n'szlig':0x00df,\n'tau':0x03c4,\n'there4':0x2234,\n'theta':0x03b8,\n'thetasym':0x03d1,\n'thinsp':0x2009,\n'thorn':0x00fe,\n'tilde':0x02dc,\n'times':0x00d7,\n'trade':0x2122,\n'uArr':0x21d1,\n'uacute':0x00fa,\n'uarr':0x2191,\n'ucirc':0x00fb,\n'ugrave':0x00f9,\n'uml':0x00a8,\n'upsih':0x03d2,\n'upsilon':0x03c5,\n'uuml':0x00fc,\n'weierp':0x2118,\n'xi':0x03be,\n'yacute':0x00fd,\n'yen':0x00a5,\n'yuml':0x00ff,\n'zeta':0x03b6,\n'zwj':0x200d,\n'zwnj':0x200c,\n}\n\n\n\nhtml5={\n'Aacute':'\\xc1',\n'aacute':'\\xe1',\n'Aacute;':'\\xc1',\n'aacute;':'\\xe1',\n'Abreve;':'\\u0102',\n'abreve;':'\\u0103',\n'ac;':'\\u223e',\n'acd;':'\\u223f',\n'acE;':'\\u223e\\u0333',\n'Acirc':'\\xc2',\n'acirc':'\\xe2',\n'Acirc;':'\\xc2',\n'acirc;':'\\xe2',\n'acute':'\\xb4',\n'acute;':'\\xb4',\n'Acy;':'\\u0410',\n'acy;':'\\u0430',\n'AElig':'\\xc6',\n'aelig':'\\xe6',\n'AElig;':'\\xc6',\n'aelig;':'\\xe6',\n'af;':'\\u2061',\n'Afr;':'\\U0001d504',\n'afr;':'\\U0001d51e',\n'Agrave':'\\xc0',\n'agrave':'\\xe0',\n'Agrave;':'\\xc0',\n'agrave;':'\\xe0',\n'alefsym;':'\\u2135',\n'aleph;':'\\u2135',\n'Alpha;':'\\u0391',\n'alpha;':'\\u03b1',\n'Amacr;':'\\u0100',\n'amacr;':'\\u0101',\n'amalg;':'\\u2a3f',\n'AMP':'&',\n'amp':'&',\n'AMP;':'&',\n'amp;':'&',\n'And;':'\\u2a53',\n'and;':'\\u2227',\n'andand;':'\\u2a55',\n'andd;':'\\u2a5c',\n'andslope;':'\\u2a58',\n'andv;':'\\u2a5a',\n'ang;':'\\u2220',\n'ange;':'\\u29a4',\n'angle;':'\\u2220',\n'angmsd;':'\\u2221',\n'angmsdaa;':'\\u29a8',\n'angmsdab;':'\\u29a9',\n'angmsdac;':'\\u29aa',\n'angmsdad;':'\\u29ab',\n'angmsdae;':'\\u29ac',\n'angmsdaf;':'\\u29ad',\n'angmsdag;':'\\u29ae',\n'angmsdah;':'\\u29af',\n'angrt;':'\\u221f',\n'angrtvb;':'\\u22be',\n'angrtvbd;':'\\u299d',\n'angsph;':'\\u2222',\n'angst;':'\\xc5',\n'angzarr;':'\\u237c',\n'Aogon;':'\\u0104',\n'aogon;':'\\u0105',\n'Aopf;':'\\U0001d538',\n'aopf;':'\\U0001d552',\n'ap;':'\\u2248',\n'apacir;':'\\u2a6f',\n'apE;':'\\u2a70',\n'ape;':'\\u224a',\n'apid;':'\\u224b',\n'apos;':\"'\",\n'ApplyFunction;':'\\u2061',\n'approx;':'\\u2248',\n'approxeq;':'\\u224a',\n'Aring':'\\xc5',\n'aring':'\\xe5',\n'Aring;':'\\xc5',\n'aring;':'\\xe5',\n'Ascr;':'\\U0001d49c',\n'ascr;':'\\U0001d4b6',\n'Assign;':'\\u2254',\n'ast;':'*',\n'asymp;':'\\u2248',\n'asympeq;':'\\u224d',\n'Atilde':'\\xc3',\n'atilde':'\\xe3',\n'Atilde;':'\\xc3',\n'atilde;':'\\xe3',\n'Auml':'\\xc4',\n'auml':'\\xe4',\n'Auml;':'\\xc4',\n'auml;':'\\xe4',\n'awconint;':'\\u2233',\n'awint;':'\\u2a11',\n'backcong;':'\\u224c',\n'backepsilon;':'\\u03f6',\n'backprime;':'\\u2035',\n'backsim;':'\\u223d',\n'backsimeq;':'\\u22cd',\n'Backslash;':'\\u2216',\n'Barv;':'\\u2ae7',\n'barvee;':'\\u22bd',\n'Barwed;':'\\u2306',\n'barwed;':'\\u2305',\n'barwedge;':'\\u2305',\n'bbrk;':'\\u23b5',\n'bbrktbrk;':'\\u23b6',\n'bcong;':'\\u224c',\n'Bcy;':'\\u0411',\n'bcy;':'\\u0431',\n'bdquo;':'\\u201e',\n'becaus;':'\\u2235',\n'Because;':'\\u2235',\n'because;':'\\u2235',\n'bemptyv;':'\\u29b0',\n'bepsi;':'\\u03f6',\n'bernou;':'\\u212c',\n'Bernoullis;':'\\u212c',\n'Beta;':'\\u0392',\n'beta;':'\\u03b2',\n'beth;':'\\u2136',\n'between;':'\\u226c',\n'Bfr;':'\\U0001d505',\n'bfr;':'\\U0001d51f',\n'bigcap;':'\\u22c2',\n'bigcirc;':'\\u25ef',\n'bigcup;':'\\u22c3',\n'bigodot;':'\\u2a00',\n'bigoplus;':'\\u2a01',\n'bigotimes;':'\\u2a02',\n'bigsqcup;':'\\u2a06',\n'bigstar;':'\\u2605',\n'bigtriangledown;':'\\u25bd',\n'bigtriangleup;':'\\u25b3',\n'biguplus;':'\\u2a04',\n'bigvee;':'\\u22c1',\n'bigwedge;':'\\u22c0',\n'bkarow;':'\\u290d',\n'blacklozenge;':'\\u29eb',\n'blacksquare;':'\\u25aa',\n'blacktriangle;':'\\u25b4',\n'blacktriangledown;':'\\u25be',\n'blacktriangleleft;':'\\u25c2',\n'blacktriangleright;':'\\u25b8',\n'blank;':'\\u2423',\n'blk12;':'\\u2592',\n'blk14;':'\\u2591',\n'blk34;':'\\u2593',\n'block;':'\\u2588',\n'bne;':'=\\u20e5',\n'bnequiv;':'\\u2261\\u20e5',\n'bNot;':'\\u2aed',\n'bnot;':'\\u2310',\n'Bopf;':'\\U0001d539',\n'bopf;':'\\U0001d553',\n'bot;':'\\u22a5',\n'bottom;':'\\u22a5',\n'bowtie;':'\\u22c8',\n'boxbox;':'\\u29c9',\n'boxDL;':'\\u2557',\n'boxDl;':'\\u2556',\n'boxdL;':'\\u2555',\n'boxdl;':'\\u2510',\n'boxDR;':'\\u2554',\n'boxDr;':'\\u2553',\n'boxdR;':'\\u2552',\n'boxdr;':'\\u250c',\n'boxH;':'\\u2550',\n'boxh;':'\\u2500',\n'boxHD;':'\\u2566',\n'boxHd;':'\\u2564',\n'boxhD;':'\\u2565',\n'boxhd;':'\\u252c',\n'boxHU;':'\\u2569',\n'boxHu;':'\\u2567',\n'boxhU;':'\\u2568',\n'boxhu;':'\\u2534',\n'boxminus;':'\\u229f',\n'boxplus;':'\\u229e',\n'boxtimes;':'\\u22a0',\n'boxUL;':'\\u255d',\n'boxUl;':'\\u255c',\n'boxuL;':'\\u255b',\n'boxul;':'\\u2518',\n'boxUR;':'\\u255a',\n'boxUr;':'\\u2559',\n'boxuR;':'\\u2558',\n'boxur;':'\\u2514',\n'boxV;':'\\u2551',\n'boxv;':'\\u2502',\n'boxVH;':'\\u256c',\n'boxVh;':'\\u256b',\n'boxvH;':'\\u256a',\n'boxvh;':'\\u253c',\n'boxVL;':'\\u2563',\n'boxVl;':'\\u2562',\n'boxvL;':'\\u2561',\n'boxvl;':'\\u2524',\n'boxVR;':'\\u2560',\n'boxVr;':'\\u255f',\n'boxvR;':'\\u255e',\n'boxvr;':'\\u251c',\n'bprime;':'\\u2035',\n'Breve;':'\\u02d8',\n'breve;':'\\u02d8',\n'brvbar':'\\xa6',\n'brvbar;':'\\xa6',\n'Bscr;':'\\u212c',\n'bscr;':'\\U0001d4b7',\n'bsemi;':'\\u204f',\n'bsim;':'\\u223d',\n'bsime;':'\\u22cd',\n'bsol;':'\\\\',\n'bsolb;':'\\u29c5',\n'bsolhsub;':'\\u27c8',\n'bull;':'\\u2022',\n'bullet;':'\\u2022',\n'bump;':'\\u224e',\n'bumpE;':'\\u2aae',\n'bumpe;':'\\u224f',\n'Bumpeq;':'\\u224e',\n'bumpeq;':'\\u224f',\n'Cacute;':'\\u0106',\n'cacute;':'\\u0107',\n'Cap;':'\\u22d2',\n'cap;':'\\u2229',\n'capand;':'\\u2a44',\n'capbrcup;':'\\u2a49',\n'capcap;':'\\u2a4b',\n'capcup;':'\\u2a47',\n'capdot;':'\\u2a40',\n'CapitalDifferentialD;':'\\u2145',\n'caps;':'\\u2229\\ufe00',\n'caret;':'\\u2041',\n'caron;':'\\u02c7',\n'Cayleys;':'\\u212d',\n'ccaps;':'\\u2a4d',\n'Ccaron;':'\\u010c',\n'ccaron;':'\\u010d',\n'Ccedil':'\\xc7',\n'ccedil':'\\xe7',\n'Ccedil;':'\\xc7',\n'ccedil;':'\\xe7',\n'Ccirc;':'\\u0108',\n'ccirc;':'\\u0109',\n'Cconint;':'\\u2230',\n'ccups;':'\\u2a4c',\n'ccupssm;':'\\u2a50',\n'Cdot;':'\\u010a',\n'cdot;':'\\u010b',\n'cedil':'\\xb8',\n'cedil;':'\\xb8',\n'Cedilla;':'\\xb8',\n'cemptyv;':'\\u29b2',\n'cent':'\\xa2',\n'cent;':'\\xa2',\n'CenterDot;':'\\xb7',\n'centerdot;':'\\xb7',\n'Cfr;':'\\u212d',\n'cfr;':'\\U0001d520',\n'CHcy;':'\\u0427',\n'chcy;':'\\u0447',\n'check;':'\\u2713',\n'checkmark;':'\\u2713',\n'Chi;':'\\u03a7',\n'chi;':'\\u03c7',\n'cir;':'\\u25cb',\n'circ;':'\\u02c6',\n'circeq;':'\\u2257',\n'circlearrowleft;':'\\u21ba',\n'circlearrowright;':'\\u21bb',\n'circledast;':'\\u229b',\n'circledcirc;':'\\u229a',\n'circleddash;':'\\u229d',\n'CircleDot;':'\\u2299',\n'circledR;':'\\xae',\n'circledS;':'\\u24c8',\n'CircleMinus;':'\\u2296',\n'CirclePlus;':'\\u2295',\n'CircleTimes;':'\\u2297',\n'cirE;':'\\u29c3',\n'cire;':'\\u2257',\n'cirfnint;':'\\u2a10',\n'cirmid;':'\\u2aef',\n'cirscir;':'\\u29c2',\n'ClockwiseContourIntegral;':'\\u2232',\n'CloseCurlyDoubleQuote;':'\\u201d',\n'CloseCurlyQuote;':'\\u2019',\n'clubs;':'\\u2663',\n'clubsuit;':'\\u2663',\n'Colon;':'\\u2237',\n'colon;':':',\n'Colone;':'\\u2a74',\n'colone;':'\\u2254',\n'coloneq;':'\\u2254',\n'comma;':',',\n'commat;':'@',\n'comp;':'\\u2201',\n'compfn;':'\\u2218',\n'complement;':'\\u2201',\n'complexes;':'\\u2102',\n'cong;':'\\u2245',\n'congdot;':'\\u2a6d',\n'Congruent;':'\\u2261',\n'Conint;':'\\u222f',\n'conint;':'\\u222e',\n'ContourIntegral;':'\\u222e',\n'Copf;':'\\u2102',\n'copf;':'\\U0001d554',\n'coprod;':'\\u2210',\n'Coproduct;':'\\u2210',\n'COPY':'\\xa9',\n'copy':'\\xa9',\n'COPY;':'\\xa9',\n'copy;':'\\xa9',\n'copysr;':'\\u2117',\n'CounterClockwiseContourIntegral;':'\\u2233',\n'crarr;':'\\u21b5',\n'Cross;':'\\u2a2f',\n'cross;':'\\u2717',\n'Cscr;':'\\U0001d49e',\n'cscr;':'\\U0001d4b8',\n'csub;':'\\u2acf',\n'csube;':'\\u2ad1',\n'csup;':'\\u2ad0',\n'csupe;':'\\u2ad2',\n'ctdot;':'\\u22ef',\n'cudarrl;':'\\u2938',\n'cudarrr;':'\\u2935',\n'cuepr;':'\\u22de',\n'cuesc;':'\\u22df',\n'cularr;':'\\u21b6',\n'cularrp;':'\\u293d',\n'Cup;':'\\u22d3',\n'cup;':'\\u222a',\n'cupbrcap;':'\\u2a48',\n'CupCap;':'\\u224d',\n'cupcap;':'\\u2a46',\n'cupcup;':'\\u2a4a',\n'cupdot;':'\\u228d',\n'cupor;':'\\u2a45',\n'cups;':'\\u222a\\ufe00',\n'curarr;':'\\u21b7',\n'curarrm;':'\\u293c',\n'curlyeqprec;':'\\u22de',\n'curlyeqsucc;':'\\u22df',\n'curlyvee;':'\\u22ce',\n'curlywedge;':'\\u22cf',\n'curren':'\\xa4',\n'curren;':'\\xa4',\n'curvearrowleft;':'\\u21b6',\n'curvearrowright;':'\\u21b7',\n'cuvee;':'\\u22ce',\n'cuwed;':'\\u22cf',\n'cwconint;':'\\u2232',\n'cwint;':'\\u2231',\n'cylcty;':'\\u232d',\n'Dagger;':'\\u2021',\n'dagger;':'\\u2020',\n'daleth;':'\\u2138',\n'Darr;':'\\u21a1',\n'dArr;':'\\u21d3',\n'darr;':'\\u2193',\n'dash;':'\\u2010',\n'Dashv;':'\\u2ae4',\n'dashv;':'\\u22a3',\n'dbkarow;':'\\u290f',\n'dblac;':'\\u02dd',\n'Dcaron;':'\\u010e',\n'dcaron;':'\\u010f',\n'Dcy;':'\\u0414',\n'dcy;':'\\u0434',\n'DD;':'\\u2145',\n'dd;':'\\u2146',\n'ddagger;':'\\u2021',\n'ddarr;':'\\u21ca',\n'DDotrahd;':'\\u2911',\n'ddotseq;':'\\u2a77',\n'deg':'\\xb0',\n'deg;':'\\xb0',\n'Del;':'\\u2207',\n'Delta;':'\\u0394',\n'delta;':'\\u03b4',\n'demptyv;':'\\u29b1',\n'dfisht;':'\\u297f',\n'Dfr;':'\\U0001d507',\n'dfr;':'\\U0001d521',\n'dHar;':'\\u2965',\n'dharl;':'\\u21c3',\n'dharr;':'\\u21c2',\n'DiacriticalAcute;':'\\xb4',\n'DiacriticalDot;':'\\u02d9',\n'DiacriticalDoubleAcute;':'\\u02dd',\n'DiacriticalGrave;':'`',\n'DiacriticalTilde;':'\\u02dc',\n'diam;':'\\u22c4',\n'Diamond;':'\\u22c4',\n'diamond;':'\\u22c4',\n'diamondsuit;':'\\u2666',\n'diams;':'\\u2666',\n'die;':'\\xa8',\n'DifferentialD;':'\\u2146',\n'digamma;':'\\u03dd',\n'disin;':'\\u22f2',\n'div;':'\\xf7',\n'divide':'\\xf7',\n'divide;':'\\xf7',\n'divideontimes;':'\\u22c7',\n'divonx;':'\\u22c7',\n'DJcy;':'\\u0402',\n'djcy;':'\\u0452',\n'dlcorn;':'\\u231e',\n'dlcrop;':'\\u230d',\n'dollar;':'$',\n'Dopf;':'\\U0001d53b',\n'dopf;':'\\U0001d555',\n'Dot;':'\\xa8',\n'dot;':'\\u02d9',\n'DotDot;':'\\u20dc',\n'doteq;':'\\u2250',\n'doteqdot;':'\\u2251',\n'DotEqual;':'\\u2250',\n'dotminus;':'\\u2238',\n'dotplus;':'\\u2214',\n'dotsquare;':'\\u22a1',\n'doublebarwedge;':'\\u2306',\n'DoubleContourIntegral;':'\\u222f',\n'DoubleDot;':'\\xa8',\n'DoubleDownArrow;':'\\u21d3',\n'DoubleLeftArrow;':'\\u21d0',\n'DoubleLeftRightArrow;':'\\u21d4',\n'DoubleLeftTee;':'\\u2ae4',\n'DoubleLongLeftArrow;':'\\u27f8',\n'DoubleLongLeftRightArrow;':'\\u27fa',\n'DoubleLongRightArrow;':'\\u27f9',\n'DoubleRightArrow;':'\\u21d2',\n'DoubleRightTee;':'\\u22a8',\n'DoubleUpArrow;':'\\u21d1',\n'DoubleUpDownArrow;':'\\u21d5',\n'DoubleVerticalBar;':'\\u2225',\n'DownArrow;':'\\u2193',\n'Downarrow;':'\\u21d3',\n'downarrow;':'\\u2193',\n'DownArrowBar;':'\\u2913',\n'DownArrowUpArrow;':'\\u21f5',\n'DownBreve;':'\\u0311',\n'downdownarrows;':'\\u21ca',\n'downharpoonleft;':'\\u21c3',\n'downharpoonright;':'\\u21c2',\n'DownLeftRightVector;':'\\u2950',\n'DownLeftTeeVector;':'\\u295e',\n'DownLeftVector;':'\\u21bd',\n'DownLeftVectorBar;':'\\u2956',\n'DownRightTeeVector;':'\\u295f',\n'DownRightVector;':'\\u21c1',\n'DownRightVectorBar;':'\\u2957',\n'DownTee;':'\\u22a4',\n'DownTeeArrow;':'\\u21a7',\n'drbkarow;':'\\u2910',\n'drcorn;':'\\u231f',\n'drcrop;':'\\u230c',\n'Dscr;':'\\U0001d49f',\n'dscr;':'\\U0001d4b9',\n'DScy;':'\\u0405',\n'dscy;':'\\u0455',\n'dsol;':'\\u29f6',\n'Dstrok;':'\\u0110',\n'dstrok;':'\\u0111',\n'dtdot;':'\\u22f1',\n'dtri;':'\\u25bf',\n'dtrif;':'\\u25be',\n'duarr;':'\\u21f5',\n'duhar;':'\\u296f',\n'dwangle;':'\\u29a6',\n'DZcy;':'\\u040f',\n'dzcy;':'\\u045f',\n'dzigrarr;':'\\u27ff',\n'Eacute':'\\xc9',\n'eacute':'\\xe9',\n'Eacute;':'\\xc9',\n'eacute;':'\\xe9',\n'easter;':'\\u2a6e',\n'Ecaron;':'\\u011a',\n'ecaron;':'\\u011b',\n'ecir;':'\\u2256',\n'Ecirc':'\\xca',\n'ecirc':'\\xea',\n'Ecirc;':'\\xca',\n'ecirc;':'\\xea',\n'ecolon;':'\\u2255',\n'Ecy;':'\\u042d',\n'ecy;':'\\u044d',\n'eDDot;':'\\u2a77',\n'Edot;':'\\u0116',\n'eDot;':'\\u2251',\n'edot;':'\\u0117',\n'ee;':'\\u2147',\n'efDot;':'\\u2252',\n'Efr;':'\\U0001d508',\n'efr;':'\\U0001d522',\n'eg;':'\\u2a9a',\n'Egrave':'\\xc8',\n'egrave':'\\xe8',\n'Egrave;':'\\xc8',\n'egrave;':'\\xe8',\n'egs;':'\\u2a96',\n'egsdot;':'\\u2a98',\n'el;':'\\u2a99',\n'Element;':'\\u2208',\n'elinters;':'\\u23e7',\n'ell;':'\\u2113',\n'els;':'\\u2a95',\n'elsdot;':'\\u2a97',\n'Emacr;':'\\u0112',\n'emacr;':'\\u0113',\n'empty;':'\\u2205',\n'emptyset;':'\\u2205',\n'EmptySmallSquare;':'\\u25fb',\n'emptyv;':'\\u2205',\n'EmptyVerySmallSquare;':'\\u25ab',\n'emsp13;':'\\u2004',\n'emsp14;':'\\u2005',\n'emsp;':'\\u2003',\n'ENG;':'\\u014a',\n'eng;':'\\u014b',\n'ensp;':'\\u2002',\n'Eogon;':'\\u0118',\n'eogon;':'\\u0119',\n'Eopf;':'\\U0001d53c',\n'eopf;':'\\U0001d556',\n'epar;':'\\u22d5',\n'eparsl;':'\\u29e3',\n'eplus;':'\\u2a71',\n'epsi;':'\\u03b5',\n'Epsilon;':'\\u0395',\n'epsilon;':'\\u03b5',\n'epsiv;':'\\u03f5',\n'eqcirc;':'\\u2256',\n'eqcolon;':'\\u2255',\n'eqsim;':'\\u2242',\n'eqslantgtr;':'\\u2a96',\n'eqslantless;':'\\u2a95',\n'Equal;':'\\u2a75',\n'equals;':'=',\n'EqualTilde;':'\\u2242',\n'equest;':'\\u225f',\n'Equilibrium;':'\\u21cc',\n'equiv;':'\\u2261',\n'equivDD;':'\\u2a78',\n'eqvparsl;':'\\u29e5',\n'erarr;':'\\u2971',\n'erDot;':'\\u2253',\n'Escr;':'\\u2130',\n'escr;':'\\u212f',\n'esdot;':'\\u2250',\n'Esim;':'\\u2a73',\n'esim;':'\\u2242',\n'Eta;':'\\u0397',\n'eta;':'\\u03b7',\n'ETH':'\\xd0',\n'eth':'\\xf0',\n'ETH;':'\\xd0',\n'eth;':'\\xf0',\n'Euml':'\\xcb',\n'euml':'\\xeb',\n'Euml;':'\\xcb',\n'euml;':'\\xeb',\n'euro;':'\\u20ac',\n'excl;':'!',\n'exist;':'\\u2203',\n'Exists;':'\\u2203',\n'expectation;':'\\u2130',\n'ExponentialE;':'\\u2147',\n'exponentiale;':'\\u2147',\n'fallingdotseq;':'\\u2252',\n'Fcy;':'\\u0424',\n'fcy;':'\\u0444',\n'female;':'\\u2640',\n'ffilig;':'\\ufb03',\n'fflig;':'\\ufb00',\n'ffllig;':'\\ufb04',\n'Ffr;':'\\U0001d509',\n'ffr;':'\\U0001d523',\n'filig;':'\\ufb01',\n'FilledSmallSquare;':'\\u25fc',\n'FilledVerySmallSquare;':'\\u25aa',\n'fjlig;':'fj',\n'flat;':'\\u266d',\n'fllig;':'\\ufb02',\n'fltns;':'\\u25b1',\n'fnof;':'\\u0192',\n'Fopf;':'\\U0001d53d',\n'fopf;':'\\U0001d557',\n'ForAll;':'\\u2200',\n'forall;':'\\u2200',\n'fork;':'\\u22d4',\n'forkv;':'\\u2ad9',\n'Fouriertrf;':'\\u2131',\n'fpartint;':'\\u2a0d',\n'frac12':'\\xbd',\n'frac12;':'\\xbd',\n'frac13;':'\\u2153',\n'frac14':'\\xbc',\n'frac14;':'\\xbc',\n'frac15;':'\\u2155',\n'frac16;':'\\u2159',\n'frac18;':'\\u215b',\n'frac23;':'\\u2154',\n'frac25;':'\\u2156',\n'frac34':'\\xbe',\n'frac34;':'\\xbe',\n'frac35;':'\\u2157',\n'frac38;':'\\u215c',\n'frac45;':'\\u2158',\n'frac56;':'\\u215a',\n'frac58;':'\\u215d',\n'frac78;':'\\u215e',\n'frasl;':'\\u2044',\n'frown;':'\\u2322',\n'Fscr;':'\\u2131',\n'fscr;':'\\U0001d4bb',\n'gacute;':'\\u01f5',\n'Gamma;':'\\u0393',\n'gamma;':'\\u03b3',\n'Gammad;':'\\u03dc',\n'gammad;':'\\u03dd',\n'gap;':'\\u2a86',\n'Gbreve;':'\\u011e',\n'gbreve;':'\\u011f',\n'Gcedil;':'\\u0122',\n'Gcirc;':'\\u011c',\n'gcirc;':'\\u011d',\n'Gcy;':'\\u0413',\n'gcy;':'\\u0433',\n'Gdot;':'\\u0120',\n'gdot;':'\\u0121',\n'gE;':'\\u2267',\n'ge;':'\\u2265',\n'gEl;':'\\u2a8c',\n'gel;':'\\u22db',\n'geq;':'\\u2265',\n'geqq;':'\\u2267',\n'geqslant;':'\\u2a7e',\n'ges;':'\\u2a7e',\n'gescc;':'\\u2aa9',\n'gesdot;':'\\u2a80',\n'gesdoto;':'\\u2a82',\n'gesdotol;':'\\u2a84',\n'gesl;':'\\u22db\\ufe00',\n'gesles;':'\\u2a94',\n'Gfr;':'\\U0001d50a',\n'gfr;':'\\U0001d524',\n'Gg;':'\\u22d9',\n'gg;':'\\u226b',\n'ggg;':'\\u22d9',\n'gimel;':'\\u2137',\n'GJcy;':'\\u0403',\n'gjcy;':'\\u0453',\n'gl;':'\\u2277',\n'gla;':'\\u2aa5',\n'glE;':'\\u2a92',\n'glj;':'\\u2aa4',\n'gnap;':'\\u2a8a',\n'gnapprox;':'\\u2a8a',\n'gnE;':'\\u2269',\n'gne;':'\\u2a88',\n'gneq;':'\\u2a88',\n'gneqq;':'\\u2269',\n'gnsim;':'\\u22e7',\n'Gopf;':'\\U0001d53e',\n'gopf;':'\\U0001d558',\n'grave;':'`',\n'GreaterEqual;':'\\u2265',\n'GreaterEqualLess;':'\\u22db',\n'GreaterFullEqual;':'\\u2267',\n'GreaterGreater;':'\\u2aa2',\n'GreaterLess;':'\\u2277',\n'GreaterSlantEqual;':'\\u2a7e',\n'GreaterTilde;':'\\u2273',\n'Gscr;':'\\U0001d4a2',\n'gscr;':'\\u210a',\n'gsim;':'\\u2273',\n'gsime;':'\\u2a8e',\n'gsiml;':'\\u2a90',\n'GT':'>',\n'gt':'>',\n'GT;':'>',\n'Gt;':'\\u226b',\n'gt;':'>',\n'gtcc;':'\\u2aa7',\n'gtcir;':'\\u2a7a',\n'gtdot;':'\\u22d7',\n'gtlPar;':'\\u2995',\n'gtquest;':'\\u2a7c',\n'gtrapprox;':'\\u2a86',\n'gtrarr;':'\\u2978',\n'gtrdot;':'\\u22d7',\n'gtreqless;':'\\u22db',\n'gtreqqless;':'\\u2a8c',\n'gtrless;':'\\u2277',\n'gtrsim;':'\\u2273',\n'gvertneqq;':'\\u2269\\ufe00',\n'gvnE;':'\\u2269\\ufe00',\n'Hacek;':'\\u02c7',\n'hairsp;':'\\u200a',\n'half;':'\\xbd',\n'hamilt;':'\\u210b',\n'HARDcy;':'\\u042a',\n'hardcy;':'\\u044a',\n'hArr;':'\\u21d4',\n'harr;':'\\u2194',\n'harrcir;':'\\u2948',\n'harrw;':'\\u21ad',\n'Hat;':'^',\n'hbar;':'\\u210f',\n'Hcirc;':'\\u0124',\n'hcirc;':'\\u0125',\n'hearts;':'\\u2665',\n'heartsuit;':'\\u2665',\n'hellip;':'\\u2026',\n'hercon;':'\\u22b9',\n'Hfr;':'\\u210c',\n'hfr;':'\\U0001d525',\n'HilbertSpace;':'\\u210b',\n'hksearow;':'\\u2925',\n'hkswarow;':'\\u2926',\n'hoarr;':'\\u21ff',\n'homtht;':'\\u223b',\n'hookleftarrow;':'\\u21a9',\n'hookrightarrow;':'\\u21aa',\n'Hopf;':'\\u210d',\n'hopf;':'\\U0001d559',\n'horbar;':'\\u2015',\n'HorizontalLine;':'\\u2500',\n'Hscr;':'\\u210b',\n'hscr;':'\\U0001d4bd',\n'hslash;':'\\u210f',\n'Hstrok;':'\\u0126',\n'hstrok;':'\\u0127',\n'HumpDownHump;':'\\u224e',\n'HumpEqual;':'\\u224f',\n'hybull;':'\\u2043',\n'hyphen;':'\\u2010',\n'Iacute':'\\xcd',\n'iacute':'\\xed',\n'Iacute;':'\\xcd',\n'iacute;':'\\xed',\n'ic;':'\\u2063',\n'Icirc':'\\xce',\n'icirc':'\\xee',\n'Icirc;':'\\xce',\n'icirc;':'\\xee',\n'Icy;':'\\u0418',\n'icy;':'\\u0438',\n'Idot;':'\\u0130',\n'IEcy;':'\\u0415',\n'iecy;':'\\u0435',\n'iexcl':'\\xa1',\n'iexcl;':'\\xa1',\n'iff;':'\\u21d4',\n'Ifr;':'\\u2111',\n'ifr;':'\\U0001d526',\n'Igrave':'\\xcc',\n'igrave':'\\xec',\n'Igrave;':'\\xcc',\n'igrave;':'\\xec',\n'ii;':'\\u2148',\n'iiiint;':'\\u2a0c',\n'iiint;':'\\u222d',\n'iinfin;':'\\u29dc',\n'iiota;':'\\u2129',\n'IJlig;':'\\u0132',\n'ijlig;':'\\u0133',\n'Im;':'\\u2111',\n'Imacr;':'\\u012a',\n'imacr;':'\\u012b',\n'image;':'\\u2111',\n'ImaginaryI;':'\\u2148',\n'imagline;':'\\u2110',\n'imagpart;':'\\u2111',\n'imath;':'\\u0131',\n'imof;':'\\u22b7',\n'imped;':'\\u01b5',\n'Implies;':'\\u21d2',\n'in;':'\\u2208',\n'incare;':'\\u2105',\n'infin;':'\\u221e',\n'infintie;':'\\u29dd',\n'inodot;':'\\u0131',\n'Int;':'\\u222c',\n'int;':'\\u222b',\n'intcal;':'\\u22ba',\n'integers;':'\\u2124',\n'Integral;':'\\u222b',\n'intercal;':'\\u22ba',\n'Intersection;':'\\u22c2',\n'intlarhk;':'\\u2a17',\n'intprod;':'\\u2a3c',\n'InvisibleComma;':'\\u2063',\n'InvisibleTimes;':'\\u2062',\n'IOcy;':'\\u0401',\n'iocy;':'\\u0451',\n'Iogon;':'\\u012e',\n'iogon;':'\\u012f',\n'Iopf;':'\\U0001d540',\n'iopf;':'\\U0001d55a',\n'Iota;':'\\u0399',\n'iota;':'\\u03b9',\n'iprod;':'\\u2a3c',\n'iquest':'\\xbf',\n'iquest;':'\\xbf',\n'Iscr;':'\\u2110',\n'iscr;':'\\U0001d4be',\n'isin;':'\\u2208',\n'isindot;':'\\u22f5',\n'isinE;':'\\u22f9',\n'isins;':'\\u22f4',\n'isinsv;':'\\u22f3',\n'isinv;':'\\u2208',\n'it;':'\\u2062',\n'Itilde;':'\\u0128',\n'itilde;':'\\u0129',\n'Iukcy;':'\\u0406',\n'iukcy;':'\\u0456',\n'Iuml':'\\xcf',\n'iuml':'\\xef',\n'Iuml;':'\\xcf',\n'iuml;':'\\xef',\n'Jcirc;':'\\u0134',\n'jcirc;':'\\u0135',\n'Jcy;':'\\u0419',\n'jcy;':'\\u0439',\n'Jfr;':'\\U0001d50d',\n'jfr;':'\\U0001d527',\n'jmath;':'\\u0237',\n'Jopf;':'\\U0001d541',\n'jopf;':'\\U0001d55b',\n'Jscr;':'\\U0001d4a5',\n'jscr;':'\\U0001d4bf',\n'Jsercy;':'\\u0408',\n'jsercy;':'\\u0458',\n'Jukcy;':'\\u0404',\n'jukcy;':'\\u0454',\n'Kappa;':'\\u039a',\n'kappa;':'\\u03ba',\n'kappav;':'\\u03f0',\n'Kcedil;':'\\u0136',\n'kcedil;':'\\u0137',\n'Kcy;':'\\u041a',\n'kcy;':'\\u043a',\n'Kfr;':'\\U0001d50e',\n'kfr;':'\\U0001d528',\n'kgreen;':'\\u0138',\n'KHcy;':'\\u0425',\n'khcy;':'\\u0445',\n'KJcy;':'\\u040c',\n'kjcy;':'\\u045c',\n'Kopf;':'\\U0001d542',\n'kopf;':'\\U0001d55c',\n'Kscr;':'\\U0001d4a6',\n'kscr;':'\\U0001d4c0',\n'lAarr;':'\\u21da',\n'Lacute;':'\\u0139',\n'lacute;':'\\u013a',\n'laemptyv;':'\\u29b4',\n'lagran;':'\\u2112',\n'Lambda;':'\\u039b',\n'lambda;':'\\u03bb',\n'Lang;':'\\u27ea',\n'lang;':'\\u27e8',\n'langd;':'\\u2991',\n'langle;':'\\u27e8',\n'lap;':'\\u2a85',\n'Laplacetrf;':'\\u2112',\n'laquo':'\\xab',\n'laquo;':'\\xab',\n'Larr;':'\\u219e',\n'lArr;':'\\u21d0',\n'larr;':'\\u2190',\n'larrb;':'\\u21e4',\n'larrbfs;':'\\u291f',\n'larrfs;':'\\u291d',\n'larrhk;':'\\u21a9',\n'larrlp;':'\\u21ab',\n'larrpl;':'\\u2939',\n'larrsim;':'\\u2973',\n'larrtl;':'\\u21a2',\n'lat;':'\\u2aab',\n'lAtail;':'\\u291b',\n'latail;':'\\u2919',\n'late;':'\\u2aad',\n'lates;':'\\u2aad\\ufe00',\n'lBarr;':'\\u290e',\n'lbarr;':'\\u290c',\n'lbbrk;':'\\u2772',\n'lbrace;':'{',\n'lbrack;':'[',\n'lbrke;':'\\u298b',\n'lbrksld;':'\\u298f',\n'lbrkslu;':'\\u298d',\n'Lcaron;':'\\u013d',\n'lcaron;':'\\u013e',\n'Lcedil;':'\\u013b',\n'lcedil;':'\\u013c',\n'lceil;':'\\u2308',\n'lcub;':'{',\n'Lcy;':'\\u041b',\n'lcy;':'\\u043b',\n'ldca;':'\\u2936',\n'ldquo;':'\\u201c',\n'ldquor;':'\\u201e',\n'ldrdhar;':'\\u2967',\n'ldrushar;':'\\u294b',\n'ldsh;':'\\u21b2',\n'lE;':'\\u2266',\n'le;':'\\u2264',\n'LeftAngleBracket;':'\\u27e8',\n'LeftArrow;':'\\u2190',\n'Leftarrow;':'\\u21d0',\n'leftarrow;':'\\u2190',\n'LeftArrowBar;':'\\u21e4',\n'LeftArrowRightArrow;':'\\u21c6',\n'leftarrowtail;':'\\u21a2',\n'LeftCeiling;':'\\u2308',\n'LeftDoubleBracket;':'\\u27e6',\n'LeftDownTeeVector;':'\\u2961',\n'LeftDownVector;':'\\u21c3',\n'LeftDownVectorBar;':'\\u2959',\n'LeftFloor;':'\\u230a',\n'leftharpoondown;':'\\u21bd',\n'leftharpoonup;':'\\u21bc',\n'leftleftarrows;':'\\u21c7',\n'LeftRightArrow;':'\\u2194',\n'Leftrightarrow;':'\\u21d4',\n'leftrightarrow;':'\\u2194',\n'leftrightarrows;':'\\u21c6',\n'leftrightharpoons;':'\\u21cb',\n'leftrightsquigarrow;':'\\u21ad',\n'LeftRightVector;':'\\u294e',\n'LeftTee;':'\\u22a3',\n'LeftTeeArrow;':'\\u21a4',\n'LeftTeeVector;':'\\u295a',\n'leftthreetimes;':'\\u22cb',\n'LeftTriangle;':'\\u22b2',\n'LeftTriangleBar;':'\\u29cf',\n'LeftTriangleEqual;':'\\u22b4',\n'LeftUpDownVector;':'\\u2951',\n'LeftUpTeeVector;':'\\u2960',\n'LeftUpVector;':'\\u21bf',\n'LeftUpVectorBar;':'\\u2958',\n'LeftVector;':'\\u21bc',\n'LeftVectorBar;':'\\u2952',\n'lEg;':'\\u2a8b',\n'leg;':'\\u22da',\n'leq;':'\\u2264',\n'leqq;':'\\u2266',\n'leqslant;':'\\u2a7d',\n'les;':'\\u2a7d',\n'lescc;':'\\u2aa8',\n'lesdot;':'\\u2a7f',\n'lesdoto;':'\\u2a81',\n'lesdotor;':'\\u2a83',\n'lesg;':'\\u22da\\ufe00',\n'lesges;':'\\u2a93',\n'lessapprox;':'\\u2a85',\n'lessdot;':'\\u22d6',\n'lesseqgtr;':'\\u22da',\n'lesseqqgtr;':'\\u2a8b',\n'LessEqualGreater;':'\\u22da',\n'LessFullEqual;':'\\u2266',\n'LessGreater;':'\\u2276',\n'lessgtr;':'\\u2276',\n'LessLess;':'\\u2aa1',\n'lesssim;':'\\u2272',\n'LessSlantEqual;':'\\u2a7d',\n'LessTilde;':'\\u2272',\n'lfisht;':'\\u297c',\n'lfloor;':'\\u230a',\n'Lfr;':'\\U0001d50f',\n'lfr;':'\\U0001d529',\n'lg;':'\\u2276',\n'lgE;':'\\u2a91',\n'lHar;':'\\u2962',\n'lhard;':'\\u21bd',\n'lharu;':'\\u21bc',\n'lharul;':'\\u296a',\n'lhblk;':'\\u2584',\n'LJcy;':'\\u0409',\n'ljcy;':'\\u0459',\n'Ll;':'\\u22d8',\n'll;':'\\u226a',\n'llarr;':'\\u21c7',\n'llcorner;':'\\u231e',\n'Lleftarrow;':'\\u21da',\n'llhard;':'\\u296b',\n'lltri;':'\\u25fa',\n'Lmidot;':'\\u013f',\n'lmidot;':'\\u0140',\n'lmoust;':'\\u23b0',\n'lmoustache;':'\\u23b0',\n'lnap;':'\\u2a89',\n'lnapprox;':'\\u2a89',\n'lnE;':'\\u2268',\n'lne;':'\\u2a87',\n'lneq;':'\\u2a87',\n'lneqq;':'\\u2268',\n'lnsim;':'\\u22e6',\n'loang;':'\\u27ec',\n'loarr;':'\\u21fd',\n'lobrk;':'\\u27e6',\n'LongLeftArrow;':'\\u27f5',\n'Longleftarrow;':'\\u27f8',\n'longleftarrow;':'\\u27f5',\n'LongLeftRightArrow;':'\\u27f7',\n'Longleftrightarrow;':'\\u27fa',\n'longleftrightarrow;':'\\u27f7',\n'longmapsto;':'\\u27fc',\n'LongRightArrow;':'\\u27f6',\n'Longrightarrow;':'\\u27f9',\n'longrightarrow;':'\\u27f6',\n'looparrowleft;':'\\u21ab',\n'looparrowright;':'\\u21ac',\n'lopar;':'\\u2985',\n'Lopf;':'\\U0001d543',\n'lopf;':'\\U0001d55d',\n'loplus;':'\\u2a2d',\n'lotimes;':'\\u2a34',\n'lowast;':'\\u2217',\n'lowbar;':'_',\n'LowerLeftArrow;':'\\u2199',\n'LowerRightArrow;':'\\u2198',\n'loz;':'\\u25ca',\n'lozenge;':'\\u25ca',\n'lozf;':'\\u29eb',\n'lpar;':'(',\n'lparlt;':'\\u2993',\n'lrarr;':'\\u21c6',\n'lrcorner;':'\\u231f',\n'lrhar;':'\\u21cb',\n'lrhard;':'\\u296d',\n'lrm;':'\\u200e',\n'lrtri;':'\\u22bf',\n'lsaquo;':'\\u2039',\n'Lscr;':'\\u2112',\n'lscr;':'\\U0001d4c1',\n'Lsh;':'\\u21b0',\n'lsh;':'\\u21b0',\n'lsim;':'\\u2272',\n'lsime;':'\\u2a8d',\n'lsimg;':'\\u2a8f',\n'lsqb;':'[',\n'lsquo;':'\\u2018',\n'lsquor;':'\\u201a',\n'Lstrok;':'\\u0141',\n'lstrok;':'\\u0142',\n'LT':'<',\n'lt':'<',\n'LT;':'<',\n'Lt;':'\\u226a',\n'lt;':'<',\n'ltcc;':'\\u2aa6',\n'ltcir;':'\\u2a79',\n'ltdot;':'\\u22d6',\n'lthree;':'\\u22cb',\n'ltimes;':'\\u22c9',\n'ltlarr;':'\\u2976',\n'ltquest;':'\\u2a7b',\n'ltri;':'\\u25c3',\n'ltrie;':'\\u22b4',\n'ltrif;':'\\u25c2',\n'ltrPar;':'\\u2996',\n'lurdshar;':'\\u294a',\n'luruhar;':'\\u2966',\n'lvertneqq;':'\\u2268\\ufe00',\n'lvnE;':'\\u2268\\ufe00',\n'macr':'\\xaf',\n'macr;':'\\xaf',\n'male;':'\\u2642',\n'malt;':'\\u2720',\n'maltese;':'\\u2720',\n'Map;':'\\u2905',\n'map;':'\\u21a6',\n'mapsto;':'\\u21a6',\n'mapstodown;':'\\u21a7',\n'mapstoleft;':'\\u21a4',\n'mapstoup;':'\\u21a5',\n'marker;':'\\u25ae',\n'mcomma;':'\\u2a29',\n'Mcy;':'\\u041c',\n'mcy;':'\\u043c',\n'mdash;':'\\u2014',\n'mDDot;':'\\u223a',\n'measuredangle;':'\\u2221',\n'MediumSpace;':'\\u205f',\n'Mellintrf;':'\\u2133',\n'Mfr;':'\\U0001d510',\n'mfr;':'\\U0001d52a',\n'mho;':'\\u2127',\n'micro':'\\xb5',\n'micro;':'\\xb5',\n'mid;':'\\u2223',\n'midast;':'*',\n'midcir;':'\\u2af0',\n'middot':'\\xb7',\n'middot;':'\\xb7',\n'minus;':'\\u2212',\n'minusb;':'\\u229f',\n'minusd;':'\\u2238',\n'minusdu;':'\\u2a2a',\n'MinusPlus;':'\\u2213',\n'mlcp;':'\\u2adb',\n'mldr;':'\\u2026',\n'mnplus;':'\\u2213',\n'models;':'\\u22a7',\n'Mopf;':'\\U0001d544',\n'mopf;':'\\U0001d55e',\n'mp;':'\\u2213',\n'Mscr;':'\\u2133',\n'mscr;':'\\U0001d4c2',\n'mstpos;':'\\u223e',\n'Mu;':'\\u039c',\n'mu;':'\\u03bc',\n'multimap;':'\\u22b8',\n'mumap;':'\\u22b8',\n'nabla;':'\\u2207',\n'Nacute;':'\\u0143',\n'nacute;':'\\u0144',\n'nang;':'\\u2220\\u20d2',\n'nap;':'\\u2249',\n'napE;':'\\u2a70\\u0338',\n'napid;':'\\u224b\\u0338',\n'napos;':'\\u0149',\n'napprox;':'\\u2249',\n'natur;':'\\u266e',\n'natural;':'\\u266e',\n'naturals;':'\\u2115',\n'nbsp':'\\xa0',\n'nbsp;':'\\xa0',\n'nbump;':'\\u224e\\u0338',\n'nbumpe;':'\\u224f\\u0338',\n'ncap;':'\\u2a43',\n'Ncaron;':'\\u0147',\n'ncaron;':'\\u0148',\n'Ncedil;':'\\u0145',\n'ncedil;':'\\u0146',\n'ncong;':'\\u2247',\n'ncongdot;':'\\u2a6d\\u0338',\n'ncup;':'\\u2a42',\n'Ncy;':'\\u041d',\n'ncy;':'\\u043d',\n'ndash;':'\\u2013',\n'ne;':'\\u2260',\n'nearhk;':'\\u2924',\n'neArr;':'\\u21d7',\n'nearr;':'\\u2197',\n'nearrow;':'\\u2197',\n'nedot;':'\\u2250\\u0338',\n'NegativeMediumSpace;':'\\u200b',\n'NegativeThickSpace;':'\\u200b',\n'NegativeThinSpace;':'\\u200b',\n'NegativeVeryThinSpace;':'\\u200b',\n'nequiv;':'\\u2262',\n'nesear;':'\\u2928',\n'nesim;':'\\u2242\\u0338',\n'NestedGreaterGreater;':'\\u226b',\n'NestedLessLess;':'\\u226a',\n'NewLine;':'\\n',\n'nexist;':'\\u2204',\n'nexists;':'\\u2204',\n'Nfr;':'\\U0001d511',\n'nfr;':'\\U0001d52b',\n'ngE;':'\\u2267\\u0338',\n'nge;':'\\u2271',\n'ngeq;':'\\u2271',\n'ngeqq;':'\\u2267\\u0338',\n'ngeqslant;':'\\u2a7e\\u0338',\n'nges;':'\\u2a7e\\u0338',\n'nGg;':'\\u22d9\\u0338',\n'ngsim;':'\\u2275',\n'nGt;':'\\u226b\\u20d2',\n'ngt;':'\\u226f',\n'ngtr;':'\\u226f',\n'nGtv;':'\\u226b\\u0338',\n'nhArr;':'\\u21ce',\n'nharr;':'\\u21ae',\n'nhpar;':'\\u2af2',\n'ni;':'\\u220b',\n'nis;':'\\u22fc',\n'nisd;':'\\u22fa',\n'niv;':'\\u220b',\n'NJcy;':'\\u040a',\n'njcy;':'\\u045a',\n'nlArr;':'\\u21cd',\n'nlarr;':'\\u219a',\n'nldr;':'\\u2025',\n'nlE;':'\\u2266\\u0338',\n'nle;':'\\u2270',\n'nLeftarrow;':'\\u21cd',\n'nleftarrow;':'\\u219a',\n'nLeftrightarrow;':'\\u21ce',\n'nleftrightarrow;':'\\u21ae',\n'nleq;':'\\u2270',\n'nleqq;':'\\u2266\\u0338',\n'nleqslant;':'\\u2a7d\\u0338',\n'nles;':'\\u2a7d\\u0338',\n'nless;':'\\u226e',\n'nLl;':'\\u22d8\\u0338',\n'nlsim;':'\\u2274',\n'nLt;':'\\u226a\\u20d2',\n'nlt;':'\\u226e',\n'nltri;':'\\u22ea',\n'nltrie;':'\\u22ec',\n'nLtv;':'\\u226a\\u0338',\n'nmid;':'\\u2224',\n'NoBreak;':'\\u2060',\n'NonBreakingSpace;':'\\xa0',\n'Nopf;':'\\u2115',\n'nopf;':'\\U0001d55f',\n'not':'\\xac',\n'Not;':'\\u2aec',\n'not;':'\\xac',\n'NotCongruent;':'\\u2262',\n'NotCupCap;':'\\u226d',\n'NotDoubleVerticalBar;':'\\u2226',\n'NotElement;':'\\u2209',\n'NotEqual;':'\\u2260',\n'NotEqualTilde;':'\\u2242\\u0338',\n'NotExists;':'\\u2204',\n'NotGreater;':'\\u226f',\n'NotGreaterEqual;':'\\u2271',\n'NotGreaterFullEqual;':'\\u2267\\u0338',\n'NotGreaterGreater;':'\\u226b\\u0338',\n'NotGreaterLess;':'\\u2279',\n'NotGreaterSlantEqual;':'\\u2a7e\\u0338',\n'NotGreaterTilde;':'\\u2275',\n'NotHumpDownHump;':'\\u224e\\u0338',\n'NotHumpEqual;':'\\u224f\\u0338',\n'notin;':'\\u2209',\n'notindot;':'\\u22f5\\u0338',\n'notinE;':'\\u22f9\\u0338',\n'notinva;':'\\u2209',\n'notinvb;':'\\u22f7',\n'notinvc;':'\\u22f6',\n'NotLeftTriangle;':'\\u22ea',\n'NotLeftTriangleBar;':'\\u29cf\\u0338',\n'NotLeftTriangleEqual;':'\\u22ec',\n'NotLess;':'\\u226e',\n'NotLessEqual;':'\\u2270',\n'NotLessGreater;':'\\u2278',\n'NotLessLess;':'\\u226a\\u0338',\n'NotLessSlantEqual;':'\\u2a7d\\u0338',\n'NotLessTilde;':'\\u2274',\n'NotNestedGreaterGreater;':'\\u2aa2\\u0338',\n'NotNestedLessLess;':'\\u2aa1\\u0338',\n'notni;':'\\u220c',\n'notniva;':'\\u220c',\n'notnivb;':'\\u22fe',\n'notnivc;':'\\u22fd',\n'NotPrecedes;':'\\u2280',\n'NotPrecedesEqual;':'\\u2aaf\\u0338',\n'NotPrecedesSlantEqual;':'\\u22e0',\n'NotReverseElement;':'\\u220c',\n'NotRightTriangle;':'\\u22eb',\n'NotRightTriangleBar;':'\\u29d0\\u0338',\n'NotRightTriangleEqual;':'\\u22ed',\n'NotSquareSubset;':'\\u228f\\u0338',\n'NotSquareSubsetEqual;':'\\u22e2',\n'NotSquareSuperset;':'\\u2290\\u0338',\n'NotSquareSupersetEqual;':'\\u22e3',\n'NotSubset;':'\\u2282\\u20d2',\n'NotSubsetEqual;':'\\u2288',\n'NotSucceeds;':'\\u2281',\n'NotSucceedsEqual;':'\\u2ab0\\u0338',\n'NotSucceedsSlantEqual;':'\\u22e1',\n'NotSucceedsTilde;':'\\u227f\\u0338',\n'NotSuperset;':'\\u2283\\u20d2',\n'NotSupersetEqual;':'\\u2289',\n'NotTilde;':'\\u2241',\n'NotTildeEqual;':'\\u2244',\n'NotTildeFullEqual;':'\\u2247',\n'NotTildeTilde;':'\\u2249',\n'NotVerticalBar;':'\\u2224',\n'npar;':'\\u2226',\n'nparallel;':'\\u2226',\n'nparsl;':'\\u2afd\\u20e5',\n'npart;':'\\u2202\\u0338',\n'npolint;':'\\u2a14',\n'npr;':'\\u2280',\n'nprcue;':'\\u22e0',\n'npre;':'\\u2aaf\\u0338',\n'nprec;':'\\u2280',\n'npreceq;':'\\u2aaf\\u0338',\n'nrArr;':'\\u21cf',\n'nrarr;':'\\u219b',\n'nrarrc;':'\\u2933\\u0338',\n'nrarrw;':'\\u219d\\u0338',\n'nRightarrow;':'\\u21cf',\n'nrightarrow;':'\\u219b',\n'nrtri;':'\\u22eb',\n'nrtrie;':'\\u22ed',\n'nsc;':'\\u2281',\n'nsccue;':'\\u22e1',\n'nsce;':'\\u2ab0\\u0338',\n'Nscr;':'\\U0001d4a9',\n'nscr;':'\\U0001d4c3',\n'nshortmid;':'\\u2224',\n'nshortparallel;':'\\u2226',\n'nsim;':'\\u2241',\n'nsime;':'\\u2244',\n'nsimeq;':'\\u2244',\n'nsmid;':'\\u2224',\n'nspar;':'\\u2226',\n'nsqsube;':'\\u22e2',\n'nsqsupe;':'\\u22e3',\n'nsub;':'\\u2284',\n'nsubE;':'\\u2ac5\\u0338',\n'nsube;':'\\u2288',\n'nsubset;':'\\u2282\\u20d2',\n'nsubseteq;':'\\u2288',\n'nsubseteqq;':'\\u2ac5\\u0338',\n'nsucc;':'\\u2281',\n'nsucceq;':'\\u2ab0\\u0338',\n'nsup;':'\\u2285',\n'nsupE;':'\\u2ac6\\u0338',\n'nsupe;':'\\u2289',\n'nsupset;':'\\u2283\\u20d2',\n'nsupseteq;':'\\u2289',\n'nsupseteqq;':'\\u2ac6\\u0338',\n'ntgl;':'\\u2279',\n'Ntilde':'\\xd1',\n'ntilde':'\\xf1',\n'Ntilde;':'\\xd1',\n'ntilde;':'\\xf1',\n'ntlg;':'\\u2278',\n'ntriangleleft;':'\\u22ea',\n'ntrianglelefteq;':'\\u22ec',\n'ntriangleright;':'\\u22eb',\n'ntrianglerighteq;':'\\u22ed',\n'Nu;':'\\u039d',\n'nu;':'\\u03bd',\n'num;':'#',\n'numero;':'\\u2116',\n'numsp;':'\\u2007',\n'nvap;':'\\u224d\\u20d2',\n'nVDash;':'\\u22af',\n'nVdash;':'\\u22ae',\n'nvDash;':'\\u22ad',\n'nvdash;':'\\u22ac',\n'nvge;':'\\u2265\\u20d2',\n'nvgt;':'>\\u20d2',\n'nvHarr;':'\\u2904',\n'nvinfin;':'\\u29de',\n'nvlArr;':'\\u2902',\n'nvle;':'\\u2264\\u20d2',\n'nvlt;':'<\\u20d2',\n'nvltrie;':'\\u22b4\\u20d2',\n'nvrArr;':'\\u2903',\n'nvrtrie;':'\\u22b5\\u20d2',\n'nvsim;':'\\u223c\\u20d2',\n'nwarhk;':'\\u2923',\n'nwArr;':'\\u21d6',\n'nwarr;':'\\u2196',\n'nwarrow;':'\\u2196',\n'nwnear;':'\\u2927',\n'Oacute':'\\xd3',\n'oacute':'\\xf3',\n'Oacute;':'\\xd3',\n'oacute;':'\\xf3',\n'oast;':'\\u229b',\n'ocir;':'\\u229a',\n'Ocirc':'\\xd4',\n'ocirc':'\\xf4',\n'Ocirc;':'\\xd4',\n'ocirc;':'\\xf4',\n'Ocy;':'\\u041e',\n'ocy;':'\\u043e',\n'odash;':'\\u229d',\n'Odblac;':'\\u0150',\n'odblac;':'\\u0151',\n'odiv;':'\\u2a38',\n'odot;':'\\u2299',\n'odsold;':'\\u29bc',\n'OElig;':'\\u0152',\n'oelig;':'\\u0153',\n'ofcir;':'\\u29bf',\n'Ofr;':'\\U0001d512',\n'ofr;':'\\U0001d52c',\n'ogon;':'\\u02db',\n'Ograve':'\\xd2',\n'ograve':'\\xf2',\n'Ograve;':'\\xd2',\n'ograve;':'\\xf2',\n'ogt;':'\\u29c1',\n'ohbar;':'\\u29b5',\n'ohm;':'\\u03a9',\n'oint;':'\\u222e',\n'olarr;':'\\u21ba',\n'olcir;':'\\u29be',\n'olcross;':'\\u29bb',\n'oline;':'\\u203e',\n'olt;':'\\u29c0',\n'Omacr;':'\\u014c',\n'omacr;':'\\u014d',\n'Omega;':'\\u03a9',\n'omega;':'\\u03c9',\n'Omicron;':'\\u039f',\n'omicron;':'\\u03bf',\n'omid;':'\\u29b6',\n'ominus;':'\\u2296',\n'Oopf;':'\\U0001d546',\n'oopf;':'\\U0001d560',\n'opar;':'\\u29b7',\n'OpenCurlyDoubleQuote;':'\\u201c',\n'OpenCurlyQuote;':'\\u2018',\n'operp;':'\\u29b9',\n'oplus;':'\\u2295',\n'Or;':'\\u2a54',\n'or;':'\\u2228',\n'orarr;':'\\u21bb',\n'ord;':'\\u2a5d',\n'order;':'\\u2134',\n'orderof;':'\\u2134',\n'ordf':'\\xaa',\n'ordf;':'\\xaa',\n'ordm':'\\xba',\n'ordm;':'\\xba',\n'origof;':'\\u22b6',\n'oror;':'\\u2a56',\n'orslope;':'\\u2a57',\n'orv;':'\\u2a5b',\n'oS;':'\\u24c8',\n'Oscr;':'\\U0001d4aa',\n'oscr;':'\\u2134',\n'Oslash':'\\xd8',\n'oslash':'\\xf8',\n'Oslash;':'\\xd8',\n'oslash;':'\\xf8',\n'osol;':'\\u2298',\n'Otilde':'\\xd5',\n'otilde':'\\xf5',\n'Otilde;':'\\xd5',\n'otilde;':'\\xf5',\n'Otimes;':'\\u2a37',\n'otimes;':'\\u2297',\n'otimesas;':'\\u2a36',\n'Ouml':'\\xd6',\n'ouml':'\\xf6',\n'Ouml;':'\\xd6',\n'ouml;':'\\xf6',\n'ovbar;':'\\u233d',\n'OverBar;':'\\u203e',\n'OverBrace;':'\\u23de',\n'OverBracket;':'\\u23b4',\n'OverParenthesis;':'\\u23dc',\n'par;':'\\u2225',\n'para':'\\xb6',\n'para;':'\\xb6',\n'parallel;':'\\u2225',\n'parsim;':'\\u2af3',\n'parsl;':'\\u2afd',\n'part;':'\\u2202',\n'PartialD;':'\\u2202',\n'Pcy;':'\\u041f',\n'pcy;':'\\u043f',\n'percnt;':'%',\n'period;':'.',\n'permil;':'\\u2030',\n'perp;':'\\u22a5',\n'pertenk;':'\\u2031',\n'Pfr;':'\\U0001d513',\n'pfr;':'\\U0001d52d',\n'Phi;':'\\u03a6',\n'phi;':'\\u03c6',\n'phiv;':'\\u03d5',\n'phmmat;':'\\u2133',\n'phone;':'\\u260e',\n'Pi;':'\\u03a0',\n'pi;':'\\u03c0',\n'pitchfork;':'\\u22d4',\n'piv;':'\\u03d6',\n'planck;':'\\u210f',\n'planckh;':'\\u210e',\n'plankv;':'\\u210f',\n'plus;':'+',\n'plusacir;':'\\u2a23',\n'plusb;':'\\u229e',\n'pluscir;':'\\u2a22',\n'plusdo;':'\\u2214',\n'plusdu;':'\\u2a25',\n'pluse;':'\\u2a72',\n'PlusMinus;':'\\xb1',\n'plusmn':'\\xb1',\n'plusmn;':'\\xb1',\n'plussim;':'\\u2a26',\n'plustwo;':'\\u2a27',\n'pm;':'\\xb1',\n'Poincareplane;':'\\u210c',\n'pointint;':'\\u2a15',\n'Popf;':'\\u2119',\n'popf;':'\\U0001d561',\n'pound':'\\xa3',\n'pound;':'\\xa3',\n'Pr;':'\\u2abb',\n'pr;':'\\u227a',\n'prap;':'\\u2ab7',\n'prcue;':'\\u227c',\n'prE;':'\\u2ab3',\n'pre;':'\\u2aaf',\n'prec;':'\\u227a',\n'precapprox;':'\\u2ab7',\n'preccurlyeq;':'\\u227c',\n'Precedes;':'\\u227a',\n'PrecedesEqual;':'\\u2aaf',\n'PrecedesSlantEqual;':'\\u227c',\n'PrecedesTilde;':'\\u227e',\n'preceq;':'\\u2aaf',\n'precnapprox;':'\\u2ab9',\n'precneqq;':'\\u2ab5',\n'precnsim;':'\\u22e8',\n'precsim;':'\\u227e',\n'Prime;':'\\u2033',\n'prime;':'\\u2032',\n'primes;':'\\u2119',\n'prnap;':'\\u2ab9',\n'prnE;':'\\u2ab5',\n'prnsim;':'\\u22e8',\n'prod;':'\\u220f',\n'Product;':'\\u220f',\n'profalar;':'\\u232e',\n'profline;':'\\u2312',\n'profsurf;':'\\u2313',\n'prop;':'\\u221d',\n'Proportion;':'\\u2237',\n'Proportional;':'\\u221d',\n'propto;':'\\u221d',\n'prsim;':'\\u227e',\n'prurel;':'\\u22b0',\n'Pscr;':'\\U0001d4ab',\n'pscr;':'\\U0001d4c5',\n'Psi;':'\\u03a8',\n'psi;':'\\u03c8',\n'puncsp;':'\\u2008',\n'Qfr;':'\\U0001d514',\n'qfr;':'\\U0001d52e',\n'qint;':'\\u2a0c',\n'Qopf;':'\\u211a',\n'qopf;':'\\U0001d562',\n'qprime;':'\\u2057',\n'Qscr;':'\\U0001d4ac',\n'qscr;':'\\U0001d4c6',\n'quaternions;':'\\u210d',\n'quatint;':'\\u2a16',\n'quest;':'?',\n'questeq;':'\\u225f',\n'QUOT':'\"',\n'quot':'\"',\n'QUOT;':'\"',\n'quot;':'\"',\n'rAarr;':'\\u21db',\n'race;':'\\u223d\\u0331',\n'Racute;':'\\u0154',\n'racute;':'\\u0155',\n'radic;':'\\u221a',\n'raemptyv;':'\\u29b3',\n'Rang;':'\\u27eb',\n'rang;':'\\u27e9',\n'rangd;':'\\u2992',\n'range;':'\\u29a5',\n'rangle;':'\\u27e9',\n'raquo':'\\xbb',\n'raquo;':'\\xbb',\n'Rarr;':'\\u21a0',\n'rArr;':'\\u21d2',\n'rarr;':'\\u2192',\n'rarrap;':'\\u2975',\n'rarrb;':'\\u21e5',\n'rarrbfs;':'\\u2920',\n'rarrc;':'\\u2933',\n'rarrfs;':'\\u291e',\n'rarrhk;':'\\u21aa',\n'rarrlp;':'\\u21ac',\n'rarrpl;':'\\u2945',\n'rarrsim;':'\\u2974',\n'Rarrtl;':'\\u2916',\n'rarrtl;':'\\u21a3',\n'rarrw;':'\\u219d',\n'rAtail;':'\\u291c',\n'ratail;':'\\u291a',\n'ratio;':'\\u2236',\n'rationals;':'\\u211a',\n'RBarr;':'\\u2910',\n'rBarr;':'\\u290f',\n'rbarr;':'\\u290d',\n'rbbrk;':'\\u2773',\n'rbrace;':'}',\n'rbrack;':']',\n'rbrke;':'\\u298c',\n'rbrksld;':'\\u298e',\n'rbrkslu;':'\\u2990',\n'Rcaron;':'\\u0158',\n'rcaron;':'\\u0159',\n'Rcedil;':'\\u0156',\n'rcedil;':'\\u0157',\n'rceil;':'\\u2309',\n'rcub;':'}',\n'Rcy;':'\\u0420',\n'rcy;':'\\u0440',\n'rdca;':'\\u2937',\n'rdldhar;':'\\u2969',\n'rdquo;':'\\u201d',\n'rdquor;':'\\u201d',\n'rdsh;':'\\u21b3',\n'Re;':'\\u211c',\n'real;':'\\u211c',\n'realine;':'\\u211b',\n'realpart;':'\\u211c',\n'reals;':'\\u211d',\n'rect;':'\\u25ad',\n'REG':'\\xae',\n'reg':'\\xae',\n'REG;':'\\xae',\n'reg;':'\\xae',\n'ReverseElement;':'\\u220b',\n'ReverseEquilibrium;':'\\u21cb',\n'ReverseUpEquilibrium;':'\\u296f',\n'rfisht;':'\\u297d',\n'rfloor;':'\\u230b',\n'Rfr;':'\\u211c',\n'rfr;':'\\U0001d52f',\n'rHar;':'\\u2964',\n'rhard;':'\\u21c1',\n'rharu;':'\\u21c0',\n'rharul;':'\\u296c',\n'Rho;':'\\u03a1',\n'rho;':'\\u03c1',\n'rhov;':'\\u03f1',\n'RightAngleBracket;':'\\u27e9',\n'RightArrow;':'\\u2192',\n'Rightarrow;':'\\u21d2',\n'rightarrow;':'\\u2192',\n'RightArrowBar;':'\\u21e5',\n'RightArrowLeftArrow;':'\\u21c4',\n'rightarrowtail;':'\\u21a3',\n'RightCeiling;':'\\u2309',\n'RightDoubleBracket;':'\\u27e7',\n'RightDownTeeVector;':'\\u295d',\n'RightDownVector;':'\\u21c2',\n'RightDownVectorBar;':'\\u2955',\n'RightFloor;':'\\u230b',\n'rightharpoondown;':'\\u21c1',\n'rightharpoonup;':'\\u21c0',\n'rightleftarrows;':'\\u21c4',\n'rightleftharpoons;':'\\u21cc',\n'rightrightarrows;':'\\u21c9',\n'rightsquigarrow;':'\\u219d',\n'RightTee;':'\\u22a2',\n'RightTeeArrow;':'\\u21a6',\n'RightTeeVector;':'\\u295b',\n'rightthreetimes;':'\\u22cc',\n'RightTriangle;':'\\u22b3',\n'RightTriangleBar;':'\\u29d0',\n'RightTriangleEqual;':'\\u22b5',\n'RightUpDownVector;':'\\u294f',\n'RightUpTeeVector;':'\\u295c',\n'RightUpVector;':'\\u21be',\n'RightUpVectorBar;':'\\u2954',\n'RightVector;':'\\u21c0',\n'RightVectorBar;':'\\u2953',\n'ring;':'\\u02da',\n'risingdotseq;':'\\u2253',\n'rlarr;':'\\u21c4',\n'rlhar;':'\\u21cc',\n'rlm;':'\\u200f',\n'rmoust;':'\\u23b1',\n'rmoustache;':'\\u23b1',\n'rnmid;':'\\u2aee',\n'roang;':'\\u27ed',\n'roarr;':'\\u21fe',\n'robrk;':'\\u27e7',\n'ropar;':'\\u2986',\n'Ropf;':'\\u211d',\n'ropf;':'\\U0001d563',\n'roplus;':'\\u2a2e',\n'rotimes;':'\\u2a35',\n'RoundImplies;':'\\u2970',\n'rpar;':')',\n'rpargt;':'\\u2994',\n'rppolint;':'\\u2a12',\n'rrarr;':'\\u21c9',\n'Rrightarrow;':'\\u21db',\n'rsaquo;':'\\u203a',\n'Rscr;':'\\u211b',\n'rscr;':'\\U0001d4c7',\n'Rsh;':'\\u21b1',\n'rsh;':'\\u21b1',\n'rsqb;':']',\n'rsquo;':'\\u2019',\n'rsquor;':'\\u2019',\n'rthree;':'\\u22cc',\n'rtimes;':'\\u22ca',\n'rtri;':'\\u25b9',\n'rtrie;':'\\u22b5',\n'rtrif;':'\\u25b8',\n'rtriltri;':'\\u29ce',\n'RuleDelayed;':'\\u29f4',\n'ruluhar;':'\\u2968',\n'rx;':'\\u211e',\n'Sacute;':'\\u015a',\n'sacute;':'\\u015b',\n'sbquo;':'\\u201a',\n'Sc;':'\\u2abc',\n'sc;':'\\u227b',\n'scap;':'\\u2ab8',\n'Scaron;':'\\u0160',\n'scaron;':'\\u0161',\n'sccue;':'\\u227d',\n'scE;':'\\u2ab4',\n'sce;':'\\u2ab0',\n'Scedil;':'\\u015e',\n'scedil;':'\\u015f',\n'Scirc;':'\\u015c',\n'scirc;':'\\u015d',\n'scnap;':'\\u2aba',\n'scnE;':'\\u2ab6',\n'scnsim;':'\\u22e9',\n'scpolint;':'\\u2a13',\n'scsim;':'\\u227f',\n'Scy;':'\\u0421',\n'scy;':'\\u0441',\n'sdot;':'\\u22c5',\n'sdotb;':'\\u22a1',\n'sdote;':'\\u2a66',\n'searhk;':'\\u2925',\n'seArr;':'\\u21d8',\n'searr;':'\\u2198',\n'searrow;':'\\u2198',\n'sect':'\\xa7',\n'sect;':'\\xa7',\n'semi;':';',\n'seswar;':'\\u2929',\n'setminus;':'\\u2216',\n'setmn;':'\\u2216',\n'sext;':'\\u2736',\n'Sfr;':'\\U0001d516',\n'sfr;':'\\U0001d530',\n'sfrown;':'\\u2322',\n'sharp;':'\\u266f',\n'SHCHcy;':'\\u0429',\n'shchcy;':'\\u0449',\n'SHcy;':'\\u0428',\n'shcy;':'\\u0448',\n'ShortDownArrow;':'\\u2193',\n'ShortLeftArrow;':'\\u2190',\n'shortmid;':'\\u2223',\n'shortparallel;':'\\u2225',\n'ShortRightArrow;':'\\u2192',\n'ShortUpArrow;':'\\u2191',\n'shy':'\\xad',\n'shy;':'\\xad',\n'Sigma;':'\\u03a3',\n'sigma;':'\\u03c3',\n'sigmaf;':'\\u03c2',\n'sigmav;':'\\u03c2',\n'sim;':'\\u223c',\n'simdot;':'\\u2a6a',\n'sime;':'\\u2243',\n'simeq;':'\\u2243',\n'simg;':'\\u2a9e',\n'simgE;':'\\u2aa0',\n'siml;':'\\u2a9d',\n'simlE;':'\\u2a9f',\n'simne;':'\\u2246',\n'simplus;':'\\u2a24',\n'simrarr;':'\\u2972',\n'slarr;':'\\u2190',\n'SmallCircle;':'\\u2218',\n'smallsetminus;':'\\u2216',\n'smashp;':'\\u2a33',\n'smeparsl;':'\\u29e4',\n'smid;':'\\u2223',\n'smile;':'\\u2323',\n'smt;':'\\u2aaa',\n'smte;':'\\u2aac',\n'smtes;':'\\u2aac\\ufe00',\n'SOFTcy;':'\\u042c',\n'softcy;':'\\u044c',\n'sol;':'/',\n'solb;':'\\u29c4',\n'solbar;':'\\u233f',\n'Sopf;':'\\U0001d54a',\n'sopf;':'\\U0001d564',\n'spades;':'\\u2660',\n'spadesuit;':'\\u2660',\n'spar;':'\\u2225',\n'sqcap;':'\\u2293',\n'sqcaps;':'\\u2293\\ufe00',\n'sqcup;':'\\u2294',\n'sqcups;':'\\u2294\\ufe00',\n'Sqrt;':'\\u221a',\n'sqsub;':'\\u228f',\n'sqsube;':'\\u2291',\n'sqsubset;':'\\u228f',\n'sqsubseteq;':'\\u2291',\n'sqsup;':'\\u2290',\n'sqsupe;':'\\u2292',\n'sqsupset;':'\\u2290',\n'sqsupseteq;':'\\u2292',\n'squ;':'\\u25a1',\n'Square;':'\\u25a1',\n'square;':'\\u25a1',\n'SquareIntersection;':'\\u2293',\n'SquareSubset;':'\\u228f',\n'SquareSubsetEqual;':'\\u2291',\n'SquareSuperset;':'\\u2290',\n'SquareSupersetEqual;':'\\u2292',\n'SquareUnion;':'\\u2294',\n'squarf;':'\\u25aa',\n'squf;':'\\u25aa',\n'srarr;':'\\u2192',\n'Sscr;':'\\U0001d4ae',\n'sscr;':'\\U0001d4c8',\n'ssetmn;':'\\u2216',\n'ssmile;':'\\u2323',\n'sstarf;':'\\u22c6',\n'Star;':'\\u22c6',\n'star;':'\\u2606',\n'starf;':'\\u2605',\n'straightepsilon;':'\\u03f5',\n'straightphi;':'\\u03d5',\n'strns;':'\\xaf',\n'Sub;':'\\u22d0',\n'sub;':'\\u2282',\n'subdot;':'\\u2abd',\n'subE;':'\\u2ac5',\n'sube;':'\\u2286',\n'subedot;':'\\u2ac3',\n'submult;':'\\u2ac1',\n'subnE;':'\\u2acb',\n'subne;':'\\u228a',\n'subplus;':'\\u2abf',\n'subrarr;':'\\u2979',\n'Subset;':'\\u22d0',\n'subset;':'\\u2282',\n'subseteq;':'\\u2286',\n'subseteqq;':'\\u2ac5',\n'SubsetEqual;':'\\u2286',\n'subsetneq;':'\\u228a',\n'subsetneqq;':'\\u2acb',\n'subsim;':'\\u2ac7',\n'subsub;':'\\u2ad5',\n'subsup;':'\\u2ad3',\n'succ;':'\\u227b',\n'succapprox;':'\\u2ab8',\n'succcurlyeq;':'\\u227d',\n'Succeeds;':'\\u227b',\n'SucceedsEqual;':'\\u2ab0',\n'SucceedsSlantEqual;':'\\u227d',\n'SucceedsTilde;':'\\u227f',\n'succeq;':'\\u2ab0',\n'succnapprox;':'\\u2aba',\n'succneqq;':'\\u2ab6',\n'succnsim;':'\\u22e9',\n'succsim;':'\\u227f',\n'SuchThat;':'\\u220b',\n'Sum;':'\\u2211',\n'sum;':'\\u2211',\n'sung;':'\\u266a',\n'sup1':'\\xb9',\n'sup1;':'\\xb9',\n'sup2':'\\xb2',\n'sup2;':'\\xb2',\n'sup3':'\\xb3',\n'sup3;':'\\xb3',\n'Sup;':'\\u22d1',\n'sup;':'\\u2283',\n'supdot;':'\\u2abe',\n'supdsub;':'\\u2ad8',\n'supE;':'\\u2ac6',\n'supe;':'\\u2287',\n'supedot;':'\\u2ac4',\n'Superset;':'\\u2283',\n'SupersetEqual;':'\\u2287',\n'suphsol;':'\\u27c9',\n'suphsub;':'\\u2ad7',\n'suplarr;':'\\u297b',\n'supmult;':'\\u2ac2',\n'supnE;':'\\u2acc',\n'supne;':'\\u228b',\n'supplus;':'\\u2ac0',\n'Supset;':'\\u22d1',\n'supset;':'\\u2283',\n'supseteq;':'\\u2287',\n'supseteqq;':'\\u2ac6',\n'supsetneq;':'\\u228b',\n'supsetneqq;':'\\u2acc',\n'supsim;':'\\u2ac8',\n'supsub;':'\\u2ad4',\n'supsup;':'\\u2ad6',\n'swarhk;':'\\u2926',\n'swArr;':'\\u21d9',\n'swarr;':'\\u2199',\n'swarrow;':'\\u2199',\n'swnwar;':'\\u292a',\n'szlig':'\\xdf',\n'szlig;':'\\xdf',\n'Tab;':'\\t',\n'target;':'\\u2316',\n'Tau;':'\\u03a4',\n'tau;':'\\u03c4',\n'tbrk;':'\\u23b4',\n'Tcaron;':'\\u0164',\n'tcaron;':'\\u0165',\n'Tcedil;':'\\u0162',\n'tcedil;':'\\u0163',\n'Tcy;':'\\u0422',\n'tcy;':'\\u0442',\n'tdot;':'\\u20db',\n'telrec;':'\\u2315',\n'Tfr;':'\\U0001d517',\n'tfr;':'\\U0001d531',\n'there4;':'\\u2234',\n'Therefore;':'\\u2234',\n'therefore;':'\\u2234',\n'Theta;':'\\u0398',\n'theta;':'\\u03b8',\n'thetasym;':'\\u03d1',\n'thetav;':'\\u03d1',\n'thickapprox;':'\\u2248',\n'thicksim;':'\\u223c',\n'ThickSpace;':'\\u205f\\u200a',\n'thinsp;':'\\u2009',\n'ThinSpace;':'\\u2009',\n'thkap;':'\\u2248',\n'thksim;':'\\u223c',\n'THORN':'\\xde',\n'thorn':'\\xfe',\n'THORN;':'\\xde',\n'thorn;':'\\xfe',\n'Tilde;':'\\u223c',\n'tilde;':'\\u02dc',\n'TildeEqual;':'\\u2243',\n'TildeFullEqual;':'\\u2245',\n'TildeTilde;':'\\u2248',\n'times':'\\xd7',\n'times;':'\\xd7',\n'timesb;':'\\u22a0',\n'timesbar;':'\\u2a31',\n'timesd;':'\\u2a30',\n'tint;':'\\u222d',\n'toea;':'\\u2928',\n'top;':'\\u22a4',\n'topbot;':'\\u2336',\n'topcir;':'\\u2af1',\n'Topf;':'\\U0001d54b',\n'topf;':'\\U0001d565',\n'topfork;':'\\u2ada',\n'tosa;':'\\u2929',\n'tprime;':'\\u2034',\n'TRADE;':'\\u2122',\n'trade;':'\\u2122',\n'triangle;':'\\u25b5',\n'triangledown;':'\\u25bf',\n'triangleleft;':'\\u25c3',\n'trianglelefteq;':'\\u22b4',\n'triangleq;':'\\u225c',\n'triangleright;':'\\u25b9',\n'trianglerighteq;':'\\u22b5',\n'tridot;':'\\u25ec',\n'trie;':'\\u225c',\n'triminus;':'\\u2a3a',\n'TripleDot;':'\\u20db',\n'triplus;':'\\u2a39',\n'trisb;':'\\u29cd',\n'tritime;':'\\u2a3b',\n'trpezium;':'\\u23e2',\n'Tscr;':'\\U0001d4af',\n'tscr;':'\\U0001d4c9',\n'TScy;':'\\u0426',\n'tscy;':'\\u0446',\n'TSHcy;':'\\u040b',\n'tshcy;':'\\u045b',\n'Tstrok;':'\\u0166',\n'tstrok;':'\\u0167',\n'twixt;':'\\u226c',\n'twoheadleftarrow;':'\\u219e',\n'twoheadrightarrow;':'\\u21a0',\n'Uacute':'\\xda',\n'uacute':'\\xfa',\n'Uacute;':'\\xda',\n'uacute;':'\\xfa',\n'Uarr;':'\\u219f',\n'uArr;':'\\u21d1',\n'uarr;':'\\u2191',\n'Uarrocir;':'\\u2949',\n'Ubrcy;':'\\u040e',\n'ubrcy;':'\\u045e',\n'Ubreve;':'\\u016c',\n'ubreve;':'\\u016d',\n'Ucirc':'\\xdb',\n'ucirc':'\\xfb',\n'Ucirc;':'\\xdb',\n'ucirc;':'\\xfb',\n'Ucy;':'\\u0423',\n'ucy;':'\\u0443',\n'udarr;':'\\u21c5',\n'Udblac;':'\\u0170',\n'udblac;':'\\u0171',\n'udhar;':'\\u296e',\n'ufisht;':'\\u297e',\n'Ufr;':'\\U0001d518',\n'ufr;':'\\U0001d532',\n'Ugrave':'\\xd9',\n'ugrave':'\\xf9',\n'Ugrave;':'\\xd9',\n'ugrave;':'\\xf9',\n'uHar;':'\\u2963',\n'uharl;':'\\u21bf',\n'uharr;':'\\u21be',\n'uhblk;':'\\u2580',\n'ulcorn;':'\\u231c',\n'ulcorner;':'\\u231c',\n'ulcrop;':'\\u230f',\n'ultri;':'\\u25f8',\n'Umacr;':'\\u016a',\n'umacr;':'\\u016b',\n'uml':'\\xa8',\n'uml;':'\\xa8',\n'UnderBar;':'_',\n'UnderBrace;':'\\u23df',\n'UnderBracket;':'\\u23b5',\n'UnderParenthesis;':'\\u23dd',\n'Union;':'\\u22c3',\n'UnionPlus;':'\\u228e',\n'Uogon;':'\\u0172',\n'uogon;':'\\u0173',\n'Uopf;':'\\U0001d54c',\n'uopf;':'\\U0001d566',\n'UpArrow;':'\\u2191',\n'Uparrow;':'\\u21d1',\n'uparrow;':'\\u2191',\n'UpArrowBar;':'\\u2912',\n'UpArrowDownArrow;':'\\u21c5',\n'UpDownArrow;':'\\u2195',\n'Updownarrow;':'\\u21d5',\n'updownarrow;':'\\u2195',\n'UpEquilibrium;':'\\u296e',\n'upharpoonleft;':'\\u21bf',\n'upharpoonright;':'\\u21be',\n'uplus;':'\\u228e',\n'UpperLeftArrow;':'\\u2196',\n'UpperRightArrow;':'\\u2197',\n'Upsi;':'\\u03d2',\n'upsi;':'\\u03c5',\n'upsih;':'\\u03d2',\n'Upsilon;':'\\u03a5',\n'upsilon;':'\\u03c5',\n'UpTee;':'\\u22a5',\n'UpTeeArrow;':'\\u21a5',\n'upuparrows;':'\\u21c8',\n'urcorn;':'\\u231d',\n'urcorner;':'\\u231d',\n'urcrop;':'\\u230e',\n'Uring;':'\\u016e',\n'uring;':'\\u016f',\n'urtri;':'\\u25f9',\n'Uscr;':'\\U0001d4b0',\n'uscr;':'\\U0001d4ca',\n'utdot;':'\\u22f0',\n'Utilde;':'\\u0168',\n'utilde;':'\\u0169',\n'utri;':'\\u25b5',\n'utrif;':'\\u25b4',\n'uuarr;':'\\u21c8',\n'Uuml':'\\xdc',\n'uuml':'\\xfc',\n'Uuml;':'\\xdc',\n'uuml;':'\\xfc',\n'uwangle;':'\\u29a7',\n'vangrt;':'\\u299c',\n'varepsilon;':'\\u03f5',\n'varkappa;':'\\u03f0',\n'varnothing;':'\\u2205',\n'varphi;':'\\u03d5',\n'varpi;':'\\u03d6',\n'varpropto;':'\\u221d',\n'vArr;':'\\u21d5',\n'varr;':'\\u2195',\n'varrho;':'\\u03f1',\n'varsigma;':'\\u03c2',\n'varsubsetneq;':'\\u228a\\ufe00',\n'varsubsetneqq;':'\\u2acb\\ufe00',\n'varsupsetneq;':'\\u228b\\ufe00',\n'varsupsetneqq;':'\\u2acc\\ufe00',\n'vartheta;':'\\u03d1',\n'vartriangleleft;':'\\u22b2',\n'vartriangleright;':'\\u22b3',\n'Vbar;':'\\u2aeb',\n'vBar;':'\\u2ae8',\n'vBarv;':'\\u2ae9',\n'Vcy;':'\\u0412',\n'vcy;':'\\u0432',\n'VDash;':'\\u22ab',\n'Vdash;':'\\u22a9',\n'vDash;':'\\u22a8',\n'vdash;':'\\u22a2',\n'Vdashl;':'\\u2ae6',\n'Vee;':'\\u22c1',\n'vee;':'\\u2228',\n'veebar;':'\\u22bb',\n'veeeq;':'\\u225a',\n'vellip;':'\\u22ee',\n'Verbar;':'\\u2016',\n'verbar;':'|',\n'Vert;':'\\u2016',\n'vert;':'|',\n'VerticalBar;':'\\u2223',\n'VerticalLine;':'|',\n'VerticalSeparator;':'\\u2758',\n'VerticalTilde;':'\\u2240',\n'VeryThinSpace;':'\\u200a',\n'Vfr;':'\\U0001d519',\n'vfr;':'\\U0001d533',\n'vltri;':'\\u22b2',\n'vnsub;':'\\u2282\\u20d2',\n'vnsup;':'\\u2283\\u20d2',\n'Vopf;':'\\U0001d54d',\n'vopf;':'\\U0001d567',\n'vprop;':'\\u221d',\n'vrtri;':'\\u22b3',\n'Vscr;':'\\U0001d4b1',\n'vscr;':'\\U0001d4cb',\n'vsubnE;':'\\u2acb\\ufe00',\n'vsubne;':'\\u228a\\ufe00',\n'vsupnE;':'\\u2acc\\ufe00',\n'vsupne;':'\\u228b\\ufe00',\n'Vvdash;':'\\u22aa',\n'vzigzag;':'\\u299a',\n'Wcirc;':'\\u0174',\n'wcirc;':'\\u0175',\n'wedbar;':'\\u2a5f',\n'Wedge;':'\\u22c0',\n'wedge;':'\\u2227',\n'wedgeq;':'\\u2259',\n'weierp;':'\\u2118',\n'Wfr;':'\\U0001d51a',\n'wfr;':'\\U0001d534',\n'Wopf;':'\\U0001d54e',\n'wopf;':'\\U0001d568',\n'wp;':'\\u2118',\n'wr;':'\\u2240',\n'wreath;':'\\u2240',\n'Wscr;':'\\U0001d4b2',\n'wscr;':'\\U0001d4cc',\n'xcap;':'\\u22c2',\n'xcirc;':'\\u25ef',\n'xcup;':'\\u22c3',\n'xdtri;':'\\u25bd',\n'Xfr;':'\\U0001d51b',\n'xfr;':'\\U0001d535',\n'xhArr;':'\\u27fa',\n'xharr;':'\\u27f7',\n'Xi;':'\\u039e',\n'xi;':'\\u03be',\n'xlArr;':'\\u27f8',\n'xlarr;':'\\u27f5',\n'xmap;':'\\u27fc',\n'xnis;':'\\u22fb',\n'xodot;':'\\u2a00',\n'Xopf;':'\\U0001d54f',\n'xopf;':'\\U0001d569',\n'xoplus;':'\\u2a01',\n'xotime;':'\\u2a02',\n'xrArr;':'\\u27f9',\n'xrarr;':'\\u27f6',\n'Xscr;':'\\U0001d4b3',\n'xscr;':'\\U0001d4cd',\n'xsqcup;':'\\u2a06',\n'xuplus;':'\\u2a04',\n'xutri;':'\\u25b3',\n'xvee;':'\\u22c1',\n'xwedge;':'\\u22c0',\n'Yacute':'\\xdd',\n'yacute':'\\xfd',\n'Yacute;':'\\xdd',\n'yacute;':'\\xfd',\n'YAcy;':'\\u042f',\n'yacy;':'\\u044f',\n'Ycirc;':'\\u0176',\n'ycirc;':'\\u0177',\n'Ycy;':'\\u042b',\n'ycy;':'\\u044b',\n'yen':'\\xa5',\n'yen;':'\\xa5',\n'Yfr;':'\\U0001d51c',\n'yfr;':'\\U0001d536',\n'YIcy;':'\\u0407',\n'yicy;':'\\u0457',\n'Yopf;':'\\U0001d550',\n'yopf;':'\\U0001d56a',\n'Yscr;':'\\U0001d4b4',\n'yscr;':'\\U0001d4ce',\n'YUcy;':'\\u042e',\n'yucy;':'\\u044e',\n'yuml':'\\xff',\n'Yuml;':'\\u0178',\n'yuml;':'\\xff',\n'Zacute;':'\\u0179',\n'zacute;':'\\u017a',\n'Zcaron;':'\\u017d',\n'zcaron;':'\\u017e',\n'Zcy;':'\\u0417',\n'zcy;':'\\u0437',\n'Zdot;':'\\u017b',\n'zdot;':'\\u017c',\n'zeetrf;':'\\u2128',\n'ZeroWidthSpace;':'\\u200b',\n'Zeta;':'\\u0396',\n'zeta;':'\\u03b6',\n'Zfr;':'\\u2128',\n'zfr;':'\\U0001d537',\n'ZHcy;':'\\u0416',\n'zhcy;':'\\u0436',\n'zigrarr;':'\\u21dd',\n'Zopf;':'\\u2124',\n'zopf;':'\\U0001d56b',\n'Zscr;':'\\U0001d4b5',\n'zscr;':'\\U0001d4cf',\n'zwj;':'\\u200d',\n'zwnj;':'\\u200c',\n}\n\n\ncodepoint2name={}\n\n\n\nentitydefs={}\n\nfor (name,codepoint)in name2codepoint.items():\n codepoint2name[codepoint]=name\n entitydefs[name]=chr(codepoint)\n \ndel name,codepoint\n",[]],"html.parser":[".py","''\n\n\n\n\n\n\n\n\n\nimport _markupbase\nimport re\nimport warnings\n\n\n\ninteresting_normal=re.compile('[&<]')\nincomplete=re.compile('&[a-zA-Z#]')\n\nentityref=re.compile('&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]')\ncharref=re.compile('&#(?:[0-9]+|[xX][0-9a-fA-F]+)[^0-9a-fA-F]')\n\nstarttagopen=re.compile('<[a-zA-Z]')\npiclose=re.compile('>')\ncommentclose=re.compile(r'--\\s*>')\ntagfind=re.compile('([a-zA-Z][-.a-zA-Z0-9:_]*)(?:\\s|/(?!>))*')\n\n\ntagfind_tolerant=re.compile('[a-zA-Z][^\\t\\n\\r\\f />\\x00]*')\n\n\n\n\n\n\nattrfind=re.compile(\nr'\\s*([a-zA-Z_][-.:a-zA-Z_0-9]*)(\\s*=\\s*'\nr'(\\'[^\\']*\\'|\"[^\"]*\"|[^\\s\"\\'=<>`]*))?')\nattrfind_tolerant=re.compile(\nr'((?<=[\\'\"\\s/])[^\\s/>][^\\s/=>]*)(\\s*=+\\s*'\nr'(\\'[^\\']*\\'|\"[^\"]*\"|(?![\\'\"])[^>\\s]*))?(?:\\s|/(?!>))*')\nlocatestarttagend=re.compile(r\"\"\"\n <[a-zA-Z][-.a-zA-Z0-9:_]* # tag name\n (?:\\s+ # whitespace before attribute name\n (?:[a-zA-Z_][-.:a-zA-Z0-9_]* # attribute name\n (?:\\s*=\\s* # value indicator\n (?:'[^']*' # LITA-enclosed value\n |\\\"[^\\\"]*\\\" # LIT-enclosed value\n |[^'\\\">\\s]+ # bare value\n )\n )?\n )\n )*\n \\s* # trailing whitespace\n\"\"\",re.VERBOSE)\nlocatestarttagend_tolerant=re.compile(r\"\"\"\n <[a-zA-Z][-.a-zA-Z0-9:_]* # tag name\n (?:[\\s/]* # optional whitespace before attribute name\n (?:(?<=['\"\\s/])[^\\s/>][^\\s/=>]* # attribute name\n (?:\\s*=+\\s* # value indicator\n (?:'[^']*' # LITA-enclosed value\n |\"[^\"]*\" # LIT-enclosed value\n |(?!['\"])[^>\\s]* # bare value\n )\n (?:\\s*,)* # possibly followed by a comma\n )?(?:\\s|/(?!>))*\n )*\n )?\n \\s* # trailing whitespace\n\"\"\",re.VERBOSE)\nendendtag=re.compile('>')\n\n\nendtagfind=re.compile('')\n\n\nclass HTMLParseError(Exception):\n ''\n \n def __init__(self,msg,position=(None ,None )):\n assert msg\n self.msg=msg\n self.lineno=position[0]\n self.offset=position[1]\n \n def __str__(self):\n result=self.msg\n if self.lineno is not None :\n result=result+\", at line %d\"%self.lineno\n if self.offset is not None :\n result=result+\", column %d\"%(self.offset+1)\n return result\n \n \nclass HTMLParser(_markupbase.ParserBase):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n CDATA_CONTENT_ELEMENTS=(\"script\",\"style\")\n \n def __init__(self,strict=False ):\n ''\n\n\n\n\n \n if strict:\n warnings.warn(\"The strict mode is deprecated.\",\n DeprecationWarning,stacklevel=2)\n self.strict=strict\n self.reset()\n \n def reset(self):\n ''\n self.rawdata=''\n self.lasttag='???'\n self.interesting=interesting_normal\n self.cdata_elem=None\n _markupbase.ParserBase.reset(self)\n \n def feed(self,data):\n ''\n\n\n\n \n self.rawdata=self.rawdata+data\n self.goahead(0)\n \n def close(self):\n ''\n self.goahead(1)\n \n def error(self,message):\n raise HTMLParseError(message,self.getpos())\n \n __starttag_text=None\n \n def get_starttag_text(self):\n ''\n return self.__starttag_text\n \n def set_cdata_mode(self,elem):\n self.cdata_elem=elem.lower()\n self.interesting=re.compile(r''%self.cdata_elem,re.I)\n \n def clear_cdata_mode(self):\n self.interesting=interesting_normal\n self.cdata_elem=None\n \n \n \n \n def goahead(self,end):\n rawdata=self.rawdata\n i=0\n n=len(rawdata)\n while i ',i+1)\n if k <0:\n k=rawdata.find('<',i+1)\n if k <0:\n k=i+1\n else :\n k +=1\n self.handle_data(rawdata[i:k])\n i=self.updatepos(i,k)\n elif startswith(\"&#\",i):\n match=charref.match(rawdata,i)\n if match:\n name=match.group()[2:-1]\n self.handle_charref(name)\n k=match.end()\n if not startswith(';',k -1):\n k=k -1\n i=self.updatepos(i,k)\n continue\n else :\n if \";\"in rawdata[i:]:\n self.handle_data(rawdata[0:2])\n i=self.updatepos(i,2)\n break\n elif startswith('&',i):\n match=entityref.match(rawdata,i)\n if match:\n name=match.group(1)\n self.handle_entityref(name)\n k=match.end()\n if not startswith(';',k -1):\n k=k -1\n i=self.updatepos(i,k)\n continue\n match=incomplete.match(rawdata,i)\n if match:\n \n if end and match.group()==rawdata[i:]:\n if self.strict:\n self.error(\"EOF in middle of entity or char ref\")\n else :\n k=match.end()\n if k <=i:\n k=n\n i=self.updatepos(i,i+1)\n \n break\n elif (i+1)',i+9)\n if gtpos ==-1:\n return -1\n self.handle_decl(rawdata[i+2:gtpos])\n return gtpos+1\n else :\n return self.parse_bogus_comment(i)\n \n \n \n def parse_bogus_comment(self,i,report=1):\n rawdata=self.rawdata\n assert rawdata[i:i+2]in ('',i+2)\n if pos ==-1:\n return -1\n if report:\n self.handle_comment(rawdata[i+2:pos])\n return pos+1\n \n \n def parse_pi(self,i):\n rawdata=self.rawdata\n assert rawdata[i:i+2]=='\",\"/>\"):\n lineno,offset=self.getpos()\n if \"\\n\"in self.__starttag_text:\n lineno=lineno+self.__starttag_text.count(\"\\n\")\n offset=len(self.__starttag_text)\\\n -self.__starttag_text.rfind(\"\\n\")\n else :\n offset=offset+len(self.__starttag_text)\n if self.strict:\n self.error(\"junk characters in start tag: %r\"\n %(rawdata[k:endpos][:20],))\n self.handle_data(rawdata[i:endpos])\n return endpos\n if end.endswith('/>'):\n \n self.handle_startendtag(tag,attrs)\n else :\n self.handle_starttag(tag,attrs)\n if tag in self.CDATA_CONTENT_ELEMENTS:\n self.set_cdata_mode(tag)\n return endpos\n \n \n \n def check_for_whole_start_tag(self,i):\n rawdata=self.rawdata\n if self.strict:\n m=locatestarttagend.match(rawdata,i)\n else :\n m=locatestarttagend_tolerant.match(rawdata,i)\n if m:\n j=m.end()\n next=rawdata[j:j+1]\n if next ==\">\":\n return j+1\n if next ==\"/\":\n if rawdata.startswith(\"/>\",j):\n return j+2\n if rawdata.startswith(\"/\",j):\n \n return -1\n \n if self.strict:\n self.updatepos(i,j+1)\n self.error(\"malformed empty start tag\")\n if j >i:\n return j\n else :\n return i+1\n if next ==\"\":\n \n return -1\n if next in (\"abcdefghijklmnopqrstuvwxyz=/\"\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"):\n \n \n return -1\n if self.strict:\n self.updatepos(i,j)\n self.error(\"malformed start tag\")\n if j >i:\n return j\n else :\n return i+1\n raise AssertionError(\"we should not get here!\")\n \n \n def parse_endtag(self,i):\n rawdata=self.rawdata\n assert rawdata[i:i+2]==\"':\n return i+3\n else :\n return self.parse_bogus_comment(i)\n tagname=namematch.group().lower()\n \n \n \n \n gtpos=rawdata.find('>',namematch.end())\n self.handle_endtag(tagname)\n return gtpos+1\n \n elem=match.group(1).lower()\n if self.cdata_elem is not None :\n if elem !=self.cdata_elem:\n self.handle_data(rawdata[i:gtpos])\n return gtpos\n \n self.handle_endtag(elem.lower())\n self.clear_cdata_mode()\n return gtpos\n \n \n def handle_startendtag(self,tag,attrs):\n self.handle_starttag(tag,attrs)\n self.handle_endtag(tag)\n \n \n def handle_starttag(self,tag,attrs):\n pass\n \n \n def handle_endtag(self,tag):\n pass\n \n \n def handle_charref(self,name):\n pass\n \n \n def handle_entityref(self,name):\n pass\n \n \n def handle_data(self,data):\n pass\n \n \n def handle_comment(self,data):\n pass\n \n \n def handle_decl(self,decl):\n pass\n \n \n def handle_pi(self,data):\n pass\n \n def unknown_decl(self,data):\n if self.strict:\n self.error(\"unknown declaration: %r\"%(data,))\n \n \n def unescape(self,s):\n if '&'not in s:\n return s\n def replaceEntities(s):\n s=s.groups()[0]\n try :\n if s[0]==\"#\":\n s=s[1:]\n if s[0]in ['x','X']:\n c=int(s[1:].rstrip(';'),16)\n else :\n c=int(s.rstrip(';'))\n return chr(c)\n except ValueError:\n return '&#'+s\n else :\n from html.entities import html5\n if s in html5:\n return html5[s]\n elif s.endswith(';'):\n return '&'+s\n for x in range(2,len(s)):\n if s[:x]in html5:\n return html5[s[:x]]+s[x:]\n else :\n return '&'+s\n \n return re.sub(r\"&(#?[xX]?(?:[0-9a-fA-F]+;|\\w{1,32};?))\",\n replaceEntities,s,flags=re.ASCII)\n",["_markupbase","html.entities","re","warnings"]],html:[".py","''\n\n\n\n\n_escape_map={ord('&'):'&',ord('<'):'<',ord('>'):'>'}\n_escape_map_full={ord('&'):'&',ord('<'):'<',ord('>'):'>',\nord('\"'):'"',ord('\\''):'''}\n\n\n\ndef escape(s,quote=True ):\n ''\n\n\n\n\n \n if quote:\n return s.translate(_escape_map_full)\n return s.translate(_escape_map)\n",[],1],"http.cookies":[".py","#!/usr/bin/env python3\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nr\"\"\"\nHere's a sample session to show how to use this module.\nAt the moment, this is the only documentation.\n\nThe Basics\n----------\n\nImporting is easy...\n\n >>> from http import cookies\n\nMost of the time you start by creating a cookie.\n\n >>> C = cookies.SimpleCookie()\n\nOnce you've created your Cookie, you can add values just as if it were\na dictionary.\n\n >>> C = cookies.SimpleCookie()\n >>> C[\"fig\"] = \"newton\"\n >>> C[\"sugar\"] = \"wafer\"\n >>> C.output()\n 'Set-Cookie: fig=newton\\r\\nSet-Cookie: sugar=wafer'\n\nNotice that the printable representation of a Cookie is the\nappropriate format for a Set-Cookie: header. This is the\ndefault behavior. You can change the header and printed\nattributes by using the .output() function\n\n >>> C = cookies.SimpleCookie()\n >>> C[\"rocky\"] = \"road\"\n >>> C[\"rocky\"][\"path\"] = \"/cookie\"\n >>> print(C.output(header=\"Cookie:\"))\n Cookie: rocky=road; Path=/cookie\n >>> print(C.output(attrs=[], header=\"Cookie:\"))\n Cookie: rocky=road\n\nThe load() method of a Cookie extracts cookies from a string. In a\nCGI script, you would use this method to extract the cookies from the\nHTTP_COOKIE environment variable.\n\n >>> C = cookies.SimpleCookie()\n >>> C.load(\"chips=ahoy; vienna=finger\")\n >>> C.output()\n 'Set-Cookie: chips=ahoy\\r\\nSet-Cookie: vienna=finger'\n\nThe load() method is darn-tootin smart about identifying cookies\nwithin a string. Escaped quotation marks, nested semicolons, and other\nsuch trickeries do not confuse it.\n\n >>> C = cookies.SimpleCookie()\n >>> C.load('keebler=\"E=everybody; L=\\\\\"Loves\\\\\"; fudge=\\\\012;\";')\n >>> print(C)\n Set-Cookie: keebler=\"E=everybody; L=\\\"Loves\\\"; fudge=\\012;\"\n\nEach element of the Cookie also supports all of the RFC 2109\nCookie attributes. Here's an example which sets the Path\nattribute.\n\n >>> C = cookies.SimpleCookie()\n >>> C[\"oreo\"] = \"doublestuff\"\n >>> C[\"oreo\"][\"path\"] = \"/\"\n >>> print(C)\n Set-Cookie: oreo=doublestuff; Path=/\n\nEach dictionary element has a 'value' attribute, which gives you\nback the value associated with the key.\n\n >>> C = cookies.SimpleCookie()\n >>> C[\"twix\"] = \"none for you\"\n >>> C[\"twix\"].value\n 'none for you'\n\nThe SimpleCookie expects that all values should be standard strings.\nJust to be sure, SimpleCookie invokes the str() builtin to convert\nthe value to a string, when the values are set dictionary-style.\n\n >>> C = cookies.SimpleCookie()\n >>> C[\"number\"] = 7\n >>> C[\"string\"] = \"seven\"\n >>> C[\"number\"].value\n '7'\n >>> C[\"string\"].value\n 'seven'\n >>> C.output()\n 'Set-Cookie: number=7\\r\\nSet-Cookie: string=seven'\n\nFinis.\n\"\"\"\n\n\n\n\nimport _jsre as re\n\n__all__=[\"CookieError\",\"BaseCookie\",\"SimpleCookie\"]\n\n_nulljoin=''.join\n_semispacejoin='; '.join\n_spacejoin=' '.join\n\n\n\n\nclass CookieError(Exception):\n pass\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nascii_lowercase='abcdefghijklmnopqrstuvwxyz'\nascii_uppercase='ABCDEFGHIJKLMNOPQRSTUVWXYZ'\nascii_letters=ascii_lowercase+ascii_uppercase\ndigits='0123456789'\n\n_LegalChars=ascii_letters+digits+\"!#$%&'*+-.^_`|~:\"\n_Translator={\n'\\000':'\\\\000','\\001':'\\\\001','\\002':'\\\\002',\n'\\003':'\\\\003','\\004':'\\\\004','\\005':'\\\\005',\n'\\006':'\\\\006','\\007':'\\\\007','\\010':'\\\\010',\n'\\011':'\\\\011','\\012':'\\\\012','\\013':'\\\\013',\n'\\014':'\\\\014','\\015':'\\\\015','\\016':'\\\\016',\n'\\017':'\\\\017','\\020':'\\\\020','\\021':'\\\\021',\n'\\022':'\\\\022','\\023':'\\\\023','\\024':'\\\\024',\n'\\025':'\\\\025','\\026':'\\\\026','\\027':'\\\\027',\n'\\030':'\\\\030','\\031':'\\\\031','\\032':'\\\\032',\n'\\033':'\\\\033','\\034':'\\\\034','\\035':'\\\\035',\n'\\036':'\\\\036','\\037':'\\\\037',\n\n\n\n\n',':'\\\\054',';':'\\\\073',\n\n'\"':'\\\\\"','\\\\':'\\\\\\\\',\n\n'\\177':'\\\\177','\\200':'\\\\200','\\201':'\\\\201',\n'\\202':'\\\\202','\\203':'\\\\203','\\204':'\\\\204',\n'\\205':'\\\\205','\\206':'\\\\206','\\207':'\\\\207',\n'\\210':'\\\\210','\\211':'\\\\211','\\212':'\\\\212',\n'\\213':'\\\\213','\\214':'\\\\214','\\215':'\\\\215',\n'\\216':'\\\\216','\\217':'\\\\217','\\220':'\\\\220',\n'\\221':'\\\\221','\\222':'\\\\222','\\223':'\\\\223',\n'\\224':'\\\\224','\\225':'\\\\225','\\226':'\\\\226',\n'\\227':'\\\\227','\\230':'\\\\230','\\231':'\\\\231',\n'\\232':'\\\\232','\\233':'\\\\233','\\234':'\\\\234',\n'\\235':'\\\\235','\\236':'\\\\236','\\237':'\\\\237',\n'\\240':'\\\\240','\\241':'\\\\241','\\242':'\\\\242',\n'\\243':'\\\\243','\\244':'\\\\244','\\245':'\\\\245',\n'\\246':'\\\\246','\\247':'\\\\247','\\250':'\\\\250',\n'\\251':'\\\\251','\\252':'\\\\252','\\253':'\\\\253',\n'\\254':'\\\\254','\\255':'\\\\255','\\256':'\\\\256',\n'\\257':'\\\\257','\\260':'\\\\260','\\261':'\\\\261',\n'\\262':'\\\\262','\\263':'\\\\263','\\264':'\\\\264',\n'\\265':'\\\\265','\\266':'\\\\266','\\267':'\\\\267',\n'\\270':'\\\\270','\\271':'\\\\271','\\272':'\\\\272',\n'\\273':'\\\\273','\\274':'\\\\274','\\275':'\\\\275',\n'\\276':'\\\\276','\\277':'\\\\277','\\300':'\\\\300',\n'\\301':'\\\\301','\\302':'\\\\302','\\303':'\\\\303',\n'\\304':'\\\\304','\\305':'\\\\305','\\306':'\\\\306',\n'\\307':'\\\\307','\\310':'\\\\310','\\311':'\\\\311',\n'\\312':'\\\\312','\\313':'\\\\313','\\314':'\\\\314',\n'\\315':'\\\\315','\\316':'\\\\316','\\317':'\\\\317',\n'\\320':'\\\\320','\\321':'\\\\321','\\322':'\\\\322',\n'\\323':'\\\\323','\\324':'\\\\324','\\325':'\\\\325',\n'\\326':'\\\\326','\\327':'\\\\327','\\330':'\\\\330',\n'\\331':'\\\\331','\\332':'\\\\332','\\333':'\\\\333',\n'\\334':'\\\\334','\\335':'\\\\335','\\336':'\\\\336',\n'\\337':'\\\\337','\\340':'\\\\340','\\341':'\\\\341',\n'\\342':'\\\\342','\\343':'\\\\343','\\344':'\\\\344',\n'\\345':'\\\\345','\\346':'\\\\346','\\347':'\\\\347',\n'\\350':'\\\\350','\\351':'\\\\351','\\352':'\\\\352',\n'\\353':'\\\\353','\\354':'\\\\354','\\355':'\\\\355',\n'\\356':'\\\\356','\\357':'\\\\357','\\360':'\\\\360',\n'\\361':'\\\\361','\\362':'\\\\362','\\363':'\\\\363',\n'\\364':'\\\\364','\\365':'\\\\365','\\366':'\\\\366',\n'\\367':'\\\\367','\\370':'\\\\370','\\371':'\\\\371',\n'\\372':'\\\\372','\\373':'\\\\373','\\374':'\\\\374',\n'\\375':'\\\\375','\\376':'\\\\376','\\377':'\\\\377'\n}\n\ndef _quote(str,LegalChars=_LegalChars):\n ''\n\n\n\n\n \n if all(c in LegalChars for c in str):\n return str\n else :\n return '\"'+_nulljoin(_Translator.get(s,s)for s in str)+'\"'\n \n \n_OctalPatt=re.compile(r\"\\\\[0-3][0-7][0-7]\")\n_QuotePatt=re.compile(r\"[\\\\].\")\n\ndef _unquote(str):\n\n\n if len(str)<2:\n return str\n if str[0]!='\"'or str[-1]!='\"':\n return str\n \n \n \n \n \n str=str[1:-1]\n \n \n \n \n \n i=0\n n=len(str)\n res=[]\n while 0 <=i '%(self.__class__.__name__,\n self.key,repr(self.value))\n \n def js_output(self,attrs=None ):\n \n return \"\"\"\n