From 3d5ed26c84548338e83a1deaa99a4f37e7035f15 Mon Sep 17 00:00:00 2001 From: Gordon Smith Date: Tue, 9 Aug 2022 16:48:58 +0100 Subject: [PATCH] fix(notebooks): Initial load fails to display Signed-off-by: Gordon Smith --- ecl-sample/notebooks/wuResult.eclnb | 1 + package-lock.json | 2 +- package.json | 48 +- scripts/grammar-generate.sh | 16 +- src/eclwatch/WUResult.tsx | 2 +- src/extension.ts | 3 +- src/grammar/kel/KELLexer.js | 1200 +++------ src/grammar/kel/KELParser.js | 3524 ++++++++++++------------- src/grammar/kel/KELParserListener.js | 20 +- src/grammar/kel/KELParserVisitor.js | 14 +- src/hpccplatform/session.ts | 13 + src/kel/parser.ts | 2 +- src/notebook-renderers/ojsRenderer.ts | 83 + src/notebook-renderers/wuRenderer.tsx | 80 + src/notebook/controller.ts | 124 +- src/notebook/main.ts | 28 +- src/notebook/serializer.ts | 5 +- src/renderer.ts | 14 - src/util/errorListener.ts | 4 +- tsconfig.json | 7 +- webpack.config.js | 13 +- 21 files changed, 2540 insertions(+), 2663 deletions(-) create mode 100644 ecl-sample/notebooks/wuResult.eclnb create mode 100644 src/notebook-renderers/ojsRenderer.ts create mode 100644 src/notebook-renderers/wuRenderer.tsx delete mode 100644 src/renderer.ts diff --git a/ecl-sample/notebooks/wuResult.eclnb b/ecl-sample/notebooks/wuResult.eclnb new file mode 100644 index 00000000..bc84b124 --- /dev/null +++ b/ecl-sample/notebooks/wuResult.eclnb @@ -0,0 +1 @@ +[{"kind":1,"language":"markdown","value":"# Hello and Welcome","outputs":[]},{"kind":2,"language":"ecl","value":"r := record\r\n real v00;\r\n real v01;\r\n real v02;\r\n real v03;\r\n real v04;\r\n real v05;\r\n real v06;\r\n real v07;\r\n real v08;\r\n real v09;\r\n real v10;\r\n real v11;\r\n real v12;\r\n real v13;\r\n real v14;\r\n real v15;\r\n real v16;\r\n real v17;\r\n real v18;\r\n real v19;\r\n real v20;\r\n real v21;\r\n real v22;\r\n real v23;\r\n real v24;\r\nend;\r\n","outputs":[{"mime":"text/plain","data":[46,46,46,110,111,32,97,99,116,105,111,110,46,46,46]}]},{"kind":2,"language":"ecl","value":"d := dataset([{ 27.80985 ,49.61936 ,83.08067 ,116.6632 ,130.414 ,150.7206 ,220.1871 ,156.1536 ,148.6416 ,203.7845 ,206.0386 ,107.1618 ,68.36975 ,45.3359 ,49.96142 ,21.89279 ,17.02552 ,11.74317 ,14.75226 ,13.6671 ,5.677561 ,3.31234 ,1.156517 ,-0.147662 ,0 },{ 27.71966 ,48.55022 ,65.21374 ,95.27666 ,116.9964 ,133.9056 ,152.3412 ,151.934 ,160.1139 ,179.5327 ,147.6184 ,170.3943 ,121.8194 ,52.58537 ,33.08871 ,38.40972 ,44.24843 ,69.5786 ,4.019351 ,3.050024 ,3.039719 ,2.996142 ,2.967954 ,1.999594 ,1 },{ 30.4267 ,33.47752 ,44.80953 ,62.47495 ,77.43523 ,104.2153 ,102.7393 ,137.0004 ,186.0706 ,219.3173 ,181.7615 ,120.9154 ,143.1835 ,82.40501 ,48.47132 ,74.71461 ,60.0909 ,7.073525 ,6.089851 ,6.53745 ,6.666096 ,7.306965 ,5.73684 ,3.625628 ,2 },{ 16.66549 ,30.1086 ,39.96952 ,44.12225 ,59.57512 ,77.56929 ,106.8925 ,166.5539 ,175.2381 ,185.2815 ,154.5056 ,83.0433 ,62.61732 ,62.33167 ,60.55916 ,55.92124 ,15.17284 ,8.248324 ,36.68087 ,61.93413 ,20.26867 ,68.58819 ,46.49812 ,0.2360095 ,3 },{ 8.815617 ,18.3516 ,8.658275 ,27.5859 ,48.62691 ,60.18013 ,91.3286 ,145.7109 ,116.0653 ,106.2662 ,68.69447 ,53.10596 ,37.92797 ,47.95942 ,47.42691 ,69.20731 ,44.95468 ,29.17197 ,17.91674 ,16.25515 ,14.65559 ,17.26048 ,31.22245 ,46.71704 ,4 },{ 6.628881 ,10.41339 ,24.81939 ,26.08952 ,30.1605 ,52.30802 ,64.71007 ,76.30823 ,84.63686 ,99.4324 ,62.52132 ,46.81647 ,55.76606 ,82.4099 ,140.2647 ,81.26501 ,56.45756 ,30.42164 ,17.28782 ,8.302431 ,2.981626 ,2.698536 ,5.886086 ,5.268358 ,5 },{ 21.83975 ,6.63927 ,18.97085 ,32.89204 ,43.15014 ,62.86014 ,104.6657 ,130.2294 ,114.8494 ,106.9873 ,61.89647 ,55.55682 ,86.80986 ,89.27802 ,122.4221 ,123.9698 ,109.0952 ,98.41956 ,77.61374 ,32.49031 ,14.67344 ,7.370775 ,0.03711011 ,0.6423392 ,6 },{ 53.34303 ,26.79797 ,6.63927 ,10.88787 ,17.2044 ,56.18116 ,79.70141 ,90.8453 ,98.27675 ,80.87243 ,74.7931 ,75.54661 ,73.4373 ,74.11694 ,68.1749 ,46.24076 ,39.93857 ,31.21653 ,36.88335 ,40.02525 ,117.4297 ,12.70328 ,1.729771 ,0 ,7 },{ 25.66785 ,63.05717 ,22.1414 ,17.074 ,41.74483 ,60.27227 ,81.42432 ,114.444 ,102.3234 ,101.7878 ,111.031 ,119.2309 ,114.0777 ,110.5296 ,59.19355 ,42.47175 ,14.63598 ,6.944074 ,6.944075 ,27.74936 ,0 ,0 ,0.09449376 ,0.07732264 ,8 },{ 12.827 ,69.20554 ,46.76293 ,13.96517 ,33.88744 ,61.82613 ,84.74799 ,121.122 ,145.2741 ,153.1797 ,204.786 ,227.9242 ,236.3038 ,228.3655 ,79.34425 ,25.93483 ,6.944074 ,6.944074 ,6.944075 ,7.553681 ,0 ,0 ,0 ,0 ,9 },{ 0 ,68.66396 ,59.0435 ,33.35762 ,47.45282 ,57.8355 ,78.91689 ,107.8275 ,168.0053 ,130.9597 ,212.5541 ,165.8122 ,210.2429 ,181.1713 ,189.7617 ,137.3378 ,84.65395 ,8.677168 ,6.956576 ,8.468093 ,0 ,0 ,0 ,0 ,10 },{ 0 ,95.17499 ,80.03818 ,59.89862 ,39.58476 ,50.28058 ,63.81641 ,80.61302 ,66.37824 ,198.7651 ,244.3467 ,294.2474 ,264.3517 ,176.4082 ,60.21857 ,77.41475 ,53.16981 ,56.16393 ,6.949235 ,7.531059 ,3.780177 ,0 ,0 ,0 ,11 },{ 0 ,134.9879 ,130.3696 ,96.86325 ,75.70494 ,58.86466 ,57.20374 ,55.18837 ,78.128 ,108.5582 ,154.3774 ,319.1686 ,372.8826 ,275.4655 ,130.2632 ,54.93822 ,25.49719 ,8.047439 ,8.084393 ,5.115252 ,5.678269 ,0 ,0 ,0 ,12 },{ 0 ,48.08919 ,142.5558 ,140.3777 ,154.7261 ,87.9361 ,58.11092 ,52.83869 ,67.14822 ,83.66798 ,118.9242 ,150.0681 ,272.9709 ,341.1366 ,238.664 ,190.2 ,116.8943 ,91.48672 ,14.0157 ,42.29277 ,5.115252 ,0 ,0 ,0 ,13 },{ 0 ,54.1941 ,146.3839 ,99.48143 ,96.19411 ,102.9473 ,76.14089 ,57.7844 ,47.0402 ,64.36799 ,84.23767 ,162.7181 ,121.3275 ,213.1646 ,328.482 ,285.4489 ,283.8319 ,212.815 ,164.549 ,92.29631 ,7.244015 ,1.167 ,0 ,0 ,14 },{ 0 ,6.919659 ,195.1709 ,132.5253 ,135.2341 ,89.85069 ,89.45549 ,60.29967 ,50.33806 ,39.17583 ,59.06854 ,74.52159 ,84.93402 ,187.1219 ,123.9673 ,103.7027 ,128.986 ,165.1283 ,249.7054 ,95.39966 ,10.00284 ,2.39255 ,0 ,0 ,15 },{ 0 ,21.73871 ,123.1339 ,176.7414 ,158.2698 ,137.235 ,105.3089 ,86.63255 ,53.11591 ,29.03865 ,30.40539 ,39.04902 ,49.23405 ,63.27853 ,111.4215 ,101.1956 ,40.00962 ,59.84565 ,74.51253 ,17.06316 ,2.435141 ,2.287471 ,-0.0003636982 ,0 ,16 },{ 0 ,0 ,62.04672 ,136.3122 ,201.7952 ,168.1343 ,95.2046 ,58.90624 ,46.94091 ,49.27053 ,37.10416 ,17.97011 ,30.93697 ,33.39257 ,44.03077 ,55.64542 ,78.22423 ,14.42782 ,9.954997 ,7.768213 ,13.0254 ,21.73166 ,2.156372 ,0.5317867 ,17 },{ 0 ,0 ,79.62993 ,139.6978 ,173.167 ,192.8718 ,196.3499 ,144.6611 ,106.5424 ,57.16653 ,41.16107 ,32.12764 ,13.8566 ,10.91772 ,12.07177 ,22.38254 ,24.72105 ,6.803666 ,4.200841 ,16.46857 ,15.70744 ,33.96221 ,7.575688 ,-0.04880907 ,18 },{ 0 ,0 ,33.2664 ,57.53643 ,167.2241 ,196.4833 ,194.7966 ,182.1884 ,119.6961 ,73.02113 ,48.36549 ,33.74652 ,26.2379 ,16.3578 ,6.811293 ,6.63927 ,6.639271 ,8.468093 ,6.194273 ,3.591233 ,3.81486 ,8.600739 ,5.21889 ,0 ,19 },{ 0 ,0 ,29.77937 ,54.97282 ,144.7995 ,207.4904 ,165.3432 ,171.4047 ,174.9216 ,100.2733 ,61.46441 ,50.19171 ,26.08209 ,17.18218 ,8.468093 ,6.63927 ,6.334467 ,6.334467 ,5.666687 ,4.272203 ,0 ,0 ,0 ,0 ,20 },{ 0 ,0 ,31.409 ,132.7418 ,185.5796 ,121.8299 ,185.3841 ,160.6566 ,116.1478 ,118.1078 ,141.7946 ,65.56351 ,48.84066 ,23.13864 ,18.12932 ,10.28531 ,6.029663 ,6.044627 ,5.694764 ,3.739085 ,3.896037 ,0 ,0 ,0 ,21 },{ 0 ,0 ,19.58994 ,42.30355 ,96.26777 ,187.1207 ,179.6626 ,221.3898 ,154.2617 ,142.1604 ,148.5737 ,67.17937 ,40.69044 ,39.74512 ,26.10166 ,14.48469 ,8.65873 ,3.896037 ,3.571392 ,3.896037 ,3.896037 ,3.896037 ,1.077756 ,0 ,22 },{ 0.001229679 ,3.008948 ,5.909858 ,33.50574 ,104.3341 ,152.2165 ,198.1988 ,191.841 ,228.7349 ,168.1041 ,144.2759 ,110.7436 ,57.65214 ,42.63504 ,27.91891 ,15.41052 ,8.056102 ,3.90283 ,3.879774 ,3.936718 ,3.968634 ,0.1236256 ,3.985531 ,-0.1835741 ,23 },{ 0 ,5.626141 ,7.676256 ,63.16226 ,45.99762 ,79.56688 ,227.311 ,203.9287 ,172.5618 ,177.1462 ,140.4554 ,123.9905 ,110.346 ,65.12319 ,34.31887 ,24.5278 ,9.561069 ,3.334991 ,5.590495 ,5.487353 ,5.909499 ,5.868994 ,5.833817 ,3.568177 ,24 }], r);\r\n","outputs":[{"mime":"text/plain","data":[46,46,46,110,111,32,97,99,116,105,111,110,46,46,46]}]},{"kind":2,"language":"ecl","value":"d;\r\n12;\r\n123;\r\n1234;","outputs":[{"mime":"application/hpcc.wu+json","data":[123,10,9,34,99,111,110,102,105,103,117,114,97,116,105,111,110,34,58,32,34,108,111,99,97,108,104,111,115,116,34,44,10,9,34,119,117,105,100,34,58,32,34,87,50,48,50,50,48,56,49,54,45,49,52,49,54,53,49,34,44,10,9,34,114,101,115,117,108,116,115,34,58,32,123,10,9,9,34,82,101,115,117,108,116,95,50,34,58,32,34,49,50,34,44,10,9,9,34,82,101,115,117,108,116,95,51,34,58,32,34,49,50,51,34,44,10,9,9,34,82,101,115,117,108,116,95,52,34,58,32,34,49,50,51,52,34,44,10,9,9,34,82,101,115,117,108,116,95,49,34,58,32,91,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,50,55,46,56,48,57,56,53,44,10,9,9,9,9,34,118,48,49,34,58,32,52,57,46,54,49,57,51,54,44,10,9,9,9,9,34,118,48,50,34,58,32,56,51,46,48,56,48,54,55,44,10,9,9,9,9,34,118,48,51,34,58,32,49,49,54,46,54,54,51,50,44,10,9,9,9,9,34,118,48,52,34,58,32,49,51,48,46,52,49,52,44,10,9,9,9,9,34,118,48,53,34,58,32,49,53,48,46,55,50,48,54,44,10,9,9,9,9,34,118,48,54,34,58,32,50,50,48,46,49,56,55,49,44,10,9,9,9,9,34,118,48,55,34,58,32,49,53,54,46,49,53,51,54,44,10,9,9,9,9,34,118,48,56,34,58,32,49,52,56,46,54,52,49,54,44,10,9,9,9,9,34,118,48,57,34,58,32,50,48,51,46,55,56,52,53,44,10,9,9,9,9,34,118,49,48,34,58,32,50,48,54,46,48,51,56,54,44,10,9,9,9,9,34,118,49,49,34,58,32,49,48,55,46,49,54,49,56,44,10,9,9,9,9,34,118,49,50,34,58,32,54,56,46,51,54,57,55,53,44,10,9,9,9,9,34,118,49,51,34,58,32,52,53,46,51,51,53,57,44,10,9,9,9,9,34,118,49,52,34,58,32,52,57,46,57,54,49,52,50,44,10,9,9,9,9,34,118,49,53,34,58,32,50,49,46,56,57,50,55,57,44,10,9,9,9,9,34,118,49,54,34,58,32,49,55,46,48,50,53,53,50,44,10,9,9,9,9,34,118,49,55,34,58,32,49,49,46,55,52,51,49,55,44,10,9,9,9,9,34,118,49,56,34,58,32,49,52,46,55,53,50,50,54,44,10,9,9,9,9,34,118,49,57,34,58,32,49,51,46,54,54,55,49,44,10,9,9,9,9,34,118,50,48,34,58,32,53,46,54,55,55,53,54,49,44,10,9,9,9,9,34,118,50,49,34,58,32,51,46,51,49,50,51,52,44,10,9,9,9,9,34,118,50,50,34,58,32,49,46,49,53,54,53,49,55,44,10,9,9,9,9,34,118,50,51,34,58,32,45,48,46,49,52,55,54,54,50,44,10,9,9,9,9,34,118,50,52,34,58,32,48,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,50,55,46,55,49,57,54,54,44,10,9,9,9,9,34,118,48,49,34,58,32,52,56,46,53,53,48,50,50,44,10,9,9,9,9,34,118,48,50,34,58,32,54,53,46,50,49,51,55,52,44,10,9,9,9,9,34,118,48,51,34,58,32,57,53,46,50,55,54,54,54,44,10,9,9,9,9,34,118,48,52,34,58,32,49,49,54,46,57,57,54,52,44,10,9,9,9,9,34,118,48,53,34,58,32,49,51,51,46,57,48,53,54,44,10,9,9,9,9,34,118,48,54,34,58,32,49,53,50,46,51,52,49,50,44,10,9,9,9,9,34,118,48,55,34,58,32,49,53,49,46,57,51,52,44,10,9,9,9,9,34,118,48,56,34,58,32,49,54,48,46,49,49,51,57,44,10,9,9,9,9,34,118,48,57,34,58,32,49,55,57,46,53,51,50,55,44,10,9,9,9,9,34,118,49,48,34,58,32,49,52,55,46,54,49,56,52,44,10,9,9,9,9,34,118,49,49,34,58,32,49,55,48,46,51,57,52,51,44,10,9,9,9,9,34,118,49,50,34,58,32,49,50,49,46,56,49,57,52,44,10,9,9,9,9,34,118,49,51,34,58,32,53,50,46,53,56,53,51,55,44,10,9,9,9,9,34,118,49,52,34,58,32,51,51,46,48,56,56,55,49,44,10,9,9,9,9,34,118,49,53,34,58,32,51,56,46,52,48,57,55,50,44,10,9,9,9,9,34,118,49,54,34,58,32,52,52,46,50,52,56,52,51,44,10,9,9,9,9,34,118,49,55,34,58,32,54,57,46,53,55,56,54,44,10,9,9,9,9,34,118,49,56,34,58,32,52,46,48,49,57,51,53,49,44,10,9,9,9,9,34,118,49,57,34,58,32,51,46,48,53,48,48,50,52,44,10,9,9,9,9,34,118,50,48,34,58,32,51,46,48,51,57,55,49,57,44,10,9,9,9,9,34,118,50,49,34,58,32,50,46,57,57,54,49,52,50,44,10,9,9,9,9,34,118,50,50,34,58,32,50,46,57,54,55,57,53,52,44,10,9,9,9,9,34,118,50,51,34,58,32,49,46,57,57,57,53,57,52,44,10,9,9,9,9,34,118,50,52,34,58,32,49,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,51,48,46,52,50,54,55,44,10,9,9,9,9,34,118,48,49,34,58,32,51,51,46,52,55,55,53,50,44,10,9,9,9,9,34,118,48,50,34,58,32,52,52,46,56,48,57,53,51,44,10,9,9,9,9,34,118,48,51,34,58,32,54,50,46,52,55,52,57,53,44,10,9,9,9,9,34,118,48,52,34,58,32,55,55,46,52,51,53,50,51,44,10,9,9,9,9,34,118,48,53,34,58,32,49,48,52,46,50,49,53,51,44,10,9,9,9,9,34,118,48,54,34,58,32,49,48,50,46,55,51,57,51,44,10,9,9,9,9,34,118,48,55,34,58,32,49,51,55,46,48,48,48,52,44,10,9,9,9,9,34,118,48,56,34,58,32,49,56,54,46,48,55,48,54,44,10,9,9,9,9,34,118,48,57,34,58,32,50,49,57,46,51,49,55,51,44,10,9,9,9,9,34,118,49,48,34,58,32,49,56,49,46,55,54,49,53,44,10,9,9,9,9,34,118,49,49,34,58,32,49,50,48,46,57,49,53,52,44,10,9,9,9,9,34,118,49,50,34,58,32,49,52,51,46,49,56,51,53,44,10,9,9,9,9,34,118,49,51,34,58,32,56,50,46,52,48,53,48,49,44,10,9,9,9,9,34,118,49,52,34,58,32,52,56,46,52,55,49,51,50,44,10,9,9,9,9,34,118,49,53,34,58,32,55,52,46,55,49,52,54,49,44,10,9,9,9,9,34,118,49,54,34,58,32,54,48,46,48,57,48,57,44,10,9,9,9,9,34,118,49,55,34,58,32,55,46,48,55,51,53,50,53,44,10,9,9,9,9,34,118,49,56,34,58,32,54,46,48,56,57,56,53,49,44,10,9,9,9,9,34,118,49,57,34,58,32,54,46,53,51,55,52,53,44,10,9,9,9,9,34,118,50,48,34,58,32,54,46,54,54,54,48,57,54,44,10,9,9,9,9,34,118,50,49,34,58,32,55,46,51,48,54,57,54,53,44,10,9,9,9,9,34,118,50,50,34,58,32,53,46,55,51,54,56,52,44,10,9,9,9,9,34,118,50,51,34,58,32,51,46,54,50,53,54,50,56,44,10,9,9,9,9,34,118,50,52,34,58,32,50,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,49,54,46,54,54,53,52,57,44,10,9,9,9,9,34,118,48,49,34,58,32,51,48,46,49,48,56,54,44,10,9,9,9,9,34,118,48,50,34,58,32,51,57,46,57,54,57,53,50,44,10,9,9,9,9,34,118,48,51,34,58,32,52,52,46,49,50,50,50,53,44,10,9,9,9,9,34,118,48,52,34,58,32,53,57,46,53,55,53,49,50,44,10,9,9,9,9,34,118,48,53,34,58,32,55,55,46,53,54,57,50,57,44,10,9,9,9,9,34,118,48,54,34,58,32,49,48,54,46,56,57,50,53,44,10,9,9,9,9,34,118,48,55,34,58,32,49,54,54,46,53,53,51,57,44,10,9,9,9,9,34,118,48,56,34,58,32,49,55,53,46,50,51,56,49,44,10,9,9,9,9,34,118,48,57,34,58,32,49,56,53,46,50,56,49,53,44,10,9,9,9,9,34,118,49,48,34,58,32,49,53,52,46,53,48,53,54,44,10,9,9,9,9,34,118,49,49,34,58,32,56,51,46,48,52,51,51,44,10,9,9,9,9,34,118,49,50,34,58,32,54,50,46,54,49,55,51,50,44,10,9,9,9,9,34,118,49,51,34,58,32,54,50,46,51,51,49,54,55,44,10,9,9,9,9,34,118,49,52,34,58,32,54,48,46,53,53,57,49,54,44,10,9,9,9,9,34,118,49,53,34,58,32,53,53,46,57,50,49,50,52,44,10,9,9,9,9,34,118,49,54,34,58,32,49,53,46,49,55,50,56,52,44,10,9,9,9,9,34,118,49,55,34,58,32,56,46,50,52,56,51,50,52,44,10,9,9,9,9,34,118,49,56,34,58,32,51,54,46,54,56,48,56,55,44,10,9,9,9,9,34,118,49,57,34,58,32,54,49,46,57,51,52,49,51,44,10,9,9,9,9,34,118,50,48,34,58,32,50,48,46,50,54,56,54,55,44,10,9,9,9,9,34,118,50,49,34,58,32,54,56,46,53,56,56,49,57,44,10,9,9,9,9,34,118,50,50,34,58,32,52,54,46,52,57,56,49,50,44,10,9,9,9,9,34,118,50,51,34,58,32,48,46,50,51,54,48,48,57,53,44,10,9,9,9,9,34,118,50,52,34,58,32,51,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,56,46,56,49,53,54,49,55,44,10,9,9,9,9,34,118,48,49,34,58,32,49,56,46,51,53,49,54,44,10,9,9,9,9,34,118,48,50,34,58,32,56,46,54,53,56,50,55,53,44,10,9,9,9,9,34,118,48,51,34,58,32,50,55,46,53,56,53,57,44,10,9,9,9,9,34,118,48,52,34,58,32,52,56,46,54,50,54,57,49,44,10,9,9,9,9,34,118,48,53,34,58,32,54,48,46,49,56,48,49,51,44,10,9,9,9,9,34,118,48,54,34,58,32,57,49,46,51,50,56,54,44,10,9,9,9,9,34,118,48,55,34,58,32,49,52,53,46,55,49,48,57,44,10,9,9,9,9,34,118,48,56,34,58,32,49,49,54,46,48,54,53,51,44,10,9,9,9,9,34,118,48,57,34,58,32,49,48,54,46,50,54,54,50,44,10,9,9,9,9,34,118,49,48,34,58,32,54,56,46,54,57,52,52,55,44,10,9,9,9,9,34,118,49,49,34,58,32,53,51,46,49,48,53,57,54,44,10,9,9,9,9,34,118,49,50,34,58,32,51,55,46,57,50,55,57,55,44,10,9,9,9,9,34,118,49,51,34,58,32,52,55,46,57,53,57,52,50,44,10,9,9,9,9,34,118,49,52,34,58,32,52,55,46,52,50,54,57,49,44,10,9,9,9,9,34,118,49,53,34,58,32,54,57,46,50,48,55,51,49,44,10,9,9,9,9,34,118,49,54,34,58,32,52,52,46,57,53,52,54,56,44,10,9,9,9,9,34,118,49,55,34,58,32,50,57,46,49,55,49,57,55,44,10,9,9,9,9,34,118,49,56,34,58,32,49,55,46,57,49,54,55,52,44,10,9,9,9,9,34,118,49,57,34,58,32,49,54,46,50,53,53,49,53,44,10,9,9,9,9,34,118,50,48,34,58,32,49,52,46,54,53,53,53,57,44,10,9,9,9,9,34,118,50,49,34,58,32,49,55,46,50,54,48,52,56,44,10,9,9,9,9,34,118,50,50,34,58,32,51,49,46,50,50,50,52,53,44,10,9,9,9,9,34,118,50,51,34,58,32,52,54,46,55,49,55,48,52,44,10,9,9,9,9,34,118,50,52,34,58,32,52,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,54,46,54,50,56,56,56,49,44,10,9,9,9,9,34,118,48,49,34,58,32,49,48,46,52,49,51,51,57,44,10,9,9,9,9,34,118,48,50,34,58,32,50,52,46,56,49,57,51,57,44,10,9,9,9,9,34,118,48,51,34,58,32,50,54,46,48,56,57,53,50,44,10,9,9,9,9,34,118,48,52,34,58,32,51,48,46,49,54,48,53,44,10,9,9,9,9,34,118,48,53,34,58,32,53,50,46,51,48,56,48,50,44,10,9,9,9,9,34,118,48,54,34,58,32,54,52,46,55,49,48,48,55,44,10,9,9,9,9,34,118,48,55,34,58,32,55,54,46,51,48,56,50,51,44,10,9,9,9,9,34,118,48,56,34,58,32,56,52,46,54,51,54,56,54,44,10,9,9,9,9,34,118,48,57,34,58,32,57,57,46,52,51,50,52,44,10,9,9,9,9,34,118,49,48,34,58,32,54,50,46,53,50,49,51,50,44,10,9,9,9,9,34,118,49,49,34,58,32,52,54,46,56,49,54,52,55,44,10,9,9,9,9,34,118,49,50,34,58,32,53,53,46,55,54,54,48,54,44,10,9,9,9,9,34,118,49,51,34,58,32,56,50,46,52,48,57,57,44,10,9,9,9,9,34,118,49,52,34,58,32,49,52,48,46,50,54,52,55,44,10,9,9,9,9,34,118,49,53,34,58,32,56,49,46,50,54,53,48,49,44,10,9,9,9,9,34,118,49,54,34,58,32,53,54,46,52,53,55,53,54,44,10,9,9,9,9,34,118,49,55,34,58,32,51,48,46,52,50,49,54,52,44,10,9,9,9,9,34,118,49,56,34,58,32,49,55,46,50,56,55,56,50,44,10,9,9,9,9,34,118,49,57,34,58,32,56,46,51,48,50,52,51,49,44,10,9,9,9,9,34,118,50,48,34,58,32,50,46,57,56,49,54,50,54,44,10,9,9,9,9,34,118,50,49,34,58,32,50,46,54,57,56,53,51,54,44,10,9,9,9,9,34,118,50,50,34,58,32,53,46,56,56,54,48,56,54,44,10,9,9,9,9,34,118,50,51,34,58,32,53,46,50,54,56,51,53,56,44,10,9,9,9,9,34,118,50,52,34,58,32,53,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,50,49,46,56,51,57,55,53,44,10,9,9,9,9,34,118,48,49,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,34,118,48,50,34,58,32,49,56,46,57,55,48,56,53,44,10,9,9,9,9,34,118,48,51,34,58,32,51,50,46,56,57,50,48,52,44,10,9,9,9,9,34,118,48,52,34,58,32,52,51,46,49,53,48,49,52,44,10,9,9,9,9,34,118,48,53,34,58,32,54,50,46,56,54,48,49,52,44,10,9,9,9,9,34,118,48,54,34,58,32,49,48,52,46,54,54,53,55,44,10,9,9,9,9,34,118,48,55,34,58,32,49,51,48,46,50,50,57,52,44,10,9,9,9,9,34,118,48,56,34,58,32,49,49,52,46,56,52,57,52,44,10,9,9,9,9,34,118,48,57,34,58,32,49,48,54,46,57,56,55,51,44,10,9,9,9,9,34,118,49,48,34,58,32,54,49,46,56,57,54,52,55,44,10,9,9,9,9,34,118,49,49,34,58,32,53,53,46,53,53,54,56,50,44,10,9,9,9,9,34,118,49,50,34,58,32,56,54,46,56,48,57,56,54,44,10,9,9,9,9,34,118,49,51,34,58,32,56,57,46,50,55,56,48,50,44,10,9,9,9,9,34,118,49,52,34,58,32,49,50,50,46,52,50,50,49,44,10,9,9,9,9,34,118,49,53,34,58,32,49,50,51,46,57,54,57,56,44,10,9,9,9,9,34,118,49,54,34,58,32,49,48,57,46,48,57,53,50,44,10,9,9,9,9,34,118,49,55,34,58,32,57,56,46,52,49,57,53,54,44,10,9,9,9,9,34,118,49,56,34,58,32,55,55,46,54,49,51,55,52,44,10,9,9,9,9,34,118,49,57,34,58,32,51,50,46,52,57,48,51,49,44,10,9,9,9,9,34,118,50,48,34,58,32,49,52,46,54,55,51,52,52,44,10,9,9,9,9,34,118,50,49,34,58,32,55,46,51,55,48,55,55,53,44,10,9,9,9,9,34,118,50,50,34,58,32,48,46,48,51,55,49,49,48,49,49,44,10,9,9,9,9,34,118,50,51,34,58,32,48,46,54,52,50,51,51,57,50,44,10,9,9,9,9,34,118,50,52,34,58,32,54,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,53,51,46,51,52,51,48,51,44,10,9,9,9,9,34,118,48,49,34,58,32,50,54,46,55,57,55,57,55,44,10,9,9,9,9,34,118,48,50,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,34,118,48,51,34,58,32,49,48,46,56,56,55,56,55,44,10,9,9,9,9,34,118,48,52,34,58,32,49,55,46,50,48,52,52,44,10,9,9,9,9,34,118,48,53,34,58,32,53,54,46,49,56,49,49,54,44,10,9,9,9,9,34,118,48,54,34,58,32,55,57,46,55,48,49,52,49,44,10,9,9,9,9,34,118,48,55,34,58,32,57,48,46,56,52,53,51,44,10,9,9,9,9,34,118,48,56,34,58,32,57,56,46,50,55,54,55,53,44,10,9,9,9,9,34,118,48,57,34,58,32,56,48,46,56,55,50,52,51,44,10,9,9,9,9,34,118,49,48,34,58,32,55,52,46,55,57,51,49,44,10,9,9,9,9,34,118,49,49,34,58,32,55,53,46,53,52,54,54,49,44,10,9,9,9,9,34,118,49,50,34,58,32,55,51,46,52,51,55,51,44,10,9,9,9,9,34,118,49,51,34,58,32,55,52,46,49,49,54,57,52,44,10,9,9,9,9,34,118,49,52,34,58,32,54,56,46,49,55,52,57,44,10,9,9,9,9,34,118,49,53,34,58,32,52,54,46,50,52,48,55,54,44,10,9,9,9,9,34,118,49,54,34,58,32,51,57,46,57,51,56,53,55,44,10,9,9,9,9,34,118,49,55,34,58,32,51,49,46,50,49,54,53,51,44,10,9,9,9,9,34,118,49,56,34,58,32,51,54,46,56,56,51,51,53,44,10,9,9,9,9,34,118,49,57,34,58,32,52,48,46,48,50,53,50,53,44,10,9,9,9,9,34,118,50,48,34,58,32,49,49,55,46,52,50,57,55,44,10,9,9,9,9,34,118,50,49,34,58,32,49,50,46,55,48,51,50,56,44,10,9,9,9,9,34,118,50,50,34,58,32,49,46,55,50,57,55,55,49,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,55,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,50,53,46,54,54,55,56,53,44,10,9,9,9,9,34,118,48,49,34,58,32,54,51,46,48,53,55,49,55,44,10,9,9,9,9,34,118,48,50,34,58,32,50,50,46,49,52,49,52,44,10,9,9,9,9,34,118,48,51,34,58,32,49,55,46,48,55,52,44,10,9,9,9,9,34,118,48,52,34,58,32,52,49,46,55,52,52,56,51,44,10,9,9,9,9,34,118,48,53,34,58,32,54,48,46,50,55,50,50,55,44,10,9,9,9,9,34,118,48,54,34,58,32,56,49,46,52,50,52,51,50,44,10,9,9,9,9,34,118,48,55,34,58,32,49,49,52,46,52,52,52,44,10,9,9,9,9,34,118,48,56,34,58,32,49,48,50,46,51,50,51,52,44,10,9,9,9,9,34,118,48,57,34,58,32,49,48,49,46,55,56,55,56,44,10,9,9,9,9,34,118,49,48,34,58,32,49,49,49,46,48,51,49,44,10,9,9,9,9,34,118,49,49,34,58,32,49,49,57,46,50,51,48,57,44,10,9,9,9,9,34,118,49,50,34,58,32,49,49,52,46,48,55,55,55,44,10,9,9,9,9,34,118,49,51,34,58,32,49,49,48,46,53,50,57,54,44,10,9,9,9,9,34,118,49,52,34,58,32,53,57,46,49,57,51,53,53,44,10,9,9,9,9,34,118,49,53,34,58,32,52,50,46,52,55,49,55,53,44,10,9,9,9,9,34,118,49,54,34,58,32,49,52,46,54,51,53,57,56,44,10,9,9,9,9,34,118,49,55,34,58,32,54,46,57,52,52,48,55,52,44,10,9,9,9,9,34,118,49,56,34,58,32,54,46,57,52,52,48,55,53,44,10,9,9,9,9,34,118,49,57,34,58,32,50,55,46,55,52,57,51,54,44,10,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,34,118,50,50,34,58,32,48,46,48,57,52,52,57,51,55,54,44,10,9,9,9,9,34,118,50,51,34,58,32,48,46,48,55,55,51,50,50,54,52,44,10,9,9,9,9,34,118,50,52,34,58,32,56,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,49,50,46,56,50,55,44,10,9,9,9,9,34,118,48,49,34,58,32,54,57,46,50,48,53,53,52,44,10,9,9,9,9,34,118,48,50,34,58,32,52,54,46,55,54,50,57,51,44,10,9,9,9,9,34,118,48,51,34,58,32,49,51,46,57,54,53,49,55,44,10,9,9,9,9,34,118,48,52,34,58,32,51,51,46,56,56,55,52,52,44,10,9,9,9,9,34,118,48,53,34,58,32,54,49,46,56,50,54,49,51,44,10,9,9,9,9,34,118,48,54,34,58,32,56,52,46,55,52,55,57,57,44,10,9,9,9,9,34,118,48,55,34,58,32,49,50,49,46,49,50,50,44,10,9,9,9,9,34,118,48,56,34,58,32,49,52,53,46,50,55,52,49,44,10,9,9,9,9,34,118,48,57,34,58,32,49,53,51,46,49,55,57,55,44,10,9,9,9,9,34,118,49,48,34,58,32,50,48,52,46,55,56,54,44,10,9,9,9,9,34,118,49,49,34,58,32,50,50,55,46,57,50,52,50,44,10,9,9,9,9,34,118,49,50,34,58,32,50,51,54,46,51,48,51,56,44,10,9,9,9,9,34,118,49,51,34,58,32,50,50,56,46,51,54,53,53,44,10,9,9,9,9,34,118,49,52,34,58,32,55,57,46,51,52,52,50,53,44,10,9,9,9,9,34,118,49,53,34,58,32,50,53,46,57,51,52,56,51,44,10,9,9,9,9,34,118,49,54,34,58,32,54,46,57,52,52,48,55,52,44,10,9,9,9,9,34,118,49,55,34,58,32,54,46,57,52,52,48,55,52,44,10,9,9,9,9,34,118,49,56,34,58,32,54,46,57,52,52,48,55,53,44,10,9,9,9,9,34,118,49,57,34,58,32,55,46,53,53,51,54,56,49,44,10,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,57,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,54,56,46,54,54,51,57,54,44,10,9,9,9,9,34,118,48,50,34,58,32,53,57,46,48,52,51,53,44,10,9,9,9,9,34,118,48,51,34,58,32,51,51,46,51,53,55,54,50,44,10,9,9,9,9,34,118,48,52,34,58,32,52,55,46,52,53,50,56,50,44,10,9,9,9,9,34,118,48,53,34,58,32,53,55,46,56,51,53,53,44,10,9,9,9,9,34,118,48,54,34,58,32,55,56,46,57,49,54,56,57,44,10,9,9,9,9,34,118,48,55,34,58,32,49,48,55,46,56,50,55,53,44,10,9,9,9,9,34,118,48,56,34,58,32,49,54,56,46,48,48,53,51,44,10,9,9,9,9,34,118,48,57,34,58,32,49,51,48,46,57,53,57,55,44,10,9,9,9,9,34,118,49,48,34,58,32,50,49,50,46,53,53,52,49,44,10,9,9,9,9,34,118,49,49,34,58,32,49,54,53,46,56,49,50,50,44,10,9,9,9,9,34,118,49,50,34,58,32,50,49,48,46,50,52,50,57,44,10,9,9,9,9,34,118,49,51,34,58,32,49,56,49,46,49,55,49,51,44,10,9,9,9,9,34,118,49,52,34,58,32,49,56,57,46,55,54,49,55,44,10,9,9,9,9,34,118,49,53,34,58,32,49,51,55,46,51,51,55,56,44,10,9,9,9,9,34,118,49,54,34,58,32,56,52,46,54,53,51,57,53,44,10,9,9,9,9,34,118,49,55,34,58,32,56,46,54,55,55,49,54,56,44,10,9,9,9,9,34,118,49,56,34,58,32,54,46,57,53,54,53,55,54,44,10,9,9,9,9,34,118,49,57,34,58,32,56,46,52,54,56,48,57,51,44,10,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,49,48,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,57,53,46,49,55,52,57,57,44,10,9,9,9,9,34,118,48,50,34,58,32,56,48,46,48,51,56,49,56,44,10,9,9,9,9,34,118,48,51,34,58,32,53,57,46,56,57,56,54,50,44,10,9,9,9,9,34,118,48,52,34,58,32,51,57,46,53,56,52,55,54,44,10,9,9,9,9,34,118,48,53,34,58,32,53,48,46,50,56,48,53,56,44,10,9,9,9,9,34,118,48,54,34,58,32,54,51,46,56,49,54,52,49,44,10,9,9,9,9,34,118,48,55,34,58,32,56,48,46,54,49,51,48,50,44,10,9,9,9,9,34,118,48,56,34,58,32,54,54,46,51,55,56,50,52,44,10,9,9,9,9,34,118,48,57,34,58,32,49,57,56,46,55,54,53,49,44,10,9,9,9,9,34,118,49,48,34,58,32,50,52,52,46,51,52,54,55,44,10,9,9,9,9,34,118,49,49,34,58,32,50,57,52,46,50,52,55,52,44,10,9,9,9,9,34,118,49,50,34,58,32,50,54,52,46,51,53,49,55,44,10,9,9,9,9,34,118,49,51,34,58,32,49,55,54,46,52,48,56,50,44,10,9,9,9,9,34,118,49,52,34,58,32,54,48,46,50,49,56,53,55,44,10,9,9,9,9,34,118,49,53,34,58,32,55,55,46,52,49,52,55,53,44,10,9,9,9,9,34,118,49,54,34,58,32,53,51,46,49,54,57,56,49,44,10,9,9,9,9,34,118,49,55,34,58,32,53,54,46,49,54,51,57,51,44,10,9,9,9,9,34,118,49,56,34,58,32,54,46,57,52,57,50,51,53,44,10,9,9,9,9,34,118,49,57,34,58,32,55,46,53,51,49,48,53,57,44,10,9,9,9,9,34,118,50,48,34,58,32,51,46,55,56,48,49,55,55,44,10,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,49,49,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,49,51,52,46,57,56,55,57,44,10,9,9,9,9,34,118,48,50,34,58,32,49,51,48,46,51,54,57,54,44,10,9,9,9,9,34,118,48,51,34,58,32,57,54,46,56,54,51,50,53,44,10,9,9,9,9,34,118,48,52,34,58,32,55,53,46,55,48,52,57,52,44,10,9,9,9,9,34,118,48,53,34,58,32,53,56,46,56,54,52,54,54,44,10,9,9,9,9,34,118,48,54,34,58,32,53,55,46,50,48,51,55,52,44,10,9,9,9,9,34,118,48,55,34,58,32,53,53,46,49,56,56,51,55,44,10,9,9,9,9,34,118,48,56,34,58,32,55,56,46,49,50,56,44,10,9,9,9,9,34,118,48,57,34,58,32,49,48,56,46,53,53,56,50,44,10,9,9,9,9,34,118,49,48,34,58,32,49,53,52,46,51,55,55,52,44,10,9,9,9,9,34,118,49,49,34,58,32,51,49,57,46,49,54,56,54,44,10,9,9,9,9,34,118,49,50,34,58,32,51,55,50,46,56,56,50,54,44,10,9,9,9,9,34,118,49,51,34,58,32,50,55,53,46,52,54,53,53,44,10,9,9,9,9,34,118,49,52,34,58,32,49,51,48,46,50,54,51,50,44,10,9,9,9,9,34,118,49,53,34,58,32,53,52,46,57,51,56,50,50,44,10,9,9,9,9,34,118,49,54,34,58,32,50,53,46,52,57,55,49,57,44,10,9,9,9,9,34,118,49,55,34,58,32,56,46,48,52,55,52,51,57,44,10,9,9,9,9,34,118,49,56,34,58,32,56,46,48,56,52,51,57,51,44,10,9,9,9,9,34,118,49,57,34,58,32,53,46,49,49,53,50,53,50,44,10,9,9,9,9,34,118,50,48,34,58,32,53,46,54,55,56,50,54,57,44,10,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,49,50,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,52,56,46,48,56,57,49,57,44,10,9,9,9,9,34,118,48,50,34,58,32,49,52,50,46,53,53,53,56,44,10,9,9,9,9,34,118,48,51,34,58,32,49,52,48,46,51,55,55,55,44,10,9,9,9,9,34,118,48,52,34,58,32,49,53,52,46,55,50,54,49,44,10,9,9,9,9,34,118,48,53,34,58,32,56,55,46,57,51,54,49,44,10,9,9,9,9,34,118,48,54,34,58,32,53,56,46,49,49,48,57,50,44,10,9,9,9,9,34,118,48,55,34,58,32,53,50,46,56,51,56,54,57,44,10,9,9,9,9,34,118,48,56,34,58,32,54,55,46,49,52,56,50,50,44,10,9,9,9,9,34,118,48,57,34,58,32,56,51,46,54,54,55,57,56,44,10,9,9,9,9,34,118,49,48,34,58,32,49,49,56,46,57,50,52,50,44,10,9,9,9,9,34,118,49,49,34,58,32,49,53,48,46,48,54,56,49,44,10,9,9,9,9,34,118,49,50,34,58,32,50,55,50,46,57,55,48,57,44,10,9,9,9,9,34,118,49,51,34,58,32,51,52,49,46,49,51,54,54,44,10,9,9,9,9,34,118,49,52,34,58,32,50,51,56,46,54,54,52,44,10,9,9,9,9,34,118,49,53,34,58,32,49,57,48,46,50,44,10,9,9,9,9,34,118,49,54,34,58,32,49,49,54,46,56,57,52,51,44,10,9,9,9,9,34,118,49,55,34,58,32,57,49,46,52,56,54,55,50,44,10,9,9,9,9,34,118,49,56,34,58,32,49,52,46,48,49,53,55,44,10,9,9,9,9,34,118,49,57,34,58,32,52,50,46,50,57,50,55,55,44,10,9,9,9,9,34,118,50,48,34,58,32,53,46,49,49,53,50,53,50,44,10,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,49,51,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,53,52,46,49,57,52,49,44,10,9,9,9,9,34,118,48,50,34,58,32,49,52,54,46,51,56,51,57,44,10,9,9,9,9,34,118,48,51,34,58,32,57,57,46,52,56,49,52,51,44,10,9,9,9,9,34,118,48,52,34,58,32,57,54,46,49,57,52,49,49,44,10,9,9,9,9,34,118,48,53,34,58,32,49,48,50,46,57,52,55,51,44,10,9,9,9,9,34,118,48,54,34,58,32,55,54,46,49,52,48,56,57,44,10,9,9,9,9,34,118,48,55,34,58,32,53,55,46,55,56,52,52,44,10,9,9,9,9,34,118,48,56,34,58,32,52,55,46,48,52,48,50,44,10,9,9,9,9,34,118,48,57,34,58,32,54,52,46,51,54,55,57,57,44,10,9,9,9,9,34,118,49,48,34,58,32,56,52,46,50,51,55,54,55,44,10,9,9,9,9,34,118,49,49,34,58,32,49,54,50,46,55,49,56,49,44,10,9,9,9,9,34,118,49,50,34,58,32,49,50,49,46,51,50,55,53,44,10,9,9,9,9,34,118,49,51,34,58,32,50,49,51,46,49,54,52,54,44,10,9,9,9,9,34,118,49,52,34,58,32,51,50,56,46,52,56,50,44,10,9,9,9,9,34,118,49,53,34,58,32,50,56,53,46,52,52,56,57,44,10,9,9,9,9,34,118,49,54,34,58,32,50,56,51,46,56,51,49,57,44,10,9,9,9,9,34,118,49,55,34,58,32,50,49,50,46,56,49,53,44,10,9,9,9,9,34,118,49,56,34,58,32,49,54,52,46,53,52,57,44,10,9,9,9,9,34,118,49,57,34,58,32,57,50,46,50,57,54,51,49,44,10,9,9,9,9,34,118,50,48,34,58,32,55,46,50,52,52,48,49,53,44,10,9,9,9,9,34,118,50,49,34,58,32,49,46,49,54,55,44,10,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,49,52,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,54,46,57,49,57,54,53,57,44,10,9,9,9,9,34,118,48,50,34,58,32,49,57,53,46,49,55,48,57,44,10,9,9,9,9,34,118,48,51,34,58,32,49,51,50,46,53,50,53,51,44,10,9,9,9,9,34,118,48,52,34,58,32,49,51,53,46,50,51,52,49,44,10,9,9,9,9,34,118,48,53,34,58,32,56,57,46,56,53,48,54,57,44,10,9,9,9,9,34,118,48,54,34,58,32,56,57,46,52,53,53,52,57,44,10,9,9,9,9,34,118,48,55,34,58,32,54,48,46,50,57,57,54,55,44,10,9,9,9,9,34,118,48,56,34,58,32,53,48,46,51,51,56,48,54,44,10,9,9,9,9,34,118,48,57,34,58,32,51,57,46,49,55,53,56,51,44,10,9,9,9,9,34,118,49,48,34,58,32,53,57,46,48,54,56,53,52,44,10,9,9,9,9,34,118,49,49,34,58,32,55,52,46,53,50,49,53,57,44,10,9,9,9,9,34,118,49,50,34,58,32,56,52,46,57,51,52,48,50,44,10,9,9,9,9,34,118,49,51,34,58,32,49,56,55,46,49,50,49,57,44,10,9,9,9,9,34,118,49,52,34,58,32,49,50,51,46,57,54,55,51,44,10,9,9,9,9,34,118,49,53,34,58,32,49,48,51,46,55,48,50,55,44,10,9,9,9,9,34,118,49,54,34,58,32,49,50,56,46,57,56,54,44,10,9,9,9,9,34,118,49,55,34,58,32,49,54,53,46,49,50,56,51,44,10,9,9,9,9,34,118,49,56,34,58,32,50,52,57,46,55,48,53,52,44,10,9,9,9,9,34,118,49,57,34,58,32,57,53,46,51,57,57,54,54,44,10,9,9,9,9,34,118,50,48,34,58,32,49,48,46,48,48,50,56,52,44,10,9,9,9,9,34,118,50,49,34,58,32,50,46,51,57,50,53,53,44,10,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,49,53,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,50,49,46,55,51,56,55,49,44,10,9,9,9,9,34,118,48,50,34,58,32,49,50,51,46,49,51,51,57,44,10,9,9,9,9,34,118,48,51,34,58,32,49,55,54,46,55,52,49,52,44,10,9,9,9,9,34,118,48,52,34,58,32,49,53,56,46,50,54,57,56,44,10,9,9,9,9,34,118,48,53,34,58,32,49,51,55,46,50,51,53,44,10,9,9,9,9,34,118,48,54,34,58,32,49,48,53,46,51,48,56,57,44,10,9,9,9,9,34,118,48,55,34,58,32,56,54,46,54,51,50,53,53,44,10,9,9,9,9,34,118,48,56,34,58,32,53,51,46,49,49,53,57,49,44,10,9,9,9,9,34,118,48,57,34,58,32,50,57,46,48,51,56,54,53,44,10,9,9,9,9,34,118,49,48,34,58,32,51,48,46,52,48,53,51,57,44,10,9,9,9,9,34,118,49,49,34,58,32,51,57,46,48,52,57,48,50,44,10,9,9,9,9,34,118,49,50,34,58,32,52,57,46,50,51,52,48,53,44,10,9,9,9,9,34,118,49,51,34,58,32,54,51,46,50,55,56,53,51,44,10,9,9,9,9,34,118,49,52,34,58,32,49,49,49,46,52,50,49,53,44,10,9,9,9,9,34,118,49,53,34,58,32,49,48,49,46,49,57,53,54,44,10,9,9,9,9,34,118,49,54,34,58,32,52,48,46,48,48,57,54,50,44,10,9,9,9,9,34,118,49,55,34,58,32,53,57,46,56,52,53,54,53,44,10,9,9,9,9,34,118,49,56,34,58,32,55,52,46,53,49,50,53,51,44,10,9,9,9,9,34,118,49,57,34,58,32,49,55,46,48,54,51,49,54,44,10,9,9,9,9,34,118,50,48,34,58,32,50,46,52,51,53,49,52,49,44,10,9,9,9,9,34,118,50,49,34,58,32,50,46,50,56,55,52,55,49,44,10,9,9,9,9,34,118,50,50,34,58,32,45,48,46,48,48,48,51,54,51,54,57,56,50,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,49,54,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,34,118,48,50,34,58,32,54,50,46,48,52,54,55,50,44,10,9,9,9,9,34,118,48,51,34,58,32,49,51,54,46,51,49,50,50,44,10,9,9,9,9,34,118,48,52,34,58,32,50,48,49,46,55,57,53,50,44,10,9,9,9,9,34,118,48,53,34,58,32,49,54,56,46,49,51,52,51,44,10,9,9,9,9,34,118,48,54,34,58,32,57,53,46,50,48,52,54,44,10,9,9,9,9,34,118,48,55,34,58,32,53,56,46,57,48,54,50,52,44,10,9,9,9,9,34,118,48,56,34,58,32,52,54,46,57,52,48,57,49,44,10,9,9,9,9,34,118,48,57,34,58,32,52,57,46,50,55,48,53,51,44,10,9,9,9,9,34,118,49,48,34,58,32,51,55,46,49,48,52,49,54,44,10,9,9,9,9,34,118,49,49,34,58,32,49,55,46,57,55,48,49,49,44,10,9,9,9,9,34,118,49,50,34,58,32,51,48,46,57,51,54,57,55,44,10,9,9,9,9,34,118,49,51,34,58,32,51,51,46,51,57,50,53,55,44,10,9,9,9,9,34,118,49,52,34,58,32,52,52,46,48,51,48,55,55,44,10,9,9,9,9,34,118,49,53,34,58,32,53,53,46,54,52,53,52,50,44,10,9,9,9,9,34,118,49,54,34,58,32,55,56,46,50,50,52,50,51,44,10,9,9,9,9,34,118,49,55,34,58,32,49,52,46,52,50,55,56,50,44,10,9,9,9,9,34,118,49,56,34,58,32,57,46,57,53,52,57,57,55,44,10,9,9,9,9,34,118,49,57,34,58,32,55,46,55,54,56,50,49,51,44,10,9,9,9,9,34,118,50,48,34,58,32,49,51,46,48,50,53,52,44,10,9,9,9,9,34,118,50,49,34,58,32,50,49,46,55,51,49,54,54,44,10,9,9,9,9,34,118,50,50,34,58,32,50,46,49,53,54,51,55,50,44,10,9,9,9,9,34,118,50,51,34,58,32,48,46,53,51,49,55,56,54,55,44,10,9,9,9,9,34,118,50,52,34,58,32,49,55,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,34,118,48,50,34,58,32,55,57,46,54,50,57,57,51,44,10,9,9,9,9,34,118,48,51,34,58,32,49,51,57,46,54,57,55,56,44,10,9,9,9,9,34,118,48,52,34,58,32,49,55,51,46,49,54,55,44,10,9,9,9,9,34,118,48,53,34,58,32,49,57,50,46,56,55,49,56,44,10,9,9,9,9,34,118,48,54,34,58,32,49,57,54,46,51,52,57,57,44,10,9,9,9,9,34,118,48,55,34,58,32,49,52,52,46,54,54,49,49,44,10,9,9,9,9,34,118,48,56,34,58,32,49,48,54,46,53,52,50,52,44,10,9,9,9,9,34,118,48,57,34,58,32,53,55,46,49,54,54,53,51,44,10,9,9,9,9,34,118,49,48,34,58,32,52,49,46,49,54,49,48,55,44,10,9,9,9,9,34,118,49,49,34,58,32,51,50,46,49,50,55,54,52,44,10,9,9,9,9,34,118,49,50,34,58,32,49,51,46,56,53,54,54,44,10,9,9,9,9,34,118,49,51,34,58,32,49,48,46,57,49,55,55,50,44,10,9,9,9,9,34,118,49,52,34,58,32,49,50,46,48,55,49,55,55,44,10,9,9,9,9,34,118,49,53,34,58,32,50,50,46,51,56,50,53,52,44,10,9,9,9,9,34,118,49,54,34,58,32,50,52,46,55,50,49,48,53,44,10,9,9,9,9,34,118,49,55,34,58,32,54,46,56,48,51,54,54,54,44,10,9,9,9,9,34,118,49,56,34,58,32,52,46,50,48,48,56,52,49,44,10,9,9,9,9,34,118,49,57,34,58,32,49,54,46,52,54,56,53,55,44,10,9,9,9,9,34,118,50,48,34,58,32,49,53,46,55,48,55,52,52,44,10,9,9,9,9,34,118,50,49,34,58,32,51,51,46,57,54,50,50,49,44,10,9,9,9,9,34,118,50,50,34,58,32,55,46,53,55,53,54,56,56,44,10,9,9,9,9,34,118,50,51,34,58,32,45,48,46,48,52,56,56,48,57,48,55,44,10,9,9,9,9,34,118,50,52,34,58,32,49,56,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,34,118,48,50,34,58,32,51,51,46,50,54,54,52,44,10,9,9,9,9,34,118,48,51,34,58,32,53,55,46,53,51,54,52,51,44,10,9,9,9,9,34,118,48,52,34,58,32,49,54,55,46,50,50,52,49,44,10,9,9,9,9,34,118,48,53,34,58,32,49,57,54,46,52,56,51,51,44,10,9,9,9,9,34,118,48,54,34,58,32,49,57,52,46,55,57,54,54,44,10,9,9,9,9,34,118,48,55,34,58,32,49,56,50,46,49,56,56,52,44,10,9,9,9,9,34,118,48,56,34,58,32,49,49,57,46,54,57,54,49,44,10,9,9,9,9,34,118,48,57,34,58,32,55,51,46,48,50,49,49,51,44,10,9,9,9,9,34,118,49,48,34,58,32,52,56,46,51,54,53,52,57,44,10,9,9,9,9,34,118,49,49,34,58,32,51,51,46,55,52,54,53,50,44,10,9,9,9,9,34,118,49,50,34,58,32,50,54,46,50,51,55,57,44,10,9,9,9,9,34,118,49,51,34,58,32,49,54,46,51,53,55,56,44,10,9,9,9,9,34,118,49,52,34,58,32,54,46,56,49,49,50,57,51,44,10,9,9,9,9,34,118,49,53,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,34,118,49,54,34,58,32,54,46,54,51,57,50,55,49,44,10,9,9,9,9,34,118,49,55,34,58,32,56,46,52,54,56,48,57,51,44,10,9,9,9,9,34,118,49,56,34,58,32,54,46,49,57,52,50,55,51,44,10,9,9,9,9,34,118,49,57,34,58,32,51,46,53,57,49,50,51,51,44,10,9,9,9,9,34,118,50,48,34,58,32,51,46,56,49,52,56,54,44,10,9,9,9,9,34,118,50,49,34,58,32,56,46,54,48,48,55,51,57,44,10,9,9,9,9,34,118,50,50,34,58,32,53,46,50,49,56,56,57,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,49,57,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,34,118,48,50,34,58,32,50,57,46,55,55,57,51,55,44,10,9,9,9,9,34,118,48,51,34,58,32,53,52,46,57,55,50,56,50,44,10,9,9,9,9,34,118,48,52,34,58,32,49,52,52,46,55,57,57,53,44,10,9,9,9,9,34,118,48,53,34,58,32,50,48,55,46,52,57,48,52,44,10,9,9,9,9,34,118,48,54,34,58,32,49,54,53,46,51,52,51,50,44,10,9,9,9,9,34,118,48,55,34,58,32,49,55,49,46,52,48,52,55,44,10,9,9,9,9,34,118,48,56,34,58,32,49,55,52,46,57,50,49,54,44,10,9,9,9,9,34,118,48,57,34,58,32,49,48,48,46,50,55,51,51,44,10,9,9,9,9,34,118,49,48,34,58,32,54,49,46,52,54,52,52,49,44,10,9,9,9,9,34,118,49,49,34,58,32,53,48,46,49,57,49,55,49,44,10,9,9,9,9,34,118,49,50,34,58,32,50,54,46,48,56,50,48,57,44,10,9,9,9,9,34,118,49,51,34,58,32,49,55,46,49,56,50,49,56,44,10,9,9,9,9,34,118,49,52,34,58,32,56,46,52,54,56,48,57,51,44,10,9,9,9,9,34,118,49,53,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,34,118,49,54,34,58,32,54,46,51,51,52,52,54,55,44,10,9,9,9,9,34,118,49,55,34,58,32,54,46,51,51,52,52,54,55,44,10,9,9,9,9,34,118,49,56,34,58,32,53,46,54,54,54,54,56,55,44,10,9,9,9,9,34,118,49,57,34,58,32,52,46,50,55,50,50,48,51,44,10,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,50,48,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,34,118,48,50,34,58,32,51,49,46,52,48,57,44,10,9,9,9,9,34,118,48,51,34,58,32,49,51,50,46,55,52,49,56,44,10,9,9,9,9,34,118,48,52,34,58,32,49,56,53,46,53,55,57,54,44,10,9,9,9,9,34,118,48,53,34,58,32,49,50,49,46,56,50,57,57,44,10,9,9,9,9,34,118,48,54,34,58,32,49,56,53,46,51,56,52,49,44,10,9,9,9,9,34,118,48,55,34,58,32,49,54,48,46,54,53,54,54,44,10,9,9,9,9,34,118,48,56,34,58,32,49,49,54,46,49,52,55,56,44,10,9,9,9,9,34,118,48,57,34,58,32,49,49,56,46,49,48,55,56,44,10,9,9,9,9,34,118,49,48,34,58,32,49,52,49,46,55,57,52,54,44,10,9,9,9,9,34,118,49,49,34,58,32,54,53,46,53,54,51,53,49,44,10,9,9,9,9,34,118,49,50,34,58,32,52,56,46,56,52,48,54,54,44,10,9,9,9,9,34,118,49,51,34,58,32,50,51,46,49,51,56,54,52,44,10,9,9,9,9,34,118,49,52,34,58,32,49,56,46,49,50,57,51,50,44,10,9,9,9,9,34,118,49,53,34,58,32,49,48,46,50,56,53,51,49,44,10,9,9,9,9,34,118,49,54,34,58,32,54,46,48,50,57,54,54,51,44,10,9,9,9,9,34,118,49,55,34,58,32,54,46,48,52,52,54,50,55,44,10,9,9,9,9,34,118,49,56,34,58,32,53,46,54,57,52,55,54,52,44,10,9,9,9,9,34,118,49,57,34,58,32,51,46,55,51,57,48,56,53,44,10,9,9,9,9,34,118,50,48,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,50,49,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,34,118,48,50,34,58,32,49,57,46,53,56,57,57,52,44,10,9,9,9,9,34,118,48,51,34,58,32,52,50,46,51,48,51,53,53,44,10,9,9,9,9,34,118,48,52,34,58,32,57,54,46,50,54,55,55,55,44,10,9,9,9,9,34,118,48,53,34,58,32,49,56,55,46,49,50,48,55,44,10,9,9,9,9,34,118,48,54,34,58,32,49,55,57,46,54,54,50,54,44,10,9,9,9,9,34,118,48,55,34,58,32,50,50,49,46,51,56,57,56,44,10,9,9,9,9,34,118,48,56,34,58,32,49,53,52,46,50,54,49,55,44,10,9,9,9,9,34,118,48,57,34,58,32,49,52,50,46,49,54,48,52,44,10,9,9,9,9,34,118,49,48,34,58,32,49,52,56,46,53,55,51,55,44,10,9,9,9,9,34,118,49,49,34,58,32,54,55,46,49,55,57,51,55,44,10,9,9,9,9,34,118,49,50,34,58,32,52,48,46,54,57,48,52,52,44,10,9,9,9,9,34,118,49,51,34,58,32,51,57,46,55,52,53,49,50,44,10,9,9,9,9,34,118,49,52,34,58,32,50,54,46,49,48,49,54,54,44,10,9,9,9,9,34,118,49,53,34,58,32,49,52,46,52,56,52,54,57,44,10,9,9,9,9,34,118,49,54,34,58,32,56,46,54,53,56,55,51,44,10,9,9,9,9,34,118,49,55,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,34,118,49,56,34,58,32,51,46,53,55,49,51,57,50,44,10,9,9,9,9,34,118,49,57,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,34,118,50,48,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,34,118,50,49,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,34,118,50,50,34,58,32,49,46,48,55,55,55,53,54,44,10,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,34,118,50,52,34,58,32,50,50,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,46,48,48,49,50,50,57,54,55,57,44,10,9,9,9,9,34,118,48,49,34,58,32,51,46,48,48,56,57,52,56,44,10,9,9,9,9,34,118,48,50,34,58,32,53,46,57,48,57,56,53,56,44,10,9,9,9,9,34,118,48,51,34,58,32,51,51,46,53,48,53,55,52,44,10,9,9,9,9,34,118,48,52,34,58,32,49,48,52,46,51,51,52,49,44,10,9,9,9,9,34,118,48,53,34,58,32,49,53,50,46,50,49,54,53,44,10,9,9,9,9,34,118,48,54,34,58,32,49,57,56,46,49,57,56,56,44,10,9,9,9,9,34,118,48,55,34,58,32,49,57,49,46,56,52,49,44,10,9,9,9,9,34,118,48,56,34,58,32,50,50,56,46,55,51,52,57,44,10,9,9,9,9,34,118,48,57,34,58,32,49,54,56,46,49,48,52,49,44,10,9,9,9,9,34,118,49,48,34,58,32,49,52,52,46,50,55,53,57,44,10,9,9,9,9,34,118,49,49,34,58,32,49,49,48,46,55,52,51,54,44,10,9,9,9,9,34,118,49,50,34,58,32,53,55,46,54,53,50,49,52,44,10,9,9,9,9,34,118,49,51,34,58,32,52,50,46,54,51,53,48,52,44,10,9,9,9,9,34,118,49,52,34,58,32,50,55,46,57,49,56,57,49,44,10,9,9,9,9,34,118,49,53,34,58,32,49,53,46,52,49,48,53,50,44,10,9,9,9,9,34,118,49,54,34,58,32,56,46,48,53,54,49,48,50,44,10,9,9,9,9,34,118,49,55,34,58,32,51,46,57,48,50,56,51,44,10,9,9,9,9,34,118,49,56,34,58,32,51,46,56,55,57,55,55,52,44,10,9,9,9,9,34,118,49,57,34,58,32,51,46,57,51,54,55,49,56,44,10,9,9,9,9,34,118,50,48,34,58,32,51,46,57,54,56,54,51,52,44,10,9,9,9,9,34,118,50,49,34,58,32,48,46,49,50,51,54,50,53,54,44,10,9,9,9,9,34,118,50,50,34,58,32,51,46,57,56,53,53,51,49,44,10,9,9,9,9,34,118,50,51,34,58,32,45,48,46,49,56,51,53,55,52,49,44,10,9,9,9,9,34,118,50,52,34,58,32,50,51,10,9,9,9,125,44,10,9,9,9,123,10,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,34,118,48,49,34,58,32,53,46,54,50,54,49,52,49,44,10,9,9,9,9,34,118,48,50,34,58,32,55,46,54,55,54,50,53,54,44,10,9,9,9,9,34,118,48,51,34,58,32,54,51,46,49,54,50,50,54,44,10,9,9,9,9,34,118,48,52,34,58,32,52,53,46,57,57,55,54,50,44,10,9,9,9,9,34,118,48,53,34,58,32,55,57,46,53,54,54,56,56,44,10,9,9,9,9,34,118,48,54,34,58,32,50,50,55,46,51,49,49,44,10,9,9,9,9,34,118,48,55,34,58,32,50,48,51,46,57,50,56,55,44,10,9,9,9,9,34,118,48,56,34,58,32,49,55,50,46,53,54,49,56,44,10,9,9,9,9,34,118,48,57,34,58,32,49,55,55,46,49,52,54,50,44,10,9,9,9,9,34,118,49,48,34,58,32,49,52,48,46,52,53,53,52,44,10,9,9,9,9,34,118,49,49,34,58,32,49,50,51,46,57,57,48,53,44,10,9,9,9,9,34,118,49,50,34,58,32,49,49,48,46,51,52,54,44,10,9,9,9,9,34,118,49,51,34,58,32,54,53,46,49,50,51,49,57,44,10,9,9,9,9,34,118,49,52,34,58,32,51,52,46,51,49,56,56,55,44,10,9,9,9,9,34,118,49,53,34,58,32,50,52,46,53,50,55,56,44,10,9,9,9,9,34,118,49,54,34,58,32,57,46,53,54,49,48,54,57,44,10,9,9,9,9,34,118,49,55,34,58,32,51,46,51,51,52,57,57,49,44,10,9,9,9,9,34,118,49,56,34,58,32,53,46,53,57,48,52,57,53,44,10,9,9,9,9,34,118,49,57,34,58,32,53,46,52,56,55,51,53,51,44,10,9,9,9,9,34,118,50,48,34,58,32,53,46,57,48,57,52,57,57,44,10,9,9,9,9,34,118,50,49,34,58,32,53,46,56,54,56,57,57,52,44,10,9,9,9,9,34,118,50,50,34,58,32,53,46,56,51,51,56,49,55,44,10,9,9,9,9,34,118,50,51,34,58,32,51,46,53,54,56,49,55,55,44,10,9,9,9,9,34,118,50,52,34,58,32,50,52,10,9,9,9,125,10,9,9,93,10,9,125,10,125]}]},{"kind":2,"language":"ojs","value":"Result_1;\r\nResult_2;\r\nResult_3;\r\nResult_4;\r\n","outputs":[{"mime":"application/hpcc.ojs+json","data":[123,10,9,34,99,111,100,101,34,58,32,34,82,101,115,117,108,116,95,49,59,92,114,92,110,82,101,115,117,108,116,95,50,59,92,114,92,110,82,101,115,117,108,116,95,51,59,92,114,92,110,82,101,115,117,108,116,95,52,59,92,114,92,110,34,44,10,9,34,102,111,108,100,101,114,34,58,32,34,47,100,58,47,85,115,101,114,115,47,103,111,114,100,111,110,47,103,105,116,47,118,115,99,111,100,101,45,101,99,108,47,101,99,108,45,115,97,109,112,108,101,47,110,111,116,101,98,111,111,107,115,34,44,10,9,34,101,99,108,82,101,115,117,108,116,115,34,58,32,91,10,9,9,123,10,9,9,9,34,99,111,110,102,105,103,117,114,97,116,105,111,110,34,58,32,34,108,111,99,97,108,104,111,115,116,34,44,10,9,9,9,34,119,117,105,100,34,58,32,34,87,50,48,50,50,48,56,49,54,45,49,52,49,53,53,54,34,44,10,9,9,9,34,114,101,115,117,108,116,115,34,58,32,123,10,9,9,9,9,34,82,101,115,117,108,116,95,51,34,58,32,34,49,50,34,44,10,9,9,9,9,34,82,101,115,117,108,116,95,53,34,58,32,34,49,50,51,52,34,44,10,9,9,9,9,34,82,101,115,117,108,116,95,52,34,58,32,34,49,50,51,34,44,10,9,9,9,9,34,82,101,115,117,108,116,95,49,34,58,32,91,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,50,55,46,56,48,57,56,53,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,52,57,46,54,49,57,51,54,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,56,51,46,48,56,48,54,55,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,49,54,46,54,54,51,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,51,48,46,52,49,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,53,48,46,55,50,48,54,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,50,50,48,46,49,56,55,49,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,53,54,46,49,53,51,54,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,52,56,46,54,52,49,54,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,50,48,51,46,55,56,52,53,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,50,48,54,46,48,51,56,54,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,48,55,46,49,54,49,56,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,54,56,46,51,54,57,55,53,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,52,53,46,51,51,53,57,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,52,57,46,57,54,49,52,50,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,50,49,46,56,57,50,55,57,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,55,46,48,50,53,53,50,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,49,49,46,55,52,51,49,55,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,49,52,46,55,53,50,50,54,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,49,51,46,54,54,55,49,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,53,46,54,55,55,53,54,49,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,51,46,51,49,50,51,52,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,49,46,49,53,54,53,49,55,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,45,48,46,49,52,55,54,54,50,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,48,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,50,55,46,55,49,57,54,54,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,52,56,46,53,53,48,50,50,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,54,53,46,50,49,51,55,52,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,57,53,46,50,55,54,54,54,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,49,54,46,57,57,54,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,51,51,46,57,48,53,54,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,53,50,46,51,52,49,50,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,53,49,46,57,51,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,54,48,46,49,49,51,57,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,55,57,46,53,51,50,55,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,52,55,46,54,49,56,52,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,55,48,46,51,57,52,51,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,50,49,46,56,49,57,52,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,53,50,46,53,56,53,51,55,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,51,51,46,48,56,56,55,49,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,51,56,46,52,48,57,55,50,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,52,52,46,50,52,56,52,51,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,57,46,53,55,56,54,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,52,46,48,49,57,51,53,49,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,46,48,53,48,48,50,52,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,48,51,57,55,49,57,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,50,46,57,57,54,49,52,50,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,50,46,57,54,55,57,53,52,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,49,46,57,57,57,53,57,52,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,51,48,46,52,50,54,55,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,51,51,46,52,55,55,53,50,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,52,52,46,56,48,57,53,51,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,54,50,46,52,55,52,57,53,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,55,55,46,52,51,53,50,51,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,48,52,46,50,49,53,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,48,50,46,55,51,57,51,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,51,55,46,48,48,48,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,56,54,46,48,55,48,54,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,50,49,57,46,51,49,55,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,56,49,46,55,54,49,53,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,50,48,46,57,49,53,52,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,52,51,46,49,56,51,53,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,56,50,46,52,48,53,48,49,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,52,56,46,52,55,49,51,50,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,55,52,46,55,49,52,54,49,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,54,48,46,48,57,48,57,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,55,46,48,55,51,53,50,53,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,48,56,57,56,53,49,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,54,46,53,51,55,52,53,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,54,46,54,54,54,48,57,54,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,55,46,51,48,54,57,54,53,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,53,46,55,51,54,56,52,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,51,46,54,50,53,54,50,56,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,49,54,46,54,54,53,52,57,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,51,48,46,49,48,56,54,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,51,57,46,57,54,57,53,50,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,52,52,46,49,50,50,50,53,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,53,57,46,53,55,53,49,50,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,55,55,46,53,54,57,50,57,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,48,54,46,56,57,50,53,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,54,54,46,53,53,51,57,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,55,53,46,50,51,56,49,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,56,53,46,50,56,49,53,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,53,52,46,53,48,53,54,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,56,51,46,48,52,51,51,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,54,50,46,54,49,55,51,50,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,54,50,46,51,51,49,54,55,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,54,48,46,53,53,57,49,54,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,53,53,46,57,50,49,50,52,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,53,46,49,55,50,56,52,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,56,46,50,52,56,51,50,52,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,51,54,46,54,56,48,56,55,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,54,49,46,57,51,52,49,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,50,48,46,50,54,56,54,55,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,54,56,46,53,56,56,49,57,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,52,54,46,52,57,56,49,50,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,46,50,51,54,48,48,57,53,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,51,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,56,46,56,49,53,54,49,55,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,49,56,46,51,53,49,54,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,56,46,54,53,56,50,55,53,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,50,55,46,53,56,53,57,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,52,56,46,54,50,54,57,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,54,48,46,49,56,48,49,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,57,49,46,51,50,56,54,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,52,53,46,55,49,48,57,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,49,54,46,48,54,53,51,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,48,54,46,50,54,54,50,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,54,56,46,54,57,52,52,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,53,51,46,49,48,53,57,54,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,51,55,46,57,50,55,57,55,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,52,55,46,57,53,57,52,50,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,52,55,46,52,50,54,57,49,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,54,57,46,50,48,55,51,49,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,52,52,46,57,53,52,54,56,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,50,57,46,49,55,49,57,55,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,49,55,46,57,49,54,55,52,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,49,54,46,50,53,53,49,53,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,52,46,54,53,53,53,57,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,49,55,46,50,54,48,52,56,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,51,49,46,50,50,50,52,53,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,52,54,46,55,49,55,48,52,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,52,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,54,46,54,50,56,56,56,49,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,49,48,46,52,49,51,51,57,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,50,52,46,56,49,57,51,57,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,50,54,46,48,56,57,53,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,51,48,46,49,54,48,53,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,53,50,46,51,48,56,48,50,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,54,52,46,55,49,48,48,55,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,55,54,46,51,48,56,50,51,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,56,52,46,54,51,54,56,54,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,57,57,46,52,51,50,52,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,54,50,46,53,50,49,51,50,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,52,54,46,56,49,54,52,55,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,53,53,46,55,54,54,48,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,56,50,46,52,48,57,57,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,52,48,46,50,54,52,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,56,49,46,50,54,53,48,49,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,53,54,46,52,53,55,53,54,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,51,48,46,52,50,49,54,52,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,49,55,46,50,56,55,56,50,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,56,46,51,48,50,52,51,49,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,50,46,57,56,49,54,50,54,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,50,46,54,57,56,53,51,54,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,53,46,56,56,54,48,56,54,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,53,46,50,54,56,51,53,56,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,53,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,50,49,46,56,51,57,55,53,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,56,46,57,55,48,56,53,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,51,50,46,56,57,50,48,52,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,52,51,46,49,53,48,49,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,54,50,46,56,54,48,49,52,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,48,52,46,54,54,53,55,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,51,48,46,50,50,57,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,49,52,46,56,52,57,52,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,48,54,46,57,56,55,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,54,49,46,56,57,54,52,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,53,53,46,53,53,54,56,50,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,56,54,46,56,48,57,56,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,56,57,46,50,55,56,48,50,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,50,50,46,52,50,50,49,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,50,51,46,57,54,57,56,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,48,57,46,48,57,53,50,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,57,56,46,52,49,57,53,54,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,55,55,46,54,49,51,55,52,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,50,46,52,57,48,51,49,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,52,46,54,55,51,52,52,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,55,46,51,55,48,55,55,53,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,46,48,51,55,49,49,48,49,49,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,46,54,52,50,51,51,57,50,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,54,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,53,51,46,51,52,51,48,51,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,50,54,46,55,57,55,57,55,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,48,46,56,56,55,56,55,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,55,46,50,48,52,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,53,54,46,49,56,49,49,54,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,55,57,46,55,48,49,52,49,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,57,48,46,56,52,53,51,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,57,56,46,50,55,54,55,53,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,56,48,46,56,55,50,52,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,55,52,46,55,57,51,49,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,55,53,46,53,52,54,54,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,55,51,46,52,51,55,51,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,55,52,46,49,49,54,57,52,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,54,56,46,49,55,52,57,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,52,54,46,50,52,48,55,54,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,51,57,46,57,51,56,53,55,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,51,49,46,50,49,54,53,51,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,51,54,46,56,56,51,51,53,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,52,48,46,48,50,53,50,53,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,49,55,46,52,50,57,55,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,49,50,46,55,48,51,50,56,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,49,46,55,50,57,55,55,49,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,55,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,50,53,46,54,54,55,56,53,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,54,51,46,48,53,55,49,55,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,50,50,46,49,52,49,52,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,55,46,48,55,52,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,52,49,46,55,52,52,56,51,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,54,48,46,50,55,50,50,55,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,56,49,46,52,50,52,51,50,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,49,52,46,52,52,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,48,50,46,51,50,51,52,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,48,49,46,55,56,55,56,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,49,49,46,48,51,49,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,49,57,46,50,51,48,57,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,49,52,46,48,55,55,55,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,49,48,46,53,50,57,54,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,53,57,46,49,57,51,53,53,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,52,50,46,52,55,49,55,53,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,52,46,54,51,53,57,56,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,46,57,52,52,48,55,52,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,57,52,52,48,55,53,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,50,55,46,55,52,57,51,54,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,46,48,57,52,52,57,51,55,54,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,46,48,55,55,51,50,50,54,52,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,56,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,49,50,46,56,50,55,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,54,57,46,50,48,53,53,52,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,52,54,46,55,54,50,57,51,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,51,46,57,54,53,49,55,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,51,51,46,56,56,55,52,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,54,49,46,56,50,54,49,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,56,52,46,55,52,55,57,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,50,49,46,49,50,50,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,52,53,46,50,55,52,49,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,53,51,46,49,55,57,55,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,50,48,52,46,55,56,54,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,50,50,55,46,57,50,52,50,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,51,54,46,51,48,51,56,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,50,50,56,46,51,54,53,53,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,55,57,46,51,52,52,50,53,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,50,53,46,57,51,52,56,51,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,54,46,57,52,52,48,55,52,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,46,57,52,52,48,55,52,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,57,52,52,48,55,53,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,55,46,53,53,51,54,56,49,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,57,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,54,56,46,54,54,51,57,54,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,53,57,46,48,52,51,53,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,51,51,46,51,53,55,54,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,52,55,46,52,53,50,56,50,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,53,55,46,56,51,53,53,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,55,56,46,57,49,54,56,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,48,55,46,56,50,55,53,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,54,56,46,48,48,53,51,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,51,48,46,57,53,57,55,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,50,49,50,46,53,53,52,49,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,54,53,46,56,49,50,50,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,49,48,46,50,52,50,57,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,56,49,46,49,55,49,51,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,56,57,46,55,54,49,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,51,55,46,51,51,55,56,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,56,52,46,54,53,51,57,53,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,56,46,54,55,55,49,54,56,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,57,53,54,53,55,54,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,56,46,52,54,56,48,57,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,48,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,57,53,46,49,55,52,57,57,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,56,48,46,48,51,56,49,56,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,53,57,46,56,57,56,54,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,51,57,46,53,56,52,55,54,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,53,48,46,50,56,48,53,56,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,54,51,46,56,49,54,52,49,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,56,48,46,54,49,51,48,50,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,54,54,46,51,55,56,50,52,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,57,56,46,55,54,53,49,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,50,52,52,46,51,52,54,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,50,57,52,46,50,52,55,52,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,54,52,46,51,53,49,55,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,55,54,46,52,48,56,50,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,54,48,46,50,49,56,53,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,55,55,46,52,49,52,55,53,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,53,51,46,49,54,57,56,49,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,53,54,46,49,54,51,57,51,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,57,52,57,50,51,53,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,55,46,53,51,49,48,53,57,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,55,56,48,49,55,55,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,49,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,49,51,52,46,57,56,55,57,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,51,48,46,51,54,57,54,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,57,54,46,56,54,51,50,53,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,55,53,46,55,48,52,57,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,53,56,46,56,54,52,54,54,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,53,55,46,50,48,51,55,52,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,53,53,46,49,56,56,51,55,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,55,56,46,49,50,56,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,48,56,46,53,53,56,50,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,53,52,46,51,55,55,52,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,51,49,57,46,49,54,56,54,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,51,55,50,46,56,56,50,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,50,55,53,46,52,54,53,53,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,51,48,46,50,54,51,50,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,53,52,46,57,51,56,50,50,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,50,53,46,52,57,55,49,57,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,56,46,48,52,55,52,51,57,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,56,46,48,56,52,51,57,51,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,53,46,49,49,53,50,53,50,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,53,46,54,55,56,50,54,57,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,50,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,52,56,46,48,56,57,49,57,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,52,50,46,53,53,53,56,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,52,48,46,51,55,55,55,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,53,52,46,55,50,54,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,56,55,46,57,51,54,49,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,53,56,46,49,49,48,57,50,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,53,50,46,56,51,56,54,57,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,54,55,46,49,52,56,50,50,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,56,51,46,54,54,55,57,56,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,49,56,46,57,50,52,50,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,53,48,46,48,54,56,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,55,50,46,57,55,48,57,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,51,52,49,46,49,51,54,54,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,50,51,56,46,54,54,52,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,57,48,46,50,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,49,54,46,56,57,52,51,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,57,49,46,52,56,54,55,50,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,49,52,46,48,49,53,55,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,52,50,46,50,57,50,55,55,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,53,46,49,49,53,50,53,50,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,51,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,53,52,46,49,57,52,49,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,52,54,46,51,56,51,57,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,57,57,46,52,56,49,52,51,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,57,54,46,49,57,52,49,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,48,50,46,57,52,55,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,55,54,46,49,52,48,56,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,53,55,46,55,56,52,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,52,55,46,48,52,48,50,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,54,52,46,51,54,55,57,57,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,56,52,46,50,51,55,54,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,54,50,46,55,49,56,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,50,49,46,51,50,55,53,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,50,49,51,46,49,54,52,54,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,51,50,56,46,52,56,50,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,50,56,53,46,52,52,56,57,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,50,56,51,46,56,51,49,57,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,50,49,50,46,56,49,53,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,49,54,52,46,53,52,57,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,57,50,46,50,57,54,51,49,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,55,46,50,52,52,48,49,53,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,49,46,49,54,55,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,52,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,54,46,57,49,57,54,53,57,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,57,53,46,49,55,48,57,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,51,50,46,53,50,53,51,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,51,53,46,50,51,52,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,56,57,46,56,53,48,54,57,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,56,57,46,52,53,53,52,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,54,48,46,50,57,57,54,55,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,53,48,46,51,51,56,48,54,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,51,57,46,49,55,53,56,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,53,57,46,48,54,56,53,52,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,55,52,46,53,50,49,53,57,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,56,52,46,57,51,52,48,50,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,56,55,46,49,50,49,57,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,50,51,46,57,54,55,51,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,48,51,46,55,48,50,55,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,50,56,46,57,56,54,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,49,54,53,46,49,50,56,51,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,50,52,57,46,55,48,53,52,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,57,53,46,51,57,57,54,54,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,48,46,48,48,50,56,52,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,50,46,51,57,50,53,53,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,53,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,50,49,46,55,51,56,55,49,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,50,51,46,49,51,51,57,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,55,54,46,55,52,49,52,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,53,56,46,50,54,57,56,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,51,55,46,50,51,53,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,48,53,46,51,48,56,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,56,54,46,54,51,50,53,53,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,53,51,46,49,49,53,57,49,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,50,57,46,48,51,56,54,53,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,51,48,46,52,48,53,51,57,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,51,57,46,48,52,57,48,50,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,52,57,46,50,51,52,48,53,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,54,51,46,50,55,56,53,51,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,49,49,46,52,50,49,53,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,48,49,46,49,57,53,54,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,52,48,46,48,48,57,54,50,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,53,57,46,56,52,53,54,53,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,55,52,46,53,49,50,53,51,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,49,55,46,48,54,51,49,54,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,50,46,52,51,53,49,52,49,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,50,46,50,56,55,52,55,49,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,45,48,46,48,48,48,51,54,51,54,57,56,50,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,54,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,54,50,46,48,52,54,55,50,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,51,54,46,51,49,50,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,50,48,49,46,55,57,53,50,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,54,56,46,49,51,52,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,57,53,46,50,48,52,54,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,53,56,46,57,48,54,50,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,52,54,46,57,52,48,57,49,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,52,57,46,50,55,48,53,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,51,55,46,49,48,52,49,54,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,55,46,57,55,48,49,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,51,48,46,57,51,54,57,55,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,51,51,46,51,57,50,53,55,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,52,52,46,48,51,48,55,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,53,53,46,54,52,53,52,50,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,55,56,46,50,50,52,50,51,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,49,52,46,52,50,55,56,50,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,57,46,57,53,52,57,57,55,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,55,46,55,54,56,50,49,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,51,46,48,50,53,52,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,50,49,46,55,51,49,54,54,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,50,46,49,53,54,51,55,50,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,46,53,51,49,55,56,54,55,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,55,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,55,57,46,54,50,57,57,51,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,51,57,46,54,57,55,56,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,55,51,46,49,54,55,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,57,50,46,56,55,49,56,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,57,54,46,51,52,57,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,52,52,46,54,54,49,49,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,48,54,46,53,52,50,52,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,53,55,46,49,54,54,53,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,52,49,46,49,54,49,48,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,51,50,46,49,50,55,54,52,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,51,46,56,53,54,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,48,46,57,49,55,55,50,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,50,46,48,55,49,55,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,50,50,46,51,56,50,53,52,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,50,52,46,55,50,49,48,53,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,46,56,48,51,54,54,54,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,52,46,50,48,48,56,52,49,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,49,54,46,52,54,56,53,55,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,53,46,55,48,55,52,52,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,51,51,46,57,54,50,50,49,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,55,46,53,55,53,54,56,56,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,45,48,46,48,52,56,56,48,57,48,55,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,56,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,51,51,46,50,54,54,52,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,53,55,46,53,51,54,52,51,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,54,55,46,50,50,52,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,57,54,46,52,56,51,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,57,52,46,55,57,54,54,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,56,50,46,49,56,56,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,49,57,46,54,57,54,49,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,55,51,46,48,50,49,49,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,52,56,46,51,54,53,52,57,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,51,51,46,55,52,54,53,50,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,54,46,50,51,55,57,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,54,46,51,53,55,56,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,54,46,56,49,49,50,57,51,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,54,46,54,51,57,50,55,49,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,56,46,52,54,56,48,57,51,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,49,57,52,50,55,51,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,46,53,57,49,50,51,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,56,49,52,56,54,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,56,46,54,48,48,55,51,57,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,53,46,50,49,56,56,57,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,57,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,50,57,46,55,55,57,51,55,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,53,52,46,57,55,50,56,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,52,52,46,55,57,57,53,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,50,48,55,46,52,57,48,52,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,54,53,46,51,52,51,50,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,55,49,46,52,48,52,55,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,55,52,46,57,50,49,54,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,48,48,46,50,55,51,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,54,49,46,52,54,52,52,49,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,53,48,46,49,57,49,55,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,54,46,48,56,50,48,57,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,55,46,49,56,50,49,56,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,56,46,52,54,56,48,57,51,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,54,46,51,51,52,52,54,55,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,46,51,51,52,52,54,55,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,53,46,54,54,54,54,56,55,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,52,46,50,55,50,50,48,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,48,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,51,49,46,52,48,57,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,51,50,46,55,52,49,56,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,56,53,46,53,55,57,54,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,50,49,46,56,50,57,57,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,56,53,46,51,56,52,49,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,54,48,46,54,53,54,54,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,49,54,46,49,52,55,56,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,49,56,46,49,48,55,56,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,52,49,46,55,57,52,54,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,54,53,46,53,54,51,53,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,52,56,46,56,52,48,54,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,50,51,46,49,51,56,54,52,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,56,46,49,50,57,51,50,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,48,46,50,56,53,51,49,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,54,46,48,50,57,54,54,51,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,46,48,52,52,54,50,55,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,53,46,54,57,52,55,54,52,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,46,55,51,57,48,56,53,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,49,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,57,46,53,56,57,57,52,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,52,50,46,51,48,51,53,53,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,57,54,46,50,54,55,55,55,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,56,55,46,49,50,48,55,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,55,57,46,54,54,50,54,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,50,50,49,46,51,56,57,56,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,53,52,46,50,54,49,55,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,52,50,46,49,54,48,52,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,52,56,46,53,55,51,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,54,55,46,49,55,57,51,55,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,52,48,46,54,57,48,52,52,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,51,57,46,55,52,53,49,50,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,50,54,46,49,48,49,54,54,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,52,46,52,56,52,54,57,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,56,46,54,53,56,55,51,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,51,46,53,55,49,51,57,50,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,49,46,48,55,55,55,53,54,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,50,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,46,48,48,49,50,50,57,54,55,57,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,51,46,48,48,56,57,52,56,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,53,46,57,48,57,56,53,56,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,51,51,46,53,48,53,55,52,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,48,52,46,51,51,52,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,53,50,46,50,49,54,53,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,57,56,46,49,57,56,56,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,57,49,46,56,52,49,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,50,50,56,46,55,51,52,57,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,54,56,46,49,48,52,49,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,52,52,46,50,55,53,57,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,49,48,46,55,52,51,54,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,53,55,46,54,53,50,49,52,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,52,50,46,54,51,53,48,52,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,50,55,46,57,49,56,57,49,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,53,46,52,49,48,53,50,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,56,46,48,53,54,49,48,50,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,51,46,57,48,50,56,51,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,51,46,56,55,57,55,55,52,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,46,57,51,54,55,49,56,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,57,54,56,54,51,52,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,46,49,50,51,54,50,53,54,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,51,46,57,56,53,53,51,49,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,45,48,46,49,56,51,53,55,52,49,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,51,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,53,46,54,50,54,49,52,49,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,55,46,54,55,54,50,53,54,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,54,51,46,49,54,50,50,54,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,52,53,46,57,57,55,54,50,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,55,57,46,53,54,54,56,56,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,50,50,55,46,51,49,49,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,50,48,51,46,57,50,56,55,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,55,50,46,53,54,49,56,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,55,55,46,49,52,54,50,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,52,48,46,52,53,53,52,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,50,51,46,57,57,48,53,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,49,48,46,51,52,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,54,53,46,49,50,51,49,57,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,51,52,46,51,49,56,56,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,50,52,46,53,50,55,56,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,57,46,53,54,49,48,54,57,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,51,46,51,51,52,57,57,49,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,53,46,53,57,48,52,57,53,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,53,46,52,56,55,51,53,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,53,46,57,48,57,52,57,57,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,53,46,56,54,56,57,57,52,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,53,46,56,51,51,56,49,55,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,51,46,53,54,56,49,55,55,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,52,10,9,9,9,9,9,125,10,9,9,9,9,93,44,10,9,9,9,9,34,82,101,115,117,108,116,95,50,34,58,32,91,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,50,55,46,56,48,57,56,53,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,52,57,46,54,49,57,51,54,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,56,51,46,48,56,48,54,55,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,49,54,46,54,54,51,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,51,48,46,52,49,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,53,48,46,55,50,48,54,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,50,50,48,46,49,56,55,49,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,53,54,46,49,53,51,54,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,52,56,46,54,52,49,54,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,50,48,51,46,55,56,52,53,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,50,48,54,46,48,51,56,54,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,48,55,46,49,54,49,56,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,54,56,46,51,54,57,55,53,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,52,53,46,51,51,53,57,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,52,57,46,57,54,49,52,50,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,50,49,46,56,57,50,55,57,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,55,46,48,50,53,53,50,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,49,49,46,55,52,51,49,55,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,49,52,46,55,53,50,50,54,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,49,51,46,54,54,55,49,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,53,46,54,55,55,53,54,49,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,51,46,51,49,50,51,52,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,49,46,49,53,54,53,49,55,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,45,48,46,49,52,55,54,54,50,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,48,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,50,55,46,55,49,57,54,54,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,52,56,46,53,53,48,50,50,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,54,53,46,50,49,51,55,52,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,57,53,46,50,55,54,54,54,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,49,54,46,57,57,54,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,51,51,46,57,48,53,54,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,53,50,46,51,52,49,50,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,53,49,46,57,51,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,54,48,46,49,49,51,57,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,55,57,46,53,51,50,55,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,52,55,46,54,49,56,52,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,55,48,46,51,57,52,51,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,50,49,46,56,49,57,52,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,53,50,46,53,56,53,51,55,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,51,51,46,48,56,56,55,49,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,51,56,46,52,48,57,55,50,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,52,52,46,50,52,56,52,51,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,57,46,53,55,56,54,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,52,46,48,49,57,51,53,49,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,46,48,53,48,48,50,52,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,48,51,57,55,49,57,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,50,46,57,57,54,49,52,50,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,50,46,57,54,55,57,53,52,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,49,46,57,57,57,53,57,52,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,51,48,46,52,50,54,55,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,51,51,46,52,55,55,53,50,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,52,52,46,56,48,57,53,51,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,54,50,46,52,55,52,57,53,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,55,55,46,52,51,53,50,51,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,48,52,46,50,49,53,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,48,50,46,55,51,57,51,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,51,55,46,48,48,48,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,56,54,46,48,55,48,54,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,50,49,57,46,51,49,55,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,56,49,46,55,54,49,53,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,50,48,46,57,49,53,52,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,52,51,46,49,56,51,53,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,56,50,46,52,48,53,48,49,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,52,56,46,52,55,49,51,50,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,55,52,46,55,49,52,54,49,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,54,48,46,48,57,48,57,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,55,46,48,55,51,53,50,53,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,48,56,57,56,53,49,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,54,46,53,51,55,52,53,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,54,46,54,54,54,48,57,54,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,55,46,51,48,54,57,54,53,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,53,46,55,51,54,56,52,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,51,46,54,50,53,54,50,56,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,49,54,46,54,54,53,52,57,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,51,48,46,49,48,56,54,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,51,57,46,57,54,57,53,50,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,52,52,46,49,50,50,50,53,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,53,57,46,53,55,53,49,50,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,55,55,46,53,54,57,50,57,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,48,54,46,56,57,50,53,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,54,54,46,53,53,51,57,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,55,53,46,50,51,56,49,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,56,53,46,50,56,49,53,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,53,52,46,53,48,53,54,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,56,51,46,48,52,51,51,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,54,50,46,54,49,55,51,50,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,54,50,46,51,51,49,54,55,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,54,48,46,53,53,57,49,54,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,53,53,46,57,50,49,50,52,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,53,46,49,55,50,56,52,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,56,46,50,52,56,51,50,52,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,51,54,46,54,56,48,56,55,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,54,49,46,57,51,52,49,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,50,48,46,50,54,56,54,55,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,54,56,46,53,56,56,49,57,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,52,54,46,52,57,56,49,50,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,46,50,51,54,48,48,57,53,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,51,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,56,46,56,49,53,54,49,55,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,49,56,46,51,53,49,54,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,56,46,54,53,56,50,55,53,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,50,55,46,53,56,53,57,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,52,56,46,54,50,54,57,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,54,48,46,49,56,48,49,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,57,49,46,51,50,56,54,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,52,53,46,55,49,48,57,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,49,54,46,48,54,53,51,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,48,54,46,50,54,54,50,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,54,56,46,54,57,52,52,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,53,51,46,49,48,53,57,54,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,51,55,46,57,50,55,57,55,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,52,55,46,57,53,57,52,50,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,52,55,46,52,50,54,57,49,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,54,57,46,50,48,55,51,49,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,52,52,46,57,53,52,54,56,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,50,57,46,49,55,49,57,55,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,49,55,46,57,49,54,55,52,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,49,54,46,50,53,53,49,53,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,52,46,54,53,53,53,57,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,49,55,46,50,54,48,52,56,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,51,49,46,50,50,50,52,53,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,52,54,46,55,49,55,48,52,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,52,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,54,46,54,50,56,56,56,49,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,49,48,46,52,49,51,51,57,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,50,52,46,56,49,57,51,57,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,50,54,46,48,56,57,53,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,51,48,46,49,54,48,53,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,53,50,46,51,48,56,48,50,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,54,52,46,55,49,48,48,55,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,55,54,46,51,48,56,50,51,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,56,52,46,54,51,54,56,54,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,57,57,46,52,51,50,52,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,54,50,46,53,50,49,51,50,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,52,54,46,56,49,54,52,55,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,53,53,46,55,54,54,48,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,56,50,46,52,48,57,57,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,52,48,46,50,54,52,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,56,49,46,50,54,53,48,49,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,53,54,46,52,53,55,53,54,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,51,48,46,52,50,49,54,52,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,49,55,46,50,56,55,56,50,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,56,46,51,48,50,52,51,49,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,50,46,57,56,49,54,50,54,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,50,46,54,57,56,53,51,54,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,53,46,56,56,54,48,56,54,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,53,46,50,54,56,51,53,56,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,53,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,50,49,46,56,51,57,55,53,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,56,46,57,55,48,56,53,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,51,50,46,56,57,50,48,52,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,52,51,46,49,53,48,49,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,54,50,46,56,54,48,49,52,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,48,52,46,54,54,53,55,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,51,48,46,50,50,57,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,49,52,46,56,52,57,52,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,48,54,46,57,56,55,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,54,49,46,56,57,54,52,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,53,53,46,53,53,54,56,50,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,56,54,46,56,48,57,56,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,56,57,46,50,55,56,48,50,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,50,50,46,52,50,50,49,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,50,51,46,57,54,57,56,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,48,57,46,48,57,53,50,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,57,56,46,52,49,57,53,54,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,55,55,46,54,49,51,55,52,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,50,46,52,57,48,51,49,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,52,46,54,55,51,52,52,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,55,46,51,55,48,55,55,53,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,46,48,51,55,49,49,48,49,49,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,46,54,52,50,51,51,57,50,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,54,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,53,51,46,51,52,51,48,51,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,50,54,46,55,57,55,57,55,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,48,46,56,56,55,56,55,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,55,46,50,48,52,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,53,54,46,49,56,49,49,54,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,55,57,46,55,48,49,52,49,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,57,48,46,56,52,53,51,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,57,56,46,50,55,54,55,53,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,56,48,46,56,55,50,52,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,55,52,46,55,57,51,49,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,55,53,46,53,52,54,54,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,55,51,46,52,51,55,51,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,55,52,46,49,49,54,57,52,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,54,56,46,49,55,52,57,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,52,54,46,50,52,48,55,54,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,51,57,46,57,51,56,53,55,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,51,49,46,50,49,54,53,51,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,51,54,46,56,56,51,51,53,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,52,48,46,48,50,53,50,53,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,49,55,46,52,50,57,55,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,49,50,46,55,48,51,50,56,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,49,46,55,50,57,55,55,49,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,55,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,50,53,46,54,54,55,56,53,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,54,51,46,48,53,55,49,55,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,50,50,46,49,52,49,52,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,55,46,48,55,52,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,52,49,46,55,52,52,56,51,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,54,48,46,50,55,50,50,55,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,56,49,46,52,50,52,51,50,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,49,52,46,52,52,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,48,50,46,51,50,51,52,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,48,49,46,55,56,55,56,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,49,49,46,48,51,49,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,49,57,46,50,51,48,57,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,49,52,46,48,55,55,55,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,49,48,46,53,50,57,54,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,53,57,46,49,57,51,53,53,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,52,50,46,52,55,49,55,53,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,52,46,54,51,53,57,56,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,46,57,52,52,48,55,52,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,57,52,52,48,55,53,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,50,55,46,55,52,57,51,54,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,46,48,57,52,52,57,51,55,54,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,46,48,55,55,51,50,50,54,52,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,56,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,49,50,46,56,50,55,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,54,57,46,50,48,53,53,52,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,52,54,46,55,54,50,57,51,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,51,46,57,54,53,49,55,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,51,51,46,56,56,55,52,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,54,49,46,56,50,54,49,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,56,52,46,55,52,55,57,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,50,49,46,49,50,50,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,52,53,46,50,55,52,49,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,53,51,46,49,55,57,55,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,50,48,52,46,55,56,54,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,50,50,55,46,57,50,52,50,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,51,54,46,51,48,51,56,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,50,50,56,46,51,54,53,53,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,55,57,46,51,52,52,50,53,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,50,53,46,57,51,52,56,51,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,54,46,57,52,52,48,55,52,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,46,57,52,52,48,55,52,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,57,52,52,48,55,53,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,55,46,53,53,51,54,56,49,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,57,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,54,56,46,54,54,51,57,54,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,53,57,46,48,52,51,53,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,51,51,46,51,53,55,54,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,52,55,46,52,53,50,56,50,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,53,55,46,56,51,53,53,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,55,56,46,57,49,54,56,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,48,55,46,56,50,55,53,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,54,56,46,48,48,53,51,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,51,48,46,57,53,57,55,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,50,49,50,46,53,53,52,49,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,54,53,46,56,49,50,50,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,49,48,46,50,52,50,57,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,56,49,46,49,55,49,51,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,56,57,46,55,54,49,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,51,55,46,51,51,55,56,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,56,52,46,54,53,51,57,53,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,56,46,54,55,55,49,54,56,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,57,53,54,53,55,54,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,56,46,52,54,56,48,57,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,48,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,57,53,46,49,55,52,57,57,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,56,48,46,48,51,56,49,56,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,53,57,46,56,57,56,54,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,51,57,46,53,56,52,55,54,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,53,48,46,50,56,48,53,56,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,54,51,46,56,49,54,52,49,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,56,48,46,54,49,51,48,50,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,54,54,46,51,55,56,50,52,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,57,56,46,55,54,53,49,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,50,52,52,46,51,52,54,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,50,57,52,46,50,52,55,52,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,54,52,46,51,53,49,55,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,55,54,46,52,48,56,50,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,54,48,46,50,49,56,53,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,55,55,46,52,49,52,55,53,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,53,51,46,49,54,57,56,49,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,53,54,46,49,54,51,57,51,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,57,52,57,50,51,53,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,55,46,53,51,49,48,53,57,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,55,56,48,49,55,55,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,49,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,49,51,52,46,57,56,55,57,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,51,48,46,51,54,57,54,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,57,54,46,56,54,51,50,53,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,55,53,46,55,48,52,57,52,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,53,56,46,56,54,52,54,54,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,53,55,46,50,48,51,55,52,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,53,53,46,49,56,56,51,55,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,55,56,46,49,50,56,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,48,56,46,53,53,56,50,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,53,52,46,51,55,55,52,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,51,49,57,46,49,54,56,54,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,51,55,50,46,56,56,50,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,50,55,53,46,52,54,53,53,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,51,48,46,50,54,51,50,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,53,52,46,57,51,56,50,50,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,50,53,46,52,57,55,49,57,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,56,46,48,52,55,52,51,57,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,56,46,48,56,52,51,57,51,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,53,46,49,49,53,50,53,50,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,53,46,54,55,56,50,54,57,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,50,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,52,56,46,48,56,57,49,57,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,52,50,46,53,53,53,56,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,52,48,46,51,55,55,55,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,53,52,46,55,50,54,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,56,55,46,57,51,54,49,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,53,56,46,49,49,48,57,50,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,53,50,46,56,51,56,54,57,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,54,55,46,49,52,56,50,50,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,56,51,46,54,54,55,57,56,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,49,56,46,57,50,52,50,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,53,48,46,48,54,56,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,55,50,46,57,55,48,57,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,51,52,49,46,49,51,54,54,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,50,51,56,46,54,54,52,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,57,48,46,50,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,49,54,46,56,57,52,51,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,57,49,46,52,56,54,55,50,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,49,52,46,48,49,53,55,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,52,50,46,50,57,50,55,55,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,53,46,49,49,53,50,53,50,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,51,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,53,52,46,49,57,52,49,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,52,54,46,51,56,51,57,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,57,57,46,52,56,49,52,51,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,57,54,46,49,57,52,49,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,48,50,46,57,52,55,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,55,54,46,49,52,48,56,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,53,55,46,55,56,52,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,52,55,46,48,52,48,50,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,54,52,46,51,54,55,57,57,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,56,52,46,50,51,55,54,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,54,50,46,55,49,56,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,50,49,46,51,50,55,53,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,50,49,51,46,49,54,52,54,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,51,50,56,46,52,56,50,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,50,56,53,46,52,52,56,57,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,50,56,51,46,56,51,49,57,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,50,49,50,46,56,49,53,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,49,54,52,46,53,52,57,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,57,50,46,50,57,54,51,49,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,55,46,50,52,52,48,49,53,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,49,46,49,54,55,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,52,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,54,46,57,49,57,54,53,57,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,57,53,46,49,55,48,57,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,51,50,46,53,50,53,51,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,51,53,46,50,51,52,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,56,57,46,56,53,48,54,57,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,56,57,46,52,53,53,52,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,54,48,46,50,57,57,54,55,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,53,48,46,51,51,56,48,54,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,51,57,46,49,55,53,56,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,53,57,46,48,54,56,53,52,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,55,52,46,53,50,49,53,57,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,56,52,46,57,51,52,48,50,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,56,55,46,49,50,49,57,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,50,51,46,57,54,55,51,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,48,51,46,55,48,50,55,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,49,50,56,46,57,56,54,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,49,54,53,46,49,50,56,51,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,50,52,57,46,55,48,53,52,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,57,53,46,51,57,57,54,54,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,48,46,48,48,50,56,52,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,50,46,51,57,50,53,53,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,53,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,50,49,46,55,51,56,55,49,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,50,51,46,49,51,51,57,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,55,54,46,55,52,49,52,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,53,56,46,50,54,57,56,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,51,55,46,50,51,53,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,48,53,46,51,48,56,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,56,54,46,54,51,50,53,53,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,53,51,46,49,49,53,57,49,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,50,57,46,48,51,56,54,53,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,51,48,46,52,48,53,51,57,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,51,57,46,48,52,57,48,50,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,52,57,46,50,51,52,48,53,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,54,51,46,50,55,56,53,51,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,49,49,46,52,50,49,53,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,48,49,46,49,57,53,54,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,52,48,46,48,48,57,54,50,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,53,57,46,56,52,53,54,53,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,55,52,46,53,49,50,53,51,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,49,55,46,48,54,51,49,54,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,50,46,52,51,53,49,52,49,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,50,46,50,56,55,52,55,49,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,45,48,46,48,48,48,51,54,51,54,57,56,50,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,54,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,54,50,46,48,52,54,55,50,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,51,54,46,51,49,50,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,50,48,49,46,55,57,53,50,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,54,56,46,49,51,52,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,57,53,46,50,48,52,54,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,53,56,46,57,48,54,50,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,52,54,46,57,52,48,57,49,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,52,57,46,50,55,48,53,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,51,55,46,49,48,52,49,54,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,55,46,57,55,48,49,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,51,48,46,57,51,54,57,55,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,51,51,46,51,57,50,53,55,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,52,52,46,48,51,48,55,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,53,53,46,54,52,53,52,50,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,55,56,46,50,50,52,50,51,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,49,52,46,52,50,55,56,50,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,57,46,57,53,52,57,57,55,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,55,46,55,54,56,50,49,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,51,46,48,50,53,52,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,50,49,46,55,51,49,54,54,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,50,46,49,53,54,51,55,50,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,46,53,51,49,55,56,54,55,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,55,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,55,57,46,54,50,57,57,51,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,51,57,46,54,57,55,56,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,55,51,46,49,54,55,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,57,50,46,56,55,49,56,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,57,54,46,51,52,57,57,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,52,52,46,54,54,49,49,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,48,54,46,53,52,50,52,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,53,55,46,49,54,54,53,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,52,49,46,49,54,49,48,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,51,50,46,49,50,55,54,52,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,51,46,56,53,54,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,48,46,57,49,55,55,50,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,50,46,48,55,49,55,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,50,50,46,51,56,50,53,52,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,50,52,46,55,50,49,48,53,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,46,56,48,51,54,54,54,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,52,46,50,48,48,56,52,49,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,49,54,46,52,54,56,53,55,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,49,53,46,55,48,55,52,52,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,51,51,46,57,54,50,50,49,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,55,46,53,55,53,54,56,56,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,45,48,46,48,52,56,56,48,57,48,55,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,56,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,51,51,46,50,54,54,52,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,53,55,46,53,51,54,52,51,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,54,55,46,50,50,52,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,57,54,46,52,56,51,51,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,57,52,46,55,57,54,54,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,56,50,46,49,56,56,52,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,49,57,46,54,57,54,49,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,55,51,46,48,50,49,49,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,52,56,46,51,54,53,52,57,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,51,51,46,55,52,54,53,50,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,54,46,50,51,55,57,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,54,46,51,53,55,56,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,54,46,56,49,49,50,57,51,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,54,46,54,51,57,50,55,49,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,56,46,52,54,56,48,57,51,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,54,46,49,57,52,50,55,51,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,46,53,57,49,50,51,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,56,49,52,56,54,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,56,46,54,48,48,55,51,57,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,53,46,50,49,56,56,57,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,49,57,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,50,57,46,55,55,57,51,55,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,53,52,46,57,55,50,56,50,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,52,52,46,55,57,57,53,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,50,48,55,46,52,57,48,52,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,54,53,46,51,52,51,50,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,55,49,46,52,48,52,55,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,55,52,46,57,50,49,54,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,48,48,46,50,55,51,51,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,54,49,46,52,54,52,52,49,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,53,48,46,49,57,49,55,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,50,54,46,48,56,50,48,57,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,49,55,46,49,56,50,49,56,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,56,46,52,54,56,48,57,51,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,54,46,54,51,57,50,55,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,54,46,51,51,52,52,54,55,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,46,51,51,52,52,54,55,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,53,46,54,54,54,54,56,55,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,52,46,50,55,50,50,48,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,48,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,51,49,46,52,48,57,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,49,51,50,46,55,52,49,56,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,56,53,46,53,55,57,54,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,50,49,46,56,50,57,57,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,56,53,46,51,56,52,49,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,54,48,46,54,53,54,54,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,49,54,46,49,52,55,56,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,49,56,46,49,48,55,56,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,52,49,46,55,57,52,54,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,54,53,46,53,54,51,53,49,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,52,56,46,56,52,48,54,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,50,51,46,49,51,56,54,52,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,49,56,46,49,50,57,51,50,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,48,46,50,56,53,51,49,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,54,46,48,50,57,54,54,51,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,54,46,48,52,52,54,50,55,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,53,46,54,57,52,55,54,52,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,46,55,51,57,48,56,53,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,49,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,49,57,46,53,56,57,57,52,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,52,50,46,51,48,51,53,53,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,57,54,46,50,54,55,55,55,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,56,55,46,49,50,48,55,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,55,57,46,54,54,50,54,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,50,50,49,46,51,56,57,56,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,53,52,46,50,54,49,55,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,52,50,46,49,54,48,52,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,52,56,46,53,55,51,55,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,54,55,46,49,55,57,51,55,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,52,48,46,54,57,48,52,52,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,51,57,46,55,52,53,49,50,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,50,54,46,49,48,49,54,54,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,52,46,52,56,52,54,57,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,56,46,54,53,56,55,51,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,51,46,53,55,49,51,57,50,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,51,46,56,57,54,48,51,55,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,49,46,48,55,55,55,53,54,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,48,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,50,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,46,48,48,49,50,50,57,54,55,57,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,51,46,48,48,56,57,52,56,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,53,46,57,48,57,56,53,56,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,51,51,46,53,48,53,55,52,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,49,48,52,46,51,51,52,49,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,49,53,50,46,50,49,54,53,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,49,57,56,46,49,57,56,56,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,49,57,49,46,56,52,49,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,50,50,56,46,55,51,52,57,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,54,56,46,49,48,52,49,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,52,52,46,50,55,53,57,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,49,48,46,55,52,51,54,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,53,55,46,54,53,50,49,52,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,52,50,46,54,51,53,48,52,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,50,55,46,57,49,56,57,49,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,49,53,46,52,49,48,53,50,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,56,46,48,53,54,49,48,50,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,51,46,57,48,50,56,51,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,51,46,56,55,57,55,55,52,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,51,46,57,51,54,55,49,56,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,51,46,57,54,56,54,51,52,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,48,46,49,50,51,54,50,53,54,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,51,46,57,56,53,53,51,49,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,45,48,46,49,56,51,53,55,52,49,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,51,10,9,9,9,9,9,125,44,10,9,9,9,9,9,123,10,9,9,9,9,9,9,34,118,48,48,34,58,32,48,44,10,9,9,9,9,9,9,34,118,48,49,34,58,32,53,46,54,50,54,49,52,49,44,10,9,9,9,9,9,9,34,118,48,50,34,58,32,55,46,54,55,54,50,53,54,44,10,9,9,9,9,9,9,34,118,48,51,34,58,32,54,51,46,49,54,50,50,54,44,10,9,9,9,9,9,9,34,118,48,52,34,58,32,52,53,46,57,57,55,54,50,44,10,9,9,9,9,9,9,34,118,48,53,34,58,32,55,57,46,53,54,54,56,56,44,10,9,9,9,9,9,9,34,118,48,54,34,58,32,50,50,55,46,51,49,49,44,10,9,9,9,9,9,9,34,118,48,55,34,58,32,50,48,51,46,57,50,56,55,44,10,9,9,9,9,9,9,34,118,48,56,34,58,32,49,55,50,46,53,54,49,56,44,10,9,9,9,9,9,9,34,118,48,57,34,58,32,49,55,55,46,49,52,54,50,44,10,9,9,9,9,9,9,34,118,49,48,34,58,32,49,52,48,46,52,53,53,52,44,10,9,9,9,9,9,9,34,118,49,49,34,58,32,49,50,51,46,57,57,48,53,44,10,9,9,9,9,9,9,34,118,49,50,34,58,32,49,49,48,46,51,52,54,44,10,9,9,9,9,9,9,34,118,49,51,34,58,32,54,53,46,49,50,51,49,57,44,10,9,9,9,9,9,9,34,118,49,52,34,58,32,51,52,46,51,49,56,56,55,44,10,9,9,9,9,9,9,34,118,49,53,34,58,32,50,52,46,53,50,55,56,44,10,9,9,9,9,9,9,34,118,49,54,34,58,32,57,46,53,54,49,48,54,57,44,10,9,9,9,9,9,9,34,118,49,55,34,58,32,51,46,51,51,52,57,57,49,44,10,9,9,9,9,9,9,34,118,49,56,34,58,32,53,46,53,57,48,52,57,53,44,10,9,9,9,9,9,9,34,118,49,57,34,58,32,53,46,52,56,55,51,53,51,44,10,9,9,9,9,9,9,34,118,50,48,34,58,32,53,46,57,48,57,52,57,57,44,10,9,9,9,9,9,9,34,118,50,49,34,58,32,53,46,56,54,56,57,57,52,44,10,9,9,9,9,9,9,34,118,50,50,34,58,32,53,46,56,51,51,56,49,55,44,10,9,9,9,9,9,9,34,118,50,51,34,58,32,51,46,53,54,56,49,55,55,44,10,9,9,9,9,9,9,34,118,50,52,34,58,32,50,52,10,9,9,9,9,9,125,10,9,9,9,9,93,10,9,9,9,125,10,9,9,125,10,9,93,10,125]}]}] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 32382cea..6cff2d18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "@vscode/debugprotocol": "1.57.0", "@vscode/extension-telemetry": "0.6.2", "adm-zip": "0.5.9", - "antlr4": "~4.10.1", + "antlr4": "4.10.1", "assert": "2.0.0", "browserify-zlib": "0.2.0", "buffer": "6.0.3", diff --git a/package.json b/package.json index 70ddfe53..258815ca 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "@vscode/debugprotocol": "1.57.0", "@vscode/extension-telemetry": "0.6.2", "adm-zip": "0.5.9", - "antlr4": "~4.10.1", + "antlr4": "4.10.1", "assert": "2.0.0", "browserify-zlib": "0.2.0", "buffer": "6.0.3", @@ -115,6 +115,8 @@ "activationEvents": [ "onLanguage:ecl", "onNotebook:ecl-notebook", + "onRenderer:ecl-notebook-wurenderer", + "onRenderer:ecl-notebook-ojsrenderer", "onLanguage:kel", "workspaceContains:*.ecl", "workspaceContains:*.ecllib", @@ -537,6 +539,22 @@ "dark": "./resources/dark/dashy-edit.svg", "light": "./resources/light/dashy-edit.svg" } + }, + { + "command": "notebook.cell.public", + "title": "%Public%", + "icon": { + "dark": "./resources/dark/eye.svg", + "light": "./resources/light/eye.svg" + } + }, + { + "command": "notebook.cell.private", + "title": "%Private%", + "icon": { + "dark": "./resources/dark/eye-closed.svg", + "light": "./resources/light/eye-closed.svg" + } } ], "menus": { @@ -746,6 +764,18 @@ "when": "view == hpccPlatform && viewItem == ECLResultNode", "group": "inline" } + ], + "notebook/cell/title": [ + { + "command": "notebook.cell.public", + "when": "notebookType == ecl-notebook && notebookCellType == code && isPublic", + "group": "inline@3" + }, + { + "command": "notebook.cell.private", + "when": "notebookType == ecl-notebook && notebookCellType == code && isPrivate", + "group": "inline@3" + } ] }, "keybindings": [ @@ -1049,12 +1079,22 @@ ], "notebookRenderer": [ { - "id": "ojs-notebook-renderer", + "id": "ecl-notebook-wurenderer", + "displayName": "Workunit Renderer", + "entrypoint": "./dist/wuRenderer.js", + "mimeTypes": [ + "application/hpcc.wu+json" + ], + "requiresMessaging": "always" + }, + { + "id": "ecl-notebook-ojsrenderer", "displayName": "ObservableJS Renderer", - "entrypoint": "./dist/renderer.js", + "entrypoint": "./dist/ojsRenderer.js", "mimeTypes": [ "application/hpcc.ojs+json" - ] + ], + "requiresMessaging": "always" } ], "debuggers": [ diff --git a/scripts/grammar-generate.sh b/scripts/grammar-generate.sh index e5a9b8b2..83cb1f57 100644 --- a/scripts/grammar-generate.sh +++ b/scripts/grammar-generate.sh @@ -1,17 +1,17 @@ #!/bin/bash cd ./grammar/kel -java -jar ../antlr-4.9.1-complete.jar -Dlanguage=JavaScript -o ../../src/grammar/kel -visitor -Xexact-output-dir ./*.g4 +java -jar ../antlr-4.10.1-complete.jar -Dlanguage=JavaScript -o ../../src/grammar/kel -visitor -Xexact-output-dir ./*.g4 cd ../.. cd ./grammar/salt -java -jar ../antlr-4.9.1-complete.jar -Dlanguage=JavaScript -o ../../src/grammar/salt -visitor -Xexact-output-dir ./*.g4 +java -jar ../antlr-4.10.1-complete.jar -Dlanguage=JavaScript -o ../../src/grammar/salt -visitor -Xexact-output-dir ./*.g4 cd ../.. -cd ./grammar/dude -java -jar ../antlr-4.9.1-complete.jar -Dlanguage=JavaScript -o ../../src/grammar/dude -visitor -Xexact-output-dir ./*.g4 -cd ../.. +# cd ./grammar/dude +# java -jar ../antlr-4.10.1-complete.jar -Dlanguage=JavaScript -o ../../src/grammar/dude -visitor -Xexact-output-dir ./*.g4 +# cd ../.. -cd ./grammar/trixe -java -jar ../antlr-4.9.1-complete.jar -Dlanguage=JavaScript -o ../../src/grammar/trixe -visitor -Xexact-output-dir ./*.g4 -cd ../.. +# cd ./grammar/trixe +# java -jar ../antlr-4.10.1-complete.jar -Dlanguage=JavaScript -o ../../src/grammar/trixe -visitor -Xexact-output-dir ./*.g4 +# cd ../.. diff --git a/src/eclwatch/WUResult.tsx b/src/eclwatch/WUResult.tsx index ef941e7a..ad2031eb 100644 --- a/src/eclwatch/WUResult.tsx +++ b/src/eclwatch/WUResult.tsx @@ -5,7 +5,7 @@ import { IOptions, Result, XSDXMLNode } from "@hpcc-js/comms"; import { WUInfo } from "@hpcc-js/comms"; import { Common, Table } from "@hpcc-js/dgrid"; import { hashSum } from "@hpcc-js/util"; -import { Stack, Checkbox, ContextualMenu, ContextualMenuItemType, DefaultButton, Dialog, DialogFooter, DialogType, IContextualMenuItem, Label, PrimaryButton, ProgressIndicator, SpinButton, Spinner } from "@fluentui/react"; +import { Stack, Checkbox, ContextualMenu, ContextualMenuItemType, DefaultButton, Dialog, DialogFooter, DialogType, IContextualMenuItem, PrimaryButton, ProgressIndicator, SpinButton } from "@fluentui/react"; import * as copy from "copy-to-clipboard"; import { VisualizationComponent } from "./hpccVizAdapter"; import { Store } from "./WUResultStore"; diff --git a/src/extension.ts b/src/extension.ts index 91894a86..7619cd94 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,15 +1,16 @@ import * as vscode from "vscode"; import { initialize } from "./util/localize"; import { activate as telemetryActivate, deactivate as telemetryDeactivate, reporter } from "./telemetry"; +import { activate as notebookActivate } from "./notebook/main"; export function activate(context: vscode.ExtensionContext): void { performance.mark("extension-start"); telemetryActivate(context); + notebookActivate(context); initialize().then(() => { return Promise.all([ import("./ecl/main").then(({ activate }) => activate(context)), - import("./notebook/main").then(({ activate }) => activate(context)), import("./kel/main").then(({ activate }) => activate(context)), import("./dashy/main").then(({ activate }) => activate(context)) ]); diff --git a/src/grammar/kel/KELLexer.js b/src/grammar/kel/KELLexer.js index d358ad96..04868053 100644 --- a/src/grammar/kel/KELLexer.js +++ b/src/grammar/kel/KELLexer.js @@ -1,724 +1,392 @@ -// Generated from ./KELLexer.g4 by ANTLR 4.9.1 +// Generated from ./KELLexer.g4 by ANTLR 4.10.1 // jshint ignore: start import antlr4 from 'antlr4'; - -const serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786", - "\u5964\u0002m\u0458\b\u0001\u0004\u0002\t\u0002\u0004\u0003\t\u0003", - "\u0004\u0004\t\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007", - "\t\u0007\u0004\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004", - "\f\t\f\u0004\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010", - "\t\u0010\u0004\u0011\t\u0011\u0004\u0012\t\u0012\u0004\u0013\t\u0013", - "\u0004\u0014\t\u0014\u0004\u0015\t\u0015\u0004\u0016\t\u0016\u0004\u0017", - "\t\u0017\u0004\u0018\t\u0018\u0004\u0019\t\u0019\u0004\u001a\t\u001a", - "\u0004\u001b\t\u001b\u0004\u001c\t\u001c\u0004\u001d\t\u001d\u0004\u001e", - "\t\u001e\u0004\u001f\t\u001f\u0004 \t \u0004!\t!\u0004\"\t\"\u0004#", - "\t#\u0004$\t$\u0004%\t%\u0004&\t&\u0004\'\t\'\u0004(\t(\u0004)\t)\u0004", - "*\t*\u0004+\t+\u0004,\t,\u0004-\t-\u0004.\t.\u0004/\t/\u00040\t0\u0004", - "1\t1\u00042\t2\u00043\t3\u00044\t4\u00045\t5\u00046\t6\u00047\t7\u0004", - "8\t8\u00049\t9\u0004:\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004", - "?\t?\u0004@\t@\u0004A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004", - "F\tF\u0004G\tG\u0004H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004", - "M\tM\u0004N\tN\u0004O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004", - "T\tT\u0004U\tU\u0004V\tV\u0004W\tW\u0004X\tX\u0004Y\tY\u0004Z\tZ\u0004", - "[\t[\u0004\\\t\\\u0004]\t]\u0004^\t^\u0004_\t_\u0004`\t`\u0004a\ta\u0004", - "b\tb\u0004c\tc\u0004d\td\u0004e\te\u0004f\tf\u0004g\tg\u0004h\th\u0004", - "i\ti\u0004j\tj\u0004k\tk\u0004l\tl\u0004m\tm\u0004n\tn\u0004o\to\u0004", - "p\tp\u0004q\tq\u0004r\tr\u0004s\ts\u0004t\tt\u0003\u0002\u0003\u0002", - "\u0003\u0002\u0003\u0003\u0003\u0003\u0003\u0004\u0003\u0004\u0003\u0005", - "\u0003\u0005\u0003\u0006\u0003\u0006\u0003\u0007\u0003\u0007\u0003\b", - "\u0003\b\u0003\t\u0003\t\u0003\n\u0003\n\u0003\u000b\u0003\u000b\u0003", - "\f\u0003\f\u0003\r\u0003\r\u0003\u000e\u0003\u000e\u0003\u000f\u0003", - "\u000f\u0003\u0010\u0003\u0010\u0003\u0011\u0003\u0011\u0003\u0012\u0003", - "\u0012\u0003\u0013\u0003\u0013\u0003\u0014\u0003\u0014\u0003\u0015\u0003", - "\u0015\u0003\u0016\u0003\u0016\u0003\u0017\u0003\u0017\u0003\u0018\u0003", - "\u0018\u0003\u0019\u0003\u0019\u0003\u001a\u0003\u001a\u0003\u001b\u0003", - "\u001b\u0003\u001c\u0003\u001c\u0003\u001d\u0003\u001d\u0003\u001e\u0003", - "\u001e\u0003\u001f\u0003\u001f\u0003 \u0003 \u0003!\u0003!\u0003\"\u0003", - "\"\u0003#\u0003#\u0003#\u0003$\u0003$\u0003$\u0003%\u0003%\u0003%\u0003", - "&\u0003&\u0003&\u0003\'\u0003\'\u0003\'\u0003(\u0003(\u0003(\u0003)", - "\u0003)\u0003)\u0003)\u0003*\u0003*\u0003*\u0003*\u0003+\u0003+\u0003", - "+\u0003,\u0003,\u0003,\u0003-\u0003-\u0003-\u0003-\u0003.\u0003.\u0003", - ".\u0003.\u0003/\u0003/\u0003/\u0003/\u00030\u00030\u00030\u00030\u0003", - "0\u00031\u00031\u00031\u00031\u00032\u00032\u00032\u00032\u00032\u0003", - "3\u00033\u00033\u00033\u00033\u00033\u00034\u00034\u00034\u00034\u0003", - "4\u00035\u00035\u00035\u00035\u00036\u00036\u00036\u00036\u00036\u0003", - "6\u00036\u00036\u00037\u00037\u00037\u00037\u00037\u00037\u00037\u0003", - "7\u00038\u00038\u00038\u00038\u00038\u00038\u00038\u00038\u00039\u0003", - "9\u00039\u00039\u00039\u00039\u00039\u0003:\u0003:\u0003:\u0003:\u0003", - ":\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003;\u0003;\u0003", - ";\u0003;\u0003;\u0003;\u0003;\u0003<\u0003<\u0003<\u0003<\u0003<\u0003", - "=\u0003=\u0003=\u0003=\u0003=\u0003=\u0003=\u0003=\u0003>\u0003>\u0003", - ">\u0003>\u0003?\u0003?\u0003?\u0003?\u0003?\u0003?\u0003@\u0003@\u0003", - "@\u0003@\u0003@\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003B\u0003", - "B\u0003B\u0003B\u0003C\u0003C\u0003C\u0003C\u0003C\u0003C\u0003C\u0003", - "D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003E\u0003E\u0003E\u0003E\u0003", - "F\u0003F\u0003F\u0003F\u0003F\u0003F\u0003F\u0003F\u0003G\u0003G\u0003", - "G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003H\u0003H\u0003H\u0003", - "H\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003J\u0003J\u0003", - "J\u0003J\u0003J\u0003K\u0003K\u0003K\u0003K\u0003K\u0003K\u0003K\u0003", - "L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003M\u0003", - "M\u0003M\u0003M\u0003M\u0003M\u0003M\u0003M\u0003N\u0003N\u0003N\u0003", - "O\u0003O\u0003O\u0003O\u0003P\u0003P\u0003P\u0003P\u0003P\u0003Q\u0003", - "Q\u0003Q\u0003Q\u0003Q\u0003Q\u0003R\u0003R\u0003R\u0003R\u0003R\u0003", - "R\u0003R\u0003R\u0003R\u0003R\u0003S\u0003S\u0003S\u0003S\u0003S\u0003", - "S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003T\u0003T\u0003", - "T\u0003T\u0003T\u0003T\u0003T\u0003T\u0003T\u0003T\u0003U\u0003U\u0003", - "U\u0003U\u0003U\u0003U\u0003U\u0003U\u0003U\u0003U\u0003U\u0003U\u0003", - "U\u0003V\u0003V\u0003V\u0007V\u025b\nV\fV\u000eV\u025e\u000bV\u0003", - "V\u0003V\u0003W\u0003W\u0003W\u0003W\u0003W\u0007W\u0267\nW\fW\u000e", - "W\u026a\u000bW\u0003X\u0003X\u0006X\u026e\nX\rX\u000eX\u026f\u0003Y", - "\u0003Y\u0003Y\u0005Y\u0275\nY\u0003Y\u0003Y\u0003Y\u0007Y\u027a\nY", - "\fY\u000eY\u027d\u000bY\u0003Z\u0003Z\u0003Z\u0005Z\u0282\nZ\u0003Z", - "\u0003Z\u0003Z\u0007Z\u0287\nZ\fZ\u000eZ\u028a\u000bZ\u0003[\u0003[", - "\u0003[\u0003[\u0007[\u0290\n[\f[\u000e[\u0293\u000b[\u0003\\\u0006", - "\\\u0296\n\\\r\\\u000e\\\u0297\u0003]\u0003]\u0003]\u0003]\u0006]\u029e", - "\n]\r]\u000e]\u029f\u0003]\u0003]\u0007]\u02a4\n]\f]\u000e]\u02a7\u000b", - "]\u0003]\u0003]\u0005]\u02ab\n]\u0003^\u0003^\u0003^\u0003^\u0006^\u02b1", - "\n^\r^\u000e^\u02b2\u0003^\u0006^\u02b6\n^\r^\u000e^\u02b7\u0003^\u0003", - "^\u0005^\u02bc\n^\u0003_\u0006_\u02bf\n_\r_\u000e_\u02c0\u0003_\u0003", - "_\u0006_\u02c5\n_\r_\u000e_\u02c6\u0003_\u0003_\u0005_\u02cb\n_\u0003", - "_\u0006_\u02ce\n_\r_\u000e_\u02cf\u0005_\u02d2\n_\u0003`\u0003`\u0003", - "`\u0007`\u02d7\n`\f`\u000e`\u02da\u000b`\u0003`\u0003`\u0003a\u0003", - "a\u0003a\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0005b\u02e8", - "\nb\u0003c\u0003c\u0007c\u02ec\nc\fc\u000ec\u02ef\u000bc\u0003c\u0003", - "c\u0003c\u0003c\u0003c\u0003d\u0003d\u0003d\u0003d\u0003d\u0007d\u02fb", - "\nd\fd\u000ed\u02fe\u000bd\u0003d\u0003d\u0003d\u0003d\u0003d\u0003", - "e\u0003e\u0003e\u0003e\u0003e\u0003e\u0007e\u030b\ne\fe\u000ee\u030e", - "\u000be\u0003e\u0003e\u0007e\u0312\ne\fe\u000ee\u0315\u000be\u0003e", - "\u0003e\u0003e\u0003e\u0003e\u0003f\u0003f\u0003f\u0003f\u0003f\u0003", - "f\u0007f\u0322\nf\ff\u000ef\u0325\u000bf\u0003f\u0003f\u0003f\u0003", - "f\u0003f\u0003g\u0003g\u0003g\u0003g\u0003g\u0006g\u0331\ng\rg\u000e", - "g\u0332\u0003g\u0003g\u0003g\u0003g\u0003g\u0003h\u0005h\u033b\nh\u0003", - "h\u0003h\u0003h\u0003h\u0003i\u0003i\u0003i\u0003i\u0007i\u0345\ni\f", - "i\u000ei\u0348\u000bi\u0003i\u0003i\u0003j\u0006j\u034d\nj\rj\u000e", - "j\u034e\u0003j\u0003j\u0003k\u0003k\u0003k\u0003k\u0007k\u0357\nk\f", - "k\u000ek\u035a\u000bk\u0003k\u0006k\u035d\nk\rk\u000ek\u035e\u0003k", - "\u0007k\u0362\nk\fk\u000ek\u0365\u000bk\u0003k\u0007k\u0368\nk\fk\u000e", - "k\u036b\u000bk\u0003k\u0006k\u036e\nk\rk\u000ek\u036f\u0003k\u0007k", - "\u0373\nk\fk\u000ek\u0376\u000bk\u0003k\u0005k\u0379\nk\u0003l\u0003", - "l\u0007l\u037d\nl\fl\u000el\u0380\u000bl\u0003m\u0003m\u0003m\u0003", - "m\u0007m\u0386\nm\fm\u000em\u0389\u000bm\u0003m\u0006m\u038c\nm\rm\u000e", - "m\u038d\u0003m\u0007m\u0391\nm\fm\u000em\u0394\u000bm\u0003m\u0003m", - "\u0007m\u0398\nm\fm\u000em\u039b\u000bm\u0003m\u0006m\u039e\nm\rm\u000e", - "m\u039f\u0003m\u0007m\u03a3\nm\fm\u000em\u03a6\u000bm\u0003m\u0003m", - "\u0005m\u03aa\nm\u0003n\u0003n\u0007n\u03ae\nn\fn\u000en\u03b1\u000b", - "n\u0003n\u0006n\u03b4\nn\rn\u000en\u03b5\u0003n\u0007n\u03b9\nn\fn\u000e", - "n\u03bc\u000bn\u0003o\u0006o\u03bf\no\ro\u000eo\u03c0\u0003o\u0006o", - "\u03c4\no\ro\u000eo\u03c5\u0003o\u0006o\u03c9\no\ro\u000eo\u03ca\u0003", - "o\u0007o\u03ce\no\fo\u000eo\u03d1\u000bo\u0007o\u03d3\no\fo\u000eo\u03d6", - "\u000bo\u0003o\u0003o\u0006o\u03da\no\ro\u000eo\u03db\u0003o\u0003o", - "\u0005o\u03e0\no\u0003o\u0006o\u03e3\no\ro\u000eo\u03e4\u0005o\u03e7", - "\no\u0003p\u0006p\u03ea\np\rp\u000ep\u03eb\u0003p\u0003p\u0007p\u03f0", - "\np\fp\u000ep\u03f3\u000bp\u0003p\u0006p\u03f6\np\rp\u000ep\u03f7\u0003", - "p\u0006p\u03fb\np\rp\u000ep\u03fc\u0003p\u0007p\u0400\np\fp\u000ep\u0403", - "\u000bp\u0007p\u0405\np\fp\u000ep\u0408\u000bp\u0003p\u0003p\u0005p", - "\u040c\np\u0003p\u0006p\u040f\np\rp\u000ep\u0410\u0005p\u0413\np\u0003", - "q\u0006q\u0416\nq\rq\u000eq\u0417\u0003q\u0003q\u0006q\u041c\nq\rq\u000e", - "q\u041d\u0003q\u0003q\u0005q\u0422\nq\u0003q\u0007q\u0425\nq\fq\u000e", - "q\u0428\u000bq\u0003q\u0006q\u042b\nq\rq\u000eq\u042c\u0003q\u0006q", - "\u0430\nq\rq\u000eq\u0431\u0003q\u0007q\u0435\nq\fq\u000eq\u0438\u000b", - "q\u0007q\u043a\nq\fq\u000eq\u043d\u000bq\u0005q\u043f\nq\u0003r\u0003", - "r\u0003r\u0003r\u0005r\u0445\nr\u0003s\u0003s\u0003s\u0003s\u0003s\u0003", - "s\u0007s\u044d\ns\fs\u000es\u0450\u000bs\u0003t\u0003t\u0003t\u0003", - "t\u0003t\u0005t\u0457\nt\u0007\u02fc\u0313\u0323\u0332\u044e\u0002u", - "\u0003\u0002\u0005\u0002\u0007\u0002\t\u0002\u000b\u0002\r\u0002\u000f", - "\u0002\u0011\u0002\u0013\u0003\u0015\u0004\u0017\u0005\u0019\u0006\u001b", - "\u0007\u001d\b\u001f\t!\n#\u000b%\f\'\r)\u000e+\u000f-\u0010/\u0011", - "1\u00123\u00135\u00147\u00159\u0016;\u0017=\u0018?\u0019A\u001aC\u001b", - "E\u001cG\u001dI\u001eK\u001fM O!Q\"S#U$W%Y&[\'](_)a*c+e,g-i.k/m0o1q", - "2s3u4w5y6{7}8\u007f9\u0081:\u0083;\u0085<\u0087=\u0089>\u008b?\u008d", - "@\u008fA\u0091B\u0093C\u0095D\u0097E\u0099F\u009bG\u009dH\u009fI\u00a1", - "J\u00a3K\u00a5L\u00a7M\u00a9N\u00abO\u00adP\u00afQ\u00b1R\u00b3S\u00b5", - "T\u00b7U\u00b9V\u00bbW\u00bdX\u00bfY\u00c1Z\u00c3[\u00c5\\\u00c7]\u00c9", - "^\u00cb_\u00cd`\u00cfa\u00d1b\u00d3c\u00d5d\u00d7e\u00d9f\u00dbg\u00dd", - "h\u00dfi\u00e1j\u00e3k\u00e5l\u00e7m\u0003\u0002\u000f\u0004\u0002C", - "\\c|\u0005\u00022;CHch\u0007\u0002))^^ppttvv\u0003\u0002$$\u0004\u0002", - "GGgg\u0004\u0002))^^\u0004\u0002,,11\u0003\u0002,,\u0005\u0002\u000b", - "\u000b\"\"\uff01\uff01\u0004\u0002\f\f\u000f\u000f\u0004\u0002I\\i|", - "\u0005\u00022;C\\c|\u0006\u0002CFH\\cfh|\u0002\u04a8\u0002\u0013\u0003", - "\u0002\u0002\u0002\u0002\u0015\u0003\u0002\u0002\u0002\u0002\u0017\u0003", - "\u0002\u0002\u0002\u0002\u0019\u0003\u0002\u0002\u0002\u0002\u001b\u0003", - "\u0002\u0002\u0002\u0002\u001d\u0003\u0002\u0002\u0002\u0002\u001f\u0003", - "\u0002\u0002\u0002\u0002!\u0003\u0002\u0002\u0002\u0002#\u0003\u0002", - "\u0002\u0002\u0002%\u0003\u0002\u0002\u0002\u0002\'\u0003\u0002\u0002", - "\u0002\u0002)\u0003\u0002\u0002\u0002\u0002+\u0003\u0002\u0002\u0002", - "\u0002-\u0003\u0002\u0002\u0002\u0002/\u0003\u0002\u0002\u0002\u0002", - "1\u0003\u0002\u0002\u0002\u00023\u0003\u0002\u0002\u0002\u00025\u0003", - "\u0002\u0002\u0002\u00027\u0003\u0002\u0002\u0002\u00029\u0003\u0002", - "\u0002\u0002\u0002;\u0003\u0002\u0002\u0002\u0002=\u0003\u0002\u0002", - "\u0002\u0002?\u0003\u0002\u0002\u0002\u0002A\u0003\u0002\u0002\u0002", - "\u0002C\u0003\u0002\u0002\u0002\u0002E\u0003\u0002\u0002\u0002\u0002", - "G\u0003\u0002\u0002\u0002\u0002I\u0003\u0002\u0002\u0002\u0002K\u0003", - "\u0002\u0002\u0002\u0002M\u0003\u0002\u0002\u0002\u0002O\u0003\u0002", - "\u0002\u0002\u0002Q\u0003\u0002\u0002\u0002\u0002S\u0003\u0002\u0002", - "\u0002\u0002U\u0003\u0002\u0002\u0002\u0002W\u0003\u0002\u0002\u0002", - "\u0002Y\u0003\u0002\u0002\u0002\u0002[\u0003\u0002\u0002\u0002\u0002", - "]\u0003\u0002\u0002\u0002\u0002_\u0003\u0002\u0002\u0002\u0002a\u0003", - "\u0002\u0002\u0002\u0002c\u0003\u0002\u0002\u0002\u0002e\u0003\u0002", - "\u0002\u0002\u0002g\u0003\u0002\u0002\u0002\u0002i\u0003\u0002\u0002", - "\u0002\u0002k\u0003\u0002\u0002\u0002\u0002m\u0003\u0002\u0002\u0002", - "\u0002o\u0003\u0002\u0002\u0002\u0002q\u0003\u0002\u0002\u0002\u0002", - "s\u0003\u0002\u0002\u0002\u0002u\u0003\u0002\u0002\u0002\u0002w\u0003", - "\u0002\u0002\u0002\u0002y\u0003\u0002\u0002\u0002\u0002{\u0003\u0002", - "\u0002\u0002\u0002}\u0003\u0002\u0002\u0002\u0002\u007f\u0003\u0002", - "\u0002\u0002\u0002\u0081\u0003\u0002\u0002\u0002\u0002\u0083\u0003\u0002", - "\u0002\u0002\u0002\u0085\u0003\u0002\u0002\u0002\u0002\u0087\u0003\u0002", - "\u0002\u0002\u0002\u0089\u0003\u0002\u0002\u0002\u0002\u008b\u0003\u0002", - "\u0002\u0002\u0002\u008d\u0003\u0002\u0002\u0002\u0002\u008f\u0003\u0002", - "\u0002\u0002\u0002\u0091\u0003\u0002\u0002\u0002\u0002\u0093\u0003\u0002", - "\u0002\u0002\u0002\u0095\u0003\u0002\u0002\u0002\u0002\u0097\u0003\u0002", - "\u0002\u0002\u0002\u0099\u0003\u0002\u0002\u0002\u0002\u009b\u0003\u0002", - "\u0002\u0002\u0002\u009d\u0003\u0002\u0002\u0002\u0002\u009f\u0003\u0002", - "\u0002\u0002\u0002\u00a1\u0003\u0002\u0002\u0002\u0002\u00a3\u0003\u0002", - "\u0002\u0002\u0002\u00a5\u0003\u0002\u0002\u0002\u0002\u00a7\u0003\u0002", - "\u0002\u0002\u0002\u00a9\u0003\u0002\u0002\u0002\u0002\u00ab\u0003\u0002", - "\u0002\u0002\u0002\u00ad\u0003\u0002\u0002\u0002\u0002\u00af\u0003\u0002", - "\u0002\u0002\u0002\u00b1\u0003\u0002\u0002\u0002\u0002\u00b3\u0003\u0002", - "\u0002\u0002\u0002\u00b5\u0003\u0002\u0002\u0002\u0002\u00b7\u0003\u0002", - "\u0002\u0002\u0002\u00b9\u0003\u0002\u0002\u0002\u0002\u00bb\u0003\u0002", - "\u0002\u0002\u0002\u00bd\u0003\u0002\u0002\u0002\u0002\u00bf\u0003\u0002", - "\u0002\u0002\u0002\u00c1\u0003\u0002\u0002\u0002\u0002\u00c3\u0003\u0002", - "\u0002\u0002\u0002\u00c5\u0003\u0002\u0002\u0002\u0002\u00c7\u0003\u0002", - "\u0002\u0002\u0002\u00c9\u0003\u0002\u0002\u0002\u0002\u00cb\u0003\u0002", - "\u0002\u0002\u0002\u00cd\u0003\u0002\u0002\u0002\u0002\u00cf\u0003\u0002", - "\u0002\u0002\u0002\u00d1\u0003\u0002\u0002\u0002\u0002\u00d3\u0003\u0002", - "\u0002\u0002\u0002\u00d5\u0003\u0002\u0002\u0002\u0002\u00d7\u0003\u0002", - "\u0002\u0002\u0002\u00d9\u0003\u0002\u0002\u0002\u0002\u00db\u0003\u0002", - "\u0002\u0002\u0002\u00dd\u0003\u0002\u0002\u0002\u0002\u00df\u0003\u0002", - "\u0002\u0002\u0002\u00e1\u0003\u0002\u0002\u0002\u0002\u00e3\u0003\u0002", - "\u0002\u0002\u0002\u00e5\u0003\u0002\u0002\u0002\u0002\u00e7\u0003\u0002", - "\u0002\u0002\u0003\u00e9\u0003\u0002\u0002\u0002\u0005\u00ec\u0003\u0002", - "\u0002\u0002\u0007\u00ee\u0003\u0002\u0002\u0002\t\u00f0\u0003\u0002", - "\u0002\u0002\u000b\u00f2\u0003\u0002\u0002\u0002\r\u00f4\u0003\u0002", - "\u0002\u0002\u000f\u00f6\u0003\u0002\u0002\u0002\u0011\u00f8\u0003\u0002", - "\u0002\u0002\u0013\u00fa\u0003\u0002\u0002\u0002\u0015\u00fc\u0003\u0002", - "\u0002\u0002\u0017\u00fe\u0003\u0002\u0002\u0002\u0019\u0100\u0003\u0002", - "\u0002\u0002\u001b\u0102\u0003\u0002\u0002\u0002\u001d\u0104\u0003\u0002", - "\u0002\u0002\u001f\u0106\u0003\u0002\u0002\u0002!\u0108\u0003\u0002", - "\u0002\u0002#\u010a\u0003\u0002\u0002\u0002%\u010c\u0003\u0002\u0002", - "\u0002\'\u010e\u0003\u0002\u0002\u0002)\u0110\u0003\u0002\u0002\u0002", - "+\u0112\u0003\u0002\u0002\u0002-\u0114\u0003\u0002\u0002\u0002/\u0116", - "\u0003\u0002\u0002\u00021\u0118\u0003\u0002\u0002\u00023\u011a\u0003", - "\u0002\u0002\u00025\u011c\u0003\u0002\u0002\u00027\u011e\u0003\u0002", - "\u0002\u00029\u0120\u0003\u0002\u0002\u0002;\u0122\u0003\u0002\u0002", - "\u0002=\u0124\u0003\u0002\u0002\u0002?\u0126\u0003\u0002\u0002\u0002", - "A\u0128\u0003\u0002\u0002\u0002C\u012a\u0003\u0002\u0002\u0002E\u012c", - "\u0003\u0002\u0002\u0002G\u012f\u0003\u0002\u0002\u0002I\u0132\u0003", - "\u0002\u0002\u0002K\u0135\u0003\u0002\u0002\u0002M\u0138\u0003\u0002", - "\u0002\u0002O\u013b\u0003\u0002\u0002\u0002Q\u013e\u0003\u0002\u0002", - "\u0002S\u0142\u0003\u0002\u0002\u0002U\u0146\u0003\u0002\u0002\u0002", - "W\u0149\u0003\u0002\u0002\u0002Y\u014c\u0003\u0002\u0002\u0002[\u0150", - "\u0003\u0002\u0002\u0002]\u0154\u0003\u0002\u0002\u0002_\u0158\u0003", - "\u0002\u0002\u0002a\u015d\u0003\u0002\u0002\u0002c\u0161\u0003\u0002", - "\u0002\u0002e\u0166\u0003\u0002\u0002\u0002g\u016c\u0003\u0002\u0002", - "\u0002i\u0171\u0003\u0002\u0002\u0002k\u0175\u0003\u0002\u0002\u0002", - "m\u017d\u0003\u0002\u0002\u0002o\u0185\u0003\u0002\u0002\u0002q\u018d", - "\u0003\u0002\u0002\u0002s\u0194\u0003\u0002\u0002\u0002u\u01a0\u0003", - "\u0002\u0002\u0002w\u01a7\u0003\u0002\u0002\u0002y\u01ac\u0003\u0002", - "\u0002\u0002{\u01b4\u0003\u0002\u0002\u0002}\u01b8\u0003\u0002\u0002", - "\u0002\u007f\u01be\u0003\u0002\u0002\u0002\u0081\u01c3\u0003\u0002\u0002", - "\u0002\u0083\u01c9\u0003\u0002\u0002\u0002\u0085\u01cd\u0003\u0002\u0002", - "\u0002\u0087\u01d4\u0003\u0002\u0002\u0002\u0089\u01da\u0003\u0002\u0002", - "\u0002\u008b\u01de\u0003\u0002\u0002\u0002\u008d\u01e6\u0003\u0002\u0002", - "\u0002\u008f\u01ef\u0003\u0002\u0002\u0002\u0091\u01f3\u0003\u0002\u0002", - "\u0002\u0093\u01fa\u0003\u0002\u0002\u0002\u0095\u01ff\u0003\u0002\u0002", - "\u0002\u0097\u0206\u0003\u0002\u0002\u0002\u0099\u020f\u0003\u0002\u0002", - "\u0002\u009b\u0217\u0003\u0002\u0002\u0002\u009d\u021a\u0003\u0002\u0002", - "\u0002\u009f\u021e\u0003\u0002\u0002\u0002\u00a1\u0223\u0003\u0002\u0002", - "\u0002\u00a3\u0229\u0003\u0002\u0002\u0002\u00a5\u0233\u0003\u0002\u0002", - "\u0002\u00a7\u0240\u0003\u0002\u0002\u0002\u00a9\u024a\u0003\u0002\u0002", - "\u0002\u00ab\u0257\u0003\u0002\u0002\u0002\u00ad\u0261\u0003\u0002\u0002", - "\u0002\u00af\u026b\u0003\u0002\u0002\u0002\u00b1\u0271\u0003\u0002\u0002", - "\u0002\u00b3\u027e\u0003\u0002\u0002\u0002\u00b5\u028b\u0003\u0002\u0002", - "\u0002\u00b7\u0295\u0003\u0002\u0002\u0002\u00b9\u02aa\u0003\u0002\u0002", - "\u0002\u00bb\u02bb\u0003\u0002\u0002\u0002\u00bd\u02be\u0003\u0002\u0002", - "\u0002\u00bf\u02d3\u0003\u0002\u0002\u0002\u00c1\u02dd\u0003\u0002\u0002", - "\u0002\u00c3\u02e7\u0003\u0002\u0002\u0002\u00c5\u02e9\u0003\u0002\u0002", - "\u0002\u00c7\u02f5\u0003\u0002\u0002\u0002\u00c9\u0304\u0003\u0002\u0002", - "\u0002\u00cb\u031b\u0003\u0002\u0002\u0002\u00cd\u032b\u0003\u0002\u0002", - "\u0002\u00cf\u033a\u0003\u0002\u0002\u0002\u00d1\u0340\u0003\u0002\u0002", - "\u0002\u00d3\u034c\u0003\u0002\u0002\u0002\u00d5\u0378\u0003\u0002\u0002", - "\u0002\u00d7\u037a\u0003\u0002\u0002\u0002\u00d9\u03a9\u0003\u0002\u0002", - "\u0002\u00db\u03ab\u0003\u0002\u0002\u0002\u00dd\u03be\u0003\u0002\u0002", - "\u0002\u00df\u03e9\u0003\u0002\u0002\u0002\u00e1\u0415\u0003\u0002\u0002", - "\u0002\u00e3\u0440\u0003\u0002\u0002\u0002\u00e5\u0446\u0003\u0002\u0002", - "\u0002\u00e7\u0451\u0003\u0002\u0002\u0002\u00e9\u00ea\u0007^\u0002", - "\u0002\u00ea\u00eb\u0007$\u0002\u0002\u00eb\u0004\u0003\u0002\u0002", - "\u0002\u00ec\u00ed\u0004c|\u0002\u00ed\u0006\u0003\u0002\u0002\u0002", - "\u00ee\u00ef\t\u0002\u0002\u0002\u00ef\b\u0003\u0002\u0002\u0002\u00f0", - "\u00f1\u00042;\u0002\u00f1\n\u0003\u0002\u0002\u0002\u00f2\u00f3\t\u0003", - "\u0002\u0002\u00f3\f\u0003\u0002\u0002\u0002\u00f4\u00f5\u000429\u0002", - "\u00f5\u000e\u0003\u0002\u0002\u0002\u00f6\u00f7\u000423\u0002\u00f7", - "\u0010\u0003\u0002\u0002\u0002\u00f8\u00f9\t\u0004\u0002\u0002\u00f9", - "\u0012\u0003\u0002\u0002\u0002\u00fa\u00fb\u0007*\u0002\u0002\u00fb", - "\u0014\u0003\u0002\u0002\u0002\u00fc\u00fd\u0007+\u0002\u0002\u00fd", - "\u0016\u0003\u0002\u0002\u0002\u00fe\u00ff\u0007?\u0002\u0002\u00ff", - "\u0018\u0003\u0002\u0002\u0002\u0100\u0101\u0007$\u0002\u0002\u0101", - "\u001a\u0003\u0002\u0002\u0002\u0102\u0103\u0007>\u0002\u0002\u0103", - "\u001c\u0003\u0002\u0002\u0002\u0104\u0105\u0007@\u0002\u0002\u0105", - "\u001e\u0003\u0002\u0002\u0002\u0106\u0107\u00070\u0002\u0002\u0107", - " \u0003\u0002\u0002\u0002\u0108\u0109\u0007.\u0002\u0002\u0109\"\u0003", - "\u0002\u0002\u0002\u010a\u010b\u0007=\u0002\u0002\u010b$\u0003\u0002", - "\u0002\u0002\u010c\u010d\u0007<\u0002\u0002\u010d&\u0003\u0002\u0002", - "\u0002\u010e\u010f\u0007}\u0002\u0002\u010f(\u0003\u0002\u0002\u0002", - "\u0110\u0111\u0007\u007f\u0002\u0002\u0111*\u0003\u0002\u0002\u0002", - "\u0112\u0113\u0007]\u0002\u0002\u0113,\u0003\u0002\u0002\u0002\u0114", - "\u0115\u0007_\u0002\u0002\u0115.\u0003\u0002\u0002\u0002\u0116\u0117", - "\u0007,\u0002\u0002\u01170\u0003\u0002\u0002\u0002\u0118\u0119\u0007", - "&\u0002\u0002\u01192\u0003\u0002\u0002\u0002\u011a\u011b\u0007(\u0002", - "\u0002\u011b4\u0003\u0002\u0002\u0002\u011c\u011d\u0007\u0080\u0002", - "\u0002\u011d6\u0003\u0002\u0002\u0002\u011e\u011f\u0007#\u0002\u0002", - "\u011f8\u0003\u0002\u0002\u0002\u0120\u0121\u0007/\u0002\u0002\u0121", - ":\u0003\u0002\u0002\u0002\u0122\u0123\u0007\'\u0002\u0002\u0123<\u0003", - "\u0002\u0002\u0002\u0124\u0125\u0007-\u0002\u0002\u0125>\u0003\u0002", - "\u0002\u0002\u0126\u0127\u00071\u0002\u0002\u0127@\u0003\u0002\u0002", - "\u0002\u0128\u0129\u0007`\u0002\u0002\u0129B\u0003\u0002\u0002\u0002", - "\u012a\u012b\u0007~\u0002\u0002\u012bD\u0003\u0002\u0002\u0002\u012c", - "\u012d\u0007<\u0002\u0002\u012d\u012e\u0007?\u0002\u0002\u012eF\u0003", - "\u0002\u0002\u0002\u012f\u0130\u0007#\u0002\u0002\u0130\u0131\u0007", - "?\u0002\u0002\u0131H\u0003\u0002\u0002\u0002\u0132\u0133\u0007>\u0002", - "\u0002\u0133\u0134\u0007@\u0002\u0002\u0134J\u0003\u0002\u0002\u0002", - "\u0135\u0136\u0007>\u0002\u0002\u0136\u0137\u0007?\u0002\u0002\u0137", - "L\u0003\u0002\u0002\u0002\u0138\u0139\u0007?\u0002\u0002\u0139\u013a", - "\u0007@\u0002\u0002\u013aN\u0003\u0002\u0002\u0002\u013b\u013c\u0007", - "@\u0002\u0002\u013c\u013d\u0007?\u0002\u0002\u013dP\u0003\u0002\u0002", - "\u0002\u013e\u013f\u0007?\u0002\u0002\u013f\u0140\u0007?\u0002\u0002", - "\u0140\u0141\u0007?\u0002\u0002\u0141R\u0003\u0002\u0002\u0002\u0142", - "\u0143\u0007#\u0002\u0002\u0143\u0144\u0007#\u0002\u0002\u0144\u0145", - "\u0007?\u0002\u0002\u0145T\u0003\u0002\u0002\u0002\u0146\u0147\u0007", - "K\u0002\u0002\u0147\u0148\u0007P\u0002\u0002\u0148V\u0003\u0002\u0002", - "\u0002\u0149\u014a\u0007Q\u0002\u0002\u014a\u014b\u0007T\u0002\u0002", - "\u014bX\u0003\u0002\u0002\u0002\u014c\u014d\u0007P\u0002\u0002\u014d", - "\u014e\u0007Q\u0002\u0002\u014e\u014f\u0007V\u0002\u0002\u014fZ\u0003", - "\u0002\u0002\u0002\u0150\u0151\u0007C\u0002\u0002\u0151\u0152\u0007", - "P\u0002\u0002\u0152\u0153\u0007F\u0002\u0002\u0153\\\u0003\u0002\u0002", - "\u0002\u0154\u0155\u0007G\u0002\u0002\u0155\u0156\u0007T\u0002\u0002", - "\u0156\u0157\u0007C\u0002\u0002\u0157^\u0003\u0002\u0002\u0002\u0158", - "\u0159\u0007P\u0002\u0002\u0159\u015a\u0007W\u0002\u0002\u015a\u015b", - "\u0007N\u0002\u0002\u015b\u015c\u0007N\u0002\u0002\u015c`\u0003\u0002", - "\u0002\u0002\u015d\u015e\u0007F\u0002\u0002\u015e\u015f\u0007K\u0002", - "\u0002\u015f\u0160\u0007X\u0002\u0002\u0160b\u0003\u0002\u0002\u0002", - "\u0161\u0162\u0007V\u0002\u0002\u0162\u0163\u0007T\u0002\u0002\u0163", - "\u0164\u0007W\u0002\u0002\u0164\u0165\u0007G\u0002\u0002\u0165d\u0003", - "\u0002\u0002\u0002\u0166\u0167\u0007H\u0002\u0002\u0167\u0168\u0007", - "C\u0002\u0002\u0168\u0169\u0007N\u0002\u0002\u0169\u016a\u0007U\u0002", - "\u0002\u016a\u016b\u0007G\u0002\u0002\u016bf\u0003\u0002\u0002\u0002", - "\u016c\u016d\u0007N\u0002\u0002\u016d\u016e\u0007K\u0002\u0002\u016e", - "\u016f\u0007P\u0002\u0002\u016f\u0170\u0007M\u0002\u0002\u0170h\u0003", - "\u0002\u0002\u0002\u0171\u0172\u0007G\u0002\u0002\u0172\u0173\u0007", - "E\u0002\u0002\u0173\u0174\u0007N\u0002\u0002\u0174j\u0003\u0002\u0002", - "\u0002\u0175\u0176\u0007T\u0002\u0002\u0176\u0177\u0007G\u0002\u0002", - "\u0177\u0178\u0007V\u0002\u0002\u0178\u0179\u0007W\u0002\u0002\u0179", - "\u017a\u0007T\u0002\u0002\u017a\u017b\u0007P\u0002\u0002\u017b\u017c", - "\u0007U\u0002\u0002\u017cl\u0003\u0002\u0002\u0002\u017d\u017e\u0007", - "%\u0002\u0002\u017e\u017f\u0007Q\u0002\u0002\u017f\u0180\u0007R\u0002", - "\u0002\u0180\u0181\u0007V\u0002\u0002\u0181\u0182\u0007K\u0002\u0002", - "\u0182\u0183\u0007Q\u0002\u0002\u0183\u0184\u0007P\u0002\u0002\u0184", - "n\u0003\u0002\u0002\u0002\u0185\u0186\u0007R\u0002\u0002\u0186\u0187", - "\u0007G\u0002\u0002\u0187\u0188\u0007T\u0002\u0002\u0188\u0189\u0007", - "O\u0002\u0002\u0189\u018a\u0007K\u0002\u0002\u018a\u018b\u0007V\u0002", - "\u0002\u018b\u018c\u0007U\u0002\u0002\u018cp\u0003\u0002\u0002\u0002", - "\u018d\u018e\u0007G\u0002\u0002\u018e\u018f\u0007P\u0002\u0002\u018f", - "\u0190\u0007V\u0002\u0002\u0190\u0191\u0007K\u0002\u0002\u0191\u0192", - "\u0007V\u0002\u0002\u0192\u0193\u0007[\u0002\u0002\u0193r\u0003\u0002", - "\u0002\u0002\u0194\u0195\u0007C\u0002\u0002\u0195\u0196\u0007U\u0002", - "\u0002\u0196\u0197\u0007U\u0002\u0002\u0197\u0198\u0007Q\u0002\u0002", - "\u0198\u0199\u0007E\u0002\u0002\u0199\u019a\u0007K\u0002\u0002\u019a", - "\u019b\u0007C\u0002\u0002\u019b\u019c\u0007V\u0002\u0002\u019c\u019d", - "\u0007K\u0002\u0002\u019d\u019e\u0007Q\u0002\u0002\u019e\u019f\u0007", - "P\u0002\u0002\u019ft\u0003\u0002\u0002\u0002\u01a0\u01a1\u0007K\u0002", - "\u0002\u01a1\u01a2\u0007O\u0002\u0002\u01a2\u01a3\u0007R\u0002\u0002", - "\u01a3\u01a4\u0007Q\u0002\u0002\u01a4\u01a5\u0007T\u0002\u0002\u01a5", - "\u01a6\u0007V\u0002\u0002\u01a6v\u0003\u0002\u0002\u0002\u01a7\u01a8", - "\u0007H\u0002\u0002\u01a8\u01a9\u0007T\u0002\u0002\u01a9\u01aa\u0007", - "Q\u0002\u0002\u01aa\u01ab\u0007O\u0002\u0002\u01abx\u0003\u0002\u0002", - "\u0002\u01ac\u01ad\u0007R\u0002\u0002\u01ad\u01ae\u0007C\u0002\u0002", - "\u01ae\u01af\u0007E\u0002\u0002\u01af\u01b0\u0007M\u0002\u0002\u01b0", - "\u01b1\u0007C\u0002\u0002\u01b1\u01b2\u0007I\u0002\u0002\u01b2\u01b3", - "\u0007G\u0002\u0002\u01b3z\u0003\u0002\u0002\u0002\u01b4\u01b5\u0007", - "G\u0002\u0002\u01b5\u01b6\u0007P\u0002\u0002\u01b6\u01b7\u0007F\u0002", - "\u0002\u01b7|\u0003\u0002\u0002\u0002\u01b8\u01b9\u0007U\u0002\u0002", - "\u01b9\u01ba\u0007J\u0002\u0002\u01ba\u01bb\u0007G\u0002\u0002\u01bb", - "\u01bc\u0007N\u0002\u0002\u01bc\u01bd\u0007N\u0002\u0002\u01bd~\u0003", - "\u0002\u0002\u0002\u01be\u01bf\u0007H\u0002\u0002\u01bf\u01c0\u0007", - "N\u0002\u0002\u01c0\u01c1\u0007C\u0002\u0002\u01c1\u01c2\u0007V\u0002", - "\u0002\u01c2\u0080\u0003\u0002\u0002\u0002\u01c3\u01c4\u0007S\u0002", - "\u0002\u01c4\u01c5\u0007W\u0002\u0002\u01c5\u01c6\u0007G\u0002\u0002", - "\u01c6\u01c7\u0007T\u0002\u0002\u01c7\u01c8\u0007[\u0002\u0002\u01c8", - "\u0082\u0003\u0002\u0002\u0002\u01c9\u01ca\u0007W\u0002\u0002\u01ca", - "\u01cb\u0007K\u0002\u0002\u01cb\u01cc\u0007F\u0002\u0002\u01cc\u0084", - "\u0003\u0002\u0002\u0002\u01cd\u01ce\u0007H\u0002\u0002\u01ce\u01cf", - "\u0007Q\u0002\u0002\u01cf\u01d0\u0007T\u0002\u0002\u01d0\u01d1\u0007", - "O\u0002\u0002\u01d1\u01d2\u0007C\u0002\u0002\u01d2\u01d3\u0007V\u0002", - "\u0002\u01d3\u0086\u0003\u0002\u0002\u0002\u01d4\u01d5\u0007O\u0002", - "\u0002\u01d5\u01d6\u0007Q\u0002\u0002\u01d6\u01d7\u0007F\u0002\u0002", - "\u01d7\u01d8\u0007G\u0002\u0002\u01d8\u01d9\u0007N\u0002\u0002\u01d9", - "\u0088\u0003\u0002\u0002\u0002\u01da\u01db\u0007W\u0002\u0002\u01db", - "\u01dc\u0007U\u0002\u0002\u01dc\u01dd\u0007G\u0002\u0002\u01dd\u008a", - "\u0003\u0002\u0002\u0002\u01de\u01df\u0007M\u0002\u0002\u01df\u01e0", - "\u0007G\u0002\u0002\u01e0\u01e1\u0007N\u0002\u0002\u01e1\u01e2\u0007", - "D\u0002\u0002\u01e2\u01e3\u0007C\u0002\u0002\u01e3\u01e4\u0007U\u0002", - "\u0002\u01e4\u01e5\u0007G\u0002\u0002\u01e5\u008c\u0003\u0002\u0002", - "\u0002\u01e6\u01e7\u0007M\u0002\u0002\u01e7\u01e8\u0007G\u0002\u0002", - "\u01e8\u01e9\u0007N\u0002\u0002\u01e9\u01ea\u0007S\u0002\u0002\u01ea", - "\u01eb\u0007W\u0002\u0002\u01eb\u01ec\u0007G\u0002\u0002\u01ec\u01ed", - "\u0007T\u0002\u0002\u01ed\u01ee\u0007[\u0002\u0002\u01ee\u008e\u0003", - "\u0002\u0002\u0002\u01ef\u01f0\u0007H\u0002\u0002\u01f0\u01f1\u0007", - "F\u0002\u0002\u01f1\u01f2\u0007E\u0002\u0002\u01f2\u0090\u0003\u0002", - "\u0002\u0002\u01f3\u01f4\u0007H\u0002\u0002\u01f4\u01f5\u0007K\u0002", - "\u0002\u01f5\u01f6\u0007N\u0002\u0002\u01f6\u01f7\u0007V\u0002\u0002", - "\u01f7\u01f8\u0007G\u0002\u0002\u01f8\u01f9\u0007T\u0002\u0002\u01f9", - "\u0092\u0003\u0002\u0002\u0002\u01fa\u01fb\u0007J\u0002\u0002\u01fb", - "\u01fc\u0007K\u0002\u0002\u01fc\u01fd\u0007P\u0002\u0002\u01fd\u01fe", - "\u0007V\u0002\u0002\u01fe\u0094\u0003\u0002\u0002\u0002\u01ff\u0200", - "\u0007I\u0002\u0002\u0200\u0201\u0007N\u0002\u0002\u0201\u0202\u0007", - "Q\u0002\u0002\u0202\u0203\u0007D\u0002\u0002\u0203\u0204\u0007C\u0002", - "\u0002\u0204\u0205\u0007N\u0002\u0002\u0205\u0096\u0003\u0002\u0002", - "\u0002\u0206\u0207\u0007H\u0002\u0002\u0207\u0208\u0007W\u0002\u0002", - "\u0208\u0209\u0007P\u0002\u0002\u0209\u020a\u0007E\u0002\u0002\u020a", - "\u020b\u0007V\u0002\u0002\u020b\u020c\u0007K\u0002\u0002\u020c\u020d", - "\u0007Q\u0002\u0002\u020d\u020e\u0007P\u0002\u0002\u020e\u0098\u0003", - "\u0002\u0002\u0002\u020f\u0210\u0007F\u0002\u0002\u0210\u0211\u0007", - "C\u0002\u0002\u0211\u0212\u0007V\u0002\u0002\u0212\u0213\u0007C\u0002", - "\u0002\u0213\u0214\u0007U\u0002\u0002\u0214\u0215\u0007G\u0002\u0002", - "\u0215\u0216\u0007V\u0002\u0002\u0216\u009a\u0003\u0002\u0002\u0002", - "\u0217\u0218\u0007Q\u0002\u0002\u0218\u0219\u0007H\u0002\u0002\u0219", - "\u009c\u0003\u0002\u0002\u0002\u021a\u021b\u0007U\u0002\u0002\u021b", - "\u021c\u0007G\u0002\u0002\u021c\u021d\u0007V\u0002\u0002\u021d\u009e", - "\u0003\u0002\u0002\u0002\u021e\u021f\u0007C\u0002\u0002\u021f\u0220", - "\u0007U\u0002\u0002\u0220\u0221\u0007Q\u0002\u0002\u0221\u0222\u0007", - "H\u0002\u0002\u0222\u00a0\u0003\u0002\u0002\u0002\u0223\u0224\u0007", - "W\u0002\u0002\u0224\u0225\u0007U\u0002\u0002\u0225\u0226\u0007K\u0002", - "\u0002\u0226\u0227\u0007P\u0002\u0002\u0227\u0228\u0007I\u0002\u0002", - "\u0228\u00a2\u0003\u0002\u0002\u0002\u0229\u022a\u0007X\u0002\u0002", - "\u022a\u022b\u0007K\u0002\u0002\u022b\u022c\u0007U\u0002\u0002\u022c", - "\u022d\u0007W\u0002\u0002\u022d\u022e\u0007C\u0002\u0002\u022e\u022f", - "\u0007N\u0002\u0002\u022f\u0230\u0007K\u0002\u0002\u0230\u0231\u0007", - "\\\u0002\u0002\u0231\u0232\u0007G\u0002\u0002\u0232\u00a4\u0003\u0002", - "\u0002\u0002\u0233\u0234\u0007G\u0002\u0002\u0234\u0235\u0007P\u0002", - "\u0002\u0235\u0236\u0007F\u0002\u0002\u0236\u0237\u0007X\u0002\u0002", - "\u0237\u0238\u0007K\u0002\u0002\u0238\u0239\u0007U\u0002\u0002\u0239", - "\u023a\u0007W\u0002\u0002\u023a\u023b\u0007C\u0002\u0002\u023b\u023c", - "\u0007N\u0002\u0002\u023c\u023d\u0007K\u0002\u0002\u023d\u023e\u0007", - "\\\u0002\u0002\u023e\u023f\u0007G\u0002\u0002\u023f\u00a6\u0003\u0002", - "\u0002\u0002\u0240\u0241\u0007T\u0002\u0002\u0241\u0242\u0007G\u0002", - "\u0002\u0242\u0243\u0007U\u0002\u0002\u0243\u0244\u0007Q\u0002\u0002", - "\u0244\u0245\u0007W\u0002\u0002\u0245\u0246\u0007T\u0002\u0002\u0246", - "\u0247\u0007E\u0002\u0002\u0247\u0248\u0007G\u0002\u0002\u0248\u0249", - "\u0007U\u0002\u0002\u0249\u00a8\u0003\u0002\u0002\u0002\u024a\u024b", - "\u0007G\u0002\u0002\u024b\u024c\u0007P\u0002\u0002\u024c\u024d\u0007", - "F\u0002\u0002\u024d\u024e\u0007T\u0002\u0002\u024e\u024f\u0007G\u0002", - "\u0002\u024f\u0250\u0007U\u0002\u0002\u0250\u0251\u0007Q\u0002\u0002", - "\u0251\u0252\u0007W\u0002\u0002\u0252\u0253\u0007T\u0002\u0002\u0253", - "\u0254\u0007E\u0002\u0002\u0254\u0255\u0007G\u0002\u0002\u0255\u0256", - "\u0007U\u0002\u0002\u0256\u00aa\u0003\u0002\u0002\u0002\u0257\u025c", - "\u0007$\u0002\u0002\u0258\u025b\u0005\u0003\u0002\u0002\u0259\u025b", - "\n\u0005\u0002\u0002\u025a\u0258\u0003\u0002\u0002\u0002\u025a\u0259", - "\u0003\u0002\u0002\u0002\u025b\u025e\u0003\u0002\u0002\u0002\u025c\u025a", - "\u0003\u0002\u0002\u0002\u025c\u025d\u0003\u0002\u0002\u0002\u025d\u025f", - "\u0003\u0002\u0002\u0002\u025e\u025c\u0003\u0002\u0002\u0002\u025f\u0260", - "\u0007$\u0002\u0002\u0260\u00ac\u0003\u0002\u0002\u0002\u0261\u0262", - "\u0007a\u0002\u0002\u0262\u0268\u0005\u0007\u0004\u0002\u0263\u0267", - "\u0005\u0007\u0004\u0002\u0264\u0267\u0005\t\u0005\u0002\u0265\u0267", - "\u0007a\u0002\u0002\u0266\u0263\u0003\u0002\u0002\u0002\u0266\u0264", - "\u0003\u0002\u0002\u0002\u0266\u0265\u0003\u0002\u0002\u0002\u0267\u026a", - "\u0003\u0002\u0002\u0002\u0268\u0266\u0003\u0002\u0002\u0002\u0268\u0269", - "\u0003\u0002\u0002\u0002\u0269\u00ae\u0003\u0002\u0002\u0002\u026a\u0268", - "\u0003\u0002\u0002\u0002\u026b\u026d\u0007a\u0002\u0002\u026c\u026e", - "\u0005\t\u0005\u0002\u026d\u026c\u0003\u0002\u0002\u0002\u026e\u026f", - "\u0003\u0002\u0002\u0002\u026f\u026d\u0003\u0002\u0002\u0002\u026f\u0270", - "\u0003\u0002\u0002\u0002\u0270\u00b0\u0003\u0002\u0002\u0002\u0271\u0274", - "\u0007%\u0002\u0002\u0272\u0275\u0005\u0007\u0004\u0002\u0273\u0275", - "\u0005\t\u0005\u0002\u0274\u0272\u0003\u0002\u0002\u0002\u0274\u0273", - "\u0003\u0002\u0002\u0002\u0275\u027b\u0003\u0002\u0002\u0002\u0276\u027a", - "\u0005\u0007\u0004\u0002\u0277\u027a\u0005\t\u0005\u0002\u0278\u027a", - "\u0007a\u0002\u0002\u0279\u0276\u0003\u0002\u0002\u0002\u0279\u0277", - "\u0003\u0002\u0002\u0002\u0279\u0278\u0003\u0002\u0002\u0002\u027a\u027d", - "\u0003\u0002\u0002\u0002\u027b\u0279\u0003\u0002\u0002\u0002\u027b\u027c", - "\u0003\u0002\u0002\u0002\u027c\u00b2\u0003\u0002\u0002\u0002\u027d\u027b", - "\u0003\u0002\u0002\u0002\u027e\u0281\u0007B\u0002\u0002\u027f\u0282", - "\u0005\u0007\u0004\u0002\u0280\u0282\u0005\t\u0005\u0002\u0281\u027f", - "\u0003\u0002\u0002\u0002\u0281\u0280\u0003\u0002\u0002\u0002\u0282\u0288", - "\u0003\u0002\u0002\u0002\u0283\u0287\u0005\u0007\u0004\u0002\u0284\u0287", - "\u0005\t\u0005\u0002\u0285\u0287\u0007a\u0002\u0002\u0286\u0283\u0003", - "\u0002\u0002\u0002\u0286\u0284\u0003\u0002\u0002\u0002\u0286\u0285\u0003", - "\u0002\u0002\u0002\u0287\u028a\u0003\u0002\u0002\u0002\u0288\u0286\u0003", - "\u0002\u0002\u0002\u0288\u0289\u0003\u0002\u0002\u0002\u0289\u00b4\u0003", - "\u0002\u0002\u0002\u028a\u0288\u0003\u0002\u0002\u0002\u028b\u0291\u0005", - "\u0007\u0004\u0002\u028c\u0290\u0005\u0007\u0004\u0002\u028d\u0290\u0005", - "\t\u0005\u0002\u028e\u0290\u0007a\u0002\u0002\u028f\u028c\u0003\u0002", - "\u0002\u0002\u028f\u028d\u0003\u0002\u0002\u0002\u028f\u028e\u0003\u0002", - "\u0002\u0002\u0290\u0293\u0003\u0002\u0002\u0002\u0291\u028f\u0003\u0002", - "\u0002\u0002\u0291\u0292\u0003\u0002\u0002\u0002\u0292\u00b6\u0003\u0002", - "\u0002\u0002\u0293\u0291\u0003\u0002\u0002\u0002\u0294\u0296\u0005\t", - "\u0005\u0002\u0295\u0294\u0003\u0002\u0002\u0002\u0296\u0297\u0003\u0002", - "\u0002\u0002\u0297\u0295\u0003\u0002\u0002\u0002\u0297\u0298\u0003\u0002", - "\u0002\u0002\u0298\u00b8\u0003\u0002\u0002\u0002\u0299\u029a\u00072", - "\u0002\u0002\u029a\u029b\u0007z\u0002\u0002\u029b\u029d\u0003\u0002", - "\u0002\u0002\u029c\u029e\u0005\u000b\u0006\u0002\u029d\u029c\u0003\u0002", - "\u0002\u0002\u029e\u029f\u0003\u0002\u0002\u0002\u029f\u029d\u0003\u0002", - "\u0002\u0002\u029f\u02a0\u0003\u0002\u0002\u0002\u02a0\u02ab\u0003\u0002", - "\u0002\u0002\u02a1\u02a5\u0005\t\u0005\u0002\u02a2\u02a4\u0005\u000b", - "\u0006\u0002\u02a3\u02a2\u0003\u0002\u0002\u0002\u02a4\u02a7\u0003\u0002", - "\u0002\u0002\u02a5\u02a3\u0003\u0002\u0002\u0002\u02a5\u02a6\u0003\u0002", - "\u0002\u0002\u02a6\u02a8\u0003\u0002\u0002\u0002\u02a7\u02a5\u0003\u0002", - "\u0002\u0002\u02a8\u02a9\u0007z\u0002\u0002\u02a9\u02ab\u0003\u0002", - "\u0002\u0002\u02aa\u0299\u0003\u0002\u0002\u0002\u02aa\u02a1\u0003\u0002", - "\u0002\u0002\u02ab\u00ba\u0003\u0002\u0002\u0002\u02ac\u02ad\u00072", - "\u0002\u0002\u02ad\u02ae\u0007d\u0002\u0002\u02ae\u02b0\u0003\u0002", - "\u0002\u0002\u02af\u02b1\u0005\u000f\b\u0002\u02b0\u02af\u0003\u0002", - "\u0002\u0002\u02b1\u02b2\u0003\u0002\u0002\u0002\u02b2\u02b0\u0003\u0002", - "\u0002\u0002\u02b2\u02b3\u0003\u0002\u0002\u0002\u02b3\u02bc\u0003\u0002", - "\u0002\u0002\u02b4\u02b6\u0005\u000f\b\u0002\u02b5\u02b4\u0003\u0002", - "\u0002\u0002\u02b6\u02b7\u0003\u0002\u0002\u0002\u02b7\u02b5\u0003\u0002", - "\u0002\u0002\u02b7\u02b8\u0003\u0002\u0002\u0002\u02b8\u02b9\u0003\u0002", - "\u0002\u0002\u02b9\u02ba\u0007d\u0002\u0002\u02ba\u02bc\u0003\u0002", - "\u0002\u0002\u02bb\u02ac\u0003\u0002\u0002\u0002\u02bb\u02b5\u0003\u0002", - "\u0002\u0002\u02bc\u00bc\u0003\u0002\u0002\u0002\u02bd\u02bf\u0005\t", - "\u0005\u0002\u02be\u02bd\u0003\u0002\u0002\u0002\u02bf\u02c0\u0003\u0002", - "\u0002\u0002\u02c0\u02be\u0003\u0002\u0002\u0002\u02c0\u02c1\u0003\u0002", - "\u0002\u0002\u02c1\u02c2\u0003\u0002\u0002\u0002\u02c2\u02c4\u00070", - "\u0002\u0002\u02c3\u02c5\u0005\t\u0005\u0002\u02c4\u02c3\u0003\u0002", - "\u0002\u0002\u02c5\u02c6\u0003\u0002\u0002\u0002\u02c6\u02c4\u0003\u0002", - "\u0002\u0002\u02c6\u02c7\u0003\u0002\u0002\u0002\u02c7\u02d1\u0003\u0002", - "\u0002\u0002\u02c8\u02ca\t\u0006\u0002\u0002\u02c9\u02cb\u0007/\u0002", - "\u0002\u02ca\u02c9\u0003\u0002\u0002\u0002\u02ca\u02cb\u0003\u0002\u0002", - "\u0002\u02cb\u02cd\u0003\u0002\u0002\u0002\u02cc\u02ce\u0005\t\u0005", - "\u0002\u02cd\u02cc\u0003\u0002\u0002\u0002\u02ce\u02cf\u0003\u0002\u0002", - "\u0002\u02cf\u02cd\u0003\u0002\u0002\u0002\u02cf\u02d0\u0003\u0002\u0002", - "\u0002\u02d0\u02d2\u0003\u0002\u0002\u0002\u02d1\u02c8\u0003\u0002\u0002", - "\u0002\u02d1\u02d2\u0003\u0002\u0002\u0002\u02d2\u00be\u0003\u0002\u0002", - "\u0002\u02d3\u02d8\u0007)\u0002\u0002\u02d4\u02d7\n\u0007\u0002\u0002", - "\u02d5\u02d7\u0005\u00c3b\u0002\u02d6\u02d4\u0003\u0002\u0002\u0002", - "\u02d6\u02d5\u0003\u0002\u0002\u0002\u02d7\u02da\u0003\u0002\u0002\u0002", - "\u02d8\u02d6\u0003\u0002\u0002\u0002\u02d8\u02d9\u0003\u0002\u0002\u0002", - "\u02d9\u02db\u0003\u0002\u0002\u0002\u02da\u02d8\u0003\u0002\u0002\u0002", - "\u02db\u02dc\u0007)\u0002\u0002\u02dc\u00c0\u0003\u0002\u0002\u0002", - "\u02dd\u02de\u0005\u0007\u0004\u0002\u02de\u02df\u0005\u00bf`\u0002", - "\u02df\u00c2\u0003\u0002\u0002\u0002\u02e0\u02e1\u0007^\u0002\u0002", - "\u02e1\u02e2\u0005\r\u0007\u0002\u02e2\u02e3\u0005\r\u0007\u0002\u02e3", - "\u02e4\u0005\r\u0007\u0002\u02e4\u02e8\u0003\u0002\u0002\u0002\u02e5", - "\u02e6\u0007^\u0002\u0002\u02e6\u02e8\u0005\u0011\t\u0002\u02e7\u02e0", - "\u0003\u0002\u0002\u0002\u02e7\u02e5\u0003\u0002\u0002\u0002\u02e8\u00c4", - "\u0003\u0002\u0002\u0002\u02e9\u02ed\u00071\u0002\u0002\u02ea\u02ec", - "\u0007,\u0002\u0002\u02eb\u02ea\u0003\u0002\u0002\u0002\u02ec\u02ef", - "\u0003\u0002\u0002\u0002\u02ed\u02eb\u0003\u0002\u0002\u0002\u02ed\u02ee", - "\u0003\u0002\u0002\u0002\u02ee\u02f0\u0003\u0002\u0002\u0002\u02ef\u02ed", - "\u0003\u0002\u0002\u0002\u02f0\u02f1\u0007,\u0002\u0002\u02f1\u02f2", - "\u00071\u0002\u0002\u02f2\u02f3\u0003\u0002\u0002\u0002\u02f3\u02f4", - "\bc\u0002\u0002\u02f4\u00c6\u0003\u0002\u0002\u0002\u02f5\u02f6\u0007", - "1\u0002\u0002\u02f6\u02f7\u0007,\u0002\u0002\u02f7\u02f8\u0003\u0002", - "\u0002\u0002\u02f8\u02fc\n\b\u0002\u0002\u02f9\u02fb\u000b\u0002\u0002", - "\u0002\u02fa\u02f9\u0003\u0002\u0002\u0002\u02fb\u02fe\u0003\u0002\u0002", - "\u0002\u02fc\u02fd\u0003\u0002\u0002\u0002\u02fc\u02fa\u0003\u0002\u0002", - "\u0002\u02fd\u02ff\u0003\u0002\u0002\u0002\u02fe\u02fc\u0003\u0002\u0002", - "\u0002\u02ff\u0300\u0007,\u0002\u0002\u0300\u0301\u00071\u0002\u0002", - "\u0301\u0302\u0003\u0002\u0002\u0002\u0302\u0303\bd\u0002\u0002\u0303", - "\u00c8\u0003\u0002\u0002\u0002\u0304\u0305\u00071\u0002\u0002\u0305", - "\u0306\u0007,\u0002\u0002\u0306\u0307\u0007,\u0002\u0002\u0307\u0308", - "\u0007,\u0002\u0002\u0308\u030c\u0003\u0002\u0002\u0002\u0309\u030b", - "\u0007,\u0002\u0002\u030a\u0309\u0003\u0002\u0002\u0002\u030b\u030e", - "\u0003\u0002\u0002\u0002\u030c\u030a\u0003\u0002\u0002\u0002\u030c\u030d", - "\u0003\u0002\u0002\u0002\u030d\u030f\u0003\u0002\u0002\u0002\u030e\u030c", - "\u0003\u0002\u0002\u0002\u030f\u0313\n\b\u0002\u0002\u0310\u0312\u000b", - "\u0002\u0002\u0002\u0311\u0310\u0003\u0002\u0002\u0002\u0312\u0315\u0003", - "\u0002\u0002\u0002\u0313\u0314\u0003\u0002\u0002\u0002\u0313\u0311\u0003", - "\u0002\u0002\u0002\u0314\u0316\u0003\u0002\u0002\u0002\u0315\u0313\u0003", - "\u0002\u0002\u0002\u0316\u0317\u0007,\u0002\u0002\u0317\u0318\u0007", - "1\u0002\u0002\u0318\u0319\u0003\u0002\u0002\u0002\u0319\u031a\be\u0002", - "\u0002\u031a\u00ca\u0003\u0002\u0002\u0002\u031b\u031c\u00071\u0002", - "\u0002\u031c\u031d\u0007,\u0002\u0002\u031d\u031e\u0007,\u0002\u0002", - "\u031e\u031f\u0003\u0002\u0002\u0002\u031f\u0323\n\t\u0002\u0002\u0320", - "\u0322\u000b\u0002\u0002\u0002\u0321\u0320\u0003\u0002\u0002\u0002\u0322", - "\u0325\u0003\u0002\u0002\u0002\u0323\u0324\u0003\u0002\u0002\u0002\u0323", - "\u0321\u0003\u0002\u0002\u0002\u0324\u0326\u0003\u0002\u0002\u0002\u0325", - "\u0323\u0003\u0002\u0002\u0002\u0326\u0327\u0007,\u0002\u0002\u0327", - "\u0328\u00071\u0002\u0002\u0328\u0329\u0003\u0002\u0002\u0002\u0329", - "\u032a\bf\u0003\u0002\u032a\u00cc\u0003\u0002\u0002\u0002\u032b\u032c", - "\u00071\u0002\u0002\u032c\u032d\u0007,\u0002\u0002\u032d\u032e\u0007", - ",\u0002\u0002\u032e\u0330\u0003\u0002\u0002\u0002\u032f\u0331\t\n\u0002", - "\u0002\u0330\u032f\u0003\u0002\u0002\u0002\u0331\u0332\u0003\u0002\u0002", - "\u0002\u0332\u0333\u0003\u0002\u0002\u0002\u0332\u0330\u0003\u0002\u0002", - "\u0002\u0333\u0334\u0003\u0002\u0002\u0002\u0334\u0335\u0007,\u0002", - "\u0002\u0335\u0336\u00071\u0002\u0002\u0336\u0337\u0003\u0002\u0002", - "\u0002\u0337\u0338\bg\u0002\u0002\u0338\u00ce\u0003\u0002\u0002\u0002", - "\u0339\u033b\u0007\u000f\u0002\u0002\u033a\u0339\u0003\u0002\u0002\u0002", - "\u033a\u033b\u0003\u0002\u0002\u0002\u033b\u033c\u0003\u0002\u0002\u0002", - "\u033c\u033d\u0007\f\u0002\u0002\u033d\u033e\u0003\u0002\u0002\u0002", - "\u033e\u033f\bh\u0002\u0002\u033f\u00d0\u0003\u0002\u0002\u0002\u0340", - "\u0341\u00071\u0002\u0002\u0341\u0342\u00071\u0002\u0002\u0342\u0346", - "\u0003\u0002\u0002\u0002\u0343\u0345\n\u000b\u0002\u0002\u0344\u0343", - "\u0003\u0002\u0002\u0002\u0345\u0348\u0003\u0002\u0002\u0002\u0346\u0344", - "\u0003\u0002\u0002\u0002\u0346\u0347\u0003\u0002\u0002\u0002\u0347\u0349", - "\u0003\u0002\u0002\u0002\u0348\u0346\u0003\u0002\u0002\u0002\u0349\u034a", - "\bi\u0002\u0002\u034a\u00d2\u0003\u0002\u0002\u0002\u034b\u034d\t\n", - "\u0002\u0002\u034c\u034b\u0003\u0002\u0002\u0002\u034d\u034e\u0003\u0002", - "\u0002\u0002\u034e\u034c\u0003\u0002\u0002\u0002\u034e\u034f\u0003\u0002", - "\u0002\u0002\u034f\u0350\u0003\u0002\u0002\u0002\u0350\u0351\bj\u0002", - "\u0002\u0351\u00d4\u0003\u0002\u0002\u0002\u0352\u0353\u00072\u0002", - "\u0002\u0353\u0354\u0007d\u0002\u0002\u0354\u0358\u0003\u0002\u0002", - "\u0002\u0355\u0357\u0005\t\u0005\u0002\u0356\u0355\u0003\u0002\u0002", - "\u0002\u0357\u035a\u0003\u0002\u0002\u0002\u0358\u0356\u0003\u0002\u0002", - "\u0002\u0358\u0359\u0003\u0002\u0002\u0002\u0359\u035c\u0003\u0002\u0002", - "\u0002\u035a\u0358\u0003\u0002\u0002\u0002\u035b\u035d\u00044;\u0002", - "\u035c\u035b\u0003\u0002\u0002\u0002\u035d\u035e\u0003\u0002\u0002\u0002", - "\u035e\u035c\u0003\u0002\u0002\u0002\u035e\u035f\u0003\u0002\u0002\u0002", - "\u035f\u0363\u0003\u0002\u0002\u0002\u0360\u0362\u0005\t\u0005\u0002", - "\u0361\u0360\u0003\u0002\u0002\u0002\u0362\u0365\u0003\u0002\u0002\u0002", - "\u0363\u0361\u0003\u0002\u0002\u0002\u0363\u0364\u0003\u0002\u0002\u0002", - "\u0364\u0379\u0003\u0002\u0002\u0002\u0365\u0363\u0003\u0002\u0002\u0002", - "\u0366\u0368\u0005\t\u0005\u0002\u0367\u0366\u0003\u0002\u0002\u0002", - "\u0368\u036b\u0003\u0002\u0002\u0002\u0369\u0367\u0003\u0002\u0002\u0002", - "\u0369\u036a\u0003\u0002\u0002\u0002\u036a\u036d\u0003\u0002\u0002\u0002", - "\u036b\u0369\u0003\u0002\u0002\u0002\u036c\u036e\u00044;\u0002\u036d", - "\u036c\u0003\u0002\u0002\u0002\u036e\u036f\u0003\u0002\u0002\u0002\u036f", - "\u036d\u0003\u0002\u0002\u0002\u036f\u0370\u0003\u0002\u0002\u0002\u0370", - "\u0374\u0003\u0002\u0002\u0002\u0371\u0373\u0005\t\u0005\u0002\u0372", - "\u0371\u0003\u0002\u0002\u0002\u0373\u0376\u0003\u0002\u0002\u0002\u0374", - "\u0372\u0003\u0002\u0002\u0002\u0374\u0375\u0003\u0002\u0002\u0002\u0375", - "\u0377\u0003\u0002\u0002\u0002\u0376\u0374\u0003\u0002\u0002\u0002\u0377", - "\u0379\u0007d\u0002\u0002\u0378\u0352\u0003\u0002\u0002\u0002\u0378", - "\u0369\u0003\u0002\u0002\u0002\u0379\u00d6\u0003\u0002\u0002\u0002\u037a", - "\u037e\u0005\t\u0005\u0002\u037b\u037d\u0005\u000b\u0006\u0002\u037c", - "\u037b\u0003\u0002\u0002\u0002\u037d\u0380\u0003\u0002\u0002\u0002\u037e", - "\u037c\u0003\u0002\u0002\u0002\u037e\u037f\u0003\u0002\u0002\u0002\u037f", - "\u00d8\u0003\u0002\u0002\u0002\u0380\u037e\u0003\u0002\u0002\u0002\u0381", - "\u0382\u00072\u0002\u0002\u0382\u0383\u0007z\u0002\u0002\u0383\u0387", - "\u0003\u0002\u0002\u0002\u0384\u0386\u0005\u000b\u0006\u0002\u0385\u0384", - "\u0003\u0002\u0002\u0002\u0386\u0389\u0003\u0002\u0002\u0002\u0387\u0385", - "\u0003\u0002\u0002\u0002\u0387\u0388\u0003\u0002\u0002\u0002\u0388\u038b", - "\u0003\u0002\u0002\u0002\u0389\u0387\u0003\u0002\u0002\u0002\u038a\u038c", - "\t\f\u0002\u0002\u038b\u038a\u0003\u0002\u0002\u0002\u038c\u038d\u0003", - "\u0002\u0002\u0002\u038d\u038b\u0003\u0002\u0002\u0002\u038d\u038e\u0003", - "\u0002\u0002\u0002\u038e\u0392\u0003\u0002\u0002\u0002\u038f\u0391\t", - "\r\u0002\u0002\u0390\u038f\u0003\u0002\u0002\u0002\u0391\u0394\u0003", - "\u0002\u0002\u0002\u0392\u0390\u0003\u0002\u0002\u0002\u0392\u0393\u0003", - "\u0002\u0002\u0002\u0393\u03aa\u0003\u0002\u0002\u0002\u0394\u0392\u0003", - "\u0002\u0002\u0002\u0395\u0399\u0005\t\u0005\u0002\u0396\u0398\u0005", - "\u000b\u0006\u0002\u0397\u0396\u0003\u0002\u0002\u0002\u0398\u039b\u0003", - "\u0002\u0002\u0002\u0399\u0397\u0003\u0002\u0002\u0002\u0399\u039a\u0003", - "\u0002\u0002\u0002\u039a\u039d\u0003\u0002\u0002\u0002\u039b\u0399\u0003", - "\u0002\u0002\u0002\u039c\u039e\t\f\u0002\u0002\u039d\u039c\u0003\u0002", - "\u0002\u0002\u039e\u039f\u0003\u0002\u0002\u0002\u039f\u039d\u0003\u0002", - "\u0002\u0002\u039f\u03a0\u0003\u0002\u0002\u0002\u03a0\u03a4\u0003\u0002", - "\u0002\u0002\u03a1\u03a3\t\r\u0002\u0002\u03a2\u03a1\u0003\u0002\u0002", - "\u0002\u03a3\u03a6\u0003\u0002\u0002\u0002\u03a4\u03a2\u0003\u0002\u0002", - "\u0002\u03a4\u03a5\u0003\u0002\u0002\u0002\u03a5\u03a7\u0003\u0002\u0002", - "\u0002\u03a6\u03a4\u0003\u0002\u0002\u0002\u03a7\u03a8\u0007z\u0002", - "\u0002\u03a8\u03aa\u0003\u0002\u0002\u0002\u03a9\u0381\u0003\u0002\u0002", - "\u0002\u03a9\u0395\u0003\u0002\u0002\u0002\u03aa\u00da\u0003\u0002\u0002", - "\u0002\u03ab\u03af\u0005\t\u0005\u0002\u03ac\u03ae\t\r\u0002\u0002\u03ad", - "\u03ac\u0003\u0002\u0002\u0002\u03ae\u03b1\u0003\u0002\u0002\u0002\u03af", - "\u03ad\u0003\u0002\u0002\u0002\u03af\u03b0\u0003\u0002\u0002\u0002\u03b0", - "\u03b3\u0003\u0002\u0002\u0002\u03b1\u03af\u0003\u0002\u0002\u0002\u03b2", - "\u03b4\t\u0002\u0002\u0002\u03b3\u03b2\u0003\u0002\u0002\u0002\u03b4", - "\u03b5\u0003\u0002\u0002\u0002\u03b5\u03b3\u0003\u0002\u0002\u0002\u03b5", - "\u03b6\u0003\u0002\u0002\u0002\u03b6\u03ba\u0003\u0002\u0002\u0002\u03b7", - "\u03b9\t\r\u0002\u0002\u03b8\u03b7\u0003\u0002\u0002\u0002\u03b9\u03bc", - "\u0003\u0002\u0002\u0002\u03ba\u03b8\u0003\u0002\u0002\u0002\u03ba\u03bb", - "\u0003\u0002\u0002\u0002\u03bb\u00dc\u0003\u0002\u0002\u0002\u03bc\u03ba", - "\u0003\u0002\u0002\u0002\u03bd\u03bf\u0005\t\u0005\u0002\u03be\u03bd", - "\u0003\u0002\u0002\u0002\u03bf\u03c0\u0003\u0002\u0002\u0002\u03c0\u03be", - "\u0003\u0002\u0002\u0002\u03c0\u03c1\u0003\u0002\u0002\u0002\u03c1\u03c3", - "\u0003\u0002\u0002\u0002\u03c2\u03c4\u0005\u0007\u0004\u0002\u03c3\u03c2", - "\u0003\u0002\u0002\u0002\u03c4\u03c5\u0003\u0002\u0002\u0002\u03c5\u03c3", - "\u0003\u0002\u0002\u0002\u03c5\u03c6\u0003\u0002\u0002\u0002\u03c6\u03d4", - "\u0003\u0002\u0002\u0002\u03c7\u03c9\u0005\t\u0005\u0002\u03c8\u03c7", - "\u0003\u0002\u0002\u0002\u03c9\u03ca\u0003\u0002\u0002\u0002\u03ca\u03c8", - "\u0003\u0002\u0002\u0002\u03ca\u03cb\u0003\u0002\u0002\u0002\u03cb\u03cf", - "\u0003\u0002\u0002\u0002\u03cc\u03ce\u0005\u0007\u0004\u0002\u03cd\u03cc", - "\u0003\u0002\u0002\u0002\u03ce\u03d1\u0003\u0002\u0002\u0002\u03cf\u03cd", - "\u0003\u0002\u0002\u0002\u03cf\u03d0\u0003\u0002\u0002\u0002\u03d0\u03d3", - "\u0003\u0002\u0002\u0002\u03d1\u03cf\u0003\u0002\u0002\u0002\u03d2\u03c8", - "\u0003\u0002\u0002\u0002\u03d3\u03d6\u0003\u0002\u0002\u0002\u03d4\u03d2", - "\u0003\u0002\u0002\u0002\u03d4\u03d5\u0003\u0002\u0002\u0002\u03d5\u03d7", - "\u0003\u0002\u0002\u0002\u03d6\u03d4\u0003\u0002\u0002\u0002\u03d7\u03d9", - "\u00070\u0002\u0002\u03d8\u03da\u0005\t\u0005\u0002\u03d9\u03d8\u0003", - "\u0002\u0002\u0002\u03da\u03db\u0003\u0002\u0002\u0002\u03db\u03d9\u0003", - "\u0002\u0002\u0002\u03db\u03dc\u0003\u0002\u0002\u0002\u03dc\u03e6\u0003", - "\u0002\u0002\u0002\u03dd\u03df\t\u0006\u0002\u0002\u03de\u03e0\u0007", - "/\u0002\u0002\u03df\u03de\u0003\u0002\u0002\u0002\u03df\u03e0\u0003", - "\u0002\u0002\u0002\u03e0\u03e2\u0003\u0002\u0002\u0002\u03e1\u03e3\u0005", - "\t\u0005\u0002\u03e2\u03e1\u0003\u0002\u0002\u0002\u03e3\u03e4\u0003", - "\u0002\u0002\u0002\u03e4\u03e2\u0003\u0002\u0002\u0002\u03e4\u03e5\u0003", - "\u0002\u0002\u0002\u03e5\u03e7\u0003\u0002\u0002\u0002\u03e6\u03dd\u0003", - "\u0002\u0002\u0002\u03e6\u03e7\u0003\u0002\u0002\u0002\u03e7\u00de\u0003", - "\u0002\u0002\u0002\u03e8\u03ea\u0005\t\u0005\u0002\u03e9\u03e8\u0003", - "\u0002\u0002\u0002\u03ea\u03eb\u0003\u0002\u0002\u0002\u03eb\u03e9\u0003", - "\u0002\u0002\u0002\u03eb\u03ec\u0003\u0002\u0002\u0002\u03ec\u03ed\u0003", - "\u0002\u0002\u0002\u03ed\u03f1\u00070\u0002\u0002\u03ee\u03f0\u0005", - "\t\u0005\u0002\u03ef\u03ee\u0003\u0002\u0002\u0002\u03f0\u03f3\u0003", - "\u0002\u0002\u0002\u03f1\u03ef\u0003\u0002\u0002\u0002\u03f1\u03f2\u0003", - "\u0002\u0002\u0002\u03f2\u03f5\u0003\u0002\u0002\u0002\u03f3\u03f1\u0003", - "\u0002\u0002\u0002\u03f4\u03f6\t\u000e\u0002\u0002\u03f5\u03f4\u0003", - "\u0002\u0002\u0002\u03f6\u03f7\u0003\u0002\u0002\u0002\u03f7\u03f5\u0003", - "\u0002\u0002\u0002\u03f7\u03f8\u0003\u0002\u0002\u0002\u03f8\u0406\u0003", - "\u0002\u0002\u0002\u03f9\u03fb\u0005\t\u0005\u0002\u03fa\u03f9\u0003", - "\u0002\u0002\u0002\u03fb\u03fc\u0003\u0002\u0002\u0002\u03fc\u03fa\u0003", - "\u0002\u0002\u0002\u03fc\u03fd\u0003\u0002\u0002\u0002\u03fd\u0401\u0003", - "\u0002\u0002\u0002\u03fe\u0400\t\u000e\u0002\u0002\u03ff\u03fe\u0003", - "\u0002\u0002\u0002\u0400\u0403\u0003\u0002\u0002\u0002\u0401\u03ff\u0003", - "\u0002\u0002\u0002\u0401\u0402\u0003\u0002\u0002\u0002\u0402\u0405\u0003", - "\u0002\u0002\u0002\u0403\u0401\u0003\u0002\u0002\u0002\u0404\u03fa\u0003", - "\u0002\u0002\u0002\u0405\u0408\u0003\u0002\u0002\u0002\u0406\u0404\u0003", - "\u0002\u0002\u0002\u0406\u0407\u0003\u0002\u0002\u0002\u0407\u0412\u0003", - "\u0002\u0002\u0002\u0408\u0406\u0003\u0002\u0002\u0002\u0409\u040b\t", - "\u0006\u0002\u0002\u040a\u040c\u0007/\u0002\u0002\u040b\u040a\u0003", - "\u0002\u0002\u0002\u040b\u040c\u0003\u0002\u0002\u0002\u040c\u040e\u0003", - "\u0002\u0002\u0002\u040d\u040f\u0005\t\u0005\u0002\u040e\u040d\u0003", - "\u0002\u0002\u0002\u040f\u0410\u0003\u0002\u0002\u0002\u0410\u040e\u0003", - "\u0002\u0002\u0002\u0410\u0411\u0003\u0002\u0002\u0002\u0411\u0413\u0003", - "\u0002\u0002\u0002\u0412\u0409\u0003\u0002\u0002\u0002\u0412\u0413\u0003", - "\u0002\u0002\u0002\u0413\u00e0\u0003\u0002\u0002\u0002\u0414\u0416\u0005", - "\t\u0005\u0002\u0415\u0414\u0003\u0002\u0002\u0002\u0416\u0417\u0003", - "\u0002\u0002\u0002\u0417\u0415\u0003\u0002\u0002\u0002\u0417\u0418\u0003", - "\u0002\u0002\u0002\u0418\u0419\u0003\u0002\u0002\u0002\u0419\u041b\u0007", - "0\u0002\u0002\u041a\u041c\u0005\t\u0005\u0002\u041b\u041a\u0003\u0002", - "\u0002\u0002\u041c\u041d\u0003\u0002\u0002\u0002\u041d\u041b\u0003\u0002", - "\u0002\u0002\u041d\u041e\u0003\u0002\u0002\u0002\u041e\u043e\u0003\u0002", - "\u0002\u0002\u041f\u0421\t\u0006\u0002\u0002\u0420\u0422\u0007/\u0002", - "\u0002\u0421\u0420\u0003\u0002\u0002\u0002\u0421\u0422\u0003\u0002\u0002", - "\u0002\u0422\u0426\u0003\u0002\u0002\u0002\u0423\u0425\u0005\t\u0005", - "\u0002\u0424\u0423\u0003\u0002\u0002\u0002\u0425\u0428\u0003\u0002\u0002", - "\u0002\u0426\u0424\u0003\u0002\u0002\u0002\u0426\u0427\u0003\u0002\u0002", - "\u0002\u0427\u042a\u0003\u0002\u0002\u0002\u0428\u0426\u0003\u0002\u0002", - "\u0002\u0429\u042b\u0005\u0007\u0004\u0002\u042a\u0429\u0003\u0002\u0002", - "\u0002\u042b\u042c\u0003\u0002\u0002\u0002\u042c\u042a\u0003\u0002\u0002", - "\u0002\u042c\u042d\u0003\u0002\u0002\u0002\u042d\u043b\u0003\u0002\u0002", - "\u0002\u042e\u0430\u0005\t\u0005\u0002\u042f\u042e\u0003\u0002\u0002", - "\u0002\u0430\u0431\u0003\u0002\u0002\u0002\u0431\u042f\u0003\u0002\u0002", - "\u0002\u0431\u0432\u0003\u0002\u0002\u0002\u0432\u0436\u0003\u0002\u0002", - "\u0002\u0433\u0435\u0005\u0007\u0004\u0002\u0434\u0433\u0003\u0002\u0002", - "\u0002\u0435\u0438\u0003\u0002\u0002\u0002\u0436\u0434\u0003\u0002\u0002", - "\u0002\u0436\u0437\u0003\u0002\u0002\u0002\u0437\u043a\u0003\u0002\u0002", - "\u0002\u0438\u0436\u0003\u0002\u0002\u0002\u0439\u042f\u0003\u0002\u0002", - "\u0002\u043a\u043d\u0003\u0002\u0002\u0002\u043b\u0439\u0003\u0002\u0002", - "\u0002\u043b\u043c\u0003\u0002\u0002\u0002\u043c\u043f\u0003\u0002\u0002", - "\u0002\u043d\u043b\u0003\u0002\u0002\u0002\u043e\u041f\u0003\u0002\u0002", - "\u0002\u043e\u043f\u0003\u0002\u0002\u0002\u043f\u00e2\u0003\u0002\u0002", - "\u0002\u0440\u0441\u00071\u0002\u0002\u0441\u0442\u0007,\u0002\u0002", - "\u0442\u0444\u0003\u0002\u0002\u0002\u0443\u0445\n\t\u0002\u0002\u0444", - "\u0443\u0003\u0002\u0002\u0002\u0444\u0445\u0003\u0002\u0002\u0002\u0445", - "\u00e4\u0003\u0002\u0002\u0002\u0446\u0447\u00071\u0002\u0002\u0447", - "\u0448\u0007,\u0002\u0002\u0448\u0449\u0007,\u0002\u0002\u0449\u044a", - "\u0007,\u0002\u0002\u044a\u044e\u0003\u0002\u0002\u0002\u044b\u044d", - "\u0007,\u0002\u0002\u044c\u044b\u0003\u0002\u0002\u0002\u044d\u0450", - "\u0003\u0002\u0002\u0002\u044e\u044f\u0003\u0002\u0002\u0002\u044e\u044c", - "\u0003\u0002\u0002\u0002\u044f\u00e6\u0003\u0002\u0002\u0002\u0450\u044e", - "\u0003\u0002\u0002\u0002\u0451\u0452\u00071\u0002\u0002\u0452\u0453", - "\u0007,\u0002\u0002\u0453\u0454\u0007,\u0002\u0002\u0454\u0456\u0003", - "\u0002\u0002\u0002\u0455\u0457\n\t\u0002\u0002\u0456\u0455\u0003\u0002", - "\u0002\u0002\u0456\u0457\u0003\u0002\u0002\u0002\u0457\u00e8\u0003\u0002", - "\u0002\u0002X\u0002\u025a\u025c\u0266\u0268\u026f\u0274\u0279\u027b", - "\u0281\u0286\u0288\u028f\u0291\u0297\u029f\u02a5\u02aa\u02b2\u02b7\u02bb", - "\u02c0\u02c6\u02ca\u02cf\u02d1\u02d6\u02d8\u02e7\u02ed\u02fc\u030c\u0313", - "\u0323\u0332\u033a\u0346\u034e\u0358\u035e\u0363\u0369\u036f\u0374\u0378", - "\u037e\u0387\u038d\u0392\u0399\u039f\u03a4\u03a9\u03af\u03b5\u03ba\u03c0", - "\u03c5\u03ca\u03cf\u03d4\u03db\u03df\u03e4\u03e6\u03eb\u03f1\u03f7\u03fc", - "\u0401\u0406\u040b\u0410\u0412\u0417\u041d\u0421\u0426\u042c\u0431\u0436", - "\u043b\u043e\u0444\u044e\u0456\u0004\b\u0002\u0002\u0002\u0004\u0002"].join(""); +const serializedATN = [4,0,110,1128,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3, +2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12, +7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7, +19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26, +2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2, +34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41, +7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7, +48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55, +2,56,7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2, +63,7,63,2,64,7,64,2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70, +7,70,2,71,7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7, +77,2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84, +2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,7,91,2, +92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2,98,7,98,2,99, +7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,103,2,104,7,104,2,105,7, +105,2,106,7,106,2,107,7,107,2,108,7,108,2,109,7,109,2,110,7,110,2,111,7, +111,2,112,7,112,2,113,7,113,2,114,7,114,2,115,7,115,2,116,7,116,2,117,7, +117,1,0,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7, +1,8,1,8,1,9,1,9,1,10,1,10,1,11,1,11,1,12,1,12,1,13,1,13,1,14,1,14,1,15,1, +15,1,16,1,16,1,17,1,17,1,18,1,18,1,19,1,19,1,20,1,20,1,21,1,21,1,22,1,22, +1,23,1,23,1,24,1,24,1,25,1,25,1,26,1,26,1,27,1,27,1,28,1,28,1,29,1,29,1, +30,1,30,1,31,1,31,1,32,1,32,1,33,1,33,1,33,1,34,1,34,1,34,1,35,1,35,1,35, +1,36,1,36,1,36,1,37,1,37,1,37,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,1, +40,1,40,1,40,1,41,1,41,1,41,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44, +1,44,1,44,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1, +47,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50, +1,50,1,50,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1, +53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,54,1,54, +1,54,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1, +56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,58,1,58, +1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1, +60,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63, +1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, +66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68, +1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1, +70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,73, +1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1, +74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,77,1,77,1,77, +1,77,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1, +80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81, +1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1, +82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83, +1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1, +87,5,87,619,8,87,10,87,12,87,622,9,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88, +5,88,631,8,88,10,88,12,88,634,9,88,1,89,1,89,4,89,638,8,89,11,89,12,89,639, +1,90,1,90,1,90,3,90,645,8,90,1,90,1,90,1,90,5,90,650,8,90,10,90,12,90,653, +9,90,1,91,1,91,1,91,3,91,658,8,91,1,91,1,91,1,91,5,91,663,8,91,10,91,12, +91,666,9,91,1,92,1,92,1,92,1,92,5,92,672,8,92,10,92,12,92,675,9,92,1,93, +4,93,678,8,93,11,93,12,93,679,1,94,1,94,1,94,1,94,4,94,686,8,94,11,94,12, +94,687,1,94,1,94,5,94,692,8,94,10,94,12,94,695,9,94,1,94,1,94,3,94,699,8, +94,1,95,1,95,1,95,1,95,4,95,705,8,95,11,95,12,95,706,1,95,4,95,710,8,95, +11,95,12,95,711,1,95,1,95,3,95,716,8,95,1,96,4,96,719,8,96,11,96,12,96,720, +1,96,1,96,4,96,725,8,96,11,96,12,96,726,1,96,1,96,3,96,731,8,96,1,96,4,96, +734,8,96,11,96,12,96,735,3,96,738,8,96,1,97,1,97,1,97,5,97,743,8,97,10,97, +12,97,746,9,97,1,97,1,97,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,99,1, +99,3,99,760,8,99,1,100,1,100,5,100,764,8,100,10,100,12,100,767,9,100,1,100, +1,100,1,100,1,100,1,100,1,101,1,101,1,101,1,101,1,101,5,101,779,8,101,10, +101,12,101,782,9,101,1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102, +1,102,1,102,5,102,795,8,102,10,102,12,102,798,9,102,1,102,1,102,5,102,802, +8,102,10,102,12,102,805,9,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103, +1,103,1,103,1,103,4,103,817,8,103,11,103,12,103,818,1,103,1,103,1,103,1, +103,1,103,1,104,1,104,1,104,1,104,1,104,1,104,5,104,832,8,104,10,104,12, +104,835,9,104,1,104,1,104,1,104,1,104,1,104,1,105,3,105,843,8,105,1,105, +1,105,1,105,1,105,1,106,1,106,1,106,1,106,5,106,853,8,106,10,106,12,106, +856,9,106,1,106,1,106,1,107,4,107,861,8,107,11,107,12,107,862,1,107,1,107, +1,108,1,108,1,108,1,108,5,108,871,8,108,10,108,12,108,874,9,108,1,108,4, +108,877,8,108,11,108,12,108,878,1,108,5,108,882,8,108,10,108,12,108,885, +9,108,1,108,5,108,888,8,108,10,108,12,108,891,9,108,1,108,4,108,894,8,108, +11,108,12,108,895,1,108,5,108,899,8,108,10,108,12,108,902,9,108,1,108,3, +108,905,8,108,1,109,1,109,5,109,909,8,109,10,109,12,109,912,9,109,1,110, +1,110,1,110,1,110,5,110,918,8,110,10,110,12,110,921,9,110,1,110,4,110,924, +8,110,11,110,12,110,925,1,110,5,110,929,8,110,10,110,12,110,932,9,110,1, +110,1,110,5,110,936,8,110,10,110,12,110,939,9,110,1,110,4,110,942,8,110, +11,110,12,110,943,1,110,5,110,947,8,110,10,110,12,110,950,9,110,1,110,1, +110,3,110,954,8,110,1,111,1,111,5,111,958,8,111,10,111,12,111,961,9,111, +1,111,4,111,964,8,111,11,111,12,111,965,1,111,5,111,969,8,111,10,111,12, +111,972,9,111,1,112,4,112,975,8,112,11,112,12,112,976,1,112,4,112,980,8, +112,11,112,12,112,981,1,112,4,112,985,8,112,11,112,12,112,986,1,112,5,112, +990,8,112,10,112,12,112,993,9,112,5,112,995,8,112,10,112,12,112,998,9,112, +1,112,1,112,4,112,1002,8,112,11,112,12,112,1003,1,112,1,112,3,112,1008,8, +112,1,112,4,112,1011,8,112,11,112,12,112,1012,3,112,1015,8,112,1,113,4,113, +1018,8,113,11,113,12,113,1019,1,113,1,113,5,113,1024,8,113,10,113,12,113, +1027,9,113,1,113,4,113,1030,8,113,11,113,12,113,1031,1,113,4,113,1035,8, +113,11,113,12,113,1036,1,113,5,113,1040,8,113,10,113,12,113,1043,9,113,5, +113,1045,8,113,10,113,12,113,1048,9,113,1,113,1,113,3,113,1052,8,113,1,113, +4,113,1055,8,113,11,113,12,113,1056,3,113,1059,8,113,1,114,4,114,1062,8, +114,11,114,12,114,1063,1,114,1,114,4,114,1068,8,114,11,114,12,114,1069,1, +114,1,114,3,114,1074,8,114,1,114,5,114,1077,8,114,10,114,12,114,1080,9,114, +1,114,4,114,1083,8,114,11,114,12,114,1084,1,114,4,114,1088,8,114,11,114, +12,114,1089,1,114,5,114,1093,8,114,10,114,12,114,1096,9,114,5,114,1098,8, +114,10,114,12,114,1101,9,114,3,114,1103,8,114,1,115,1,115,1,115,1,115,3, +115,1109,8,115,1,116,1,116,1,116,1,116,1,116,1,116,5,116,1117,8,116,10,116, +12,116,1120,9,116,1,117,1,117,1,117,1,117,1,117,3,117,1127,8,117,5,780,803, +818,833,1118,0,118,1,0,3,0,5,0,7,0,9,0,11,0,13,0,15,0,17,1,19,2,21,3,23, +4,25,5,27,6,29,7,31,8,33,9,35,10,37,11,39,12,41,13,43,14,45,15,47,16,49, +17,51,18,53,19,55,20,57,21,59,22,61,23,63,24,65,25,67,26,69,27,71,28,73, +29,75,30,77,31,79,32,81,33,83,34,85,35,87,36,89,37,91,38,93,39,95,40,97, +41,99,42,101,43,103,44,105,45,107,46,109,47,111,48,113,49,115,50,117,51, +119,52,121,53,123,54,125,55,127,56,129,57,131,58,133,59,135,60,137,61,139, +62,141,63,143,64,145,65,147,66,149,67,151,68,153,69,155,70,157,71,159,72, +161,73,163,74,165,75,167,76,169,77,171,78,173,79,175,80,177,81,179,82,181, +83,183,84,185,85,187,86,189,87,191,88,193,89,195,90,197,91,199,92,201,93, +203,94,205,95,207,96,209,97,211,98,213,99,215,100,217,101,219,102,221,103, +223,104,225,105,227,106,229,107,231,108,233,109,235,110,1,0,13,2,0,65,90, +97,122,3,0,48,57,65,70,97,102,5,0,39,39,92,92,110,110,114,114,116,116,1, +0,34,34,2,0,69,69,101,101,2,0,39,39,92,92,2,0,42,42,47,47,3,0,9,9,32,32, +65279,65279,1,0,42,42,2,0,10,10,13,13,2,0,71,90,103,122,3,0,48,57,65,90, +97,122,4,0,65,68,70,90,97,100,102,122,1208,0,17,1,0,0,0,0,19,1,0,0,0,0,21, +1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0, +0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1, +0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0, +55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0, +0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77, +1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0, +0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1, +0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0, +0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0, +0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0, +0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0, +141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151, +1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1, +0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0, +0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0, +0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0, +0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0, +203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213, +1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1, +0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0, +0,0,0,235,1,0,0,0,1,237,1,0,0,0,3,240,1,0,0,0,5,242,1,0,0,0,7,244,1,0,0, +0,9,246,1,0,0,0,11,248,1,0,0,0,13,250,1,0,0,0,15,252,1,0,0,0,17,254,1,0, +0,0,19,256,1,0,0,0,21,258,1,0,0,0,23,260,1,0,0,0,25,262,1,0,0,0,27,264,1, +0,0,0,29,266,1,0,0,0,31,268,1,0,0,0,33,270,1,0,0,0,35,272,1,0,0,0,37,274, +1,0,0,0,39,276,1,0,0,0,41,278,1,0,0,0,43,280,1,0,0,0,45,282,1,0,0,0,47,284, +1,0,0,0,49,286,1,0,0,0,51,288,1,0,0,0,53,290,1,0,0,0,55,292,1,0,0,0,57,294, +1,0,0,0,59,296,1,0,0,0,61,298,1,0,0,0,63,300,1,0,0,0,65,302,1,0,0,0,67,304, +1,0,0,0,69,307,1,0,0,0,71,310,1,0,0,0,73,313,1,0,0,0,75,316,1,0,0,0,77,319, +1,0,0,0,79,322,1,0,0,0,81,326,1,0,0,0,83,330,1,0,0,0,85,333,1,0,0,0,87,336, +1,0,0,0,89,340,1,0,0,0,91,344,1,0,0,0,93,348,1,0,0,0,95,353,1,0,0,0,97,357, +1,0,0,0,99,362,1,0,0,0,101,368,1,0,0,0,103,373,1,0,0,0,105,377,1,0,0,0,107, +385,1,0,0,0,109,393,1,0,0,0,111,401,1,0,0,0,113,408,1,0,0,0,115,420,1,0, +0,0,117,427,1,0,0,0,119,432,1,0,0,0,121,440,1,0,0,0,123,444,1,0,0,0,125, +450,1,0,0,0,127,455,1,0,0,0,129,461,1,0,0,0,131,465,1,0,0,0,133,472,1,0, +0,0,135,478,1,0,0,0,137,482,1,0,0,0,139,490,1,0,0,0,141,499,1,0,0,0,143, +503,1,0,0,0,145,510,1,0,0,0,147,515,1,0,0,0,149,522,1,0,0,0,151,531,1,0, +0,0,153,539,1,0,0,0,155,542,1,0,0,0,157,546,1,0,0,0,159,551,1,0,0,0,161, +557,1,0,0,0,163,567,1,0,0,0,165,580,1,0,0,0,167,590,1,0,0,0,169,603,1,0, +0,0,171,606,1,0,0,0,173,610,1,0,0,0,175,615,1,0,0,0,177,625,1,0,0,0,179, +635,1,0,0,0,181,641,1,0,0,0,183,654,1,0,0,0,185,667,1,0,0,0,187,677,1,0, +0,0,189,698,1,0,0,0,191,715,1,0,0,0,193,718,1,0,0,0,195,739,1,0,0,0,197, +749,1,0,0,0,199,759,1,0,0,0,201,761,1,0,0,0,203,773,1,0,0,0,205,788,1,0, +0,0,207,811,1,0,0,0,209,825,1,0,0,0,211,842,1,0,0,0,213,848,1,0,0,0,215, +860,1,0,0,0,217,904,1,0,0,0,219,906,1,0,0,0,221,953,1,0,0,0,223,955,1,0, +0,0,225,974,1,0,0,0,227,1017,1,0,0,0,229,1061,1,0,0,0,231,1104,1,0,0,0,233, +1110,1,0,0,0,235,1121,1,0,0,0,237,238,5,92,0,0,238,239,5,34,0,0,239,2,1, +0,0,0,240,241,2,97,122,0,241,4,1,0,0,0,242,243,7,0,0,0,243,6,1,0,0,0,244, +245,2,48,57,0,245,8,1,0,0,0,246,247,7,1,0,0,247,10,1,0,0,0,248,249,2,48, +55,0,249,12,1,0,0,0,250,251,2,48,49,0,251,14,1,0,0,0,252,253,7,2,0,0,253, +16,1,0,0,0,254,255,5,40,0,0,255,18,1,0,0,0,256,257,5,41,0,0,257,20,1,0,0, +0,258,259,5,61,0,0,259,22,1,0,0,0,260,261,5,34,0,0,261,24,1,0,0,0,262,263, +5,60,0,0,263,26,1,0,0,0,264,265,5,62,0,0,265,28,1,0,0,0,266,267,5,46,0,0, +267,30,1,0,0,0,268,269,5,44,0,0,269,32,1,0,0,0,270,271,5,59,0,0,271,34,1, +0,0,0,272,273,5,58,0,0,273,36,1,0,0,0,274,275,5,123,0,0,275,38,1,0,0,0,276, +277,5,125,0,0,277,40,1,0,0,0,278,279,5,91,0,0,279,42,1,0,0,0,280,281,5,93, +0,0,281,44,1,0,0,0,282,283,5,42,0,0,283,46,1,0,0,0,284,285,5,36,0,0,285, +48,1,0,0,0,286,287,5,38,0,0,287,50,1,0,0,0,288,289,5,126,0,0,289,52,1,0, +0,0,290,291,5,33,0,0,291,54,1,0,0,0,292,293,5,45,0,0,293,56,1,0,0,0,294, +295,5,37,0,0,295,58,1,0,0,0,296,297,5,43,0,0,297,60,1,0,0,0,298,299,5,47, +0,0,299,62,1,0,0,0,300,301,5,94,0,0,301,64,1,0,0,0,302,303,5,124,0,0,303, +66,1,0,0,0,304,305,5,58,0,0,305,306,5,61,0,0,306,68,1,0,0,0,307,308,5,33, +0,0,308,309,5,61,0,0,309,70,1,0,0,0,310,311,5,60,0,0,311,312,5,62,0,0,312, +72,1,0,0,0,313,314,5,60,0,0,314,315,5,61,0,0,315,74,1,0,0,0,316,317,5,61, +0,0,317,318,5,62,0,0,318,76,1,0,0,0,319,320,5,62,0,0,320,321,5,61,0,0,321, +78,1,0,0,0,322,323,5,61,0,0,323,324,5,61,0,0,324,325,5,61,0,0,325,80,1,0, +0,0,326,327,5,33,0,0,327,328,5,33,0,0,328,329,5,61,0,0,329,82,1,0,0,0,330, +331,5,73,0,0,331,332,5,78,0,0,332,84,1,0,0,0,333,334,5,79,0,0,334,335,5, +82,0,0,335,86,1,0,0,0,336,337,5,78,0,0,337,338,5,79,0,0,338,339,5,84,0,0, +339,88,1,0,0,0,340,341,5,65,0,0,341,342,5,78,0,0,342,343,5,68,0,0,343,90, +1,0,0,0,344,345,5,69,0,0,345,346,5,82,0,0,346,347,5,65,0,0,347,92,1,0,0, +0,348,349,5,78,0,0,349,350,5,85,0,0,350,351,5,76,0,0,351,352,5,76,0,0,352, +94,1,0,0,0,353,354,5,68,0,0,354,355,5,73,0,0,355,356,5,86,0,0,356,96,1,0, +0,0,357,358,5,84,0,0,358,359,5,82,0,0,359,360,5,85,0,0,360,361,5,69,0,0, +361,98,1,0,0,0,362,363,5,70,0,0,363,364,5,65,0,0,364,365,5,76,0,0,365,366, +5,83,0,0,366,367,5,69,0,0,367,100,1,0,0,0,368,369,5,76,0,0,369,370,5,73, +0,0,370,371,5,78,0,0,371,372,5,75,0,0,372,102,1,0,0,0,373,374,5,69,0,0,374, +375,5,67,0,0,375,376,5,76,0,0,376,104,1,0,0,0,377,378,5,82,0,0,378,379,5, +69,0,0,379,380,5,84,0,0,380,381,5,85,0,0,381,382,5,82,0,0,382,383,5,78,0, +0,383,384,5,83,0,0,384,106,1,0,0,0,385,386,5,35,0,0,386,387,5,79,0,0,387, +388,5,80,0,0,388,389,5,84,0,0,389,390,5,73,0,0,390,391,5,79,0,0,391,392, +5,78,0,0,392,108,1,0,0,0,393,394,5,80,0,0,394,395,5,69,0,0,395,396,5,82, +0,0,396,397,5,77,0,0,397,398,5,73,0,0,398,399,5,84,0,0,399,400,5,83,0,0, +400,110,1,0,0,0,401,402,5,69,0,0,402,403,5,78,0,0,403,404,5,84,0,0,404,405, +5,73,0,0,405,406,5,84,0,0,406,407,5,89,0,0,407,112,1,0,0,0,408,409,5,65, +0,0,409,410,5,83,0,0,410,411,5,83,0,0,411,412,5,79,0,0,412,413,5,67,0,0, +413,414,5,73,0,0,414,415,5,65,0,0,415,416,5,84,0,0,416,417,5,73,0,0,417, +418,5,79,0,0,418,419,5,78,0,0,419,114,1,0,0,0,420,421,5,73,0,0,421,422,5, +77,0,0,422,423,5,80,0,0,423,424,5,79,0,0,424,425,5,82,0,0,425,426,5,84,0, +0,426,116,1,0,0,0,427,428,5,70,0,0,428,429,5,82,0,0,429,430,5,79,0,0,430, +431,5,77,0,0,431,118,1,0,0,0,432,433,5,80,0,0,433,434,5,65,0,0,434,435,5, +67,0,0,435,436,5,75,0,0,436,437,5,65,0,0,437,438,5,71,0,0,438,439,5,69,0, +0,439,120,1,0,0,0,440,441,5,69,0,0,441,442,5,78,0,0,442,443,5,68,0,0,443, +122,1,0,0,0,444,445,5,83,0,0,445,446,5,72,0,0,446,447,5,69,0,0,447,448,5, +76,0,0,448,449,5,76,0,0,449,124,1,0,0,0,450,451,5,70,0,0,451,452,5,76,0, +0,452,453,5,65,0,0,453,454,5,84,0,0,454,126,1,0,0,0,455,456,5,81,0,0,456, +457,5,85,0,0,457,458,5,69,0,0,458,459,5,82,0,0,459,460,5,89,0,0,460,128, +1,0,0,0,461,462,5,85,0,0,462,463,5,73,0,0,463,464,5,68,0,0,464,130,1,0,0, +0,465,466,5,70,0,0,466,467,5,79,0,0,467,468,5,82,0,0,468,469,5,77,0,0,469, +470,5,65,0,0,470,471,5,84,0,0,471,132,1,0,0,0,472,473,5,77,0,0,473,474,5, +79,0,0,474,475,5,68,0,0,475,476,5,69,0,0,476,477,5,76,0,0,477,134,1,0,0, +0,478,479,5,85,0,0,479,480,5,83,0,0,480,481,5,69,0,0,481,136,1,0,0,0,482, +483,5,75,0,0,483,484,5,69,0,0,484,485,5,76,0,0,485,486,5,66,0,0,486,487, +5,65,0,0,487,488,5,83,0,0,488,489,5,69,0,0,489,138,1,0,0,0,490,491,5,75, +0,0,491,492,5,69,0,0,492,493,5,76,0,0,493,494,5,81,0,0,494,495,5,85,0,0, +495,496,5,69,0,0,496,497,5,82,0,0,497,498,5,89,0,0,498,140,1,0,0,0,499,500, +5,70,0,0,500,501,5,68,0,0,501,502,5,67,0,0,502,142,1,0,0,0,503,504,5,70, +0,0,504,505,5,73,0,0,505,506,5,76,0,0,506,507,5,84,0,0,507,508,5,69,0,0, +508,509,5,82,0,0,509,144,1,0,0,0,510,511,5,72,0,0,511,512,5,73,0,0,512,513, +5,78,0,0,513,514,5,84,0,0,514,146,1,0,0,0,515,516,5,71,0,0,516,517,5,76, +0,0,517,518,5,79,0,0,518,519,5,66,0,0,519,520,5,65,0,0,520,521,5,76,0,0, +521,148,1,0,0,0,522,523,5,70,0,0,523,524,5,85,0,0,524,525,5,78,0,0,525,526, +5,67,0,0,526,527,5,84,0,0,527,528,5,73,0,0,528,529,5,79,0,0,529,530,5,78, +0,0,530,150,1,0,0,0,531,532,5,68,0,0,532,533,5,65,0,0,533,534,5,84,0,0,534, +535,5,65,0,0,535,536,5,83,0,0,536,537,5,69,0,0,537,538,5,84,0,0,538,152, +1,0,0,0,539,540,5,79,0,0,540,541,5,70,0,0,541,154,1,0,0,0,542,543,5,83,0, +0,543,544,5,69,0,0,544,545,5,84,0,0,545,156,1,0,0,0,546,547,5,65,0,0,547, +548,5,83,0,0,548,549,5,79,0,0,549,550,5,70,0,0,550,158,1,0,0,0,551,552,5, +85,0,0,552,553,5,83,0,0,553,554,5,73,0,0,554,555,5,78,0,0,555,556,5,71,0, +0,556,160,1,0,0,0,557,558,5,86,0,0,558,559,5,73,0,0,559,560,5,83,0,0,560, +561,5,85,0,0,561,562,5,65,0,0,562,563,5,76,0,0,563,564,5,73,0,0,564,565, +5,90,0,0,565,566,5,69,0,0,566,162,1,0,0,0,567,568,5,69,0,0,568,569,5,78, +0,0,569,570,5,68,0,0,570,571,5,86,0,0,571,572,5,73,0,0,572,573,5,83,0,0, +573,574,5,85,0,0,574,575,5,65,0,0,575,576,5,76,0,0,576,577,5,73,0,0,577, +578,5,90,0,0,578,579,5,69,0,0,579,164,1,0,0,0,580,581,5,82,0,0,581,582,5, +69,0,0,582,583,5,83,0,0,583,584,5,79,0,0,584,585,5,85,0,0,585,586,5,82,0, +0,586,587,5,67,0,0,587,588,5,69,0,0,588,589,5,83,0,0,589,166,1,0,0,0,590, +591,5,69,0,0,591,592,5,78,0,0,592,593,5,68,0,0,593,594,5,82,0,0,594,595, +5,69,0,0,595,596,5,83,0,0,596,597,5,79,0,0,597,598,5,85,0,0,598,599,5,82, +0,0,599,600,5,67,0,0,600,601,5,69,0,0,601,602,5,83,0,0,602,168,1,0,0,0,603, +604,5,65,0,0,604,605,5,83,0,0,605,170,1,0,0,0,606,607,5,83,0,0,607,608,5, +80,0,0,608,609,5,67,0,0,609,172,1,0,0,0,610,611,5,76,0,0,611,612,5,73,0, +0,612,613,5,75,0,0,613,614,5,69,0,0,614,174,1,0,0,0,615,620,5,34,0,0,616, +619,3,1,0,0,617,619,8,3,0,0,618,616,1,0,0,0,618,617,1,0,0,0,619,622,1,0, +0,0,620,618,1,0,0,0,620,621,1,0,0,0,621,623,1,0,0,0,622,620,1,0,0,0,623, +624,5,34,0,0,624,176,1,0,0,0,625,626,5,95,0,0,626,632,3,5,2,0,627,631,3, +5,2,0,628,631,3,7,3,0,629,631,5,95,0,0,630,627,1,0,0,0,630,628,1,0,0,0,630, +629,1,0,0,0,631,634,1,0,0,0,632,630,1,0,0,0,632,633,1,0,0,0,633,178,1,0, +0,0,634,632,1,0,0,0,635,637,5,95,0,0,636,638,3,7,3,0,637,636,1,0,0,0,638, +639,1,0,0,0,639,637,1,0,0,0,639,640,1,0,0,0,640,180,1,0,0,0,641,644,5,35, +0,0,642,645,3,5,2,0,643,645,3,7,3,0,644,642,1,0,0,0,644,643,1,0,0,0,645, +651,1,0,0,0,646,650,3,5,2,0,647,650,3,7,3,0,648,650,5,95,0,0,649,646,1,0, +0,0,649,647,1,0,0,0,649,648,1,0,0,0,650,653,1,0,0,0,651,649,1,0,0,0,651, +652,1,0,0,0,652,182,1,0,0,0,653,651,1,0,0,0,654,657,5,64,0,0,655,658,3,5, +2,0,656,658,3,7,3,0,657,655,1,0,0,0,657,656,1,0,0,0,658,664,1,0,0,0,659, +663,3,5,2,0,660,663,3,7,3,0,661,663,5,95,0,0,662,659,1,0,0,0,662,660,1,0, +0,0,662,661,1,0,0,0,663,666,1,0,0,0,664,662,1,0,0,0,664,665,1,0,0,0,665, +184,1,0,0,0,666,664,1,0,0,0,667,673,3,5,2,0,668,672,3,5,2,0,669,672,3,7, +3,0,670,672,5,95,0,0,671,668,1,0,0,0,671,669,1,0,0,0,671,670,1,0,0,0,672, +675,1,0,0,0,673,671,1,0,0,0,673,674,1,0,0,0,674,186,1,0,0,0,675,673,1,0, +0,0,676,678,3,7,3,0,677,676,1,0,0,0,678,679,1,0,0,0,679,677,1,0,0,0,679, +680,1,0,0,0,680,188,1,0,0,0,681,682,5,48,0,0,682,683,5,120,0,0,683,685,1, +0,0,0,684,686,3,9,4,0,685,684,1,0,0,0,686,687,1,0,0,0,687,685,1,0,0,0,687, +688,1,0,0,0,688,699,1,0,0,0,689,693,3,7,3,0,690,692,3,9,4,0,691,690,1,0, +0,0,692,695,1,0,0,0,693,691,1,0,0,0,693,694,1,0,0,0,694,696,1,0,0,0,695, +693,1,0,0,0,696,697,5,120,0,0,697,699,1,0,0,0,698,681,1,0,0,0,698,689,1, +0,0,0,699,190,1,0,0,0,700,701,5,48,0,0,701,702,5,98,0,0,702,704,1,0,0,0, +703,705,3,13,6,0,704,703,1,0,0,0,705,706,1,0,0,0,706,704,1,0,0,0,706,707, +1,0,0,0,707,716,1,0,0,0,708,710,3,13,6,0,709,708,1,0,0,0,710,711,1,0,0,0, +711,709,1,0,0,0,711,712,1,0,0,0,712,713,1,0,0,0,713,714,5,98,0,0,714,716, +1,0,0,0,715,700,1,0,0,0,715,709,1,0,0,0,716,192,1,0,0,0,717,719,3,7,3,0, +718,717,1,0,0,0,719,720,1,0,0,0,720,718,1,0,0,0,720,721,1,0,0,0,721,722, +1,0,0,0,722,724,5,46,0,0,723,725,3,7,3,0,724,723,1,0,0,0,725,726,1,0,0,0, +726,724,1,0,0,0,726,727,1,0,0,0,727,737,1,0,0,0,728,730,7,4,0,0,729,731, +5,45,0,0,730,729,1,0,0,0,730,731,1,0,0,0,731,733,1,0,0,0,732,734,3,7,3,0, +733,732,1,0,0,0,734,735,1,0,0,0,735,733,1,0,0,0,735,736,1,0,0,0,736,738, +1,0,0,0,737,728,1,0,0,0,737,738,1,0,0,0,738,194,1,0,0,0,739,744,5,39,0,0, +740,743,8,5,0,0,741,743,3,199,99,0,742,740,1,0,0,0,742,741,1,0,0,0,743,746, +1,0,0,0,744,742,1,0,0,0,744,745,1,0,0,0,745,747,1,0,0,0,746,744,1,0,0,0, +747,748,5,39,0,0,748,196,1,0,0,0,749,750,3,5,2,0,750,751,3,195,97,0,751, +198,1,0,0,0,752,753,5,92,0,0,753,754,3,11,5,0,754,755,3,11,5,0,755,756,3, +11,5,0,756,760,1,0,0,0,757,758,5,92,0,0,758,760,3,15,7,0,759,752,1,0,0,0, +759,757,1,0,0,0,760,200,1,0,0,0,761,765,5,47,0,0,762,764,5,42,0,0,763,762, +1,0,0,0,764,767,1,0,0,0,765,763,1,0,0,0,765,766,1,0,0,0,766,768,1,0,0,0, +767,765,1,0,0,0,768,769,5,42,0,0,769,770,5,47,0,0,770,771,1,0,0,0,771,772, +6,100,0,0,772,202,1,0,0,0,773,774,5,47,0,0,774,775,5,42,0,0,775,776,1,0, +0,0,776,780,8,6,0,0,777,779,9,0,0,0,778,777,1,0,0,0,779,782,1,0,0,0,780, +781,1,0,0,0,780,778,1,0,0,0,781,783,1,0,0,0,782,780,1,0,0,0,783,784,5,42, +0,0,784,785,5,47,0,0,785,786,1,0,0,0,786,787,6,101,0,0,787,204,1,0,0,0,788, +789,5,47,0,0,789,790,5,42,0,0,790,791,5,42,0,0,791,792,5,42,0,0,792,796, +1,0,0,0,793,795,5,42,0,0,794,793,1,0,0,0,795,798,1,0,0,0,796,794,1,0,0,0, +796,797,1,0,0,0,797,799,1,0,0,0,798,796,1,0,0,0,799,803,8,6,0,0,800,802, +9,0,0,0,801,800,1,0,0,0,802,805,1,0,0,0,803,804,1,0,0,0,803,801,1,0,0,0, +804,806,1,0,0,0,805,803,1,0,0,0,806,807,5,42,0,0,807,808,5,47,0,0,808,809, +1,0,0,0,809,810,6,102,0,0,810,206,1,0,0,0,811,812,5,47,0,0,812,813,5,42, +0,0,813,814,5,42,0,0,814,816,1,0,0,0,815,817,7,7,0,0,816,815,1,0,0,0,817, +818,1,0,0,0,818,819,1,0,0,0,818,816,1,0,0,0,819,820,1,0,0,0,820,821,5,42, +0,0,821,822,5,47,0,0,822,823,1,0,0,0,823,824,6,103,0,0,824,208,1,0,0,0,825, +826,5,47,0,0,826,827,5,42,0,0,827,828,5,42,0,0,828,829,1,0,0,0,829,833,8, +8,0,0,830,832,9,0,0,0,831,830,1,0,0,0,832,835,1,0,0,0,833,834,1,0,0,0,833, +831,1,0,0,0,834,836,1,0,0,0,835,833,1,0,0,0,836,837,5,42,0,0,837,838,5,47, +0,0,838,839,1,0,0,0,839,840,6,104,1,0,840,210,1,0,0,0,841,843,5,13,0,0,842, +841,1,0,0,0,842,843,1,0,0,0,843,844,1,0,0,0,844,845,5,10,0,0,845,846,1,0, +0,0,846,847,6,105,0,0,847,212,1,0,0,0,848,849,5,47,0,0,849,850,5,47,0,0, +850,854,1,0,0,0,851,853,8,9,0,0,852,851,1,0,0,0,853,856,1,0,0,0,854,852, +1,0,0,0,854,855,1,0,0,0,855,857,1,0,0,0,856,854,1,0,0,0,857,858,6,106,0, +0,858,214,1,0,0,0,859,861,7,7,0,0,860,859,1,0,0,0,861,862,1,0,0,0,862,860, +1,0,0,0,862,863,1,0,0,0,863,864,1,0,0,0,864,865,6,107,0,0,865,216,1,0,0, +0,866,867,5,48,0,0,867,868,5,98,0,0,868,872,1,0,0,0,869,871,3,7,3,0,870, +869,1,0,0,0,871,874,1,0,0,0,872,870,1,0,0,0,872,873,1,0,0,0,873,876,1,0, +0,0,874,872,1,0,0,0,875,877,2,50,57,0,876,875,1,0,0,0,877,878,1,0,0,0,878, +876,1,0,0,0,878,879,1,0,0,0,879,883,1,0,0,0,880,882,3,7,3,0,881,880,1,0, +0,0,882,885,1,0,0,0,883,881,1,0,0,0,883,884,1,0,0,0,884,905,1,0,0,0,885, +883,1,0,0,0,886,888,3,7,3,0,887,886,1,0,0,0,888,891,1,0,0,0,889,887,1,0, +0,0,889,890,1,0,0,0,890,893,1,0,0,0,891,889,1,0,0,0,892,894,2,50,57,0,893, +892,1,0,0,0,894,895,1,0,0,0,895,893,1,0,0,0,895,896,1,0,0,0,896,900,1,0, +0,0,897,899,3,7,3,0,898,897,1,0,0,0,899,902,1,0,0,0,900,898,1,0,0,0,900, +901,1,0,0,0,901,903,1,0,0,0,902,900,1,0,0,0,903,905,5,98,0,0,904,866,1,0, +0,0,904,889,1,0,0,0,905,218,1,0,0,0,906,910,3,7,3,0,907,909,3,9,4,0,908, +907,1,0,0,0,909,912,1,0,0,0,910,908,1,0,0,0,910,911,1,0,0,0,911,220,1,0, +0,0,912,910,1,0,0,0,913,914,5,48,0,0,914,915,5,120,0,0,915,919,1,0,0,0,916, +918,3,9,4,0,917,916,1,0,0,0,918,921,1,0,0,0,919,917,1,0,0,0,919,920,1,0, +0,0,920,923,1,0,0,0,921,919,1,0,0,0,922,924,7,10,0,0,923,922,1,0,0,0,924, +925,1,0,0,0,925,923,1,0,0,0,925,926,1,0,0,0,926,930,1,0,0,0,927,929,7,11, +0,0,928,927,1,0,0,0,929,932,1,0,0,0,930,928,1,0,0,0,930,931,1,0,0,0,931, +954,1,0,0,0,932,930,1,0,0,0,933,937,3,7,3,0,934,936,3,9,4,0,935,934,1,0, +0,0,936,939,1,0,0,0,937,935,1,0,0,0,937,938,1,0,0,0,938,941,1,0,0,0,939, +937,1,0,0,0,940,942,7,10,0,0,941,940,1,0,0,0,942,943,1,0,0,0,943,941,1,0, +0,0,943,944,1,0,0,0,944,948,1,0,0,0,945,947,7,11,0,0,946,945,1,0,0,0,947, +950,1,0,0,0,948,946,1,0,0,0,948,949,1,0,0,0,949,951,1,0,0,0,950,948,1,0, +0,0,951,952,5,120,0,0,952,954,1,0,0,0,953,913,1,0,0,0,953,933,1,0,0,0,954, +222,1,0,0,0,955,959,3,7,3,0,956,958,7,11,0,0,957,956,1,0,0,0,958,961,1,0, +0,0,959,957,1,0,0,0,959,960,1,0,0,0,960,963,1,0,0,0,961,959,1,0,0,0,962, +964,7,0,0,0,963,962,1,0,0,0,964,965,1,0,0,0,965,963,1,0,0,0,965,966,1,0, +0,0,966,970,1,0,0,0,967,969,7,11,0,0,968,967,1,0,0,0,969,972,1,0,0,0,970, +968,1,0,0,0,970,971,1,0,0,0,971,224,1,0,0,0,972,970,1,0,0,0,973,975,3,7, +3,0,974,973,1,0,0,0,975,976,1,0,0,0,976,974,1,0,0,0,976,977,1,0,0,0,977, +979,1,0,0,0,978,980,3,5,2,0,979,978,1,0,0,0,980,981,1,0,0,0,981,979,1,0, +0,0,981,982,1,0,0,0,982,996,1,0,0,0,983,985,3,7,3,0,984,983,1,0,0,0,985, +986,1,0,0,0,986,984,1,0,0,0,986,987,1,0,0,0,987,991,1,0,0,0,988,990,3,5, +2,0,989,988,1,0,0,0,990,993,1,0,0,0,991,989,1,0,0,0,991,992,1,0,0,0,992, +995,1,0,0,0,993,991,1,0,0,0,994,984,1,0,0,0,995,998,1,0,0,0,996,994,1,0, +0,0,996,997,1,0,0,0,997,999,1,0,0,0,998,996,1,0,0,0,999,1001,5,46,0,0,1000, +1002,3,7,3,0,1001,1000,1,0,0,0,1002,1003,1,0,0,0,1003,1001,1,0,0,0,1003, +1004,1,0,0,0,1004,1014,1,0,0,0,1005,1007,7,4,0,0,1006,1008,5,45,0,0,1007, +1006,1,0,0,0,1007,1008,1,0,0,0,1008,1010,1,0,0,0,1009,1011,3,7,3,0,1010, +1009,1,0,0,0,1011,1012,1,0,0,0,1012,1010,1,0,0,0,1012,1013,1,0,0,0,1013, +1015,1,0,0,0,1014,1005,1,0,0,0,1014,1015,1,0,0,0,1015,226,1,0,0,0,1016,1018, +3,7,3,0,1017,1016,1,0,0,0,1018,1019,1,0,0,0,1019,1017,1,0,0,0,1019,1020, +1,0,0,0,1020,1021,1,0,0,0,1021,1025,5,46,0,0,1022,1024,3,7,3,0,1023,1022, +1,0,0,0,1024,1027,1,0,0,0,1025,1023,1,0,0,0,1025,1026,1,0,0,0,1026,1029, +1,0,0,0,1027,1025,1,0,0,0,1028,1030,7,12,0,0,1029,1028,1,0,0,0,1030,1031, +1,0,0,0,1031,1029,1,0,0,0,1031,1032,1,0,0,0,1032,1046,1,0,0,0,1033,1035, +3,7,3,0,1034,1033,1,0,0,0,1035,1036,1,0,0,0,1036,1034,1,0,0,0,1036,1037, +1,0,0,0,1037,1041,1,0,0,0,1038,1040,7,12,0,0,1039,1038,1,0,0,0,1040,1043, +1,0,0,0,1041,1039,1,0,0,0,1041,1042,1,0,0,0,1042,1045,1,0,0,0,1043,1041, +1,0,0,0,1044,1034,1,0,0,0,1045,1048,1,0,0,0,1046,1044,1,0,0,0,1046,1047, +1,0,0,0,1047,1058,1,0,0,0,1048,1046,1,0,0,0,1049,1051,7,4,0,0,1050,1052, +5,45,0,0,1051,1050,1,0,0,0,1051,1052,1,0,0,0,1052,1054,1,0,0,0,1053,1055, +3,7,3,0,1054,1053,1,0,0,0,1055,1056,1,0,0,0,1056,1054,1,0,0,0,1056,1057, +1,0,0,0,1057,1059,1,0,0,0,1058,1049,1,0,0,0,1058,1059,1,0,0,0,1059,228,1, +0,0,0,1060,1062,3,7,3,0,1061,1060,1,0,0,0,1062,1063,1,0,0,0,1063,1061,1, +0,0,0,1063,1064,1,0,0,0,1064,1065,1,0,0,0,1065,1067,5,46,0,0,1066,1068,3, +7,3,0,1067,1066,1,0,0,0,1068,1069,1,0,0,0,1069,1067,1,0,0,0,1069,1070,1, +0,0,0,1070,1102,1,0,0,0,1071,1073,7,4,0,0,1072,1074,5,45,0,0,1073,1072,1, +0,0,0,1073,1074,1,0,0,0,1074,1078,1,0,0,0,1075,1077,3,7,3,0,1076,1075,1, +0,0,0,1077,1080,1,0,0,0,1078,1076,1,0,0,0,1078,1079,1,0,0,0,1079,1082,1, +0,0,0,1080,1078,1,0,0,0,1081,1083,3,5,2,0,1082,1081,1,0,0,0,1083,1084,1, +0,0,0,1084,1082,1,0,0,0,1084,1085,1,0,0,0,1085,1099,1,0,0,0,1086,1088,3, +7,3,0,1087,1086,1,0,0,0,1088,1089,1,0,0,0,1089,1087,1,0,0,0,1089,1090,1, +0,0,0,1090,1094,1,0,0,0,1091,1093,3,5,2,0,1092,1091,1,0,0,0,1093,1096,1, +0,0,0,1094,1092,1,0,0,0,1094,1095,1,0,0,0,1095,1098,1,0,0,0,1096,1094,1, +0,0,0,1097,1087,1,0,0,0,1098,1101,1,0,0,0,1099,1097,1,0,0,0,1099,1100,1, +0,0,0,1100,1103,1,0,0,0,1101,1099,1,0,0,0,1102,1071,1,0,0,0,1102,1103,1, +0,0,0,1103,230,1,0,0,0,1104,1105,5,47,0,0,1105,1106,5,42,0,0,1106,1108,1, +0,0,0,1107,1109,8,8,0,0,1108,1107,1,0,0,0,1108,1109,1,0,0,0,1109,232,1,0, +0,0,1110,1111,5,47,0,0,1111,1112,5,42,0,0,1112,1113,5,42,0,0,1113,1114,5, +42,0,0,1114,1118,1,0,0,0,1115,1117,5,42,0,0,1116,1115,1,0,0,0,1117,1120, +1,0,0,0,1118,1119,1,0,0,0,1118,1116,1,0,0,0,1119,234,1,0,0,0,1120,1118,1, +0,0,0,1121,1122,5,47,0,0,1122,1123,5,42,0,0,1123,1124,5,42,0,0,1124,1126, +1,0,0,0,1125,1127,8,8,0,0,1126,1125,1,0,0,0,1126,1127,1,0,0,0,1127,236,1, +0,0,0,86,0,618,620,630,632,639,644,649,651,657,662,664,671,673,679,687,693, +698,706,711,715,720,726,730,735,737,742,744,759,765,780,796,803,818,833, +842,854,862,872,878,883,889,895,900,904,910,919,925,930,937,943,948,953, +959,965,970,976,981,986,991,996,1003,1007,1012,1014,1019,1025,1031,1036, +1041,1046,1051,1056,1058,1063,1069,1073,1078,1084,1089,1094,1099,1102,1108, +1118,1126,2,0,1,0,0,2,0]; const atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); @@ -744,7 +412,7 @@ export default class KELLexer extends antlr4.Lexer { "'FDC'", "'FILTER'", "'HINT'", "'GLOBAL'", "'FUNCTION'", "'DATASET'", "'OF'", "'SET'", "'ASOF'", "'USING'", "'VISUALIZE'", "'ENDVISUALIZE'", "'RESOURCES'", - "'ENDRESOURCES'" ]; + "'ENDRESOURCES'", "'AS'", "'SPC'", "'LIKE'" ]; static symbolicNames = [ null, "LP", "RP", "EQ", "DQUOTE", "LT", "GT", "DOT", "COMMA", "SEMI", "COLON", "LCURL", "RCURL", "LSQUARE", "RSQUARE", "STAR", "SIGIL", "AMP", @@ -758,14 +426,15 @@ export default class KELLexer extends antlr4.Lexer { "MODEL", "USE", "KELBASE", "KELQUERY", "FDC", "FILTER", "HINT", "GLOBAL", "FUNCTION", "DATASET", "OF", "SET", "ASOF", "USING", "VIS", "ENDVIS", - "RESOURCES", "ENDRESOURCES", "DOUBLESTRING", "SID", - "SINT", "PID", "PSID", "ID", "INT", "HEXINT", - "BININT", "REAL", "STR", "TYPDCONST", "ESC", "SEP_COMMENT", - "ML_COMMENT", "MLMS_COMMENT", "JAVADOC_OPEN", - "EMPTY_JAVADOC", "NEWLINE", "COMMENT", "WS", "BAD_BIN", - "HEX_NO_X", "BAD_HEX", "BAD_MIX", "BAD_REAL_A", - "BAD_REAL_B", "BAD_REAL_C", "ML_COMMENT_START", - "MLMS_COMMENT_START", "JD_COMMENT_START" ]; + "RESOURCES", "ENDRESOURCES", "AS", "SPC", "LIKE", + "DOUBLESTRING", "SID", "SINT", "PID", "PSID", + "ID", "INT", "HEXINT", "BININT", "REAL", "STR", + "TYPDCONST", "ESC", "SEP_COMMENT", "ML_COMMENT", + "MLMS_COMMENT", "EMPTY_JAVADOC", "JAVADOC_OPEN", + "NEWLINE", "COMMENT", "WS", "BAD_BIN", "HEX_NO_X", + "BAD_HEX", "BAD_MIX", "BAD_REAL_A", "BAD_REAL_B", + "BAD_REAL_C", "ML_COMMENT_START", "MLMS_COMMENT_START", + "JD_COMMENT_START" ]; static ruleNames = [ "ESCAPED_DQUOTE", "LOWER", "LETTER", "DIGIT", "HEXDIGIT", "OCTDIGIT", "BINDIGIT", "ESCCHAR", "LP", "RP", "EQ", "DQUOTE", "LT", "GT", "DOT", "COMMA", "SEMI", "COLON", @@ -780,13 +449,13 @@ export default class KELLexer extends antlr4.Lexer { "USE", "KELBASE", "KELQUERY", "FDC", "FILTER", "HINT", "GLOBAL", "FUNCTION", "DATASET", "OF", "SET", "ASOF", "USING", "VIS", "ENDVIS", "RESOURCES", "ENDRESOURCES", - "DOUBLESTRING", "SID", "SINT", "PID", "PSID", "ID", - "INT", "HEXINT", "BININT", "REAL", "STR", "TYPDCONST", - "ESC", "SEP_COMMENT", "ML_COMMENT", "MLMS_COMMENT", - "JAVADOC_OPEN", "EMPTY_JAVADOC", "NEWLINE", "COMMENT", - "WS", "BAD_BIN", "HEX_NO_X", "BAD_HEX", "BAD_MIX", - "BAD_REAL_A", "BAD_REAL_B", "BAD_REAL_C", "ML_COMMENT_START", - "MLMS_COMMENT_START", "JD_COMMENT_START" ]; + "AS", "SPC", "LIKE", "DOUBLESTRING", "SID", "SINT", + "PID", "PSID", "ID", "INT", "HEXINT", "BININT", "REAL", + "STR", "TYPDCONST", "ESC", "SEP_COMMENT", "ML_COMMENT", + "MLMS_COMMENT", "EMPTY_JAVADOC", "JAVADOC_OPEN", "NEWLINE", + "COMMENT", "WS", "BAD_BIN", "HEX_NO_X", "BAD_HEX", + "BAD_MIX", "BAD_REAL_A", "BAD_REAL_B", "BAD_REAL_C", + "ML_COMMENT_START", "MLMS_COMMENT_START", "JD_COMMENT_START" ]; constructor(input) { super(input) @@ -875,37 +544,40 @@ KELLexer.VIS = 73; KELLexer.ENDVIS = 74; KELLexer.RESOURCES = 75; KELLexer.ENDRESOURCES = 76; -KELLexer.DOUBLESTRING = 77; -KELLexer.SID = 78; -KELLexer.SINT = 79; -KELLexer.PID = 80; -KELLexer.PSID = 81; -KELLexer.ID = 82; -KELLexer.INT = 83; -KELLexer.HEXINT = 84; -KELLexer.BININT = 85; -KELLexer.REAL = 86; -KELLexer.STR = 87; -KELLexer.TYPDCONST = 88; -KELLexer.ESC = 89; -KELLexer.SEP_COMMENT = 90; -KELLexer.ML_COMMENT = 91; -KELLexer.MLMS_COMMENT = 92; -KELLexer.JAVADOC_OPEN = 93; -KELLexer.EMPTY_JAVADOC = 94; -KELLexer.NEWLINE = 95; -KELLexer.COMMENT = 96; -KELLexer.WS = 97; -KELLexer.BAD_BIN = 98; -KELLexer.HEX_NO_X = 99; -KELLexer.BAD_HEX = 100; -KELLexer.BAD_MIX = 101; -KELLexer.BAD_REAL_A = 102; -KELLexer.BAD_REAL_B = 103; -KELLexer.BAD_REAL_C = 104; -KELLexer.ML_COMMENT_START = 105; -KELLexer.MLMS_COMMENT_START = 106; -KELLexer.JD_COMMENT_START = 107; +KELLexer.AS = 77; +KELLexer.SPC = 78; +KELLexer.LIKE = 79; +KELLexer.DOUBLESTRING = 80; +KELLexer.SID = 81; +KELLexer.SINT = 82; +KELLexer.PID = 83; +KELLexer.PSID = 84; +KELLexer.ID = 85; +KELLexer.INT = 86; +KELLexer.HEXINT = 87; +KELLexer.BININT = 88; +KELLexer.REAL = 89; +KELLexer.STR = 90; +KELLexer.TYPDCONST = 91; +KELLexer.ESC = 92; +KELLexer.SEP_COMMENT = 93; +KELLexer.ML_COMMENT = 94; +KELLexer.MLMS_COMMENT = 95; +KELLexer.EMPTY_JAVADOC = 96; +KELLexer.JAVADOC_OPEN = 97; +KELLexer.NEWLINE = 98; +KELLexer.COMMENT = 99; +KELLexer.WS = 100; +KELLexer.BAD_BIN = 101; +KELLexer.HEX_NO_X = 102; +KELLexer.BAD_HEX = 103; +KELLexer.BAD_MIX = 104; +KELLexer.BAD_REAL_A = 105; +KELLexer.BAD_REAL_B = 106; +KELLexer.BAD_REAL_C = 107; +KELLexer.ML_COMMENT_START = 108; +KELLexer.MLMS_COMMENT_START = 109; +KELLexer.JD_COMMENT_START = 110; KELLexer.JAVADOC = 2; diff --git a/src/grammar/kel/KELParser.js b/src/grammar/kel/KELParser.js index 3c2463ec..a9ea11a6 100644 --- a/src/grammar/kel/KELParser.js +++ b/src/grammar/kel/KELParser.js @@ -1,837 +1,449 @@ -// Generated from ./KELParser.g4 by ANTLR 4.9.1 +// Generated from ./KELParser.g4 by ANTLR 4.10.1 // jshint ignore: start import antlr4 from 'antlr4'; import KELParserListener from './KELParserListener.js'; import KELParserVisitor from './KELParserVisitor.js'; - -const serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786", - "\u5964\u0003m\u04ea\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004", - "\t\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t\u0007", - "\u0004\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004\f\t\f", - "\u0004\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010\t\u0010", - "\u0004\u0011\t\u0011\u0004\u0012\t\u0012\u0004\u0013\t\u0013\u0004\u0014", - "\t\u0014\u0004\u0015\t\u0015\u0004\u0016\t\u0016\u0004\u0017\t\u0017", - "\u0004\u0018\t\u0018\u0004\u0019\t\u0019\u0004\u001a\t\u001a\u0004\u001b", - "\t\u001b\u0004\u001c\t\u001c\u0004\u001d\t\u001d\u0004\u001e\t\u001e", - "\u0004\u001f\t\u001f\u0004 \t \u0004!\t!\u0004\"\t\"\u0004#\t#\u0004", - "$\t$\u0004%\t%\u0004&\t&\u0004\'\t\'\u0004(\t(\u0004)\t)\u0004*\t*\u0004", - "+\t+\u0004,\t,\u0004-\t-\u0004.\t.\u0004/\t/\u00040\t0\u00041\t1\u0004", - "2\t2\u00043\t3\u00044\t4\u00045\t5\u00046\t6\u00047\t7\u00048\t8\u0004", - "9\t9\u0004:\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004?\t?\u0004", - "@\t@\u0004A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004F\tF\u0004", - "G\tG\u0004H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004M\tM\u0004", - "N\tN\u0004O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004T\tT\u0004", - "U\tU\u0004V\tV\u0004W\tW\u0004X\tX\u0004Y\tY\u0004Z\tZ\u0004[\t[\u0004", - "\\\t\\\u0004]\t]\u0004^\t^\u0004_\t_\u0004`\t`\u0004a\ta\u0004b\tb\u0004", - "c\tc\u0003\u0002\u0007\u0002\u00c8\n\u0002\f\u0002\u000e\u0002\u00cb", - "\u000b\u0002\u0003\u0002\u0003\u0002\u0003\u0002\u0007\u0002\u00d0\n", - "\u0002\f\u0002\u000e\u0002\u00d3\u000b\u0002\u0003\u0002\u0003\u0002", - "\u0003\u0002\u0003\u0002\u0003\u0002\u0005\u0002\u00da\n\u0002\u0003", - "\u0002\u0003\u0002\u0005\u0002\u00de\n\u0002\u0007\u0002\u00e0\n\u0002", - "\f\u0002\u000e\u0002\u00e3\u000b\u0002\u0003\u0002\u0003\u0002\u0003", - "\u0003\u0003\u0003\u0005\u0003\u00e9\n\u0003\u0003\u0004\u0003\u0004", - "\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004\u0003\u0004", - "\u0003\u0004\u0003\u0004\u0005\u0004\u00f5\n\u0004\u0003\u0005\u0003", - "\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003", - "\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003", - "\u0005\u0003\u0005\u0003\u0005\u0005\u0005\u0107\n\u0005\u0003\u0006", - "\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006\u0003\u0006", - "\u0007\u0006\u0110\n\u0006\f\u0006\u000e\u0006\u0113\u000b\u0006\u0003", - "\u0006\u0003\u0006\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003", - "\u0007\u0003\u0007\u0005\u0007\u011d\n\u0007\u0003\u0007\u0005\u0007", - "\u0120\n\u0007\u0003\b\u0003\b\u0003\b\u0003\b\u0007\b\u0126\n\b\f\b", - "\u000e\b\u0129\u000b\b\u0003\t\u0003\t\u0003\n\u0003\n\u0003\n\u0003", - "\n\u0007\n\u0131\n\n\f\n\u000e\n\u0134\u000b\n\u0003\n\u0003\n\u0003", - "\n\u0003\n\u0007\n\u013a\n\n\f\n\u000e\n\u013d\u000b\n\u0003\n\u0003", - "\n\u0005\n\u0141\n\n\u0003\u000b\u0003\u000b\u0003\f\u0003\f\u0003\f", - "\u0003\f\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0006\r\u014f", - "\n\r\r\r\u000e\r\u0150\u0003\r\u0003\r\u0003\u000e\u0003\u000e\u0003", - "\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0005\u000e\u015b\n\u000e", - "\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f", - "\u0003\u000f\u0007\u000f\u0164\n\u000f\f\u000f\u000e\u000f\u0167\u000b", - "\u000f\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003", - "\u0010\u0003\u0010\u0007\u0010\u0170\n\u0010\f\u0010\u000e\u0010\u0173", - "\u000b\u0010\u0003\u0010\u0003\u0010\u0003\u0011\u0003\u0011\u0005\u0011", - "\u0179\n\u0011\u0003\u0012\u0003\u0012\u0003\u0012\u0003\u0012\u0003", - "\u0012\u0007\u0012\u0180\n\u0012\f\u0012\u000e\u0012\u0183\u000b\u0012", - "\u0003\u0012\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0014\u0005\u0014", - "\u018a\n\u0014\u0003\u0014\u0003\u0014\u0005\u0014\u018e\n\u0014\u0003", - "\u0014\u0003\u0014\u0003\u0014\u0005\u0014\u0193\n\u0014\u0003\u0014", - "\u0005\u0014\u0196\n\u0014\u0003\u0014\u0003\u0014\u0005\u0014\u019a", - "\n\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0005\u0014\u019f\n\u0014", - "\u0003\u0014\u0003\u0014\u0005\u0014\u01a3\n\u0014\u0003\u0014\u0003", - "\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0005\u0014\u01ab", - "\n\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014", - "\u0003\u0014\u0003\u0014\u0005\u0014\u01b4\n\u0014\u0003\u0015\u0003", - "\u0015\u0003\u0015\u0005\u0015\u01b9\n\u0015\u0003\u0015\u0003\u0015", - "\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0016\u0007\u0016", - "\u01c2\n\u0016\f\u0016\u000e\u0016\u01c5\u000b\u0016\u0005\u0016\u01c7", - "\n\u0016\u0003\u0016\u0003\u0016\u0003\u0017\u0003\u0017\u0003\u0017", - "\u0003\u0017\u0007\u0017\u01cf\n\u0017\f\u0017\u000e\u0017\u01d2\u000b", - "\u0017\u0003\u0017\u0003\u0017\u0003\u0018\u0003\u0018\u0003\u0018\u0003", - "\u0018\u0003\u0018\u0007\u0018\u01db\n\u0018\f\u0018\u000e\u0018\u01de", - "\u000b\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0018", - "\u0003\u0018\u0005\u0018\u01e6\n\u0018\u0003\u0019\u0003\u0019\u0003", - "\u0019\u0003\u0019\u0003\u0019\u0005\u0019\u01ed\n\u0019\u0003\u0019", - "\u0003\u0019\u0003\u0019\u0003\u0019\u0007\u0019\u01f3\n\u0019\f\u0019", - "\u000e\u0019\u01f6\u000b\u0019\u0003\u0019\u0003\u0019\u0005\u0019\u01fa", - "\n\u0019\u0003\u001a\u0003\u001a\u0003\u001b\u0003\u001b\u0003\u001b", - "\u0003\u001b\u0007\u001b\u0202\n\u001b\f\u001b\u000e\u001b\u0205\u000b", - "\u001b\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003", - "\u001c\u0006\u001c\u020d\n\u001c\r\u001c\u000e\u001c\u020e\u0003\u001c", - "\u0003\u001c\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d", - "\u0003\u001d\u0006\u001d\u0219\n\u001d\r\u001d\u000e\u001d\u021a\u0003", - "\u001d\u0003\u001d\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003", - "\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0005\u001e\u0227\n\u001e", - "\u0006\u001e\u0229\n\u001e\r\u001e\u000e\u001e\u022a\u0003\u001e\u0003", - "\u001e\u0003\u001f\u0003\u001f\u0003 \u0003 \u0003 \u0003 \u0007 \u0235", - "\n \f \u000e \u0238\u000b \u0003!\u0003!\u0003!\u0003!\u0003!\u0003", - "!\u0005!\u0240\n!\u0006!\u0242\n!\r!\u000e!\u0243\u0003!\u0003!\u0003", - "\"\u0003\"\u0003#\u0003#\u0003#\u0003#\u0005#\u024e\n#\u0003#\u0003", - "#\u0003#\u0005#\u0253\n#\u0007#\u0255\n#\f#\u000e#\u0258\u000b#\u0003", - "#\u0003#\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0007$\u0262\n$\f", - "$\u000e$\u0265\u000b$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003", - "$\u0003$\u0007$\u026f\n$\f$\u000e$\u0272\u000b$\u0003$\u0003$\u0003", - "$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0007$\u027d\n$\f$\u000e", - "$\u0280\u000b$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003$\u0003", - "$\u0003$\u0003$\u0003$\u0003$\u0003$\u0007$\u028f\n$\f$\u000e$\u0292", - "\u000b$\u0003$\u0003$\u0005$\u0296\n$\u0003%\u0003%\u0003%\u0003%\u0003", - "%\u0003%\u0005%\u029e\n%\u0003%\u0005%\u02a1\n%\u0003%\u0003%\u0003", - "%\u0003%\u0005%\u02a7\n%\u0003%\u0003%\u0003%\u0003%\u0003%\u0003%\u0003", - "%\u0005%\u02b0\n%\u0003&\u0003&\u0003&\u0007&\u02b5\n&\f&\u000e&\u02b8", - "\u000b&\u0003\'\u0003\'\u0003\'\u0003\'\u0003\'\u0003(\u0003(\u0003", - "(\u0003(\u0003(\u0007(\u02c4\n(\f(\u000e(\u02c7\u000b(\u0003(\u0005", - "(\u02ca\n(\u0003)\u0003)\u0003)\u0003)\u0003)\u0003*\u0003*\u0003*\u0003", - "*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003", - "*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0005", - "*\u02e8\n*\u0003+\u0003+\u0003+\u0007+\u02ed\n+\f+\u000e+\u02f0\u000b", - "+\u0003+\u0005+\u02f3\n+\u0003,\u0003,\u0003,\u0007,\u02f8\n,\f,\u000e", - ",\u02fb\u000b,\u0003-\u0003-\u0003-\u0003-\u0003.\u0003.\u0003.\u0007", - ".\u0304\n.\f.\u000e.\u0307\u000b.\u0003/\u0003/\u0003/\u0003/\u0003", - "/\u0007/\u030e\n/\f/\u000e/\u0311\u000b/\u0003/\u0003/\u00030\u0003", - "0\u00030\u00030\u00050\u0319\n0\u00030\u00030\u00030\u00031\u00031\u0003", - "1\u00031\u00071\u0322\n1\f1\u000e1\u0325\u000b1\u00031\u00031\u0003", - "2\u00052\u032a\n2\u00032\u00032\u00033\u00033\u00053\u0330\n3\u0003", - "4\u00034\u00034\u00034\u00054\u0336\n4\u00034\u00034\u00034\u00034\u0007", - "4\u033c\n4\f4\u000e4\u033f\u000b4\u00034\u00074\u0342\n4\f4\u000e4\u0345", - "\u000b4\u00034\u00054\u0348\n4\u00034\u00054\u034b\n4\u00035\u00035", - "\u00035\u00035\u00075\u0351\n5\f5\u000e5\u0354\u000b5\u00035\u00035", - "\u00036\u00056\u0359\n6\u00036\u00036\u00056\u035d\n6\u00036\u00036", - "\u00036\u00036\u00036\u00036\u00036\u00036\u00056\u0367\n6\u00037\u0003", - "7\u00037\u00037\u00057\u036d\n7\u00038\u00038\u00039\u00039\u00039\u0003", - "9\u00039\u00039\u00059\u0377\n9\u00039\u00039\u0003:\u0003:\u0003:\u0003", - ";\u0003;\u0003;\u0003;\u0005;\u0382\n;\u0003;\u0003;\u0003;\u0007;\u0387", - "\n;\f;\u000e;\u038a\u000b;\u0003;\u0005;\u038d\n;\u0003;\u0005;\u0390", - "\n;\u0003<\u0003<\u0007<\u0394\n<\f<\u000e<\u0397\u000b<\u0003<\u0003", - "<\u0003=\u0003=\u0007=\u039d\n=\f=\u000e=\u03a0\u000b=\u0003=\u0003", - "=\u0003>\u0003>\u0003?\u0003?\u0003?\u0007?\u03a9\n?\f?\u000e?\u03ac", - "\u000b?\u0003@\u0003@\u0003@\u0007@\u03b1\n@\f@\u000e@\u03b4\u000b@", - "\u0003A\u0003A\u0003A\u0005A\u03b9\nA\u0003B\u0003B\u0003B\u0005B\u03be", - "\nB\u0003C\u0003C\u0003C\u0007C\u03c3\nC\fC\u000eC\u03c6\u000bC\u0003", - "D\u0003D\u0003D\u0007D\u03cb\nD\fD\u000eD\u03ce\u000bD\u0003E\u0003", - "E\u0003E\u0003E\u0003E\u0005E\u03d5\nE\u0003E\u0003E\u0003E\u0003E\u0003", - "E\u0003E\u0003E\u0003E\u0003E\u0003E\u0003E\u0003E\u0003E\u0007E\u03e4", - "\nE\fE\u000eE\u03e7\u000bE\u0003E\u0003E\u0005E\u03eb\nE\u0003F\u0003", - "F\u0006F\u03ef\nF\rF\u000eF\u03f0\u0003F\u0003F\u0003F\u0003F\u0003", - "F\u0005F\u03f8\nF\u0003G\u0003G\u0003G\u0005G\u03fd\nG\u0003H\u0003", - "H\u0003H\u0003H\u0003H\u0003H\u0007H\u0405\nH\fH\u000eH\u0408\u000b", - "H\u0003H\u0003H\u0005H\u040c\nH\u0003H\u0003H\u0003H\u0003H\u0003H\u0003", - "H\u0007H\u0414\nH\fH\u000eH\u0417\u000bH\u0003H\u0003H\u0005H\u041b", - "\nH\u0003I\u0003I\u0003I\u0003I\u0003J\u0003J\u0003J\u0003J\u0003J\u0003", - "J\u0005J\u0427\nJ\u0003J\u0003J\u0003J\u0003J\u0003J\u0003K\u0003K\u0003", - "K\u0003K\u0003K\u0003K\u0003L\u0003L\u0003L\u0003M\u0003M\u0003M\u0003", - "M\u0007M\u043b\nM\fM\u000eM\u043e\u000bM\u0003M\u0003M\u0003N\u0003", - "N\u0003N\u0003N\u0005N\u0446\nN\u0003O\u0003O\u0003O\u0003O\u0003O\u0007", - "O\u044d\nO\fO\u000eO\u0450\u000bO\u0003O\u0003O\u0003P\u0003P\u0005", - "P\u0456\nP\u0003P\u0003P\u0003P\u0003P\u0007P\u045c\nP\fP\u000eP\u045f", - "\u000bP\u0003P\u0005P\u0462\nP\u0003Q\u0003Q\u0003Q\u0003R\u0003R\u0003", - "R\u0003R\u0003R\u0003R\u0003R\u0005R\u046e\nR\u0003S\u0003S\u0003S\u0003", - "S\u0003S\u0003S\u0005S\u0476\nS\u0003S\u0003S\u0005S\u047a\nS\u0003", - "T\u0003T\u0003U\u0003U\u0003U\u0007U\u0481\nU\fU\u000eU\u0484\u000b", - "U\u0003V\u0003V\u0003V\u0003V\u0003V\u0005V\u048b\nV\u0003W\u0003W\u0003", - "W\u0003W\u0005W\u0491\nW\u0003X\u0003X\u0003Y\u0003Y\u0005Y\u0497\n", - "Y\u0003Z\u0003Z\u0003Z\u0005Z\u049c\nZ\u0003[\u0003[\u0003[\u0003[\u0003", - "[\u0003[\u0005[\u04a4\n[\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0005\\\u04af\n\\\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0005]\u04b7\n]\u0003^\u0003^\u0003^\u0003^\u0003^\u0003", - "^\u0005^\u04bf\n^\u0003^\u0003^\u0003^\u0003_\u0006_\u04c5\n_\r_\u000e", - "_\u04c6\u0003`\u0003`\u0007`\u04cb\n`\f`\u000e`\u04ce\u000b`\u0003`", - "\u0003`\u0003`\u0003`\u0003`\u0003`\u0005`\u04d6\n`\u0003a\u0003a\u0003", - "a\u0007a\u04db\na\fa\u000ea\u04de\u000ba\u0003b\u0003b\u0005b\u04e2", - "\nb\u0003c\u0003c\u0003c\u0003c\u0005c\u04e8\nc\u0003c\u0002\u0002d", - "\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c", - "\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082", - "\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098\u009a", - "\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2", - "\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u0002\f\u0003", - "\u000223\u0003\u00029:\u0004\u0002;;TT\u0004\u000299AA\u0003\u0002L", - "L\u0003\u0002NN\u0006\u0002\u0005\u0005\u0007\b\u001d\u001f!$\u0004", - "\u0002\u0016\u0016\u0018\u0018\u0006\u0002\u0011\u0011\u0017\u0017\u0019", - "\u0019**\u0003\u0002\u0003\u0004\u0002\u054b\u0002\u00c9\u0003\u0002", - "\u0002\u0002\u0004\u00e8\u0003\u0002\u0002\u0002\u0006\u00f4\u0003\u0002", - "\u0002\u0002\b\u0106\u0003\u0002\u0002\u0002\n\u0108\u0003\u0002\u0002", - "\u0002\f\u0116\u0003\u0002\u0002\u0002\u000e\u0121\u0003\u0002\u0002", - "\u0002\u0010\u012a\u0003\u0002\u0002\u0002\u0012\u0140\u0003\u0002\u0002", - "\u0002\u0014\u0142\u0003\u0002\u0002\u0002\u0016\u0144\u0003\u0002\u0002", - "\u0002\u0018\u0148\u0003\u0002\u0002\u0002\u001a\u015a\u0003\u0002\u0002", - "\u0002\u001c\u015c\u0003\u0002\u0002\u0002\u001e\u0168\u0003\u0002\u0002", - "\u0002 \u0178\u0003\u0002\u0002\u0002\"\u017a\u0003\u0002\u0002\u0002", - "$\u0186\u0003\u0002\u0002\u0002&\u01b3\u0003\u0002\u0002\u0002(\u01b5", - "\u0003\u0002\u0002\u0002*\u01bc\u0003\u0002\u0002\u0002,\u01ca\u0003", - "\u0002\u0002\u0002.\u01e5\u0003\u0002\u0002\u00020\u01f9\u0003\u0002", - "\u0002\u00022\u01fb\u0003\u0002\u0002\u00024\u01fd\u0003\u0002\u0002", - "\u00026\u0206\u0003\u0002\u0002\u00028\u0212\u0003\u0002\u0002\u0002", - ":\u021e\u0003\u0002\u0002\u0002<\u022e\u0003\u0002\u0002\u0002>\u0230", - "\u0003\u0002\u0002\u0002@\u0239\u0003\u0002\u0002\u0002B\u0247\u0003", - "\u0002\u0002\u0002D\u0249\u0003\u0002\u0002\u0002F\u0295\u0003\u0002", - "\u0002\u0002H\u02af\u0003\u0002\u0002\u0002J\u02b1\u0003\u0002\u0002", - "\u0002L\u02b9\u0003\u0002\u0002\u0002N\u02c9\u0003\u0002\u0002\u0002", - "P\u02cb\u0003\u0002\u0002\u0002R\u02e7\u0003\u0002\u0002\u0002T\u02f2", - "\u0003\u0002\u0002\u0002V\u02f4\u0003\u0002\u0002\u0002X\u02fc\u0003", - "\u0002\u0002\u0002Z\u0300\u0003\u0002\u0002\u0002\\\u0308\u0003\u0002", - "\u0002\u0002^\u0314\u0003\u0002\u0002\u0002`\u031d\u0003\u0002\u0002", - "\u0002b\u0329\u0003\u0002\u0002\u0002d\u032f\u0003\u0002\u0002\u0002", - "f\u0331\u0003\u0002\u0002\u0002h\u034c\u0003\u0002\u0002\u0002j\u0366", - "\u0003\u0002\u0002\u0002l\u036c\u0003\u0002\u0002\u0002n\u036e\u0003", - "\u0002\u0002\u0002p\u0370\u0003\u0002\u0002\u0002r\u037a\u0003\u0002", - "\u0002\u0002t\u037d\u0003\u0002\u0002\u0002v\u0391\u0003\u0002\u0002", - "\u0002x\u039a\u0003\u0002\u0002\u0002z\u03a3\u0003\u0002\u0002\u0002", - "|\u03a5\u0003\u0002\u0002\u0002~\u03ad\u0003\u0002\u0002\u0002\u0080", - "\u03b8\u0003\u0002\u0002\u0002\u0082\u03ba\u0003\u0002\u0002\u0002\u0084", - "\u03bf\u0003\u0002\u0002\u0002\u0086\u03c7\u0003\u0002\u0002\u0002\u0088", - "\u03ea\u0003\u0002\u0002\u0002\u008a\u03f7\u0003\u0002\u0002\u0002\u008c", - "\u03fc\u0003\u0002\u0002\u0002\u008e\u041a\u0003\u0002\u0002\u0002\u0090", - "\u041c\u0003\u0002\u0002\u0002\u0092\u0420\u0003\u0002\u0002\u0002\u0094", - "\u042d\u0003\u0002\u0002\u0002\u0096\u0433\u0003\u0002\u0002\u0002\u0098", - "\u0436\u0003\u0002\u0002\u0002\u009a\u0445\u0003\u0002\u0002\u0002\u009c", - "\u0447\u0003\u0002\u0002\u0002\u009e\u0461\u0003\u0002\u0002\u0002\u00a0", - "\u0463\u0003\u0002\u0002\u0002\u00a2\u046d\u0003\u0002\u0002\u0002\u00a4", - "\u0479\u0003\u0002\u0002\u0002\u00a6\u047b\u0003\u0002\u0002\u0002\u00a8", - "\u047d\u0003\u0002\u0002\u0002\u00aa\u048a\u0003\u0002\u0002\u0002\u00ac", - "\u0490\u0003\u0002\u0002\u0002\u00ae\u0492\u0003\u0002\u0002\u0002\u00b0", - "\u0496\u0003\u0002\u0002\u0002\u00b2\u049b\u0003\u0002\u0002\u0002\u00b4", - "\u04a3\u0003\u0002\u0002\u0002\u00b6\u04ae\u0003\u0002\u0002\u0002\u00b8", - "\u04b6\u0003\u0002\u0002\u0002\u00ba\u04b8\u0003\u0002\u0002\u0002\u00bc", - "\u04c4\u0003\u0002\u0002\u0002\u00be\u04d5\u0003\u0002\u0002\u0002\u00c0", - "\u04d7\u0003\u0002\u0002\u0002\u00c2\u04e1\u0003\u0002\u0002\u0002\u00c4", - "\u04e7\u0003\u0002\u0002\u0002\u00c6\u00c8\u0005\b\u0005\u0002\u00c7", - "\u00c6\u0003\u0002\u0002\u0002\u00c8\u00cb\u0003\u0002\u0002\u0002\u00c9", - "\u00c7\u0003\u0002\u0002\u0002\u00c9\u00ca\u0003\u0002\u0002\u0002\u00ca", - "\u00d1\u0003\u0002\u0002\u0002\u00cb\u00c9\u0003\u0002\u0002\u0002\u00cc", - "\u00cd\u0005\u0004\u0003\u0002\u00cd\u00ce\u0007\u000b\u0002\u0002\u00ce", - "\u00d0\u0003\u0002\u0002\u0002\u00cf\u00cc\u0003\u0002\u0002\u0002\u00d0", - "\u00d3\u0003\u0002\u0002\u0002\u00d1\u00cf\u0003\u0002\u0002\u0002\u00d1", - "\u00d2\u0003\u0002\u0002\u0002\u00d2\u00e1\u0003\u0002\u0002\u0002\u00d3", - "\u00d1\u0003\u0002\u0002\u0002\u00d4\u00d5\u0005\u0006\u0004\u0002\u00d5", - "\u00d6\u0007\u000b\u0002\u0002\u00d6\u00e0\u0003\u0002\u0002\u0002\u00d7", - "\u00d9\u0005v<\u0002\u00d8\u00da\u0007\u000b\u0002\u0002\u00d9\u00d8", - "\u0003\u0002\u0002\u0002\u00d9\u00da\u0003\u0002\u0002\u0002\u00da\u00e0", - "\u0003\u0002\u0002\u0002\u00db\u00dd\u0005x=\u0002\u00dc\u00de\u0007", - "\u000b\u0002\u0002\u00dd\u00dc\u0003\u0002\u0002\u0002\u00dd\u00de\u0003", - "\u0002\u0002\u0002\u00de\u00e0\u0003\u0002\u0002\u0002\u00df\u00d4\u0003", - "\u0002\u0002\u0002\u00df\u00d7\u0003\u0002\u0002\u0002\u00df\u00db\u0003", - "\u0002\u0002\u0002\u00e0\u00e3\u0003\u0002\u0002\u0002\u00e1\u00df\u0003", - "\u0002\u0002\u0002\u00e1\u00e2\u0003\u0002\u0002\u0002\u00e2\u00e4\u0003", - "\u0002\u0002\u0002\u00e3\u00e1\u0003\u0002\u0002\u0002\u00e4\u00e5\u0007", - "\u0002\u0002\u0003\u00e5\u0003\u0003\u0002\u0002\u0002\u00e6\u00e9\u0005", - "\n\u0006\u0002\u00e7\u00e9\u0005\u000e\b\u0002\u00e8\u00e6\u0003\u0002", - "\u0002\u0002\u00e8\u00e7\u0003\u0002\u0002\u0002\u00e9\u0005\u0003\u0002", - "\u0002\u0002\u00ea\u00f5\u0005\u0012\n\u0002\u00eb\u00f5\u0005\u0014", - "\u000b\u0002\u00ec\u00f5\u0005\u001e\u0010\u0002\u00ed\u00f5\u00054", - "\u001b\u0002\u00ee\u00f5\u00056\u001c\u0002\u00ef\u00f5\u00058\u001d", - "\u0002\u00f0\u00f5\u0005R*\u0002\u00f1\u00f5\u0005^0\u0002\u00f2\u00f5", - "\u0005f4\u0002\u00f3\u00f5\u0005t;\u0002\u00f4\u00ea\u0003\u0002\u0002", - "\u0002\u00f4\u00eb\u0003\u0002\u0002\u0002\u00f4\u00ec\u0003\u0002\u0002", - "\u0002\u00f4\u00ed\u0003\u0002\u0002\u0002\u00f4\u00ee\u0003\u0002\u0002", - "\u0002\u00f4\u00ef\u0003\u0002\u0002\u0002\u00f4\u00f0\u0003\u0002\u0002", - "\u0002\u00f4\u00f1\u0003\u0002\u0002\u0002\u00f4\u00f2\u0003\u0002\u0002", - "\u0002\u00f4\u00f3\u0003\u0002\u0002\u0002\u00f5\u0007\u0003\u0002\u0002", - "\u0002\u00f6\u00f7\u00070\u0002\u0002\u00f7\u00f8\u0007\u0003\u0002", - "\u0002\u00f8\u00f9\u0007T\u0002\u0002\u00f9\u0107\u0007\u0004\u0002", - "\u0002\u00fa\u00fb\u00070\u0002\u0002\u00fb\u00fc\u0007\u0003\u0002", - "\u0002\u00fc\u00fd\u0007T\u0002\u0002\u00fd\u00fe\u0007\n\u0002\u0002", - "\u00fe\u00ff\u0007Y\u0002\u0002\u00ff\u0107\u0007\u0004\u0002\u0002", - "\u0100\u0101\u00070\u0002\u0002\u0101\u0102\u0007\u0003\u0002\u0002", - "\u0102\u0103\u0007T\u0002\u0002\u0103\u0104\u0007\n\u0002\u0002\u0104", - "\u0105\u0007U\u0002\u0002\u0105\u0107\u0007\u0004\u0002\u0002\u0106", - "\u00f6\u0003\u0002\u0002\u0002\u0106\u00fa\u0003\u0002\u0002\u0002\u0106", - "\u0100\u0003\u0002\u0002\u0002\u0107\t\u0003\u0002\u0002\u0002\u0108", - "\u0109\u0007(\u0002\u0002\u0109\u010a\u0007T\u0002\u0002\u010a\u010b", - "\u0007T\u0002\u0002\u010b\u010c\u0007\u0003\u0002\u0002\u010c\u0111", - "\u0005\f\u0007\u0002\u010d\u010e\u0007\n\u0002\u0002\u010e\u0110\u0005", - "\f\u0007\u0002\u010f\u010d\u0003\u0002\u0002\u0002\u0110\u0113\u0003", - "\u0002\u0002\u0002\u0111\u010f\u0003\u0002\u0002\u0002\u0111\u0112\u0003", - "\u0002\u0002\u0002\u0112\u0114\u0003\u0002\u0002\u0002\u0113\u0111\u0003", - "\u0002\u0002\u0002\u0114\u0115\u0007\u0004\u0002\u0002\u0115\u000b\u0003", - "\u0002\u0002\u0002\u0116\u011f\u0007T\u0002\u0002\u0117\u0118\u0007", - "\u0005\u0002\u0002\u0118\u0119\u0007)\u0002\u0002\u0119\u011a\u0007", - "\u0003\u0002\u0002\u011a\u011c\u0007T\u0002\u0002\u011b\u011d\u0007", - "T\u0002\u0002\u011c\u011b\u0003\u0002\u0002\u0002\u011c\u011d\u0003", - "\u0002\u0002\u0002\u011d\u011e\u0003\u0002\u0002\u0002\u011e\u0120\u0007", - "\u0004\u0002\u0002\u011f\u0117\u0003\u0002\u0002\u0002\u011f\u0120\u0003", - "\u0002\u0002\u0002\u0120\r\u0003\u0002\u0002\u0002\u0121\u0122\u0007", - "1\u0002\u0002\u0122\u0127\u0005\u0010\t\u0002\u0123\u0124\u0007\n\u0002", - "\u0002\u0124\u0126\u0005\u0010\t\u0002\u0125\u0123\u0003\u0002\u0002", - "\u0002\u0126\u0129\u0003\u0002\u0002\u0002\u0127\u0125\u0003\u0002\u0002", - "\u0002\u0127\u0128\u0003\u0002\u0002\u0002\u0128\u000f\u0003\u0002\u0002", - "\u0002\u0129\u0127\u0003\u0002\u0002\u0002\u012a\u012b\u0007T\u0002", - "\u0002\u012b\u0011\u0003\u0002\u0002\u0002\u012c\u012d\u00074\u0002", - "\u0002\u012d\u0132\u0005J&\u0002\u012e\u012f\u0007\n\u0002\u0002\u012f", - "\u0131\u0005J&\u0002\u0130\u012e\u0003\u0002\u0002\u0002\u0131\u0134", - "\u0003\u0002\u0002\u0002\u0132\u0130\u0003\u0002\u0002\u0002\u0132\u0133", - "\u0003\u0002\u0002\u0002\u0133\u0141\u0003\u0002\u0002\u0002\u0134\u0132", - "\u0003\u0002\u0002\u0002\u0135\u0136\u00074\u0002\u0002\u0136\u013b", - "\u0007T\u0002\u0002\u0137\u0138\u0007\n\u0002\u0002\u0138\u013a\u0007", - "T\u0002\u0002\u0139\u0137\u0003\u0002\u0002\u0002\u013a\u013d\u0003", - "\u0002\u0002\u0002\u013b\u0139\u0003\u0002\u0002\u0002\u013b\u013c\u0003", - "\u0002\u0002\u0002\u013c\u013e\u0003\u0002\u0002\u0002\u013d\u013b\u0003", - "\u0002\u0002\u0002\u013e\u013f\u00075\u0002\u0002\u013f\u0141\u0005", - "J&\u0002\u0140\u012c\u0003\u0002\u0002\u0002\u0140\u0135\u0003\u0002", - "\u0002\u0002\u0141\u0013\u0003\u0002\u0002\u0002\u0142\u0143\u0005\u0018", - "\r\u0002\u0143\u0015\u0003\u0002\u0002\u0002\u0144\u0145\u0005\u0018", - "\r\u0002\u0145\u0146\u0007\u000b\u0002\u0002\u0146\u0147\u0007\u0002", - "\u0002\u0003\u0147\u0017\u0003\u0002\u0002\u0002\u0148\u0149\u00076", - "\u0002\u0002\u0149\u014a\u0007T\u0002\u0002\u014a\u014e\u0007\u000b", - "\u0002\u0002\u014b\u014c\u0005\u001a\u000e\u0002\u014c\u014d\u0007\u000b", - "\u0002\u0002\u014d\u014f\u0003\u0002\u0002\u0002\u014e\u014b\u0003\u0002", - "\u0002\u0002\u014f\u0150\u0003\u0002\u0002\u0002\u0150\u014e\u0003\u0002", - "\u0002\u0002\u0150\u0151\u0003\u0002\u0002\u0002\u0151\u0152\u0003\u0002", - "\u0002\u0002\u0152\u0153\u00077\u0002\u0002\u0153\u0019\u0003\u0002", - "\u0002\u0002\u0154\u015b\u0005\u0012\n\u0002\u0155\u015b\u0005\u001e", - "\u0010\u0002\u0156\u015b\u00054\u001b\u0002\u0157\u015b\u0005R*\u0002", - "\u0158\u015b\u0005^0\u0002\u0159\u015b\u0005\u001c\u000f\u0002\u015a", - "\u0154\u0003\u0002\u0002\u0002\u015a\u0155\u0003\u0002\u0002\u0002\u015a", - "\u0156\u0003\u0002\u0002\u0002\u015a\u0157\u0003\u0002\u0002\u0002\u015a", - "\u0158\u0003\u0002\u0002\u0002\u015a\u0159\u0003\u0002\u0002\u0002\u015b", - "\u001b\u0003\u0002\u0002\u0002\u015c\u015d\u00078\u0002\u0002\u015d", - "\u015e\u0007\f\u0002\u0002\u015e\u015f\u0007T\u0002\u0002\u015f\u0160", - "\u0007\u001f\u0002\u0002\u0160\u0165\u0005z>\u0002\u0161\u0162\u0007", - "\n\u0002\u0002\u0162\u0164\u0005z>\u0002\u0163\u0161\u0003\u0002\u0002", - "\u0002\u0164\u0167\u0003\u0002\u0002\u0002\u0165\u0163\u0003\u0002\u0002", - "\u0002\u0165\u0166\u0003\u0002\u0002\u0002\u0166\u001d\u0003\u0002\u0002", - "\u0002\u0167\u0165\u0003\u0002\u0002\u0002\u0168\u0169\u0007T\u0002", - "\u0002\u0169\u016a\u0007\u001c\u0002\u0002\u016a\u016b\t\u0002\u0002", - "\u0002\u016b\u016c\u0007\u0003\u0002\u0002\u016c\u0171\u0005 \u0011", - "\u0002\u016d\u016e\u0007\n\u0002\u0002\u016e\u0170\u0005 \u0011\u0002", - "\u016f\u016d\u0003\u0002\u0002\u0002\u0170\u0173\u0003\u0002\u0002\u0002", - "\u0171\u016f\u0003\u0002\u0002\u0002\u0171\u0172\u0003\u0002\u0002\u0002", - "\u0172\u0174\u0003\u0002\u0002\u0002\u0173\u0171\u0003\u0002\u0002\u0002", - "\u0174\u0175\u0007\u0004\u0002\u0002\u0175\u001f\u0003\u0002\u0002\u0002", - "\u0176\u0179\u0005\"\u0012\u0002\u0177\u0179\u0005.\u0018\u0002\u0178", - "\u0176\u0003\u0002\u0002\u0002\u0178\u0177\u0003\u0002\u0002\u0002\u0179", - "!\u0003\u0002\u0002\u0002\u017a\u017b\u0005$\u0013\u0002\u017b\u017c", - "\u0007\u0003\u0002\u0002\u017c\u0181\u0005&\u0014\u0002\u017d\u017e", - "\u0007\n\u0002\u0002\u017e\u0180\u0005&\u0014\u0002\u017f\u017d\u0003", - "\u0002\u0002\u0002\u0180\u0183\u0003\u0002\u0002\u0002\u0181\u017f\u0003", - "\u0002\u0002\u0002\u0181\u0182\u0003\u0002\u0002\u0002\u0182\u0184\u0003", - "\u0002\u0002\u0002\u0183\u0181\u0003\u0002\u0002\u0002\u0184\u0185\u0007", - "\u0004\u0002\u0002\u0185#\u0003\u0002\u0002\u0002\u0186\u0187\t\u0003", - "\u0002\u0002\u0187%\u0003\u0002\u0002\u0002\u0188\u018a\u0007T\u0002", - "\u0002\u0189\u0188\u0003\u0002\u0002\u0002\u0189\u018a\u0003\u0002\u0002", - "\u0002\u018a\u018b\u0003\u0002\u0002\u0002\u018b\u01b4\u0007T\u0002", - "\u0002\u018c\u018e\u0007T\u0002\u0002\u018d\u018c\u0003\u0002\u0002", - "\u0002\u018d\u018e\u0003\u0002\u0002\u0002\u018e\u018f\u0003\u0002\u0002", - "\u0002\u018f\u0190\u0007T\u0002\u0002\u0190\u0192\u0007\u0005\u0002", - "\u0002\u0191\u0193\u0005(\u0015\u0002\u0192\u0191\u0003\u0002\u0002", - "\u0002\u0192\u0193\u0003\u0002\u0002\u0002\u0193\u0195\u0003\u0002\u0002", - "\u0002\u0194\u0196\u0005*\u0016\u0002\u0195\u0194\u0003\u0002\u0002", - "\u0002\u0195\u0196\u0003\u0002\u0002\u0002\u0196\u0197\u0003\u0002\u0002", - "\u0002\u0197\u01b4\u0005J&\u0002\u0198\u019a\u0007T\u0002\u0002\u0199", - "\u0198\u0003\u0002\u0002\u0002\u0199\u019a\u0003\u0002\u0002\u0002\u019a", - "\u019b\u0003\u0002\u0002\u0002\u019b\u019c\u0007T\u0002\u0002\u019c", - "\u019e\u0007\u0005\u0002\u0002\u019d\u019f\u0005(\u0015\u0002\u019e", - "\u019d\u0003\u0002\u0002\u0002\u019e\u019f\u0003\u0002\u0002\u0002\u019f", - "\u01a0\u0003\u0002\u0002\u0002\u01a0\u01b4\u0005*\u0016\u0002\u01a1", - "\u01a3\u0007T\u0002\u0002\u01a2\u01a1\u0003\u0002\u0002\u0002\u01a2", - "\u01a3\u0003\u0002\u0002\u0002\u01a3\u01a4\u0003\u0002\u0002\u0002\u01a4", - "\u01a5\u0007T\u0002\u0002\u01a5\u01a6\u0007\u0005\u0002\u0002\u01a6", - "\u01b4\u0005(\u0015\u0002\u01a7\u01aa\u0007;\u0002\u0002\u01a8\u01a9", - "\u0007\u0005\u0002\u0002\u01a9\u01ab\u0005J&\u0002\u01aa\u01a8\u0003", - "\u0002\u0002\u0002\u01aa\u01ab\u0003\u0002\u0002\u0002\u01ab\u01b4\u0003", - "\u0002\u0002\u0002\u01ac\u01ad\u0007;\u0002\u0002\u01ad\u01b4\u0005", - ",\u0017\u0002\u01ae\u01af\u0007T\u0002\u0002\u01af\u01b0\u0007T\u0002", - "\u0002\u01b0\u01b1\u0007\u0005\u0002\u0002\u01b1\u01b2\u0007;\u0002", - "\u0002\u01b2\u01b4\u0005,\u0017\u0002\u01b3\u0189\u0003\u0002\u0002", - "\u0002\u01b3\u018d\u0003\u0002\u0002\u0002\u01b3\u0199\u0003\u0002\u0002", - "\u0002\u01b3\u01a2\u0003\u0002\u0002\u0002\u01b3\u01a7\u0003\u0002\u0002", - "\u0002\u01b3\u01ac\u0003\u0002\u0002\u0002\u01b3\u01ae\u0003\u0002\u0002", - "\u0002\u01b4\'\u0003\u0002\u0002\u0002\u01b5\u01b6\u0007)\u0002\u0002", - "\u01b6\u01b8\u0007\u0003\u0002\u0002\u01b7\u01b9\u0005\u00b4[\u0002", - "\u01b8\u01b7\u0003\u0002\u0002\u0002\u01b8\u01b9\u0003\u0002\u0002\u0002", - "\u01b9\u01ba\u0003\u0002\u0002\u0002\u01ba\u01bb\u0007\u0004\u0002\u0002", - "\u01bb)\u0003\u0002\u0002\u0002\u01bc\u01bd\u0007<\u0002\u0002\u01bd", - "\u01c6\u0007\u0003\u0002\u0002\u01be\u01c3\u0005\u00b4[\u0002\u01bf", - "\u01c0\u0007\n\u0002\u0002\u01c0\u01c2\u0005\u00b4[\u0002\u01c1\u01bf", - "\u0003\u0002\u0002\u0002\u01c2\u01c5\u0003\u0002\u0002\u0002\u01c3\u01c1", - "\u0003\u0002\u0002\u0002\u01c3\u01c4\u0003\u0002\u0002\u0002\u01c4\u01c7", - "\u0003\u0002\u0002\u0002\u01c5\u01c3\u0003\u0002\u0002\u0002\u01c6\u01be", - "\u0003\u0002\u0002\u0002\u01c6\u01c7\u0003\u0002\u0002\u0002\u01c7\u01c8", - "\u0003\u0002\u0002\u0002\u01c8\u01c9\u0007\u0004\u0002\u0002\u01c9+", - "\u0003\u0002\u0002\u0002\u01ca\u01cb\u0007\u0003\u0002\u0002\u01cb\u01d0", - "\u0005J&\u0002\u01cc\u01cd\u0007\n\u0002\u0002\u01cd\u01cf\u0005J&\u0002", - "\u01ce\u01cc\u0003\u0002\u0002\u0002\u01cf\u01d2\u0003\u0002\u0002\u0002", - "\u01d0\u01ce\u0003\u0002\u0002\u0002\u01d0\u01d1\u0003\u0002\u0002\u0002", - "\u01d1\u01d3\u0003\u0002\u0002\u0002\u01d2\u01d0\u0003\u0002\u0002\u0002", - "\u01d3\u01d4\u0007\u0004\u0002\u0002\u01d4-\u0003\u0002\u0002\u0002", - "\u01d5\u01d6\u0007=\u0002\u0002\u01d6\u01d7\u0007\u0003\u0002\u0002", - "\u01d7\u01dc\u00050\u0019\u0002\u01d8\u01d9\u0007\n\u0002\u0002\u01d9", - "\u01db\u00050\u0019\u0002\u01da\u01d8\u0003\u0002\u0002\u0002\u01db", - "\u01de\u0003\u0002\u0002\u0002\u01dc\u01da\u0003\u0002\u0002\u0002\u01dc", - "\u01dd\u0003\u0002\u0002\u0002\u01dd\u01df\u0003\u0002\u0002\u0002\u01de", - "\u01dc\u0003\u0002\u0002\u0002\u01df\u01e0\u0007\u0004\u0002\u0002\u01e0", - "\u01e6\u0003\u0002\u0002\u0002\u01e1\u01e2\u0007=\u0002\u0002\u01e2", - "\u01e3\u0007\u0003\u0002\u0002\u01e3\u01e4\u0007\u0011\u0002\u0002\u01e4", - "\u01e6\u0007\u0004\u0002\u0002\u01e5\u01d5\u0003\u0002\u0002\u0002\u01e5", - "\u01e1\u0003\u0002\u0002\u0002\u01e6/\u0003\u0002\u0002\u0002\u01e7", - "\u01fa\t\u0004\u0002\u0002\u01e8\u01e9\u0007\r\u0002\u0002\u01e9\u01ea", - "\u0007\u0011\u0002\u0002\u01ea\u01fa\u0007\u000e\u0002\u0002\u01eb\u01ed", - "\u0007T\u0002\u0002\u01ec\u01eb\u0003\u0002\u0002\u0002\u01ec\u01ed", - "\u0003\u0002\u0002\u0002\u01ed\u01ee\u0003\u0002\u0002\u0002\u01ee\u01ef", - "\u0007\r\u0002\u0002\u01ef\u01f4\u00052\u001a\u0002\u01f0\u01f1\u0007", - "\n\u0002\u0002\u01f1\u01f3\u00052\u001a\u0002\u01f2\u01f0\u0003\u0002", - "\u0002\u0002\u01f3\u01f6\u0003\u0002\u0002\u0002\u01f4\u01f2\u0003\u0002", - "\u0002\u0002\u01f4\u01f5\u0003\u0002\u0002\u0002\u01f5\u01f7\u0003\u0002", - "\u0002\u0002\u01f6\u01f4\u0003\u0002\u0002\u0002\u01f7\u01f8\u0007\u000e", - "\u0002\u0002\u01f8\u01fa\u0003\u0002\u0002\u0002\u01f9\u01e7\u0003\u0002", - "\u0002\u0002\u01f9\u01e8\u0003\u0002\u0002\u0002\u01f9\u01ec\u0003\u0002", - "\u0002\u0002\u01fa1\u0003\u0002\u0002\u0002\u01fb\u01fc\t\u0004\u0002", - "\u0002\u01fc3\u0003\u0002\u0002\u0002\u01fd\u01fe\u0007>\u0002\u0002", - "\u01fe\u0203\u0005:\u001e\u0002\u01ff\u0200\u0007\n\u0002\u0002\u0200", - "\u0202\u0005:\u001e\u0002\u0201\u01ff\u0003\u0002\u0002\u0002\u0202", - "\u0205\u0003\u0002\u0002\u0002\u0203\u0201\u0003\u0002\u0002\u0002\u0203", - "\u0204\u0003\u0002\u0002\u0002\u02045\u0003\u0002\u0002\u0002\u0205", - "\u0203\u0003\u0002\u0002\u0002\u0206\u0207\u0007>\u0002\u0002\u0207", - "\u0208\u0005J&\u0002\u0208\u0209\u0007\u0003\u0002\u0002\u0209\u020c", - "\u0007?\u0002\u0002\u020a\u020b\u0007\n\u0002\u0002\u020b\u020d\u0005", - "z>\u0002\u020c\u020a\u0003\u0002\u0002\u0002\u020d\u020e\u0003\u0002", - "\u0002\u0002\u020e\u020c\u0003\u0002\u0002\u0002\u020e\u020f\u0003\u0002", - "\u0002\u0002\u020f\u0210\u0003\u0002\u0002\u0002\u0210\u0211\u0007\u0004", - "\u0002\u0002\u02117\u0003\u0002\u0002\u0002\u0212\u0213\u0007>\u0002", - "\u0002\u0213\u0214\u0005J&\u0002\u0214\u0215\u0007\u0003\u0002\u0002", - "\u0215\u0218\u0007@\u0002\u0002\u0216\u0217\u0007\n\u0002\u0002\u0217", - "\u0219\u0007T\u0002\u0002\u0218\u0216\u0003\u0002\u0002\u0002\u0219", - "\u021a\u0003\u0002\u0002\u0002\u021a\u0218\u0003\u0002\u0002\u0002\u021a", - "\u021b\u0003\u0002\u0002\u0002\u021b\u021c\u0003\u0002\u0002\u0002\u021c", - "\u021d\u0007\u0004\u0002\u0002\u021d9\u0003\u0002\u0002\u0002\u021e", - "\u021f\u0005J&\u0002\u021f\u0220\u0007\u0003\u0002\u0002\u0220\u0228", - "\u0005<\u001f\u0002\u0221\u0226\u0007\n\u0002\u0002\u0222\u0227\u0005", - "D#\u0002\u0223\u0227\u0005F$\u0002\u0224\u0227\u0005L\'\u0002\u0225", - "\u0227\u0005P)\u0002\u0226\u0222\u0003\u0002\u0002\u0002\u0226\u0223", - "\u0003\u0002\u0002\u0002\u0226\u0224\u0003\u0002\u0002\u0002\u0226\u0225", - "\u0003\u0002\u0002\u0002\u0227\u0229\u0003\u0002\u0002\u0002\u0228\u0221", - "\u0003\u0002\u0002\u0002\u0229\u022a\u0003\u0002\u0002\u0002\u022a\u0228", - "\u0003\u0002\u0002\u0002\u022a\u022b\u0003\u0002\u0002\u0002\u022b\u022c", - "\u0003\u0002\u0002\u0002\u022c\u022d\u0007\u0004\u0002\u0002\u022d;", - "\u0003\u0002\u0002\u0002\u022e\u022f\t\u0005\u0002\u0002\u022f=\u0003", - "\u0002\u0002\u0002\u0230\u0231\u0007>\u0002\u0002\u0231\u0236\u0005", - "@!\u0002\u0232\u0233\u0007\n\u0002\u0002\u0233\u0235\u0005@!\u0002\u0234", - "\u0232\u0003\u0002\u0002\u0002\u0235\u0238\u0003\u0002\u0002\u0002\u0236", - "\u0234\u0003\u0002\u0002\u0002\u0236\u0237\u0003\u0002\u0002\u0002\u0237", - "?\u0003\u0002\u0002\u0002\u0238\u0236\u0003\u0002\u0002\u0002\u0239", - "\u023a\u0007T\u0002\u0002\u023a\u023b\u0007\u0003\u0002\u0002\u023b", - "\u0241\u0005B\"\u0002\u023c\u023f\u0007\n\u0002\u0002\u023d\u0240\u0005", - "F$\u0002\u023e\u0240\u0005L\'\u0002\u023f\u023d\u0003\u0002\u0002\u0002", - "\u023f\u023e\u0003\u0002\u0002\u0002\u0240\u0242\u0003\u0002\u0002\u0002", - "\u0241\u023c\u0003\u0002\u0002\u0002\u0242\u0243\u0003\u0002\u0002\u0002", - "\u0243\u0241\u0003\u0002\u0002\u0002\u0243\u0244\u0003\u0002\u0002\u0002", - "\u0244\u0245\u0003\u0002\u0002\u0002\u0245\u0246\u0007\u0004\u0002\u0002", - "\u0246A\u0003\u0002\u0002\u0002\u0247\u0248\u00079\u0002\u0002\u0248", - "C\u0003\u0002\u0002\u0002\u0249\u024a\u0007T\u0002\u0002\u024a\u024d", - "\u0007\u0003\u0002\u0002\u024b\u024e\u0005F$\u0002\u024c\u024e\u0005", - "L\'\u0002\u024d\u024b\u0003\u0002\u0002\u0002\u024d\u024c\u0003\u0002", - "\u0002\u0002\u024e\u0256\u0003\u0002\u0002\u0002\u024f\u0252\u0007\n", - "\u0002\u0002\u0250\u0253\u0005F$\u0002\u0251\u0253\u0005L\'\u0002\u0252", - "\u0250\u0003\u0002\u0002\u0002\u0252\u0251\u0003\u0002\u0002\u0002\u0253", - "\u0255\u0003\u0002\u0002\u0002\u0254\u024f\u0003\u0002\u0002\u0002\u0255", - "\u0258\u0003\u0002\u0002\u0002\u0256\u0254\u0003\u0002\u0002\u0002\u0256", - "\u0257\u0003\u0002\u0002\u0002\u0257\u0259\u0003\u0002\u0002\u0002\u0258", - "\u0256\u0003\u0002\u0002\u0002\u0259\u025a\u0007\u0004\u0002\u0002\u025a", - "E\u0003\u0002\u0002\u0002\u025b\u0296\u0007T\u0002\u0002\u025c\u025d", - "\u0007T\u0002\u0002\u025d\u025e\u0007\u0003\u0002\u0002\u025e\u0263", - "\u0005H%\u0002\u025f\u0260\u0007\n\u0002\u0002\u0260\u0262\u0005H%\u0002", - "\u0261\u025f\u0003\u0002\u0002\u0002\u0262\u0265\u0003\u0002\u0002\u0002", - "\u0263\u0261\u0003\u0002\u0002\u0002\u0263\u0264\u0003\u0002\u0002\u0002", - "\u0264\u0266\u0003\u0002\u0002\u0002\u0265\u0263\u0003\u0002\u0002\u0002", - "\u0266\u0267\u0007\u0004\u0002\u0002\u0267\u0296\u0003\u0002\u0002\u0002", - "\u0268\u0269\u0007T\u0002\u0002\u0269\u026a\u0007\u0003\u0002\u0002", - "\u026a\u026b\u0007T\u0002\u0002\u026b\u0270\u0007\u0011\u0002\u0002", - "\u026c\u026d\u0007\n\u0002\u0002\u026d\u026f\u0005H%\u0002\u026e\u026c", - "\u0003\u0002\u0002\u0002\u026f\u0272\u0003\u0002\u0002\u0002\u0270\u026e", - "\u0003\u0002\u0002\u0002\u0270\u0271\u0003\u0002\u0002\u0002\u0271\u0273", - "\u0003\u0002\u0002\u0002\u0272\u0270\u0003\u0002\u0002\u0002\u0273\u0296", - "\u0007\u0004\u0002\u0002\u0274\u0275\u0007T\u0002\u0002\u0275\u0276", - "\u0007\u0003\u0002\u0002\u0276\u0277\u0007B\u0002\u0002\u0277\u0278", - "\u0007\u0003\u0002\u0002\u0278\u0279\u0005\u00bc_\u0002\u0279\u027e", - "\u0007\u0004\u0002\u0002\u027a\u027b\u0007\n\u0002\u0002\u027b\u027d", - "\u0005H%\u0002\u027c\u027a\u0003\u0002\u0002\u0002\u027d\u0280\u0003", - "\u0002\u0002\u0002\u027e\u027c\u0003\u0002\u0002\u0002\u027e\u027f\u0003", - "\u0002\u0002\u0002\u027f\u0281\u0003\u0002\u0002\u0002\u0280\u027e\u0003", - "\u0002\u0002\u0002\u0281\u0282\u0007\u0004\u0002\u0002\u0282\u0296\u0003", - "\u0002\u0002\u0002\u0283\u0284\u0007T\u0002\u0002\u0284\u0285\u0007", - "\u0003\u0002\u0002\u0285\u0286\u0007T\u0002\u0002\u0286\u0287\u0007", - "\u0011\u0002\u0002\u0287\u0288\u0007\n\u0002\u0002\u0288\u0289\u0007", - "B\u0002\u0002\u0289\u028a\u0007\u0003\u0002\u0002\u028a\u028b\u0005", - "\u00bc_\u0002\u028b\u0290\u0007\u0004\u0002\u0002\u028c\u028d\u0007", - "\n\u0002\u0002\u028d\u028f\u0005H%\u0002\u028e\u028c\u0003\u0002\u0002", - "\u0002\u028f\u0292\u0003\u0002\u0002\u0002\u0290\u028e\u0003\u0002\u0002", - "\u0002\u0290\u0291\u0003\u0002\u0002\u0002\u0291\u0293\u0003\u0002\u0002", - "\u0002\u0292\u0290\u0003\u0002\u0002\u0002\u0293\u0294\u0007\u0004\u0002", - "\u0002\u0294\u0296\u0003\u0002\u0002\u0002\u0295\u025b\u0003\u0002\u0002", - "\u0002\u0295\u025c\u0003\u0002\u0002\u0002\u0295\u0268\u0003\u0002\u0002", - "\u0002\u0295\u0274\u0003\u0002\u0002\u0002\u0295\u0283\u0003\u0002\u0002", - "\u0002\u0296G\u0003\u0002\u0002\u0002\u0297\u0298\u0007;\u0002\u0002", - "\u0298\u0299\u0007\u0005\u0002\u0002\u0299\u02b0\u0005J&\u0002\u029a", - "\u029b\u0007T\u0002\u0002\u029b\u029d\u0007\u0005\u0002\u0002\u029c", - "\u029e\u0005(\u0015\u0002\u029d\u029c\u0003\u0002\u0002\u0002\u029d", - "\u029e\u0003\u0002\u0002\u0002\u029e\u02a0\u0003\u0002\u0002\u0002\u029f", - "\u02a1\u0005*\u0016\u0002\u02a0\u029f\u0003\u0002\u0002\u0002\u02a0", - "\u02a1\u0003\u0002\u0002\u0002\u02a1\u02a2\u0003\u0002\u0002\u0002\u02a2", - "\u02b0\u0005J&\u0002\u02a3\u02a4\u0007T\u0002\u0002\u02a4\u02a6\u0007", - "\u0005\u0002\u0002\u02a5\u02a7\u0005(\u0015\u0002\u02a6\u02a5\u0003", - "\u0002\u0002\u0002\u02a6\u02a7\u0003\u0002\u0002\u0002\u02a7\u02a8\u0003", - "\u0002\u0002\u0002\u02a8\u02b0\u0005*\u0016\u0002\u02a9\u02aa\u0007", - "T\u0002\u0002\u02aa\u02ab\u0007\u0005\u0002\u0002\u02ab\u02b0\u0005", - "(\u0015\u0002\u02ac\u02ad\u0007T\u0002\u0002\u02ad\u02ae\u0007\u0005", - "\u0002\u0002\u02ae\u02b0\u0005\u00b4[\u0002\u02af\u0297\u0003\u0002", - "\u0002\u0002\u02af\u029a\u0003\u0002\u0002\u0002\u02af\u02a3\u0003\u0002", - "\u0002\u0002\u02af\u02a9\u0003\u0002\u0002\u0002\u02af\u02ac\u0003\u0002", - "\u0002\u0002\u02b0I\u0003\u0002\u0002\u0002\u02b1\u02b6\u0007T\u0002", - "\u0002\u02b2\u02b3\u0007\t\u0002\u0002\u02b3\u02b5\u0007T\u0002\u0002", - "\u02b4\u02b2\u0003\u0002\u0002\u0002\u02b5\u02b8\u0003\u0002\u0002\u0002", - "\u02b6\u02b4\u0003\u0002\u0002\u0002\u02b6\u02b7\u0003\u0002\u0002\u0002", - "\u02b7K\u0003\u0002\u0002\u0002\u02b8\u02b6\u0003\u0002\u0002\u0002", - "\u02b9\u02ba\u00071\u0002\u0002\u02ba\u02bb\u0007\u0003\u0002\u0002", - "\u02bb\u02bc\u0005N(\u0002\u02bc\u02bd\u0007\u0004\u0002\u0002\u02bd", - "M\u0003\u0002\u0002\u0002\u02be\u02ca\u0005J&\u0002\u02bf\u02c0\u0007", - "\u000f\u0002\u0002\u02c0\u02c5\u0007T\u0002\u0002\u02c1\u02c2\u0007", - "\n\u0002\u0002\u02c2\u02c4\u0007T\u0002\u0002\u02c3\u02c1\u0003\u0002", - "\u0002\u0002\u02c4\u02c7\u0003\u0002\u0002\u0002\u02c5\u02c3\u0003\u0002", - "\u0002\u0002\u02c5\u02c6\u0003\u0002\u0002\u0002\u02c6\u02c8\u0003\u0002", - "\u0002\u0002\u02c7\u02c5\u0003\u0002\u0002\u0002\u02c8\u02ca\u0007\u0010", - "\u0002\u0002\u02c9\u02be\u0003\u0002\u0002\u0002\u02c9\u02bf\u0003\u0002", - "\u0002\u0002\u02caO\u0003\u0002\u0002\u0002\u02cb\u02cc\u0007C\u0002", - "\u0002\u02cc\u02cd\u0007\u0003\u0002\u0002\u02cd\u02ce\u0007T\u0002", - "\u0002\u02ce\u02cf\u0007\u0004\u0002\u0002\u02cfQ\u0003\u0002\u0002", - "\u0002\u02d0\u02d1\u0007T\u0002\u0002\u02d1\u02d2\u0007\f\u0002\u0002", - "\u02d2\u02d3\u0005T+\u0002\u02d3\u02d4\u0007 \u0002\u0002\u02d4\u02d5", - "\u0005V,\u0002\u02d5\u02e8\u0003\u0002\u0002\u0002\u02d6\u02d7\u0007", - "T\u0002\u0002\u02d7\u02d8\u0007\t\u0002\u0002\u02d8\u02d9\u0007T\u0002", - "\u0002\u02d9\u02da\u0007\f\u0002\u0002\u02da\u02db\u0005T+\u0002\u02db", - "\u02dc\u0007 \u0002\u0002\u02dc\u02dd\u0005V,\u0002\u02dd\u02e8\u0003", - "\u0002\u0002\u0002\u02de\u02df\u0007T\u0002\u0002\u02df\u02e0\u0007", - "\f\u0002\u0002\u02e0\u02e8\u0005V,\u0002\u02e1\u02e2\u0007D\u0002\u0002", - "\u02e2\u02e3\u0007\f\u0002\u0002\u02e3\u02e4\u0005T+\u0002\u02e4\u02e5", - "\u0007 \u0002\u0002\u02e5\u02e6\u0005Z.\u0002\u02e6\u02e8\u0003\u0002", - "\u0002\u0002\u02e7\u02d0\u0003\u0002\u0002\u0002\u02e7\u02d6\u0003\u0002", - "\u0002\u0002\u02e7\u02de\u0003\u0002\u0002\u0002\u02e7\u02e1\u0003\u0002", - "\u0002\u0002\u02e8S\u0003\u0002\u0002\u0002\u02e9\u02ee\u0005z>\u0002", - "\u02ea\u02eb\u0007\n\u0002\u0002\u02eb\u02ed\u0005z>\u0002\u02ec\u02ea", - "\u0003\u0002\u0002\u0002\u02ed\u02f0\u0003\u0002\u0002\u0002\u02ee\u02ec", - "\u0003\u0002\u0002\u0002\u02ee\u02ef\u0003\u0002\u0002\u0002\u02ef\u02f3", - "\u0003\u0002\u0002\u0002\u02f0\u02ee\u0003\u0002\u0002\u0002\u02f1\u02f3", - "\u0003\u0002\u0002\u0002\u02f2\u02e9\u0003\u0002\u0002\u0002\u02f2\u02f1", - "\u0003\u0002\u0002\u0002\u02f3U\u0003\u0002\u0002\u0002\u02f4\u02f9", - "\u0005X-\u0002\u02f5\u02f6\u0007\n\u0002\u0002\u02f6\u02f8\u0005X-\u0002", - "\u02f7\u02f5\u0003\u0002\u0002\u0002\u02f8\u02fb\u0003\u0002\u0002\u0002", - "\u02f9\u02f7\u0003\u0002\u0002\u0002\u02f9\u02fa\u0003\u0002\u0002\u0002", - "\u02faW\u0003\u0002\u0002\u0002\u02fb\u02f9\u0003\u0002\u0002\u0002", - "\u02fc\u02fd\u0007T\u0002\u0002\u02fd\u02fe\u0007\u001c\u0002\u0002", - "\u02fe\u02ff\u0005z>\u0002\u02ffY\u0003\u0002\u0002\u0002\u0300\u0305", - "\u0005\\/\u0002\u0301\u0302\u0007\n\u0002\u0002\u0302\u0304\u0005\\", - "/\u0002\u0303\u0301\u0003\u0002\u0002\u0002\u0304\u0307\u0003\u0002", - "\u0002\u0002\u0305\u0303\u0003\u0002\u0002\u0002\u0305\u0306\u0003\u0002", - "\u0002\u0002\u0306[\u0003\u0002\u0002\u0002\u0307\u0305\u0003\u0002", - "\u0002\u0002\u0308\u0309\u0007T\u0002\u0002\u0309\u030a\u0007\u0003", - "\u0002\u0002\u030a\u030f\u0005z>\u0002\u030b\u030c\u0007\n\u0002\u0002", - "\u030c\u030e\u0005z>\u0002\u030d\u030b\u0003\u0002\u0002\u0002\u030e", - "\u0311\u0003\u0002\u0002\u0002\u030f\u030d\u0003\u0002\u0002\u0002\u030f", - "\u0310\u0003\u0002\u0002\u0002\u0310\u0312\u0003\u0002\u0002\u0002\u0311", - "\u030f\u0003\u0002\u0002\u0002\u0312\u0313\u0007\u0004\u0002\u0002\u0313", - "]\u0003\u0002\u0002\u0002\u0314\u0315\u0007E\u0002\u0002\u0315\u0316", - "\u0007\f\u0002\u0002\u0316\u0318\u0007T\u0002\u0002\u0317\u0319\u0005", - "`1\u0002\u0318\u0317\u0003\u0002\u0002\u0002\u0318\u0319\u0003\u0002", - "\u0002\u0002\u0319\u031a\u0003\u0002\u0002\u0002\u031a\u031b\u0007\u001f", - "\u0002\u0002\u031b\u031c\u0005d3\u0002\u031c_\u0003\u0002\u0002\u0002", - "\u031d\u031e\u0007\u0003\u0002\u0002\u031e\u0323\u0005b2\u0002\u031f", - "\u0320\u0007\n\u0002\u0002\u0320\u0322\u0005b2\u0002\u0321\u031f\u0003", - "\u0002\u0002\u0002\u0322\u0325\u0003\u0002\u0002\u0002\u0323\u0321\u0003", - "\u0002\u0002\u0002\u0323\u0324\u0003\u0002\u0002\u0002\u0324\u0326\u0003", - "\u0002\u0002\u0002\u0325\u0323\u0003\u0002\u0002\u0002\u0326\u0327\u0007", - "\u0004\u0002\u0002\u0327a\u0003\u0002\u0002\u0002\u0328\u032a\u0005", - "l7\u0002\u0329\u0328\u0003\u0002\u0002\u0002\u0329\u032a\u0003\u0002", - "\u0002\u0002\u032a\u032b\u0003\u0002\u0002\u0002\u032b\u032c\u0007T", - "\u0002\u0002\u032cc\u0003\u0002\u0002\u0002\u032d\u0330\u0005z>\u0002", - "\u032e\u0330\u0005\u00ba^\u0002\u032f\u032d\u0003\u0002\u0002\u0002", - "\u032f\u032e\u0003\u0002\u0002\u0002\u0330e\u0003\u0002\u0002\u0002", - "\u0331\u0332\u0007:\u0002\u0002\u0332\u0333\u0007\f\u0002\u0002\u0333", - "\u0335\u0007T\u0002\u0002\u0334\u0336\u0005h5\u0002\u0335\u0334\u0003", - "\u0002\u0002\u0002\u0335\u0336\u0003\u0002\u0002\u0002\u0336\u0337\u0003", - "\u0002\u0002\u0002\u0337\u0338\u0007\u001f\u0002\u0002\u0338\u033d\u0005", - "z>\u0002\u0339\u033a\u0007\n\u0002\u0002\u033a\u033c\u0005z>\u0002\u033b", - "\u0339\u0003\u0002\u0002\u0002\u033c\u033f\u0003\u0002\u0002\u0002\u033d", - "\u033b\u0003\u0002\u0002\u0002\u033d\u033e\u0003\u0002\u0002\u0002\u033e", - "\u0343\u0003\u0002\u0002\u0002\u033f\u033d\u0003\u0002\u0002\u0002\u0340", - "\u0342\u0005p9\u0002\u0341\u0340\u0003\u0002\u0002\u0002\u0342\u0345", - "\u0003\u0002\u0002\u0002\u0343\u0341\u0003\u0002\u0002\u0002\u0343\u0344", - "\u0003\u0002\u0002\u0002\u0344\u0347\u0003\u0002\u0002\u0002\u0345\u0343", - "\u0003\u0002\u0002\u0002\u0346\u0348\u0005r:\u0002\u0347\u0346\u0003", - "\u0002\u0002\u0002\u0347\u0348\u0003\u0002\u0002\u0002\u0348\u034a\u0003", - "\u0002\u0002\u0002\u0349\u034b\u0005> \u0002\u034a\u0349\u0003\u0002", - "\u0002\u0002\u034a\u034b\u0003\u0002\u0002\u0002\u034bg\u0003\u0002", - "\u0002\u0002\u034c\u034d\u0007\u0003\u0002\u0002\u034d\u0352\u0005j", - "6\u0002\u034e\u034f\u0007\n\u0002\u0002\u034f\u0351\u0005j6\u0002\u0350", - "\u034e\u0003\u0002\u0002\u0002\u0351\u0354\u0003\u0002\u0002\u0002\u0352", - "\u0350\u0003\u0002\u0002\u0002\u0352\u0353\u0003\u0002\u0002\u0002\u0353", - "\u0355\u0003\u0002\u0002\u0002\u0354\u0352\u0003\u0002\u0002\u0002\u0355", - "\u0356\u0007\u0004\u0002\u0002\u0356i\u0003\u0002\u0002\u0002\u0357", - "\u0359\u0005l7\u0002\u0358\u0357\u0003\u0002\u0002\u0002\u0358\u0359", - "\u0003\u0002\u0002\u0002\u0359\u035a\u0003\u0002\u0002\u0002\u035a\u0367", - "\u0007T\u0002\u0002\u035b\u035d\u0005n8\u0002\u035c\u035b\u0003\u0002", - "\u0002\u0002\u035c\u035d\u0003\u0002\u0002\u0002\u035d\u035e\u0003\u0002", - "\u0002\u0002\u035e\u0367\u0007P\u0002\u0002\u035f\u0360\u00071\u0002", - "\u0002\u0360\u0367\u0007T\u0002\u0002\u0361\u0362\u0007F\u0002\u0002", - "\u0362\u0363\u0007G\u0002\u0002\u0363\u0364\u0005J&\u0002\u0364\u0365", - "\u0007T\u0002\u0002\u0365\u0367\u0003\u0002\u0002\u0002\u0366\u0358", - "\u0003\u0002\u0002\u0002\u0366\u035c\u0003\u0002\u0002\u0002\u0366\u035f", - "\u0003\u0002\u0002\u0002\u0366\u0361\u0003\u0002\u0002\u0002\u0367k", - "\u0003\u0002\u0002\u0002\u0368\u036d\u0005n8\u0002\u0369\u036a\u0007", - "H\u0002\u0002\u036a\u036b\u0007G\u0002\u0002\u036b\u036d\u0005n8\u0002", - "\u036c\u0368\u0003\u0002\u0002\u0002\u036c\u0369\u0003\u0002\u0002\u0002", - "\u036dm\u0003\u0002\u0002\u0002\u036e\u036f\t\u0004\u0002\u0002\u036f", - "o\u0003\u0002\u0002\u0002\u0370\u0371\u0007I\u0002\u0002\u0371\u0372", - "\u0007T\u0002\u0002\u0372\u0373\u0007\u0003\u0002\u0002\u0373\u0376", - "\u0005z>\u0002\u0374\u0375\u0007\n\u0002\u0002\u0375\u0377\u0005z>\u0002", - "\u0376\u0374\u0003\u0002\u0002\u0002\u0376\u0377\u0003\u0002\u0002\u0002", - "\u0377\u0378\u0003\u0002\u0002\u0002\u0378\u0379\u0007\u0004\u0002\u0002", - "\u0379q\u0003\u0002\u0002\u0002\u037a\u037b\u0007J\u0002\u0002\u037b", - "\u037c\u0005N(\u0002\u037cs\u0003\u0002\u0002\u0002\u037d\u037e\u0007", - "8\u0002\u0002\u037e\u037f\u0007\f\u0002\u0002\u037f\u0381\u0007T\u0002", - "\u0002\u0380\u0382\u0005h5\u0002\u0381\u0380\u0003\u0002\u0002\u0002", - "\u0381\u0382\u0003\u0002\u0002\u0002\u0382\u0383\u0003\u0002\u0002\u0002", - "\u0383\u0384\u0007\u001f\u0002\u0002\u0384\u0388\u0005z>\u0002\u0385", - "\u0387\u0005p9\u0002\u0386\u0385\u0003\u0002\u0002\u0002\u0387\u038a", - "\u0003\u0002\u0002\u0002\u0388\u0386\u0003\u0002\u0002\u0002\u0388\u0389", - "\u0003\u0002\u0002\u0002\u0389\u038c\u0003\u0002\u0002\u0002\u038a\u0388", - "\u0003\u0002\u0002\u0002\u038b\u038d\u0005r:\u0002\u038c\u038b\u0003", - "\u0002\u0002\u0002\u038c\u038d\u0003\u0002\u0002\u0002\u038d\u038f\u0003", - "\u0002\u0002\u0002\u038e\u0390\u0005> \u0002\u038f\u038e\u0003\u0002", - "\u0002\u0002\u038f\u0390\u0003\u0002\u0002\u0002\u0390u\u0003\u0002", - "\u0002\u0002\u0391\u0395\u0007K\u0002\u0002\u0392\u0394\n\u0006\u0002", - "\u0002\u0393\u0392\u0003\u0002\u0002\u0002\u0394\u0397\u0003\u0002\u0002", - "\u0002\u0395\u0393\u0003\u0002\u0002\u0002\u0395\u0396\u0003\u0002\u0002", - "\u0002\u0396\u0398\u0003\u0002\u0002\u0002\u0397\u0395\u0003\u0002\u0002", - "\u0002\u0398\u0399\u0007L\u0002\u0002\u0399w\u0003\u0002\u0002\u0002", - "\u039a\u039e\u0007M\u0002\u0002\u039b\u039d\n\u0007\u0002\u0002\u039c", - "\u039b\u0003\u0002\u0002\u0002\u039d\u03a0\u0003\u0002\u0002\u0002\u039e", - "\u039c\u0003\u0002\u0002\u0002\u039e\u039f\u0003\u0002\u0002\u0002\u039f", - "\u03a1\u0003\u0002\u0002\u0002\u03a0\u039e\u0003\u0002\u0002\u0002\u03a1", - "\u03a2\u0007N\u0002\u0002\u03a2y\u0003\u0002\u0002\u0002\u03a3\u03a4", - "\u0005|?\u0002\u03a4{\u0003\u0002\u0002\u0002\u03a5\u03aa\u0005~@\u0002", - "\u03a6\u03a7\u0007%\u0002\u0002\u03a7\u03a9\u0005~@\u0002\u03a8\u03a6", - "\u0003\u0002\u0002\u0002\u03a9\u03ac\u0003\u0002\u0002\u0002\u03aa\u03a8", - "\u0003\u0002\u0002\u0002\u03aa\u03ab\u0003\u0002\u0002\u0002\u03ab}", - "\u0003\u0002\u0002\u0002\u03ac\u03aa\u0003\u0002\u0002\u0002\u03ad\u03b2", - "\u0005\u0080A\u0002\u03ae\u03af\u0007\'\u0002\u0002\u03af\u03b1\u0005", - "\u0080A\u0002\u03b0\u03ae\u0003\u0002\u0002\u0002\u03b1\u03b4\u0003", - "\u0002\u0002\u0002\u03b2\u03b0\u0003\u0002\u0002\u0002\u03b2\u03b3\u0003", - "\u0002\u0002\u0002\u03b3\u007f\u0003\u0002\u0002\u0002\u03b4\u03b2\u0003", - "\u0002\u0002\u0002\u03b5\u03b6\u0007&\u0002\u0002\u03b6\u03b9\u0005", - "\u0080A\u0002\u03b7\u03b9\u0005\u0082B\u0002\u03b8\u03b5\u0003\u0002", - "\u0002\u0002\u03b8\u03b7\u0003\u0002\u0002\u0002\u03b9\u0081\u0003\u0002", - "\u0002\u0002\u03ba\u03bd\u0005\u0084C\u0002\u03bb\u03bc\t\b\u0002\u0002", - "\u03bc\u03be\u0005\u0084C\u0002\u03bd\u03bb\u0003\u0002\u0002\u0002", - "\u03bd\u03be\u0003\u0002\u0002\u0002\u03be\u0083\u0003\u0002\u0002\u0002", - "\u03bf\u03c4\u0005\u0086D\u0002\u03c0\u03c1\t\t\u0002\u0002\u03c1\u03c3", - "\u0005\u0086D\u0002\u03c2\u03c0\u0003\u0002\u0002\u0002\u03c3\u03c6", - "\u0003\u0002\u0002\u0002\u03c4\u03c2\u0003\u0002\u0002\u0002\u03c4\u03c5", - "\u0003\u0002\u0002\u0002\u03c5\u0085\u0003\u0002\u0002\u0002\u03c6\u03c4", - "\u0003\u0002\u0002\u0002\u03c7\u03cc\u0005\u0088E\u0002\u03c8\u03c9", - "\t\n\u0002\u0002\u03c9\u03cb\u0005\u0088E\u0002\u03ca\u03c8\u0003\u0002", - "\u0002\u0002\u03cb\u03ce\u0003\u0002\u0002\u0002\u03cc\u03ca\u0003\u0002", - "\u0002\u0002\u03cc\u03cd\u0003\u0002\u0002\u0002\u03cd\u0087\u0003\u0002", - "\u0002\u0002\u03ce\u03cc\u0003\u0002\u0002\u0002\u03cf\u03d0\u0007\u0016", - "\u0002\u0002\u03d0\u03eb\u0005\u0088E\u0002\u03d1\u03d4\u0005\u008a", - "F\u0002\u03d2\u03d3\u0007\f\u0002\u0002\u03d3\u03d5\u0005\u00a4S\u0002", - "\u03d4\u03d2\u0003\u0002\u0002\u0002\u03d4\u03d5\u0003\u0002\u0002\u0002", - "\u03d5\u03eb\u0003\u0002\u0002\u0002\u03d6\u03d7\u0005\u00a8U\u0002", - "\u03d7\u03d8\u0007\u0012\u0002\u0002\u03d8\u03d9\u0005\u00a2R\u0002", - "\u03d9\u03eb\u0003\u0002\u0002\u0002\u03da\u03eb\u0005\u00b2Z\u0002", - "\u03db\u03dc\u0007\u0003\u0002\u0002\u03dc\u03dd\u0005z>\u0002\u03dd", - "\u03de\u0007\u0004\u0002\u0002\u03de\u03eb\u0003\u0002\u0002\u0002\u03df", - "\u03e0\u0007\u000f\u0002\u0002\u03e0\u03e5\u0005z>\u0002\u03e1\u03e2", - "\u0007\n\u0002\u0002\u03e2\u03e4\u0005z>\u0002\u03e3\u03e1\u0003\u0002", - "\u0002\u0002\u03e4\u03e7\u0003\u0002\u0002\u0002\u03e5\u03e3\u0003\u0002", - "\u0002\u0002\u03e5\u03e6\u0003\u0002\u0002\u0002\u03e6\u03e8\u0003\u0002", - "\u0002\u0002\u03e7\u03e5\u0003\u0002\u0002\u0002\u03e8\u03e9\u0007\u0010", - "\u0002\u0002\u03e9\u03eb\u0003\u0002\u0002\u0002\u03ea\u03cf\u0003\u0002", - "\u0002\u0002\u03ea\u03d1\u0003\u0002\u0002\u0002\u03ea\u03d6\u0003\u0002", - "\u0002\u0002\u03ea\u03da\u0003\u0002\u0002\u0002\u03ea\u03db\u0003\u0002", - "\u0002\u0002\u03ea\u03df\u0003\u0002\u0002\u0002\u03eb\u0089\u0003\u0002", - "\u0002\u0002\u03ec\u03ee\u0005\u00aaV\u0002\u03ed\u03ef\u0005\u008c", - "G\u0002\u03ee\u03ed\u0003\u0002\u0002\u0002\u03ef\u03f0\u0003\u0002", - "\u0002\u0002\u03f0\u03ee\u0003\u0002\u0002\u0002\u03f0\u03f1\u0003\u0002", - "\u0002\u0002\u03f1\u03f8\u0003\u0002\u0002\u0002\u03f2\u03f8\u0005\u0098", - "M\u0002\u03f3\u03f8\u0005\u009cO\u0002\u03f4\u03f8\u0005\u00aaV\u0002", - "\u03f5\u03f8\u0007P\u0002\u0002\u03f6\u03f8\u0005\u0092J\u0002\u03f7", - "\u03ec\u0003\u0002\u0002\u0002\u03f7\u03f2\u0003\u0002\u0002\u0002\u03f7", - "\u03f3\u0003\u0002\u0002\u0002\u03f7\u03f4\u0003\u0002\u0002\u0002\u03f7", - "\u03f5\u0003\u0002\u0002\u0002\u03f7\u03f6\u0003\u0002\u0002\u0002\u03f8", - "\u008b\u0003\u0002\u0002\u0002\u03f9\u03fd\u0005\u008eH\u0002\u03fa", - "\u03fd\u0005\u0098M\u0002\u03fb\u03fd\u0005\u00a0Q\u0002\u03fc\u03f9", - "\u0003\u0002\u0002\u0002\u03fc\u03fa\u0003\u0002\u0002\u0002\u03fc\u03fb", - "\u0003\u0002\u0002\u0002\u03fd\u008d\u0003\u0002\u0002\u0002\u03fe\u03ff", - "\u0007\u0003\u0002\u0002\u03ff\u041b\u0007\u0004\u0002\u0002\u0400\u0401", - "\u0007\u0003\u0002\u0002\u0401\u0406\u0005\u0090I\u0002\u0402\u0403", - "\u0007\n\u0002\u0002\u0403\u0405\u0005\u0090I\u0002\u0404\u0402\u0003", - "\u0002\u0002\u0002\u0405\u0408\u0003\u0002\u0002\u0002\u0406\u0404\u0003", - "\u0002\u0002\u0002\u0406\u0407\u0003\u0002\u0002\u0002\u0407\u040b\u0003", - "\u0002\u0002\u0002\u0408\u0406\u0003\u0002\u0002\u0002\u0409\u040a\u0007", - "\n\u0002\u0002\u040a\u040c\u0005z>\u0002\u040b\u0409\u0003\u0002\u0002", - "\u0002\u040b\u040c\u0003\u0002\u0002\u0002\u040c\u040d\u0003\u0002\u0002", - "\u0002\u040d\u040e\u0007\u0004\u0002\u0002\u040e\u041b\u0003\u0002\u0002", - "\u0002\u040f\u0410\u0007\u0003\u0002\u0002\u0410\u0415\u0005z>\u0002", - "\u0411\u0412\u0007\n\u0002\u0002\u0412\u0414\u0005z>\u0002\u0413\u0411", - "\u0003\u0002\u0002\u0002\u0414\u0417\u0003\u0002\u0002\u0002\u0415\u0413", - "\u0003\u0002\u0002\u0002\u0415\u0416\u0003\u0002\u0002\u0002\u0416\u0418", - "\u0003\u0002\u0002\u0002\u0417\u0415\u0003\u0002\u0002\u0002\u0418\u0419", - "\u0007\u0004\u0002\u0002\u0419\u041b\u0003\u0002\u0002\u0002\u041a\u03fe", - "\u0003\u0002\u0002\u0002\u041a\u0400\u0003\u0002\u0002\u0002\u041a\u040f", - "\u0003\u0002\u0002\u0002\u041b\u008f\u0003\u0002\u0002\u0002\u041c\u041d", - "\u0005z>\u0002\u041d\u041e\u0007 \u0002\u0002\u041e\u041f\u0005z>\u0002", - "\u041f\u0091\u0003\u0002\u0002\u0002\u0420\u0421\u0007-\u0002\u0002", - "\u0421\u0422\u0007\u0003\u0002\u0002\u0422\u0423\u0005z>\u0002\u0423", - "\u0424\u0007\n\u0002\u0002\u0424\u0426\u0005\u008aF\u0002\u0425\u0427", - "\u0005\u0094K\u0002\u0426\u0425\u0003\u0002\u0002\u0002\u0426\u0427", - "\u0003\u0002\u0002\u0002\u0427\u0428\u0003\u0002\u0002\u0002\u0428\u0429", - "\u0005\u0096L\u0002\u0429\u042a\u0007\n\u0002\u0002\u042a\u042b\u0005", - "z>\u0002\u042b\u042c\u0007\u0004\u0002\u0002\u042c\u0093\u0003\u0002", - "\u0002\u0002\u042d\u042e\u0007\u000f\u0002\u0002\u042e\u042f\u0005\u00b0", - "Y\u0002\u042f\u0430\u0007\n\u0002\u0002\u0430\u0431\u0005\u00b0Y\u0002", - "\u0431\u0432\u0007\u0010\u0002\u0002\u0432\u0095\u0003\u0002\u0002\u0002", - "\u0433\u0434\u0007\u0011\u0002\u0002\u0434\u0435\u0007U\u0002\u0002", - "\u0435\u0097\u0003\u0002\u0002\u0002\u0436\u0437\u0007\r\u0002\u0002", - "\u0437\u043c\u0005\u009aN\u0002\u0438\u0439\u0007\n\u0002\u0002\u0439", - "\u043b\u0005\u009aN\u0002\u043a\u0438\u0003\u0002\u0002\u0002\u043b", - "\u043e\u0003\u0002\u0002\u0002\u043c\u043a\u0003\u0002\u0002\u0002\u043c", - "\u043d\u0003\u0002\u0002\u0002\u043d\u043f\u0003\u0002\u0002\u0002\u043e", - "\u043c\u0003\u0002\u0002\u0002\u043f\u0440\u0007\u000e\u0002\u0002\u0440", - "\u0099\u0003\u0002\u0002\u0002\u0441\u0442\u0007T\u0002\u0002\u0442", - "\u0443\u0007\u001c\u0002\u0002\u0443\u0446\u0005z>\u0002\u0444\u0446", - "\u0005z>\u0002\u0445\u0441\u0003\u0002\u0002\u0002\u0445\u0444\u0003", - "\u0002\u0002\u0002\u0446\u009b\u0003\u0002\u0002\u0002\u0447\u0448\u0007", - "=\u0002\u0002\u0448\u0449\u0007\u0003\u0002\u0002\u0449\u044e\u0005", - "\u009eP\u0002\u044a\u044b\u0007\n\u0002\u0002\u044b\u044d\u0005\u009e", - "P\u0002\u044c\u044a\u0003\u0002\u0002\u0002\u044d\u0450\u0003\u0002", - "\u0002\u0002\u044e\u044c\u0003\u0002\u0002\u0002\u044e\u044f\u0003\u0002", - "\u0002\u0002\u044f\u0451\u0003\u0002\u0002\u0002\u0450\u044e\u0003\u0002", - "\u0002\u0002\u0451\u0452\u0007\u0004\u0002\u0002\u0452\u009d\u0003\u0002", - "\u0002\u0002\u0453\u0462\u0007R\u0002\u0002\u0454\u0456\u0007S\u0002", - "\u0002\u0455\u0454\u0003\u0002\u0002\u0002\u0455\u0456\u0003\u0002\u0002", - "\u0002\u0456\u0457\u0003\u0002\u0002\u0002\u0457\u0458\u0007\r\u0002", - "\u0002\u0458\u045d\u0007R\u0002\u0002\u0459\u045a\u0007\n\u0002\u0002", - "\u045a\u045c\u0007R\u0002\u0002\u045b\u0459\u0003\u0002\u0002\u0002", - "\u045c\u045f\u0003\u0002\u0002\u0002\u045d\u045b\u0003\u0002\u0002\u0002", - "\u045d\u045e\u0003\u0002\u0002\u0002\u045e\u0460\u0003\u0002\u0002\u0002", - "\u045f\u045d\u0003\u0002\u0002\u0002\u0460\u0462\u0007\u000e\u0002\u0002", - "\u0461\u0453\u0003\u0002\u0002\u0002\u0461\u0455\u0003\u0002\u0002\u0002", - "\u0462\u009f\u0003\u0002\u0002\u0002\u0463\u0464\u0007\t\u0002\u0002", - "\u0464\u0465\u0005\u00acW\u0002\u0465\u00a1\u0003\u0002\u0002\u0002", - "\u0466\u046e\u0005\u00a4S\u0002\u0467\u0468\u0007\u001a\u0002\u0002", - "\u0468\u046e\u0005\u00a4S\u0002\u0469\u046a\u0005\u008aF\u0002\u046a", - "\u046b\u0007\f\u0002\u0002\u046b\u046c\u0005\u00a4S\u0002\u046c\u046e", - "\u0003\u0002\u0002\u0002\u046d\u0466\u0003\u0002\u0002\u0002\u046d\u0467", - "\u0003\u0002\u0002\u0002\u046d\u0469\u0003\u0002\u0002\u0002\u046e\u00a3", - "\u0003\u0002\u0002\u0002\u046f\u047a\u0005\u00aeX\u0002\u0470\u0471", - "\u0005\u00aeX\u0002\u0471\u0472\u0007\u0003\u0002\u0002\u0472\u0475", - "\u0005z>\u0002\u0473\u0474\u0007\n\u0002\u0002\u0474\u0476\u0005z>\u0002", - "\u0475\u0473\u0003\u0002\u0002\u0002\u0475\u0476\u0003\u0002\u0002\u0002", - "\u0476\u0477\u0003\u0002\u0002\u0002\u0477\u0478\u0007\u0004\u0002\u0002", - "\u0478\u047a\u0003\u0002\u0002\u0002\u0479\u046f\u0003\u0002\u0002\u0002", - "\u0479\u0470\u0003\u0002\u0002\u0002\u047a\u00a5\u0003\u0002\u0002\u0002", - "\u047b\u047c\u0007T\u0002\u0002\u047c\u00a7\u0003\u0002\u0002\u0002", - "\u047d\u0482\u0005\u00aaV\u0002\u047e\u047f\u0007\t\u0002\u0002\u047f", - "\u0481\u0005\u00acW\u0002\u0480\u047e\u0003\u0002\u0002\u0002\u0481", - "\u0484\u0003\u0002\u0002\u0002\u0482\u0480\u0003\u0002\u0002\u0002\u0482", - "\u0483\u0003\u0002\u0002\u0002\u0483\u00a9\u0003\u0002\u0002\u0002\u0484", - "\u0482\u0003\u0002\u0002\u0002\u0485\u048b\u0007T\u0002\u0002\u0486", - "\u048b\u0007;\u0002\u0002\u0487\u048b\u0007Q\u0002\u0002\u0488\u048b", - "\u0007R\u0002\u0002\u0489\u048b\u0007S\u0002\u0002\u048a\u0485\u0003", - "\u0002\u0002\u0002\u048a\u0486\u0003\u0002\u0002\u0002\u048a\u0487\u0003", - "\u0002\u0002\u0002\u048a\u0488\u0003\u0002\u0002\u0002\u048a\u0489\u0003", - "\u0002\u0002\u0002\u048b\u00ab\u0003\u0002\u0002\u0002\u048c\u0491\u0007", - "T\u0002\u0002\u048d\u0491\u0007;\u0002\u0002\u048e\u0491\u0007R\u0002", - "\u0002\u048f\u0491\u0007S\u0002\u0002\u0490\u048c\u0003\u0002\u0002", - "\u0002\u0490\u048d\u0003\u0002\u0002\u0002\u0490\u048e\u0003\u0002\u0002", - "\u0002\u0490\u048f\u0003\u0002\u0002\u0002\u0491\u00ad\u0003\u0002\u0002", - "\u0002\u0492\u0493\u0007T\u0002\u0002\u0493\u00af\u0003\u0002\u0002", - "\u0002\u0494\u0497\u0007T\u0002\u0002\u0495\u0497\u0007;\u0002\u0002", - "\u0496\u0494\u0003\u0002\u0002\u0002\u0496\u0495\u0003\u0002\u0002\u0002", - "\u0497\u00b1\u0003\u0002\u0002\u0002\u0498\u049c\u0005\u00b4[\u0002", - "\u0499\u049a\u0007\u000f\u0002\u0002\u049a\u049c\u0007\u0010\u0002\u0002", - "\u049b\u0498\u0003\u0002\u0002\u0002\u049b\u0499\u0003\u0002\u0002\u0002", - "\u049c\u00b3\u0003\u0002\u0002\u0002\u049d\u04a4\u0007Y\u0002\u0002", - "\u049e\u04a4\u0005\u00b8]\u0002\u049f\u04a4\u0007+\u0002\u0002\u04a0", - "\u04a4\u0007,\u0002\u0002\u04a1\u04a4\u0007Z\u0002\u0002\u04a2\u04a4", - "\u0005\u00b6\\\u0002\u04a3\u049d\u0003\u0002\u0002\u0002\u04a3\u049e", - "\u0003\u0002\u0002\u0002\u04a3\u049f\u0003\u0002\u0002\u0002\u04a3\u04a0", - "\u0003\u0002\u0002\u0002\u04a3\u04a1\u0003\u0002\u0002\u0002\u04a3\u04a2", - "\u0003\u0002\u0002\u0002\u04a4\u00b5\u0003\u0002\u0002\u0002\u04a5\u04af", - "\u0007U\u0002\u0002\u04a6\u04a7\u0007\u0016\u0002\u0002\u04a7\u04af", - "\u0007U\u0002\u0002\u04a8\u04af\u0007V\u0002\u0002\u04a9\u04af\u0007", - "W\u0002\u0002\u04aa\u04af\u0007f\u0002\u0002\u04ab\u04af\u0007d\u0002", - "\u0002\u04ac\u04af\u0007e\u0002\u0002\u04ad\u04af\u0007g\u0002\u0002", - "\u04ae\u04a5\u0003\u0002\u0002\u0002\u04ae\u04a6\u0003\u0002\u0002\u0002", - "\u04ae\u04a8\u0003\u0002\u0002\u0002\u04ae\u04a9\u0003\u0002\u0002\u0002", - "\u04ae\u04aa\u0003\u0002\u0002\u0002\u04ae\u04ab\u0003\u0002\u0002\u0002", - "\u04ae\u04ac\u0003\u0002\u0002\u0002\u04ae\u04ad\u0003\u0002\u0002\u0002", - "\u04af\u00b7\u0003\u0002\u0002\u0002\u04b0\u04b7\u0007X\u0002\u0002", - "\u04b1\u04b2\u0007\u0016\u0002\u0002\u04b2\u04b7\u0007X\u0002\u0002", - "\u04b3\u04b7\u0007h\u0002\u0002\u04b4\u04b7\u0007i\u0002\u0002\u04b5", - "\u04b7\u0007j\u0002\u0002\u04b6\u04b0\u0003\u0002\u0002\u0002\u04b6", - "\u04b1\u0003\u0002\u0002\u0002\u04b6\u04b3\u0003\u0002\u0002\u0002\u04b6", - "\u04b4\u0003\u0002\u0002\u0002\u04b6\u04b5\u0003\u0002\u0002\u0002\u04b7", - "\u00b9\u0003\u0002\u0002\u0002\u04b8\u04b9\u0007.\u0002\u0002\u04b9", - "\u04ba\u0007\u0003\u0002\u0002\u04ba\u04bb\u0005\u00bc_\u0002\u04bb", - "\u04be\u0007\u0004\u0002\u0002\u04bc\u04bd\u00075\u0002\u0002\u04bd", - "\u04bf\u0005\u00c0a\u0002\u04be\u04bc\u0003\u0002\u0002\u0002\u04be", - "\u04bf\u0003\u0002\u0002\u0002\u04bf\u04c0\u0003\u0002\u0002\u0002\u04c0", - "\u04c1\u0007/\u0002\u0002\u04c1\u04c2\u0005\u00c4c\u0002\u04c2\u00bb", - "\u0003\u0002\u0002\u0002\u04c3\u04c5\u0005\u00be`\u0002\u04c4\u04c3", - "\u0003\u0002\u0002\u0002\u04c5\u04c6\u0003\u0002\u0002\u0002\u04c6\u04c4", - "\u0003\u0002\u0002\u0002\u04c6\u04c7\u0003\u0002\u0002\u0002\u04c7\u00bd", - "\u0003\u0002\u0002\u0002\u04c8\u04cc\u0007\u0003\u0002\u0002\u04c9\u04cb", - "\u0005\u00bc_\u0002\u04ca\u04c9\u0003\u0002\u0002\u0002\u04cb\u04ce", - "\u0003\u0002\u0002\u0002\u04cc\u04ca\u0003\u0002\u0002\u0002\u04cc\u04cd", - "\u0003\u0002\u0002\u0002\u04cd\u04cf\u0003\u0002\u0002\u0002\u04ce\u04cc", - "\u0003\u0002\u0002\u0002\u04cf\u04d6\u0007\u0004\u0002\u0002\u04d0\u04d6", - "\n\u000b\u0002\u0002\u04d1\u04d6\u0007\u0015\u0002\u0002\u04d2\u04d6", - "\u0007\u0014\u0002\u0002\u04d3\u04d6\u0007\u0013\u0002\u0002\u04d4\u04d6", - "\u0007\u001b\u0002\u0002\u04d5\u04c8\u0003\u0002\u0002\u0002\u04d5\u04d0", - "\u0003\u0002\u0002\u0002\u04d5\u04d1\u0003\u0002\u0002\u0002\u04d5\u04d2", - "\u0003\u0002\u0002\u0002\u04d5\u04d3\u0003\u0002\u0002\u0002\u04d5\u04d4", - "\u0003\u0002\u0002\u0002\u04d6\u00bf\u0003\u0002\u0002\u0002\u04d7\u04dc", - "\u0005\u00c2b\u0002\u04d8\u04d9\u0007\n\u0002\u0002\u04d9\u04db\u0005", - "\u00c2b\u0002\u04da\u04d8\u0003\u0002\u0002\u0002\u04db\u04de\u0003", - "\u0002\u0002\u0002\u04dc\u04da\u0003\u0002\u0002\u0002\u04dc\u04dd\u0003", - "\u0002\u0002\u0002\u04dd\u00c1\u0003\u0002\u0002\u0002\u04de\u04dc\u0003", - "\u0002\u0002\u0002\u04df\u04e2\u0005J&\u0002\u04e0\u04e2\u0007\u0012", - "\u0002\u0002\u04e1\u04df\u0003\u0002\u0002\u0002\u04e1\u04e0\u0003\u0002", - "\u0002\u0002\u04e2\u00c3\u0003\u0002\u0002\u0002\u04e3\u04e8\u0005n", - "8\u0002\u04e4\u04e5\u0007H\u0002\u0002\u04e5\u04e6\u0007G\u0002\u0002", - "\u04e6\u04e8\u0005n8\u0002\u04e7\u04e3\u0003\u0002\u0002\u0002\u04e7", - "\u04e4\u0003\u0002\u0002\u0002\u04e8\u00c5\u0003\u0002\u0002\u0002\u0085", - "\u00c9\u00d1\u00d9\u00dd\u00df\u00e1\u00e8\u00f4\u0106\u0111\u011c\u011f", - "\u0127\u0132\u013b\u0140\u0150\u015a\u0165\u0171\u0178\u0181\u0189\u018d", - "\u0192\u0195\u0199\u019e\u01a2\u01aa\u01b3\u01b8\u01c3\u01c6\u01d0\u01dc", - "\u01e5\u01ec\u01f4\u01f9\u0203\u020e\u021a\u0226\u022a\u0236\u023f\u0243", - "\u024d\u0252\u0256\u0263\u0270\u027e\u0290\u0295\u029d\u02a0\u02a6\u02af", - "\u02b6\u02c5\u02c9\u02e7\u02ee\u02f2\u02f9\u0305\u030f\u0318\u0323\u0329", - "\u032f\u0335\u033d\u0343\u0347\u034a\u0352\u0358\u035c\u0366\u036c\u0376", - "\u0381\u0388\u038c\u038f\u0395\u039e\u03aa\u03b2\u03b8\u03bd\u03c4\u03cc", - "\u03d4\u03e5\u03ea\u03f0\u03f7\u03fc\u0406\u040b\u0415\u041a\u0426\u043c", - "\u0445\u044e\u0455\u045d\u0461\u046d\u0475\u0479\u0482\u048a\u0490\u0496", - "\u049b\u04a3\u04ae\u04b6\u04be\u04c6\u04cc\u04d5\u04dc\u04e1\u04e7"].join(""); +const serializedATN = [4,1,110,1293,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4, +7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, +2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, +20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27, +7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2,34,7, +34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41, +2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2, +49,7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56, +7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7, +63,2,64,7,64,2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70, +2,71,7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2, +78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84,2,85, +7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,7,91,2,92,7, +92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2,98,7,98,1,0,5,0,200, +8,0,10,0,12,0,203,9,0,1,0,1,0,1,0,5,0,208,8,0,10,0,12,0,211,9,0,1,0,1,0, +1,0,1,0,1,0,3,0,218,8,0,1,0,1,0,3,0,222,8,0,5,0,224,8,0,10,0,12,0,227,9, +0,1,0,1,0,1,1,1,1,3,1,233,8,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3, +2,245,8,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, +3,3,3,263,8,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,5,4,272,8,4,10,4,12,4,275,9,4, +1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,3,5,285,8,5,1,5,3,5,288,8,5,1,6,1,6,1,6, +1,6,5,6,294,8,6,10,6,12,6,297,9,6,1,7,1,7,1,8,1,8,1,8,1,8,5,8,305,8,8,10, +8,12,8,308,9,8,1,8,1,8,1,8,1,8,5,8,314,8,8,10,8,12,8,317,9,8,1,8,1,8,1,8, +1,8,1,8,1,8,1,8,1,8,1,8,3,8,328,8,8,1,9,1,9,1,10,1,10,1,10,1,10,1,11,1,11, +1,11,1,11,1,11,1,11,4,11,342,8,11,11,11,12,11,343,1,11,1,11,1,12,1,12,1, +12,1,12,1,12,1,12,3,12,354,8,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,5,13, +363,8,13,10,13,12,13,366,9,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,5,14,375, +8,14,10,14,12,14,378,9,14,1,14,1,14,1,15,1,15,3,15,384,8,15,1,16,1,16,1, +16,1,16,1,16,5,16,391,8,16,10,16,12,16,394,9,16,1,16,1,16,1,17,1,17,1,18, +3,18,401,8,18,1,18,1,18,3,18,405,8,18,1,18,1,18,1,18,3,18,410,8,18,1,18, +3,18,413,8,18,1,18,1,18,3,18,417,8,18,1,18,1,18,1,18,3,18,422,8,18,1,18, +1,18,3,18,426,8,18,1,18,1,18,1,18,1,18,3,18,432,8,18,1,18,1,18,1,18,1,18, +1,18,1,18,3,18,440,8,18,1,18,1,18,1,18,1,18,1,18,1,18,3,18,448,8,18,1,18, +1,18,1,18,1,18,1,18,1,18,1,18,3,18,457,8,18,1,19,1,19,1,19,3,19,462,8,19, +1,19,1,19,1,20,1,20,1,20,1,20,1,20,5,20,471,8,20,10,20,12,20,474,9,20,3, +20,476,8,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,5,22, +489,8,22,10,22,12,22,492,9,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,5,23,501, +8,23,10,23,12,23,504,9,23,1,23,1,23,1,23,1,23,1,23,1,23,3,23,512,8,23,1, +24,1,24,1,24,1,24,1,24,3,24,519,8,24,1,24,1,24,1,24,1,24,5,24,525,8,24,10, +24,12,24,528,9,24,1,24,1,24,3,24,532,8,24,1,25,1,25,1,26,1,26,1,26,1,26, +5,26,540,8,26,10,26,12,26,543,9,26,1,27,1,27,1,27,1,27,1,27,1,27,4,27,551, +8,27,11,27,12,27,552,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,4,28,563,8, +28,11,28,12,28,564,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,3,29, +577,8,29,4,29,579,8,29,11,29,12,29,580,1,29,1,29,1,30,1,30,1,31,1,31,1,31, +1,31,5,31,591,8,31,10,31,12,31,594,9,31,1,32,1,32,1,32,1,32,1,32,1,32,3, +32,602,8,32,4,32,604,8,32,11,32,12,32,605,1,32,1,32,1,33,1,33,1,34,1,34, +1,34,1,34,3,34,616,8,34,1,34,1,34,1,34,3,34,621,8,34,5,34,623,8,34,10,34, +12,34,626,9,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,5,35,636,8,35,10, +35,12,35,639,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,649,8,35, +10,35,12,35,652,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,663, +8,35,10,35,12,35,666,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1, +35,1,35,1,35,1,35,5,35,681,8,35,10,35,12,35,684,9,35,1,35,1,35,3,35,688, +8,35,1,36,1,36,1,36,1,36,1,36,1,36,3,36,696,8,36,1,36,3,36,699,8,36,1,36, +1,36,1,36,1,36,3,36,705,8,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,714, +8,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,723,8,36,1,37,1,37,1,37,5,37, +728,8,37,10,37,12,37,731,9,37,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1, +39,1,39,5,39,743,8,39,10,39,12,39,746,9,39,1,39,3,39,749,8,39,1,40,1,40, +1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1, +41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,3,41,779,8,41, +1,42,1,42,1,42,5,42,784,8,42,10,42,12,42,787,9,42,1,42,3,42,790,8,42,1,43, +1,43,1,43,5,43,795,8,43,10,43,12,43,798,9,43,1,44,1,44,1,44,1,44,1,45,1, +45,1,45,5,45,807,8,45,10,45,12,45,810,9,45,1,46,1,46,1,46,1,46,1,46,5,46, +817,8,46,10,46,12,46,820,9,46,1,46,1,46,1,47,1,47,1,47,1,47,3,47,828,8,47, +1,47,1,47,1,47,1,48,1,48,1,48,1,48,5,48,837,8,48,10,48,12,48,840,9,48,1, +48,1,48,1,49,3,49,845,8,49,1,49,1,49,1,50,1,50,3,50,851,8,50,1,51,1,51,1, +51,1,51,3,51,857,8,51,1,51,1,51,1,51,1,51,5,51,863,8,51,10,51,12,51,866, +9,51,1,51,5,51,869,8,51,10,51,12,51,872,9,51,1,51,3,51,875,8,51,1,51,3,51, +878,8,51,1,52,1,52,1,52,1,52,5,52,884,8,52,10,52,12,52,887,9,52,1,52,1,52, +1,53,3,53,892,8,53,1,53,1,53,3,53,896,8,53,1,53,1,53,1,53,1,53,1,53,1,53, +1,53,1,53,3,53,906,8,53,1,54,1,54,1,54,1,54,3,54,912,8,54,1,55,1,55,1,56, +1,56,1,56,1,56,1,56,1,56,3,56,922,8,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58, +1,58,1,58,3,58,933,8,58,1,58,1,58,1,58,5,58,938,8,58,10,58,12,58,941,9,58, +1,58,3,58,944,8,58,1,58,3,58,947,8,58,1,59,1,59,5,59,951,8,59,10,59,12,59, +954,9,59,1,59,1,59,1,60,1,60,5,60,960,8,60,10,60,12,60,963,9,60,1,60,1,60, +1,61,1,61,1,62,1,62,1,62,5,62,972,8,62,10,62,12,62,975,9,62,1,63,1,63,1, +63,5,63,980,8,63,10,63,12,63,983,9,63,1,64,1,64,1,64,3,64,988,8,64,1,65, +1,65,1,65,3,65,993,8,65,1,66,1,66,1,66,5,66,998,8,66,10,66,12,66,1001,9, +66,1,67,1,67,1,67,5,67,1006,8,67,10,67,12,67,1009,9,67,1,68,1,68,1,68,1, +68,1,68,3,68,1016,8,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68, +1,68,1,68,1,68,5,68,1031,8,68,10,68,12,68,1034,9,68,1,68,1,68,3,68,1038, +8,68,1,69,1,69,4,69,1042,8,69,11,69,12,69,1043,1,69,1,69,1,69,1,69,1,69, +3,69,1051,8,69,1,70,1,70,1,70,3,70,1056,8,70,1,71,1,71,1,71,1,71,1,71,1, +71,5,71,1064,8,71,10,71,12,71,1067,9,71,1,71,1,71,3,71,1071,8,71,1,71,1, +71,1,71,1,71,1,71,1,71,5,71,1079,8,71,10,71,12,71,1082,9,71,1,71,1,71,3, +71,1086,8,71,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,3,73,1098, +8,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1, +75,1,76,1,76,1,76,1,76,5,76,1118,8,76,10,76,12,76,1121,9,76,1,76,1,76,1, +77,1,77,1,77,1,77,3,77,1129,8,77,1,78,1,78,1,78,1,78,1,78,5,78,1136,8,78, +10,78,12,78,1139,9,78,1,78,1,78,1,79,1,79,3,79,1145,8,79,1,79,1,79,1,79, +1,79,5,79,1151,8,79,10,79,12,79,1154,9,79,1,79,3,79,1157,8,79,1,80,1,80, +1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,3,81,1169,8,81,1,82,1,82,1,82,1, +82,1,82,1,82,3,82,1177,8,82,1,82,1,82,3,82,1181,8,82,1,83,1,83,1,84,1,84, +1,84,5,84,1188,8,84,10,84,12,84,1191,9,84,1,85,1,85,1,85,1,85,1,85,3,85, +1198,8,85,1,86,1,86,1,86,1,86,3,86,1204,8,86,1,87,1,87,1,88,1,88,3,88,1210, +8,88,1,89,1,89,1,89,3,89,1215,8,89,1,90,1,90,1,90,1,90,1,90,1,90,3,90,1223, +8,90,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,3,91,1234,8,91,1,92,1, +92,1,92,1,92,1,92,1,92,3,92,1242,8,92,1,93,1,93,1,93,1,93,1,93,1,93,3,93, +1250,8,93,1,93,1,93,1,93,1,94,4,94,1256,8,94,11,94,12,94,1257,1,95,1,95, +5,95,1262,8,95,10,95,12,95,1265,9,95,1,95,1,95,1,95,1,95,1,95,1,95,3,95, +1273,8,95,1,96,1,96,1,96,5,96,1278,8,96,10,96,12,96,1281,9,96,1,97,1,97, +3,97,1285,8,97,1,98,1,98,1,98,1,98,3,98,1291,8,98,1,98,0,0,99,0,2,4,6,8, +10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56, +58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104, +106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140, +142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176, +178,180,182,184,186,188,190,192,194,196,0,10,1,0,48,49,1,0,55,56,2,0,57, +57,85,85,2,0,55,55,63,63,1,0,74,74,1,0,76,76,4,0,3,3,5,6,27,29,31,34,2,0, +20,20,22,22,4,0,15,15,21,21,23,23,40,40,1,0,1,2,1397,0,201,1,0,0,0,2,232, +1,0,0,0,4,244,1,0,0,0,6,262,1,0,0,0,8,264,1,0,0,0,10,278,1,0,0,0,12,289, +1,0,0,0,14,298,1,0,0,0,16,327,1,0,0,0,18,329,1,0,0,0,20,331,1,0,0,0,22,335, +1,0,0,0,24,353,1,0,0,0,26,355,1,0,0,0,28,367,1,0,0,0,30,383,1,0,0,0,32,385, +1,0,0,0,34,397,1,0,0,0,36,456,1,0,0,0,38,458,1,0,0,0,40,465,1,0,0,0,42,479, +1,0,0,0,44,484,1,0,0,0,46,511,1,0,0,0,48,531,1,0,0,0,50,533,1,0,0,0,52,535, +1,0,0,0,54,544,1,0,0,0,56,556,1,0,0,0,58,568,1,0,0,0,60,584,1,0,0,0,62,586, +1,0,0,0,64,595,1,0,0,0,66,609,1,0,0,0,68,611,1,0,0,0,70,687,1,0,0,0,72,722, +1,0,0,0,74,724,1,0,0,0,76,732,1,0,0,0,78,748,1,0,0,0,80,750,1,0,0,0,82,778, +1,0,0,0,84,789,1,0,0,0,86,791,1,0,0,0,88,799,1,0,0,0,90,803,1,0,0,0,92,811, +1,0,0,0,94,823,1,0,0,0,96,832,1,0,0,0,98,844,1,0,0,0,100,850,1,0,0,0,102, +852,1,0,0,0,104,879,1,0,0,0,106,905,1,0,0,0,108,911,1,0,0,0,110,913,1,0, +0,0,112,915,1,0,0,0,114,925,1,0,0,0,116,928,1,0,0,0,118,948,1,0,0,0,120, +957,1,0,0,0,122,966,1,0,0,0,124,968,1,0,0,0,126,976,1,0,0,0,128,987,1,0, +0,0,130,989,1,0,0,0,132,994,1,0,0,0,134,1002,1,0,0,0,136,1037,1,0,0,0,138, +1050,1,0,0,0,140,1055,1,0,0,0,142,1085,1,0,0,0,144,1087,1,0,0,0,146,1091, +1,0,0,0,148,1104,1,0,0,0,150,1110,1,0,0,0,152,1113,1,0,0,0,154,1128,1,0, +0,0,156,1130,1,0,0,0,158,1156,1,0,0,0,160,1158,1,0,0,0,162,1168,1,0,0,0, +164,1180,1,0,0,0,166,1182,1,0,0,0,168,1184,1,0,0,0,170,1197,1,0,0,0,172, +1203,1,0,0,0,174,1205,1,0,0,0,176,1209,1,0,0,0,178,1214,1,0,0,0,180,1222, +1,0,0,0,182,1233,1,0,0,0,184,1241,1,0,0,0,186,1243,1,0,0,0,188,1255,1,0, +0,0,190,1272,1,0,0,0,192,1274,1,0,0,0,194,1284,1,0,0,0,196,1290,1,0,0,0, +198,200,3,6,3,0,199,198,1,0,0,0,200,203,1,0,0,0,201,199,1,0,0,0,201,202, +1,0,0,0,202,209,1,0,0,0,203,201,1,0,0,0,204,205,3,2,1,0,205,206,5,9,0,0, +206,208,1,0,0,0,207,204,1,0,0,0,208,211,1,0,0,0,209,207,1,0,0,0,209,210, +1,0,0,0,210,225,1,0,0,0,211,209,1,0,0,0,212,213,3,4,2,0,213,214,5,9,0,0, +214,224,1,0,0,0,215,217,3,118,59,0,216,218,5,9,0,0,217,216,1,0,0,0,217,218, +1,0,0,0,218,224,1,0,0,0,219,221,3,120,60,0,220,222,5,9,0,0,221,220,1,0,0, +0,221,222,1,0,0,0,222,224,1,0,0,0,223,212,1,0,0,0,223,215,1,0,0,0,223,219, +1,0,0,0,224,227,1,0,0,0,225,223,1,0,0,0,225,226,1,0,0,0,226,228,1,0,0,0, +227,225,1,0,0,0,228,229,5,0,0,1,229,1,1,0,0,0,230,233,3,8,4,0,231,233,3, +12,6,0,232,230,1,0,0,0,232,231,1,0,0,0,233,3,1,0,0,0,234,245,3,16,8,0,235, +245,3,18,9,0,236,245,3,28,14,0,237,245,3,52,26,0,238,245,3,54,27,0,239,245, +3,56,28,0,240,245,3,82,41,0,241,245,3,94,47,0,242,245,3,102,51,0,243,245, +3,116,58,0,244,234,1,0,0,0,244,235,1,0,0,0,244,236,1,0,0,0,244,237,1,0,0, +0,244,238,1,0,0,0,244,239,1,0,0,0,244,240,1,0,0,0,244,241,1,0,0,0,244,242, +1,0,0,0,244,243,1,0,0,0,245,5,1,0,0,0,246,247,5,46,0,0,247,248,5,1,0,0,248, +249,5,85,0,0,249,263,5,2,0,0,250,251,5,46,0,0,251,252,5,1,0,0,252,253,5, +85,0,0,253,254,5,8,0,0,254,255,5,90,0,0,255,263,5,2,0,0,256,257,5,46,0,0, +257,258,5,1,0,0,258,259,5,85,0,0,259,260,5,8,0,0,260,261,5,86,0,0,261,263, +5,2,0,0,262,246,1,0,0,0,262,250,1,0,0,0,262,256,1,0,0,0,263,7,1,0,0,0,264, +265,5,38,0,0,265,266,5,85,0,0,266,267,5,85,0,0,267,268,5,1,0,0,268,273,3, +10,5,0,269,270,5,8,0,0,270,272,3,10,5,0,271,269,1,0,0,0,272,275,1,0,0,0, +273,271,1,0,0,0,273,274,1,0,0,0,274,276,1,0,0,0,275,273,1,0,0,0,276,277, +5,2,0,0,277,9,1,0,0,0,278,287,5,85,0,0,279,280,5,3,0,0,280,281,5,39,0,0, +281,282,5,1,0,0,282,284,5,85,0,0,283,285,5,85,0,0,284,283,1,0,0,0,284,285, +1,0,0,0,285,286,1,0,0,0,286,288,5,2,0,0,287,279,1,0,0,0,287,288,1,0,0,0, +288,11,1,0,0,0,289,290,5,47,0,0,290,295,3,14,7,0,291,292,5,8,0,0,292,294, +3,14,7,0,293,291,1,0,0,0,294,297,1,0,0,0,295,293,1,0,0,0,295,296,1,0,0,0, +296,13,1,0,0,0,297,295,1,0,0,0,298,299,5,85,0,0,299,15,1,0,0,0,300,301,5, +50,0,0,301,306,3,74,37,0,302,303,5,8,0,0,303,305,3,74,37,0,304,302,1,0,0, +0,305,308,1,0,0,0,306,304,1,0,0,0,306,307,1,0,0,0,307,328,1,0,0,0,308,306, +1,0,0,0,309,310,5,50,0,0,310,315,5,85,0,0,311,312,5,8,0,0,312,314,5,85,0, +0,313,311,1,0,0,0,314,317,1,0,0,0,315,313,1,0,0,0,315,316,1,0,0,0,316,318, +1,0,0,0,317,315,1,0,0,0,318,319,5,51,0,0,319,328,3,74,37,0,320,321,5,50, +0,0,321,322,5,78,0,0,322,323,5,51,0,0,323,324,3,74,37,0,324,325,5,77,0,0, +325,326,5,85,0,0,326,328,1,0,0,0,327,300,1,0,0,0,327,309,1,0,0,0,327,320, +1,0,0,0,328,17,1,0,0,0,329,330,3,22,11,0,330,19,1,0,0,0,331,332,3,22,11, +0,332,333,5,9,0,0,333,334,5,0,0,1,334,21,1,0,0,0,335,336,5,52,0,0,336,337, +5,85,0,0,337,341,5,9,0,0,338,339,3,24,12,0,339,340,5,9,0,0,340,342,1,0,0, +0,341,338,1,0,0,0,342,343,1,0,0,0,343,341,1,0,0,0,343,344,1,0,0,0,344,345, +1,0,0,0,345,346,5,53,0,0,346,23,1,0,0,0,347,354,3,16,8,0,348,354,3,28,14, +0,349,354,3,52,26,0,350,354,3,82,41,0,351,354,3,94,47,0,352,354,3,26,13, +0,353,347,1,0,0,0,353,348,1,0,0,0,353,349,1,0,0,0,353,350,1,0,0,0,353,351, +1,0,0,0,353,352,1,0,0,0,354,25,1,0,0,0,355,356,5,54,0,0,356,357,5,10,0,0, +357,358,5,85,0,0,358,359,5,29,0,0,359,364,3,122,61,0,360,361,5,8,0,0,361, +363,3,122,61,0,362,360,1,0,0,0,363,366,1,0,0,0,364,362,1,0,0,0,364,365,1, +0,0,0,365,27,1,0,0,0,366,364,1,0,0,0,367,368,5,85,0,0,368,369,5,26,0,0,369, +370,7,0,0,0,370,371,5,1,0,0,371,376,3,30,15,0,372,373,5,8,0,0,373,375,3, +30,15,0,374,372,1,0,0,0,375,378,1,0,0,0,376,374,1,0,0,0,376,377,1,0,0,0, +377,379,1,0,0,0,378,376,1,0,0,0,379,380,5,2,0,0,380,29,1,0,0,0,381,384,3, +32,16,0,382,384,3,46,23,0,383,381,1,0,0,0,383,382,1,0,0,0,384,31,1,0,0,0, +385,386,3,34,17,0,386,387,5,1,0,0,387,392,3,36,18,0,388,389,5,8,0,0,389, +391,3,36,18,0,390,388,1,0,0,0,391,394,1,0,0,0,392,390,1,0,0,0,392,393,1, +0,0,0,393,395,1,0,0,0,394,392,1,0,0,0,395,396,5,2,0,0,396,33,1,0,0,0,397, +398,7,1,0,0,398,35,1,0,0,0,399,401,5,85,0,0,400,399,1,0,0,0,400,401,1,0, +0,0,401,402,1,0,0,0,402,457,5,85,0,0,403,405,5,85,0,0,404,403,1,0,0,0,404, +405,1,0,0,0,405,406,1,0,0,0,406,407,5,85,0,0,407,409,5,3,0,0,408,410,3,38, +19,0,409,408,1,0,0,0,409,410,1,0,0,0,410,412,1,0,0,0,411,413,3,40,20,0,412, +411,1,0,0,0,412,413,1,0,0,0,413,414,1,0,0,0,414,457,3,74,37,0,415,417,5, +85,0,0,416,415,1,0,0,0,416,417,1,0,0,0,417,418,1,0,0,0,418,419,5,85,0,0, +419,421,5,3,0,0,420,422,3,38,19,0,421,420,1,0,0,0,421,422,1,0,0,0,422,423, +1,0,0,0,423,457,3,40,20,0,424,426,5,85,0,0,425,424,1,0,0,0,425,426,1,0,0, +0,426,427,1,0,0,0,427,428,5,85,0,0,428,429,5,3,0,0,429,457,3,38,19,0,430, +432,5,85,0,0,431,430,1,0,0,0,431,432,1,0,0,0,432,433,1,0,0,0,433,434,5,85, +0,0,434,435,5,3,0,0,435,436,3,42,21,0,436,437,3,74,37,0,437,457,1,0,0,0, +438,440,5,85,0,0,439,438,1,0,0,0,439,440,1,0,0,0,440,441,1,0,0,0,441,442, +5,85,0,0,442,443,5,3,0,0,443,457,3,42,21,0,444,447,5,57,0,0,445,446,5,3, +0,0,446,448,3,74,37,0,447,445,1,0,0,0,447,448,1,0,0,0,448,457,1,0,0,0,449, +450,5,57,0,0,450,457,3,44,22,0,451,452,5,85,0,0,452,453,5,85,0,0,453,454, +5,3,0,0,454,455,5,57,0,0,455,457,3,44,22,0,456,400,1,0,0,0,456,404,1,0,0, +0,456,416,1,0,0,0,456,425,1,0,0,0,456,431,1,0,0,0,456,439,1,0,0,0,456,444, +1,0,0,0,456,449,1,0,0,0,456,451,1,0,0,0,457,37,1,0,0,0,458,459,5,39,0,0, +459,461,5,1,0,0,460,462,3,180,90,0,461,460,1,0,0,0,461,462,1,0,0,0,462,463, +1,0,0,0,463,464,5,2,0,0,464,39,1,0,0,0,465,466,5,58,0,0,466,475,5,1,0,0, +467,472,3,180,90,0,468,469,5,8,0,0,469,471,3,180,90,0,470,468,1,0,0,0,471, +474,1,0,0,0,472,470,1,0,0,0,472,473,1,0,0,0,473,476,1,0,0,0,474,472,1,0, +0,0,475,467,1,0,0,0,475,476,1,0,0,0,476,477,1,0,0,0,477,478,5,2,0,0,478, +41,1,0,0,0,479,480,5,79,0,0,480,481,5,1,0,0,481,482,3,74,37,0,482,483,5, +2,0,0,483,43,1,0,0,0,484,485,5,1,0,0,485,490,3,74,37,0,486,487,5,8,0,0,487, +489,3,74,37,0,488,486,1,0,0,0,489,492,1,0,0,0,490,488,1,0,0,0,490,491,1, +0,0,0,491,493,1,0,0,0,492,490,1,0,0,0,493,494,5,2,0,0,494,45,1,0,0,0,495, +496,5,59,0,0,496,497,5,1,0,0,497,502,3,48,24,0,498,499,5,8,0,0,499,501,3, +48,24,0,500,498,1,0,0,0,501,504,1,0,0,0,502,500,1,0,0,0,502,503,1,0,0,0, +503,505,1,0,0,0,504,502,1,0,0,0,505,506,5,2,0,0,506,512,1,0,0,0,507,508, +5,59,0,0,508,509,5,1,0,0,509,510,5,15,0,0,510,512,5,2,0,0,511,495,1,0,0, +0,511,507,1,0,0,0,512,47,1,0,0,0,513,532,7,2,0,0,514,515,5,11,0,0,515,516, +5,15,0,0,516,532,5,12,0,0,517,519,5,85,0,0,518,517,1,0,0,0,518,519,1,0,0, +0,519,520,1,0,0,0,520,521,5,11,0,0,521,526,3,50,25,0,522,523,5,8,0,0,523, +525,3,50,25,0,524,522,1,0,0,0,525,528,1,0,0,0,526,524,1,0,0,0,526,527,1, +0,0,0,527,529,1,0,0,0,528,526,1,0,0,0,529,530,5,12,0,0,530,532,1,0,0,0,531, +513,1,0,0,0,531,514,1,0,0,0,531,518,1,0,0,0,532,49,1,0,0,0,533,534,7,2,0, +0,534,51,1,0,0,0,535,536,5,60,0,0,536,541,3,58,29,0,537,538,5,8,0,0,538, +540,3,58,29,0,539,537,1,0,0,0,540,543,1,0,0,0,541,539,1,0,0,0,541,542,1, +0,0,0,542,53,1,0,0,0,543,541,1,0,0,0,544,545,5,60,0,0,545,546,3,74,37,0, +546,547,5,1,0,0,547,550,5,61,0,0,548,549,5,8,0,0,549,551,3,122,61,0,550, +548,1,0,0,0,551,552,1,0,0,0,552,550,1,0,0,0,552,553,1,0,0,0,553,554,1,0, +0,0,554,555,5,2,0,0,555,55,1,0,0,0,556,557,5,60,0,0,557,558,3,74,37,0,558, +559,5,1,0,0,559,562,5,62,0,0,560,561,5,8,0,0,561,563,5,85,0,0,562,560,1, +0,0,0,563,564,1,0,0,0,564,562,1,0,0,0,564,565,1,0,0,0,565,566,1,0,0,0,566, +567,5,2,0,0,567,57,1,0,0,0,568,569,3,74,37,0,569,570,5,1,0,0,570,578,3,60, +30,0,571,576,5,8,0,0,572,577,3,68,34,0,573,577,3,70,35,0,574,577,3,76,38, +0,575,577,3,80,40,0,576,572,1,0,0,0,576,573,1,0,0,0,576,574,1,0,0,0,576, +575,1,0,0,0,577,579,1,0,0,0,578,571,1,0,0,0,579,580,1,0,0,0,580,578,1,0, +0,0,580,581,1,0,0,0,581,582,1,0,0,0,582,583,5,2,0,0,583,59,1,0,0,0,584,585, +7,3,0,0,585,61,1,0,0,0,586,587,5,60,0,0,587,592,3,64,32,0,588,589,5,8,0, +0,589,591,3,64,32,0,590,588,1,0,0,0,591,594,1,0,0,0,592,590,1,0,0,0,592, +593,1,0,0,0,593,63,1,0,0,0,594,592,1,0,0,0,595,596,5,85,0,0,596,597,5,1, +0,0,597,603,3,66,33,0,598,601,5,8,0,0,599,602,3,70,35,0,600,602,3,76,38, +0,601,599,1,0,0,0,601,600,1,0,0,0,602,604,1,0,0,0,603,598,1,0,0,0,604,605, +1,0,0,0,605,603,1,0,0,0,605,606,1,0,0,0,606,607,1,0,0,0,607,608,5,2,0,0, +608,65,1,0,0,0,609,610,5,55,0,0,610,67,1,0,0,0,611,612,5,85,0,0,612,615, +5,1,0,0,613,616,3,70,35,0,614,616,3,76,38,0,615,613,1,0,0,0,615,614,1,0, +0,0,616,624,1,0,0,0,617,620,5,8,0,0,618,621,3,70,35,0,619,621,3,76,38,0, +620,618,1,0,0,0,620,619,1,0,0,0,621,623,1,0,0,0,622,617,1,0,0,0,623,626, +1,0,0,0,624,622,1,0,0,0,624,625,1,0,0,0,625,627,1,0,0,0,626,624,1,0,0,0, +627,628,5,2,0,0,628,69,1,0,0,0,629,688,5,85,0,0,630,631,5,85,0,0,631,632, +5,1,0,0,632,637,3,72,36,0,633,634,5,8,0,0,634,636,3,72,36,0,635,633,1,0, +0,0,636,639,1,0,0,0,637,635,1,0,0,0,637,638,1,0,0,0,638,640,1,0,0,0,639, +637,1,0,0,0,640,641,5,2,0,0,641,688,1,0,0,0,642,643,5,85,0,0,643,644,5,1, +0,0,644,645,5,85,0,0,645,650,5,15,0,0,646,647,5,8,0,0,647,649,3,72,36,0, +648,646,1,0,0,0,649,652,1,0,0,0,650,648,1,0,0,0,650,651,1,0,0,0,651,653, +1,0,0,0,652,650,1,0,0,0,653,688,5,2,0,0,654,655,5,85,0,0,655,656,5,1,0,0, +656,657,5,64,0,0,657,658,5,1,0,0,658,659,3,188,94,0,659,664,5,2,0,0,660, +661,5,8,0,0,661,663,3,72,36,0,662,660,1,0,0,0,663,666,1,0,0,0,664,662,1, +0,0,0,664,665,1,0,0,0,665,667,1,0,0,0,666,664,1,0,0,0,667,668,5,2,0,0,668, +688,1,0,0,0,669,670,5,85,0,0,670,671,5,1,0,0,671,672,5,85,0,0,672,673,5, +15,0,0,673,674,5,8,0,0,674,675,5,64,0,0,675,676,5,1,0,0,676,677,3,188,94, +0,677,682,5,2,0,0,678,679,5,8,0,0,679,681,3,72,36,0,680,678,1,0,0,0,681, +684,1,0,0,0,682,680,1,0,0,0,682,683,1,0,0,0,683,685,1,0,0,0,684,682,1,0, +0,0,685,686,5,2,0,0,686,688,1,0,0,0,687,629,1,0,0,0,687,630,1,0,0,0,687, +642,1,0,0,0,687,654,1,0,0,0,687,669,1,0,0,0,688,71,1,0,0,0,689,690,5,57, +0,0,690,691,5,3,0,0,691,723,3,74,37,0,692,693,5,85,0,0,693,695,5,3,0,0,694, +696,3,38,19,0,695,694,1,0,0,0,695,696,1,0,0,0,696,698,1,0,0,0,697,699,3, +40,20,0,698,697,1,0,0,0,698,699,1,0,0,0,699,700,1,0,0,0,700,723,3,74,37, +0,701,702,5,85,0,0,702,704,5,3,0,0,703,705,3,38,19,0,704,703,1,0,0,0,704, +705,1,0,0,0,705,706,1,0,0,0,706,723,3,40,20,0,707,708,5,85,0,0,708,709,5, +3,0,0,709,723,3,38,19,0,710,711,5,85,0,0,711,713,5,3,0,0,712,714,3,42,21, +0,713,712,1,0,0,0,713,714,1,0,0,0,714,715,1,0,0,0,715,723,3,74,37,0,716, +717,5,85,0,0,717,718,5,3,0,0,718,723,3,42,21,0,719,720,5,85,0,0,720,721, +5,3,0,0,721,723,3,180,90,0,722,689,1,0,0,0,722,692,1,0,0,0,722,701,1,0,0, +0,722,707,1,0,0,0,722,710,1,0,0,0,722,716,1,0,0,0,722,719,1,0,0,0,723,73, +1,0,0,0,724,729,5,85,0,0,725,726,5,7,0,0,726,728,5,85,0,0,727,725,1,0,0, +0,728,731,1,0,0,0,729,727,1,0,0,0,729,730,1,0,0,0,730,75,1,0,0,0,731,729, +1,0,0,0,732,733,5,47,0,0,733,734,5,1,0,0,734,735,3,78,39,0,735,736,5,2,0, +0,736,77,1,0,0,0,737,749,3,74,37,0,738,739,5,13,0,0,739,744,5,85,0,0,740, +741,5,8,0,0,741,743,5,85,0,0,742,740,1,0,0,0,743,746,1,0,0,0,744,742,1,0, +0,0,744,745,1,0,0,0,745,747,1,0,0,0,746,744,1,0,0,0,747,749,5,14,0,0,748, +737,1,0,0,0,748,738,1,0,0,0,749,79,1,0,0,0,750,751,5,65,0,0,751,752,5,1, +0,0,752,753,5,85,0,0,753,754,5,2,0,0,754,81,1,0,0,0,755,756,5,85,0,0,756, +757,5,10,0,0,757,758,3,84,42,0,758,759,5,30,0,0,759,760,3,86,43,0,760,779, +1,0,0,0,761,762,5,85,0,0,762,763,5,7,0,0,763,764,5,85,0,0,764,765,5,10,0, +0,765,766,3,84,42,0,766,767,5,30,0,0,767,768,3,86,43,0,768,779,1,0,0,0,769, +770,5,85,0,0,770,771,5,10,0,0,771,779,3,86,43,0,772,773,5,66,0,0,773,774, +5,10,0,0,774,775,3,84,42,0,775,776,5,30,0,0,776,777,3,90,45,0,777,779,1, +0,0,0,778,755,1,0,0,0,778,761,1,0,0,0,778,769,1,0,0,0,778,772,1,0,0,0,779, +83,1,0,0,0,780,785,3,122,61,0,781,782,5,8,0,0,782,784,3,122,61,0,783,781, +1,0,0,0,784,787,1,0,0,0,785,783,1,0,0,0,785,786,1,0,0,0,786,790,1,0,0,0, +787,785,1,0,0,0,788,790,1,0,0,0,789,780,1,0,0,0,789,788,1,0,0,0,790,85,1, +0,0,0,791,796,3,88,44,0,792,793,5,8,0,0,793,795,3,88,44,0,794,792,1,0,0, +0,795,798,1,0,0,0,796,794,1,0,0,0,796,797,1,0,0,0,797,87,1,0,0,0,798,796, +1,0,0,0,799,800,5,85,0,0,800,801,5,26,0,0,801,802,3,122,61,0,802,89,1,0, +0,0,803,808,3,92,46,0,804,805,5,8,0,0,805,807,3,92,46,0,806,804,1,0,0,0, +807,810,1,0,0,0,808,806,1,0,0,0,808,809,1,0,0,0,809,91,1,0,0,0,810,808,1, +0,0,0,811,812,5,85,0,0,812,813,5,1,0,0,813,818,3,122,61,0,814,815,5,8,0, +0,815,817,3,122,61,0,816,814,1,0,0,0,817,820,1,0,0,0,818,816,1,0,0,0,818, +819,1,0,0,0,819,821,1,0,0,0,820,818,1,0,0,0,821,822,5,2,0,0,822,93,1,0,0, +0,823,824,5,67,0,0,824,825,5,10,0,0,825,827,5,85,0,0,826,828,3,96,48,0,827, +826,1,0,0,0,827,828,1,0,0,0,828,829,1,0,0,0,829,830,5,29,0,0,830,831,3,100, +50,0,831,95,1,0,0,0,832,833,5,1,0,0,833,838,3,98,49,0,834,835,5,8,0,0,835, +837,3,98,49,0,836,834,1,0,0,0,837,840,1,0,0,0,838,836,1,0,0,0,838,839,1, +0,0,0,839,841,1,0,0,0,840,838,1,0,0,0,841,842,5,2,0,0,842,97,1,0,0,0,843, +845,3,108,54,0,844,843,1,0,0,0,844,845,1,0,0,0,845,846,1,0,0,0,846,847,5, +85,0,0,847,99,1,0,0,0,848,851,3,122,61,0,849,851,3,186,93,0,850,848,1,0, +0,0,850,849,1,0,0,0,851,101,1,0,0,0,852,853,5,56,0,0,853,854,5,10,0,0,854, +856,5,85,0,0,855,857,3,104,52,0,856,855,1,0,0,0,856,857,1,0,0,0,857,858, +1,0,0,0,858,859,5,29,0,0,859,864,3,122,61,0,860,861,5,8,0,0,861,863,3,122, +61,0,862,860,1,0,0,0,863,866,1,0,0,0,864,862,1,0,0,0,864,865,1,0,0,0,865, +870,1,0,0,0,866,864,1,0,0,0,867,869,3,112,56,0,868,867,1,0,0,0,869,872,1, +0,0,0,870,868,1,0,0,0,870,871,1,0,0,0,871,874,1,0,0,0,872,870,1,0,0,0,873, +875,3,114,57,0,874,873,1,0,0,0,874,875,1,0,0,0,875,877,1,0,0,0,876,878,3, +62,31,0,877,876,1,0,0,0,877,878,1,0,0,0,878,103,1,0,0,0,879,880,5,1,0,0, +880,885,3,106,53,0,881,882,5,8,0,0,882,884,3,106,53,0,883,881,1,0,0,0,884, +887,1,0,0,0,885,883,1,0,0,0,885,886,1,0,0,0,886,888,1,0,0,0,887,885,1,0, +0,0,888,889,5,2,0,0,889,105,1,0,0,0,890,892,3,108,54,0,891,890,1,0,0,0,891, +892,1,0,0,0,892,893,1,0,0,0,893,906,5,85,0,0,894,896,3,110,55,0,895,894, +1,0,0,0,895,896,1,0,0,0,896,897,1,0,0,0,897,906,5,81,0,0,898,899,5,47,0, +0,899,906,5,85,0,0,900,901,5,68,0,0,901,902,5,69,0,0,902,903,3,74,37,0,903, +904,5,85,0,0,904,906,1,0,0,0,905,891,1,0,0,0,905,895,1,0,0,0,905,898,1,0, +0,0,905,900,1,0,0,0,906,107,1,0,0,0,907,912,3,110,55,0,908,909,5,70,0,0, +909,910,5,69,0,0,910,912,3,110,55,0,911,907,1,0,0,0,911,908,1,0,0,0,912, +109,1,0,0,0,913,914,7,2,0,0,914,111,1,0,0,0,915,916,5,71,0,0,916,917,5,85, +0,0,917,918,5,1,0,0,918,921,3,122,61,0,919,920,5,8,0,0,920,922,3,122,61, +0,921,919,1,0,0,0,921,922,1,0,0,0,922,923,1,0,0,0,923,924,5,2,0,0,924,113, +1,0,0,0,925,926,5,72,0,0,926,927,3,78,39,0,927,115,1,0,0,0,928,929,5,54, +0,0,929,930,5,10,0,0,930,932,5,85,0,0,931,933,3,104,52,0,932,931,1,0,0,0, +932,933,1,0,0,0,933,934,1,0,0,0,934,935,5,29,0,0,935,939,3,122,61,0,936, +938,3,112,56,0,937,936,1,0,0,0,938,941,1,0,0,0,939,937,1,0,0,0,939,940,1, +0,0,0,940,943,1,0,0,0,941,939,1,0,0,0,942,944,3,114,57,0,943,942,1,0,0,0, +943,944,1,0,0,0,944,946,1,0,0,0,945,947,3,62,31,0,946,945,1,0,0,0,946,947, +1,0,0,0,947,117,1,0,0,0,948,952,5,73,0,0,949,951,8,4,0,0,950,949,1,0,0,0, +951,954,1,0,0,0,952,950,1,0,0,0,952,953,1,0,0,0,953,955,1,0,0,0,954,952, +1,0,0,0,955,956,5,74,0,0,956,119,1,0,0,0,957,961,5,75,0,0,958,960,8,5,0, +0,959,958,1,0,0,0,960,963,1,0,0,0,961,959,1,0,0,0,961,962,1,0,0,0,962,964, +1,0,0,0,963,961,1,0,0,0,964,965,5,76,0,0,965,121,1,0,0,0,966,967,3,124,62, +0,967,123,1,0,0,0,968,973,3,126,63,0,969,970,5,35,0,0,970,972,3,126,63,0, +971,969,1,0,0,0,972,975,1,0,0,0,973,971,1,0,0,0,973,974,1,0,0,0,974,125, +1,0,0,0,975,973,1,0,0,0,976,981,3,128,64,0,977,978,5,37,0,0,978,980,3,128, +64,0,979,977,1,0,0,0,980,983,1,0,0,0,981,979,1,0,0,0,981,982,1,0,0,0,982, +127,1,0,0,0,983,981,1,0,0,0,984,985,5,36,0,0,985,988,3,128,64,0,986,988, +3,130,65,0,987,984,1,0,0,0,987,986,1,0,0,0,988,129,1,0,0,0,989,992,3,132, +66,0,990,991,7,6,0,0,991,993,3,132,66,0,992,990,1,0,0,0,992,993,1,0,0,0, +993,131,1,0,0,0,994,999,3,134,67,0,995,996,7,7,0,0,996,998,3,134,67,0,997, +995,1,0,0,0,998,1001,1,0,0,0,999,997,1,0,0,0,999,1000,1,0,0,0,1000,133,1, +0,0,0,1001,999,1,0,0,0,1002,1007,3,136,68,0,1003,1004,7,8,0,0,1004,1006, +3,136,68,0,1005,1003,1,0,0,0,1006,1009,1,0,0,0,1007,1005,1,0,0,0,1007,1008, +1,0,0,0,1008,135,1,0,0,0,1009,1007,1,0,0,0,1010,1011,5,20,0,0,1011,1038, +3,136,68,0,1012,1015,3,138,69,0,1013,1014,5,10,0,0,1014,1016,3,164,82,0, +1015,1013,1,0,0,0,1015,1016,1,0,0,0,1016,1038,1,0,0,0,1017,1018,3,168,84, +0,1018,1019,5,16,0,0,1019,1020,3,162,81,0,1020,1038,1,0,0,0,1021,1038,3, +178,89,0,1022,1023,5,1,0,0,1023,1024,3,122,61,0,1024,1025,5,2,0,0,1025,1038, +1,0,0,0,1026,1027,5,13,0,0,1027,1032,3,122,61,0,1028,1029,5,8,0,0,1029,1031, +3,122,61,0,1030,1028,1,0,0,0,1031,1034,1,0,0,0,1032,1030,1,0,0,0,1032,1033, +1,0,0,0,1033,1035,1,0,0,0,1034,1032,1,0,0,0,1035,1036,5,14,0,0,1036,1038, +1,0,0,0,1037,1010,1,0,0,0,1037,1012,1,0,0,0,1037,1017,1,0,0,0,1037,1021, +1,0,0,0,1037,1022,1,0,0,0,1037,1026,1,0,0,0,1038,137,1,0,0,0,1039,1041,3, +170,85,0,1040,1042,3,140,70,0,1041,1040,1,0,0,0,1042,1043,1,0,0,0,1043,1041, +1,0,0,0,1043,1044,1,0,0,0,1044,1051,1,0,0,0,1045,1051,3,152,76,0,1046,1051, +3,156,78,0,1047,1051,3,170,85,0,1048,1051,5,81,0,0,1049,1051,3,146,73,0, +1050,1039,1,0,0,0,1050,1045,1,0,0,0,1050,1046,1,0,0,0,1050,1047,1,0,0,0, +1050,1048,1,0,0,0,1050,1049,1,0,0,0,1051,139,1,0,0,0,1052,1056,3,142,71, +0,1053,1056,3,152,76,0,1054,1056,3,160,80,0,1055,1052,1,0,0,0,1055,1053, +1,0,0,0,1055,1054,1,0,0,0,1056,141,1,0,0,0,1057,1058,5,1,0,0,1058,1086,5, +2,0,0,1059,1060,5,1,0,0,1060,1065,3,144,72,0,1061,1062,5,8,0,0,1062,1064, +3,144,72,0,1063,1061,1,0,0,0,1064,1067,1,0,0,0,1065,1063,1,0,0,0,1065,1066, +1,0,0,0,1066,1070,1,0,0,0,1067,1065,1,0,0,0,1068,1069,5,8,0,0,1069,1071, +3,122,61,0,1070,1068,1,0,0,0,1070,1071,1,0,0,0,1071,1072,1,0,0,0,1072,1073, +5,2,0,0,1073,1086,1,0,0,0,1074,1075,5,1,0,0,1075,1080,3,122,61,0,1076,1077, +5,8,0,0,1077,1079,3,122,61,0,1078,1076,1,0,0,0,1079,1082,1,0,0,0,1080,1078, +1,0,0,0,1080,1081,1,0,0,0,1081,1083,1,0,0,0,1082,1080,1,0,0,0,1083,1084, +5,2,0,0,1084,1086,1,0,0,0,1085,1057,1,0,0,0,1085,1059,1,0,0,0,1085,1074, +1,0,0,0,1086,143,1,0,0,0,1087,1088,3,122,61,0,1088,1089,5,30,0,0,1089,1090, +3,122,61,0,1090,145,1,0,0,0,1091,1092,5,43,0,0,1092,1093,5,1,0,0,1093,1094, +3,122,61,0,1094,1095,5,8,0,0,1095,1097,3,138,69,0,1096,1098,3,148,74,0,1097, +1096,1,0,0,0,1097,1098,1,0,0,0,1098,1099,1,0,0,0,1099,1100,3,150,75,0,1100, +1101,5,8,0,0,1101,1102,3,122,61,0,1102,1103,5,2,0,0,1103,147,1,0,0,0,1104, +1105,5,13,0,0,1105,1106,3,176,88,0,1106,1107,5,8,0,0,1107,1108,3,176,88, +0,1108,1109,5,14,0,0,1109,149,1,0,0,0,1110,1111,5,15,0,0,1111,1112,5,86, +0,0,1112,151,1,0,0,0,1113,1114,5,11,0,0,1114,1119,3,154,77,0,1115,1116,5, +8,0,0,1116,1118,3,154,77,0,1117,1115,1,0,0,0,1118,1121,1,0,0,0,1119,1117, +1,0,0,0,1119,1120,1,0,0,0,1120,1122,1,0,0,0,1121,1119,1,0,0,0,1122,1123, +5,12,0,0,1123,153,1,0,0,0,1124,1125,5,85,0,0,1125,1126,5,26,0,0,1126,1129, +3,122,61,0,1127,1129,3,122,61,0,1128,1124,1,0,0,0,1128,1127,1,0,0,0,1129, +155,1,0,0,0,1130,1131,5,59,0,0,1131,1132,5,1,0,0,1132,1137,3,158,79,0,1133, +1134,5,8,0,0,1134,1136,3,158,79,0,1135,1133,1,0,0,0,1136,1139,1,0,0,0,1137, +1135,1,0,0,0,1137,1138,1,0,0,0,1138,1140,1,0,0,0,1139,1137,1,0,0,0,1140, +1141,5,2,0,0,1141,157,1,0,0,0,1142,1157,5,83,0,0,1143,1145,5,84,0,0,1144, +1143,1,0,0,0,1144,1145,1,0,0,0,1145,1146,1,0,0,0,1146,1147,5,11,0,0,1147, +1152,5,83,0,0,1148,1149,5,8,0,0,1149,1151,5,83,0,0,1150,1148,1,0,0,0,1151, +1154,1,0,0,0,1152,1150,1,0,0,0,1152,1153,1,0,0,0,1153,1155,1,0,0,0,1154, +1152,1,0,0,0,1155,1157,5,12,0,0,1156,1142,1,0,0,0,1156,1144,1,0,0,0,1157, +159,1,0,0,0,1158,1159,5,7,0,0,1159,1160,3,172,86,0,1160,161,1,0,0,0,1161, +1169,3,164,82,0,1162,1163,5,24,0,0,1163,1169,3,164,82,0,1164,1165,3,138, +69,0,1165,1166,5,10,0,0,1166,1167,3,164,82,0,1167,1169,1,0,0,0,1168,1161, +1,0,0,0,1168,1162,1,0,0,0,1168,1164,1,0,0,0,1169,163,1,0,0,0,1170,1181,3, +174,87,0,1171,1172,3,174,87,0,1172,1173,5,1,0,0,1173,1176,3,122,61,0,1174, +1175,5,8,0,0,1175,1177,3,122,61,0,1176,1174,1,0,0,0,1176,1177,1,0,0,0,1177, +1178,1,0,0,0,1178,1179,5,2,0,0,1179,1181,1,0,0,0,1180,1170,1,0,0,0,1180, +1171,1,0,0,0,1181,165,1,0,0,0,1182,1183,5,85,0,0,1183,167,1,0,0,0,1184,1189, +3,170,85,0,1185,1186,5,7,0,0,1186,1188,3,172,86,0,1187,1185,1,0,0,0,1188, +1191,1,0,0,0,1189,1187,1,0,0,0,1189,1190,1,0,0,0,1190,169,1,0,0,0,1191,1189, +1,0,0,0,1192,1198,5,85,0,0,1193,1198,5,57,0,0,1194,1198,5,82,0,0,1195,1198, +5,83,0,0,1196,1198,5,84,0,0,1197,1192,1,0,0,0,1197,1193,1,0,0,0,1197,1194, +1,0,0,0,1197,1195,1,0,0,0,1197,1196,1,0,0,0,1198,171,1,0,0,0,1199,1204,5, +85,0,0,1200,1204,5,57,0,0,1201,1204,5,83,0,0,1202,1204,5,84,0,0,1203,1199, +1,0,0,0,1203,1200,1,0,0,0,1203,1201,1,0,0,0,1203,1202,1,0,0,0,1204,173,1, +0,0,0,1205,1206,5,85,0,0,1206,175,1,0,0,0,1207,1210,5,85,0,0,1208,1210,5, +57,0,0,1209,1207,1,0,0,0,1209,1208,1,0,0,0,1210,177,1,0,0,0,1211,1215,3, +180,90,0,1212,1213,5,13,0,0,1213,1215,5,14,0,0,1214,1211,1,0,0,0,1214,1212, +1,0,0,0,1215,179,1,0,0,0,1216,1223,5,90,0,0,1217,1223,3,184,92,0,1218,1223, +5,41,0,0,1219,1223,5,42,0,0,1220,1223,5,91,0,0,1221,1223,3,182,91,0,1222, +1216,1,0,0,0,1222,1217,1,0,0,0,1222,1218,1,0,0,0,1222,1219,1,0,0,0,1222, +1220,1,0,0,0,1222,1221,1,0,0,0,1223,181,1,0,0,0,1224,1234,5,86,0,0,1225, +1226,5,20,0,0,1226,1234,5,86,0,0,1227,1234,5,87,0,0,1228,1234,5,88,0,0,1229, +1234,5,103,0,0,1230,1234,5,101,0,0,1231,1234,5,102,0,0,1232,1234,5,104,0, +0,1233,1224,1,0,0,0,1233,1225,1,0,0,0,1233,1227,1,0,0,0,1233,1228,1,0,0, +0,1233,1229,1,0,0,0,1233,1230,1,0,0,0,1233,1231,1,0,0,0,1233,1232,1,0,0, +0,1234,183,1,0,0,0,1235,1242,5,89,0,0,1236,1237,5,20,0,0,1237,1242,5,89, +0,0,1238,1242,5,105,0,0,1239,1242,5,106,0,0,1240,1242,5,107,0,0,1241,1235, +1,0,0,0,1241,1236,1,0,0,0,1241,1238,1,0,0,0,1241,1239,1,0,0,0,1241,1240, +1,0,0,0,1242,185,1,0,0,0,1243,1244,5,44,0,0,1244,1245,5,1,0,0,1245,1246, +3,188,94,0,1246,1249,5,2,0,0,1247,1248,5,51,0,0,1248,1250,3,192,96,0,1249, +1247,1,0,0,0,1249,1250,1,0,0,0,1250,1251,1,0,0,0,1251,1252,5,45,0,0,1252, +1253,3,196,98,0,1253,187,1,0,0,0,1254,1256,3,190,95,0,1255,1254,1,0,0,0, +1256,1257,1,0,0,0,1257,1255,1,0,0,0,1257,1258,1,0,0,0,1258,189,1,0,0,0,1259, +1263,5,1,0,0,1260,1262,3,188,94,0,1261,1260,1,0,0,0,1262,1265,1,0,0,0,1263, +1261,1,0,0,0,1263,1264,1,0,0,0,1264,1266,1,0,0,0,1265,1263,1,0,0,0,1266, +1273,5,2,0,0,1267,1273,8,9,0,0,1268,1273,5,19,0,0,1269,1273,5,18,0,0,1270, +1273,5,17,0,0,1271,1273,5,25,0,0,1272,1259,1,0,0,0,1272,1267,1,0,0,0,1272, +1268,1,0,0,0,1272,1269,1,0,0,0,1272,1270,1,0,0,0,1272,1271,1,0,0,0,1273, +191,1,0,0,0,1274,1279,3,194,97,0,1275,1276,5,8,0,0,1276,1278,3,194,97,0, +1277,1275,1,0,0,0,1278,1281,1,0,0,0,1279,1277,1,0,0,0,1279,1280,1,0,0,0, +1280,193,1,0,0,0,1281,1279,1,0,0,0,1282,1285,3,74,37,0,1283,1285,5,16,0, +0,1284,1282,1,0,0,0,1284,1283,1,0,0,0,1285,195,1,0,0,0,1286,1291,3,110,55, +0,1287,1288,5,70,0,0,1288,1289,5,69,0,0,1289,1291,3,110,55,0,1290,1286,1, +0,0,0,1290,1287,1,0,0,0,1291,197,1,0,0,0,134,201,209,217,221,223,225,232, +244,262,273,284,287,295,306,315,327,343,353,364,376,383,392,400,404,409, +412,416,421,425,431,439,447,456,461,472,475,490,502,511,518,526,531,541, +552,564,576,580,592,601,605,615,620,624,637,650,664,682,687,695,698,704, +713,722,729,744,748,778,785,789,796,808,818,827,838,844,850,856,864,870, +874,877,885,891,895,905,911,921,932,939,943,946,952,961,973,981,987,992, +999,1007,1015,1032,1037,1043,1050,1055,1065,1070,1080,1085,1097,1119,1128, +1137,1144,1152,1156,1168,1176,1180,1189,1197,1203,1209,1214,1222,1233,1241, +1249,1257,1263,1272,1279,1284,1290]; const atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); @@ -857,7 +469,8 @@ export default class KELParser extends antlr4.Parser { "'KELQUERY'", "'FDC'", "'FILTER'", "'HINT'", "'GLOBAL'", "'FUNCTION'", "'DATASET'", "'OF'", "'SET'", "'ASOF'", "'USING'", "'VISUALIZE'", - "'ENDVISUALIZE'", "'RESOURCES'", "'ENDRESOURCES'" ]; + "'ENDVISUALIZE'", "'RESOURCES'", "'ENDRESOURCES'", + "'AS'", "'SPC'", "'LIKE'" ]; static symbolicNames = [ null, "LP", "RP", "EQ", "DQUOTE", "LT", "GT", "DOT", "COMMA", "SEMI", "COLON", "LCURL", "RCURL", "LSQUARE", "RSQUARE", "STAR", "SIGIL", "AMP", @@ -872,36 +485,37 @@ export default class KELParser extends antlr4.Parser { "USE", "KELBASE", "KELQUERY", "FDC", "FILTER", "HINT", "GLOBAL", "FUNCTION", "DATASET", "OF", "SET", "ASOF", "USING", "VIS", "ENDVIS", "RESOURCES", - "ENDRESOURCES", "DOUBLESTRING", "SID", "SINT", - "PID", "PSID", "ID", "INT", "HEXINT", "BININT", - "REAL", "STR", "TYPDCONST", "ESC", "SEP_COMMENT", - "ML_COMMENT", "MLMS_COMMENT", "JAVADOC_OPEN", - "EMPTY_JAVADOC", "NEWLINE", "COMMENT", "WS", - "BAD_BIN", "HEX_NO_X", "BAD_HEX", "BAD_MIX", - "BAD_REAL_A", "BAD_REAL_B", "BAD_REAL_C", "ML_COMMENT_START", - "MLMS_COMMENT_START", "JD_COMMENT_START" ]; + "ENDRESOURCES", "AS", "SPC", "LIKE", "DOUBLESTRING", + "SID", "SINT", "PID", "PSID", "ID", "INT", + "HEXINT", "BININT", "REAL", "STR", "TYPDCONST", + "ESC", "SEP_COMMENT", "ML_COMMENT", "MLMS_COMMENT", + "EMPTY_JAVADOC", "JAVADOC_OPEN", "NEWLINE", + "COMMENT", "WS", "BAD_BIN", "HEX_NO_X", "BAD_HEX", + "BAD_MIX", "BAD_REAL_A", "BAD_REAL_B", "BAD_REAL_C", + "ML_COMMENT_START", "MLMS_COMMENT_START", "JD_COMMENT_START" ]; static ruleNames = [ "program", "annotation", "statement", "option", "eraDeclaration", "epoch", "permitsDeclaration", "permit", "importStatement", "inlinePackage", "outoflinePackage", "packageDeclaration", "packageStatement", "packageExportDeclaration", "entityDeclaration", "entityProperty", "fieldMapping", "fileType", "mappingElement", "nullSpec", "formatSpec", - "compositeIdSpec", "modelDeclaration", "submodelDeclaration", - "submodelId", "useDeclaration", "useKelBaseDeclaration", - "useKelQueryDeclaration", "useElement", "useFileType", - "useClause", "useClauseElement", "useClauseFileType", - "nestedEntityMapping", "entityMapping", "useMappingOverride", - "dotId", "permitsClause", "permitsSpec", "hintsClause", - "logicStatement", "logicPredicate", "logicProductions", - "logicProduction", "entityProductions", "entityProduction", - "functionStatement", "fparams", "fparam", "functionBody", - "queryDeclaration", "qparams", "qparam", "paramTypeId", - "simpleTypeId", "asof", "using", "shellDeclaration", - "visual_section", "resource_section", "expression", - "booleanDisjunction", "booleanConjunction", "booleanTerm", - "booleanAtom", "valueExpression", "valueTerm", - "valueFactor", "valueAtom", "queryFuncOp", "funcOrFilter", - "pair", "linkExp", "linkSpec", "linkDegree", "entityProjection", + "likeSpec", "compositeIdSpec", "modelDeclaration", + "submodelDeclaration", "submodelId", "useDeclaration", + "useKelBaseDeclaration", "useKelQueryDeclaration", + "useElement", "useFileType", "useClause", "useClauseElement", + "useClauseFileType", "nestedEntityMapping", "entityMapping", + "useMappingOverride", "dotId", "permitsClause", + "permitsSpec", "hintsClause", "logicStatement", + "logicPredicate", "logicProductions", "logicProduction", + "entityProductions", "entityProduction", "functionStatement", + "fparams", "fparam", "functionBody", "queryDeclaration", + "qparams", "qparam", "paramTypeId", "simpleTypeId", + "asof", "using", "shellDeclaration", "visual_section", + "resource_section", "expression", "booleanDisjunction", + "booleanConjunction", "booleanTerm", "booleanAtom", + "valueExpression", "valueTerm", "valueFactor", + "valueAtom", "queryFuncOp", "funcOrFilter", "pair", + "linkExp", "linkSpec", "linkDegree", "entityProjection", "namedExpression", "patternModel", "patternSubmodel", "fieldSelector", "scopeExpression", "tableProperty", "func_id", "qualifiedId", "leadingId", "fieldId", @@ -930,33 +544,33 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 199; + this.state = 201; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.OPTION) { - this.state = 196; + this.state = 198; this.option(); - this.state = 201; + this.state = 203; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 207; + this.state = 209; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.ERA || _la===KELParser.PERMITS) { - this.state = 202; + this.state = 204; this.annotation(); - this.state = 203; + this.state = 205; this.match(KELParser.SEMI); - this.state = 209; + this.state = 211; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 223; + this.state = 225; this._errHandler.sync(this); _la = this._input.LA(1); while(((((_la - 50)) & ~0x1f) == 0 && ((1 << (_la - 50)) & ((1 << (KELParser.IMPORT - 50)) | (1 << (KELParser.PACKAGE - 50)) | (1 << (KELParser.SHELL - 50)) | (1 << (KELParser.QUERY - 50)) | (1 << (KELParser.USE - 50)) | (1 << (KELParser.GLOBAL - 50)) | (1 << (KELParser.FUNCTION - 50)) | (1 << (KELParser.VIS - 50)) | (1 << (KELParser.RESOURCES - 50)))) !== 0) || _la===KELParser.ID) { - this.state = 221; + this.state = 223; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.IMPORT: @@ -967,31 +581,31 @@ export default class KELParser extends antlr4.Parser { case KELParser.GLOBAL: case KELParser.FUNCTION: case KELParser.ID: - this.state = 210; + this.state = 212; this.statement(); - this.state = 211; + this.state = 213; this.match(KELParser.SEMI); break; case KELParser.VIS: - this.state = 213; - this.visual_section(); this.state = 215; + this.visual_section(); + this.state = 217; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.SEMI) { - this.state = 214; + this.state = 216; this.match(KELParser.SEMI); } break; case KELParser.RESOURCES: - this.state = 217; - this.resource_section(); this.state = 219; + this.resource_section(); + this.state = 221; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.SEMI) { - this.state = 218; + this.state = 220; this.match(KELParser.SEMI); } @@ -999,11 +613,11 @@ export default class KELParser extends antlr4.Parser { default: throw new antlr4.error.NoViableAltException(this); } - this.state = 225; + this.state = 227; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 226; + this.state = 228; this.match(KELParser.EOF); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1025,17 +639,17 @@ export default class KELParser extends antlr4.Parser { let localctx = new AnnotationContext(this, this._ctx, this.state); this.enterRule(localctx, 2, KELParser.RULE_annotation); try { - this.state = 230; + this.state = 232; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.ERA: this.enterOuterAlt(localctx, 1); - this.state = 228; + this.state = 230; this.eraDeclaration(); break; case KELParser.PERMITS: this.enterOuterAlt(localctx, 2); - this.state = 229; + this.state = 231; this.permitsDeclaration(); break; default: @@ -1061,67 +675,67 @@ export default class KELParser extends antlr4.Parser { let localctx = new StatementContext(this, this._ctx, this.state); this.enterRule(localctx, 4, KELParser.RULE_statement); try { - this.state = 242; + this.state = 244; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,7,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 232; + this.state = 234; this.importStatement(); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 233; + this.state = 235; this.inlinePackage(); break; case 3: this.enterOuterAlt(localctx, 3); - this.state = 234; + this.state = 236; this.entityDeclaration(); break; case 4: this.enterOuterAlt(localctx, 4); - this.state = 235; + this.state = 237; this.useDeclaration(); break; case 5: this.enterOuterAlt(localctx, 5); - this.state = 236; + this.state = 238; this.useKelBaseDeclaration(); break; case 6: this.enterOuterAlt(localctx, 6); - this.state = 237; + this.state = 239; this.useKelQueryDeclaration(); break; case 7: this.enterOuterAlt(localctx, 7); - this.state = 238; + this.state = 240; this.logicStatement(); break; case 8: this.enterOuterAlt(localctx, 8); - this.state = 239; + this.state = 241; this.functionStatement(); break; case 9: this.enterOuterAlt(localctx, 9); - this.state = 240; + this.state = 242; this.queryDeclaration(); break; case 10: this.enterOuterAlt(localctx, 10); - this.state = 241; + this.state = 243; this.shellDeclaration(); break; @@ -1146,54 +760,54 @@ export default class KELParser extends antlr4.Parser { let localctx = new OptionContext(this, this._ctx, this.state); this.enterRule(localctx, 6, KELParser.RULE_option); try { - this.state = 260; + this.state = 262; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,8,this._ctx); switch(la_) { case 1: localctx = new OptionBoolContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 244; + this.state = 246; this.match(KELParser.OPTION); - this.state = 245; + this.state = 247; this.match(KELParser.LP); - this.state = 246; + this.state = 248; localctx.name = this.match(KELParser.ID); - this.state = 247; + this.state = 249; this.match(KELParser.RP); break; case 2: localctx = new OptionStrContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 248; + this.state = 250; this.match(KELParser.OPTION); - this.state = 249; + this.state = 251; this.match(KELParser.LP); - this.state = 250; + this.state = 252; localctx.name = this.match(KELParser.ID); - this.state = 251; + this.state = 253; this.match(KELParser.COMMA); - this.state = 252; + this.state = 254; localctx.value = this.match(KELParser.STR); - this.state = 253; + this.state = 255; this.match(KELParser.RP); break; case 3: localctx = new OptionIntContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 254; + this.state = 256; this.match(KELParser.OPTION); - this.state = 255; + this.state = 257; this.match(KELParser.LP); - this.state = 256; + this.state = 258; localctx.name = this.match(KELParser.ID); - this.state = 257; + this.state = 259; this.match(KELParser.COMMA); - this.state = 258; + this.state = 260; localctx.value = this.match(KELParser.INT); - this.state = 259; + this.state = 261; this.match(KELParser.RP); break; @@ -1220,29 +834,29 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 262; + this.state = 264; this.match(KELParser.ERA); - this.state = 263; + this.state = 265; localctx.name = this.match(KELParser.ID); - this.state = 264; + this.state = 266; localctx.type = this.match(KELParser.ID); - this.state = 265; + this.state = 267; this.match(KELParser.LP); - this.state = 266; + this.state = 268; this.epoch(); - this.state = 271; + this.state = 273; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 267; + this.state = 269; this.match(KELParser.COMMA); - this.state = 268; + this.state = 270; this.epoch(); - this.state = 273; + this.state = 275; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 274; + this.state = 276; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1266,29 +880,29 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 276; + this.state = 278; localctx.name = this.match(KELParser.ID); - this.state = 285; + this.state = 287; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.EQ) { - this.state = 277; + this.state = 279; this.match(KELParser.EQ); - this.state = 278; + this.state = 280; this.match(KELParser.NULL); - this.state = 279; + this.state = 281; this.match(KELParser.LP); - this.state = 280; - localctx.nulltype = this.match(KELParser.ID); this.state = 282; + localctx.nulltype = this.match(KELParser.ID); + this.state = 284; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.ID) { - this.state = 281; + this.state = 283; localctx.sw = this.match(KELParser.ID); } - this.state = 284; + this.state = 286; this.match(KELParser.RP); } @@ -1314,19 +928,19 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 287; + this.state = 289; this.match(KELParser.PERMITS); - this.state = 288; + this.state = 290; this.permit(); - this.state = 293; + this.state = 295; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 289; + this.state = 291; this.match(KELParser.COMMA); - this.state = 290; + this.state = 292; this.permit(); - this.state = 295; + this.state = 297; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1351,7 +965,7 @@ export default class KELParser extends antlr4.Parser { this.enterRule(localctx, 14, KELParser.RULE_permit); try { this.enterOuterAlt(localctx, 1); - this.state = 296; + this.state = 298; this.match(KELParser.ID); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1374,26 +988,26 @@ export default class KELParser extends antlr4.Parser { this.enterRule(localctx, 16, KELParser.RULE_importStatement); var _la = 0; // Token type try { - this.state = 318; + this.state = 327; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,15,this._ctx); switch(la_) { case 1: localctx = new SimpleImportContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 298; + this.state = 300; this.match(KELParser.IMPORT); - this.state = 299; + this.state = 301; this.dotId(); - this.state = 304; + this.state = 306; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 300; + this.state = 302; this.match(KELParser.COMMA); - this.state = 301; + this.state = 303; this.dotId(); - this.state = 306; + this.state = 308; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1402,26 +1016,43 @@ export default class KELParser extends antlr4.Parser { case 2: localctx = new PackageImportContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 307; + this.state = 309; this.match(KELParser.IMPORT); - this.state = 308; + this.state = 310; this.match(KELParser.ID); - this.state = 313; + this.state = 315; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 309; + this.state = 311; this.match(KELParser.COMMA); - this.state = 310; + this.state = 312; this.match(KELParser.ID); - this.state = 315; + this.state = 317; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 316; + this.state = 318; + this.match(KELParser.FROM); + this.state = 319; + this.dotId(); + break; + + case 3: + localctx = new SpcImportContext(this, localctx); + this.enterOuterAlt(localctx, 3); + this.state = 320; + this.match(KELParser.IMPORT); + this.state = 321; + this.match(KELParser.SPC); + this.state = 322; this.match(KELParser.FROM); - this.state = 317; + this.state = 323; this.dotId(); + this.state = 324; + this.match(KELParser.AS); + this.state = 325; + this.match(KELParser.ID); break; } @@ -1446,7 +1077,7 @@ export default class KELParser extends antlr4.Parser { this.enterRule(localctx, 18, KELParser.RULE_inlinePackage); try { this.enterOuterAlt(localctx, 1); - this.state = 320; + this.state = 329; this.packageDeclaration(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1469,11 +1100,11 @@ export default class KELParser extends antlr4.Parser { this.enterRule(localctx, 20, KELParser.RULE_outoflinePackage); try { this.enterOuterAlt(localctx, 1); - this.state = 322; + this.state = 331; this.packageDeclaration(); - this.state = 323; + this.state = 332; this.match(KELParser.SEMI); - this.state = 324; + this.state = 333; this.match(KELParser.EOF); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1497,25 +1128,25 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 326; + this.state = 335; this.match(KELParser.PACKAGE); - this.state = 327; + this.state = 336; this.match(KELParser.ID); - this.state = 328; + this.state = 337; this.match(KELParser.SEMI); - this.state = 332; + this.state = 341; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 329; + this.state = 338; this.packageStatement(); - this.state = 330; + this.state = 339; this.match(KELParser.SEMI); - this.state = 334; + this.state = 343; this._errHandler.sync(this); _la = this._input.LA(1); } while(((((_la - 50)) & ~0x1f) == 0 && ((1 << (_la - 50)) & ((1 << (KELParser.IMPORT - 50)) | (1 << (KELParser.SHELL - 50)) | (1 << (KELParser.USE - 50)) | (1 << (KELParser.GLOBAL - 50)) | (1 << (KELParser.FUNCTION - 50)))) !== 0) || _la===KELParser.ID); - this.state = 336; + this.state = 345; this.match(KELParser.END); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1537,43 +1168,43 @@ export default class KELParser extends antlr4.Parser { let localctx = new PackageStatementContext(this, this._ctx, this.state); this.enterRule(localctx, 24, KELParser.RULE_packageStatement); try { - this.state = 344; + this.state = 353; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,17,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 338; + this.state = 347; this.importStatement(); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 339; + this.state = 348; this.entityDeclaration(); break; case 3: this.enterOuterAlt(localctx, 3); - this.state = 340; + this.state = 349; this.useDeclaration(); break; case 4: this.enterOuterAlt(localctx, 4); - this.state = 341; + this.state = 350; this.logicStatement(); break; case 5: this.enterOuterAlt(localctx, 5); - this.state = 342; + this.state = 351; this.functionStatement(); break; case 6: this.enterOuterAlt(localctx, 6); - this.state = 343; + this.state = 352; this.packageExportDeclaration(); break; @@ -1600,25 +1231,25 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 346; + this.state = 355; this.match(KELParser.SHELL); - this.state = 347; + this.state = 356; this.match(KELParser.COLON); - this.state = 348; + this.state = 357; localctx.name = this.match(KELParser.ID); - this.state = 349; + this.state = 358; this.match(KELParser.LARROW); - this.state = 350; + this.state = 359; this.expression(); - this.state = 355; + this.state = 364; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 351; + this.state = 360; this.match(KELParser.COMMA); - this.state = 352; + this.state = 361; this.expression(); - this.state = 357; + this.state = 366; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1644,11 +1275,11 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 358; + this.state = 367; this.match(KELParser.ID); - this.state = 359; + this.state = 368; this.match(KELParser.DEFEQ); - this.state = 360; + this.state = 369; localctx.t = this._input.LT(1); _la = this._input.LA(1); if(!(_la===KELParser.ENTITY || _la===KELParser.ASSOCIATION)) { @@ -1658,23 +1289,23 @@ export default class KELParser extends antlr4.Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 361; + this.state = 370; this.match(KELParser.LP); - this.state = 362; + this.state = 371; this.entityProperty(); - this.state = 367; + this.state = 376; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 363; + this.state = 372; this.match(KELParser.COMMA); - this.state = 364; + this.state = 373; this.entityProperty(); - this.state = 369; + this.state = 378; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 370; + this.state = 379; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1696,18 +1327,18 @@ export default class KELParser extends antlr4.Parser { let localctx = new EntityPropertyContext(this, this._ctx, this.state); this.enterRule(localctx, 30, KELParser.RULE_entityProperty); try { - this.state = 374; + this.state = 383; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.FLAT: case KELParser.QUERY: this.enterOuterAlt(localctx, 1); - this.state = 372; + this.state = 381; localctx.fm = this.fieldMapping(); break; case KELParser.MODEL: this.enterOuterAlt(localctx, 2); - this.state = 373; + this.state = 382; localctx.m = this.modelDeclaration(); break; default: @@ -1735,25 +1366,25 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 376; + this.state = 385; this.fileType(); - this.state = 377; + this.state = 386; this.match(KELParser.LP); - this.state = 378; + this.state = 387; this.mappingElement(); - this.state = 383; + this.state = 392; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 379; + this.state = 388; this.match(KELParser.COMMA); - this.state = 380; + this.state = 389; localctx.m = this.mappingElement(); - this.state = 385; + this.state = 394; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 386; + this.state = 395; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -1777,7 +1408,7 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 388; + this.state = 397; _la = this._input.LA(1); if(!(_la===KELParser.FLAT || _la===KELParser.QUERY)) { this._errHandler.recoverInline(this); @@ -1807,137 +1438,175 @@ export default class KELParser extends antlr4.Parser { this.enterRule(localctx, 36, KELParser.RULE_mappingElement); var _la = 0; // Token type try { - this.state = 433; + this.state = 456; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,30,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,32,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 391; + this.state = 400; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,22,this._ctx); if(la_===1) { - this.state = 390; + this.state = 399; localctx.t = this.match(KELParser.ID); } - this.state = 393; + this.state = 402; localctx.i = this.match(KELParser.ID); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 395; + this.state = 404; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,23,this._ctx); if(la_===1) { - this.state = 394; + this.state = 403; localctx.t = this.match(KELParser.ID); } - this.state = 397; + this.state = 406; localctx.i = this.match(KELParser.ID); - this.state = 398; + this.state = 407; this.match(KELParser.EQ); - this.state = 400; + this.state = 409; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.NULL) { - this.state = 399; + this.state = 408; localctx.nspec = this.nullSpec(); } - this.state = 403; + this.state = 412; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.FORMAT) { - this.state = 402; + this.state = 411; localctx.fspec = this.formatSpec(); } - this.state = 405; + this.state = 414; localctx.from = this.dotId(); break; case 3: this.enterOuterAlt(localctx, 3); - this.state = 407; + this.state = 416; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,26,this._ctx); if(la_===1) { - this.state = 406; + this.state = 415; localctx.t = this.match(KELParser.ID); } - this.state = 409; + this.state = 418; localctx.i = this.match(KELParser.ID); - this.state = 410; + this.state = 419; this.match(KELParser.EQ); - this.state = 412; + this.state = 421; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.NULL) { - this.state = 411; + this.state = 420; localctx.nspec = this.nullSpec(); } - this.state = 414; + this.state = 423; localctx.fspec = this.formatSpec(); break; case 4: this.enterOuterAlt(localctx, 4); - this.state = 416; + this.state = 425; this._errHandler.sync(this); var la_ = this._interp.adaptivePredict(this._input,28,this._ctx); if(la_===1) { - this.state = 415; + this.state = 424; localctx.t = this.match(KELParser.ID); } - this.state = 418; + this.state = 427; localctx.i = this.match(KELParser.ID); - this.state = 419; + this.state = 428; this.match(KELParser.EQ); - this.state = 420; + this.state = 429; localctx.nspec = this.nullSpec(); break; case 5: this.enterOuterAlt(localctx, 5); - this.state = 421; + this.state = 431; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,29,this._ctx); + if(la_===1) { + this.state = 430; + localctx.t = this.match(KELParser.ID); + + } + this.state = 433; + localctx.i = this.match(KELParser.ID); + this.state = 434; + this.match(KELParser.EQ); + this.state = 435; + localctx.lspec = this.likeSpec(); + this.state = 436; + localctx.from = this.dotId(); + break; + + case 6: + this.enterOuterAlt(localctx, 6); + this.state = 439; + this._errHandler.sync(this); + var la_ = this._interp.adaptivePredict(this._input,30,this._ctx); + if(la_===1) { + this.state = 438; + localctx.t = this.match(KELParser.ID); + + } + this.state = 441; + localctx.i = this.match(KELParser.ID); + this.state = 442; + this.match(KELParser.EQ); + this.state = 443; + localctx.lspec = this.likeSpec(); + break; + + case 7: + this.enterOuterAlt(localctx, 7); + this.state = 444; localctx.i = this.match(KELParser.UID); - this.state = 424; + this.state = 447; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.EQ) { - this.state = 422; + this.state = 445; this.match(KELParser.EQ); - this.state = 423; + this.state = 446; localctx.from = this.dotId(); } break; - case 6: - this.enterOuterAlt(localctx, 6); - this.state = 426; + case 8: + this.enterOuterAlt(localctx, 8); + this.state = 449; localctx.i = this.match(KELParser.UID); - this.state = 427; + this.state = 450; localctx.c = this.compositeIdSpec(); break; - case 7: - this.enterOuterAlt(localctx, 7); - this.state = 428; + case 9: + this.enterOuterAlt(localctx, 9); + this.state = 451; localctx.t = this.match(KELParser.ID); - this.state = 429; + this.state = 452; localctx.i = this.match(KELParser.ID); - this.state = 430; + this.state = 453; this.match(KELParser.EQ); - this.state = 431; + this.state = 454; localctx.u = this.match(KELParser.UID); - this.state = 432; + this.state = 455; localctx.c = this.compositeIdSpec(); break; @@ -1964,19 +1633,19 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 435; + this.state = 458; this.match(KELParser.NULL); - this.state = 436; + this.state = 459; this.match(KELParser.LP); - this.state = 438; + this.state = 461; this._errHandler.sync(this); _la = this._input.LA(1); - if(((((_la - 20)) & ~0x1f) == 0 && ((1 << (_la - 20)) & ((1 << (KELParser.HYPHEN - 20)) | (1 << (KELParser.TRUE - 20)) | (1 << (KELParser.FALSE - 20)))) !== 0) || ((((_la - 83)) & ~0x1f) == 0 && ((1 << (_la - 83)) & ((1 << (KELParser.INT - 83)) | (1 << (KELParser.HEXINT - 83)) | (1 << (KELParser.BININT - 83)) | (1 << (KELParser.REAL - 83)) | (1 << (KELParser.STR - 83)) | (1 << (KELParser.TYPDCONST - 83)) | (1 << (KELParser.BAD_BIN - 83)) | (1 << (KELParser.HEX_NO_X - 83)) | (1 << (KELParser.BAD_HEX - 83)) | (1 << (KELParser.BAD_MIX - 83)) | (1 << (KELParser.BAD_REAL_A - 83)) | (1 << (KELParser.BAD_REAL_B - 83)) | (1 << (KELParser.BAD_REAL_C - 83)))) !== 0)) { - this.state = 437; + if(((((_la - 20)) & ~0x1f) == 0 && ((1 << (_la - 20)) & ((1 << (KELParser.HYPHEN - 20)) | (1 << (KELParser.TRUE - 20)) | (1 << (KELParser.FALSE - 20)))) !== 0) || ((((_la - 86)) & ~0x1f) == 0 && ((1 << (_la - 86)) & ((1 << (KELParser.INT - 86)) | (1 << (KELParser.HEXINT - 86)) | (1 << (KELParser.BININT - 86)) | (1 << (KELParser.REAL - 86)) | (1 << (KELParser.STR - 86)) | (1 << (KELParser.TYPDCONST - 86)) | (1 << (KELParser.BAD_BIN - 86)) | (1 << (KELParser.HEX_NO_X - 86)) | (1 << (KELParser.BAD_HEX - 86)) | (1 << (KELParser.BAD_MIX - 86)) | (1 << (KELParser.BAD_REAL_A - 86)) | (1 << (KELParser.BAD_REAL_B - 86)) | (1 << (KELParser.BAD_REAL_C - 86)))) !== 0)) { + this.state = 460; localctx.c = this.simpleConstant(); } - this.state = 440; + this.state = 463; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2000,31 +1669,60 @@ export default class KELParser extends antlr4.Parser { var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 442; + this.state = 465; this.match(KELParser.FORMAT); - this.state = 443; + this.state = 466; this.match(KELParser.LP); - this.state = 452; + this.state = 475; this._errHandler.sync(this); _la = this._input.LA(1); - if(((((_la - 20)) & ~0x1f) == 0 && ((1 << (_la - 20)) & ((1 << (KELParser.HYPHEN - 20)) | (1 << (KELParser.TRUE - 20)) | (1 << (KELParser.FALSE - 20)))) !== 0) || ((((_la - 83)) & ~0x1f) == 0 && ((1 << (_la - 83)) & ((1 << (KELParser.INT - 83)) | (1 << (KELParser.HEXINT - 83)) | (1 << (KELParser.BININT - 83)) | (1 << (KELParser.REAL - 83)) | (1 << (KELParser.STR - 83)) | (1 << (KELParser.TYPDCONST - 83)) | (1 << (KELParser.BAD_BIN - 83)) | (1 << (KELParser.HEX_NO_X - 83)) | (1 << (KELParser.BAD_HEX - 83)) | (1 << (KELParser.BAD_MIX - 83)) | (1 << (KELParser.BAD_REAL_A - 83)) | (1 << (KELParser.BAD_REAL_B - 83)) | (1 << (KELParser.BAD_REAL_C - 83)))) !== 0)) { - this.state = 444; + if(((((_la - 20)) & ~0x1f) == 0 && ((1 << (_la - 20)) & ((1 << (KELParser.HYPHEN - 20)) | (1 << (KELParser.TRUE - 20)) | (1 << (KELParser.FALSE - 20)))) !== 0) || ((((_la - 86)) & ~0x1f) == 0 && ((1 << (_la - 86)) & ((1 << (KELParser.INT - 86)) | (1 << (KELParser.HEXINT - 86)) | (1 << (KELParser.BININT - 86)) | (1 << (KELParser.REAL - 86)) | (1 << (KELParser.STR - 86)) | (1 << (KELParser.TYPDCONST - 86)) | (1 << (KELParser.BAD_BIN - 86)) | (1 << (KELParser.HEX_NO_X - 86)) | (1 << (KELParser.BAD_HEX - 86)) | (1 << (KELParser.BAD_MIX - 86)) | (1 << (KELParser.BAD_REAL_A - 86)) | (1 << (KELParser.BAD_REAL_B - 86)) | (1 << (KELParser.BAD_REAL_C - 86)))) !== 0)) { + this.state = 467; this.simpleConstant(); - this.state = 449; + this.state = 472; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 445; + this.state = 468; this.match(KELParser.COMMA); - this.state = 446; + this.state = 469; this.simpleConstant(); - this.state = 451; + this.state = 474; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 454; + this.state = 477; + this.match(KELParser.RP); + } catch (re) { + if(re instanceof antlr4.error.RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return localctx; + } + + + + likeSpec() { + let localctx = new LikeSpecContext(this, this._ctx, this.state); + this.enterRule(localctx, 42, KELParser.RULE_likeSpec); + try { + this.enterOuterAlt(localctx, 1); + this.state = 479; + this.match(KELParser.LIKE); + this.state = 480; + this.match(KELParser.LP); + this.state = 481; + this.dotId(); + this.state = 482; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2044,27 +1742,27 @@ export default class KELParser extends antlr4.Parser { compositeIdSpec() { let localctx = new CompositeIdSpecContext(this, this._ctx, this.state); - this.enterRule(localctx, 42, KELParser.RULE_compositeIdSpec); + this.enterRule(localctx, 44, KELParser.RULE_compositeIdSpec); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 456; + this.state = 484; this.match(KELParser.LP); - this.state = 457; + this.state = 485; this.dotId(); - this.state = 462; + this.state = 490; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 458; + this.state = 486; this.match(KELParser.COMMA); - this.state = 459; + this.state = 487; this.dotId(); - this.state = 464; + this.state = 492; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 465; + this.state = 493; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2084,48 +1782,48 @@ export default class KELParser extends antlr4.Parser { modelDeclaration() { let localctx = new ModelDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 44, KELParser.RULE_modelDeclaration); + this.enterRule(localctx, 46, KELParser.RULE_modelDeclaration); var _la = 0; // Token type try { - this.state = 483; + this.state = 511; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,36,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,38,this._ctx); switch(la_) { case 1: localctx = new ComplexModelContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 467; + this.state = 495; localctx.md = this.match(KELParser.MODEL); - this.state = 468; + this.state = 496; this.match(KELParser.LP); - this.state = 469; + this.state = 497; this.submodelDeclaration(); - this.state = 474; + this.state = 502; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 470; + this.state = 498; this.match(KELParser.COMMA); - this.state = 471; + this.state = 499; this.submodelDeclaration(); - this.state = 476; + this.state = 504; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 477; + this.state = 505; this.match(KELParser.RP); break; case 2: localctx = new SingleRowModelContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 479; + this.state = 507; localctx.md = this.match(KELParser.MODEL); - this.state = 480; + this.state = 508; this.match(KELParser.LP); - this.state = 481; + this.state = 509; this.match(KELParser.STAR); - this.state = 482; + this.state = 510; this.match(KELParser.RP); break; @@ -2148,17 +1846,17 @@ export default class KELParser extends antlr4.Parser { submodelDeclaration() { let localctx = new SubmodelDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 46, KELParser.RULE_submodelDeclaration); + this.enterRule(localctx, 48, KELParser.RULE_submodelDeclaration); var _la = 0; // Token type try { - this.state = 503; + this.state = 531; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,39,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,41,this._ctx); switch(la_) { case 1: localctx = new SingleValueSubModelContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 485; + this.state = 513; localctx.i = this._input.LT(1); _la = this._input.LA(1); if(!(_la===KELParser.UID || _la===KELParser.ID)) { @@ -2173,42 +1871,42 @@ export default class KELParser extends antlr4.Parser { case 2: localctx = new RemainderSubModelContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 486; + this.state = 514; localctx.b = this.match(KELParser.LCURL); - this.state = 487; + this.state = 515; this.match(KELParser.STAR); - this.state = 488; + this.state = 516; this.match(KELParser.RCURL); break; case 3: localctx = new ExplicitSubModelContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 490; + this.state = 518; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.ID) { - this.state = 489; + this.state = 517; localctx.n = this.match(KELParser.ID); } - this.state = 492; + this.state = 520; localctx.b = this.match(KELParser.LCURL); - this.state = 493; + this.state = 521; this.submodelId(); - this.state = 498; + this.state = 526; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 494; + this.state = 522; this.match(KELParser.COMMA); - this.state = 495; + this.state = 523; this.submodelId(); - this.state = 500; + this.state = 528; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 501; + this.state = 529; this.match(KELParser.RCURL); break; @@ -2231,11 +1929,11 @@ export default class KELParser extends antlr4.Parser { submodelId() { let localctx = new SubmodelIdContext(this, this._ctx, this.state); - this.enterRule(localctx, 48, KELParser.RULE_submodelId); + this.enterRule(localctx, 50, KELParser.RULE_submodelId); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 505; + this.state = 533; _la = this._input.LA(1); if(!(_la===KELParser.UID || _la===KELParser.ID)) { this._errHandler.recoverInline(this); @@ -2262,23 +1960,23 @@ export default class KELParser extends antlr4.Parser { useDeclaration() { let localctx = new UseDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 50, KELParser.RULE_useDeclaration); + this.enterRule(localctx, 52, KELParser.RULE_useDeclaration); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 507; + this.state = 535; this.match(KELParser.USE); - this.state = 508; + this.state = 536; this.useElement(); - this.state = 513; + this.state = 541; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 509; + this.state = 537; this.match(KELParser.COMMA); - this.state = 510; + this.state = 538; this.useElement(); - this.state = 515; + this.state = 543; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -2300,31 +1998,31 @@ export default class KELParser extends antlr4.Parser { useKelBaseDeclaration() { let localctx = new UseKelBaseDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 52, KELParser.RULE_useKelBaseDeclaration); + this.enterRule(localctx, 54, KELParser.RULE_useKelBaseDeclaration); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 516; + this.state = 544; this.match(KELParser.USE); - this.state = 517; + this.state = 545; localctx.attr = this.dotId(); - this.state = 518; + this.state = 546; this.match(KELParser.LP); - this.state = 519; + this.state = 547; this.match(KELParser.KELBASE); - this.state = 522; + this.state = 550; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 520; + this.state = 548; this.match(KELParser.COMMA); - this.state = 521; + this.state = 549; this.expression(); - this.state = 524; + this.state = 552; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===KELParser.COMMA); - this.state = 526; + this.state = 554; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2344,31 +2042,31 @@ export default class KELParser extends antlr4.Parser { useKelQueryDeclaration() { let localctx = new UseKelQueryDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 54, KELParser.RULE_useKelQueryDeclaration); + this.enterRule(localctx, 56, KELParser.RULE_useKelQueryDeclaration); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 528; + this.state = 556; this.match(KELParser.USE); - this.state = 529; + this.state = 557; localctx.attr = this.dotId(); - this.state = 530; + this.state = 558; this.match(KELParser.LP); - this.state = 531; + this.state = 559; this.match(KELParser.KELQUERY); - this.state = 534; + this.state = 562; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 532; + this.state = 560; this.match(KELParser.COMMA); - this.state = 533; + this.state = 561; this.match(KELParser.ID); - this.state = 536; + this.state = 564; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===KELParser.COMMA); - this.state = 538; + this.state = 566; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2388,52 +2086,52 @@ export default class KELParser extends antlr4.Parser { useElement() { let localctx = new UseElementContext(this, this._ctx, this.state); - this.enterRule(localctx, 56, KELParser.RULE_useElement); + this.enterRule(localctx, 58, KELParser.RULE_useElement); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 540; + this.state = 568; localctx.attr = this.dotId(); - this.state = 541; + this.state = 569; this.match(KELParser.LP); - this.state = 542; + this.state = 570; localctx.t = this.useFileType(); - this.state = 550; + this.state = 578; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 543; + this.state = 571; this.match(KELParser.COMMA); - this.state = 548; + this.state = 576; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,43,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,45,this._ctx); switch(la_) { case 1: - this.state = 544; + this.state = 572; localctx.ne = this.nestedEntityMapping(); break; case 2: - this.state = 545; + this.state = 573; localctx.e = this.entityMapping(); break; case 3: - this.state = 546; + this.state = 574; localctx.p = this.permitsClause(); break; case 4: - this.state = 547; + this.state = 575; this.hintsClause(); break; } - this.state = 552; + this.state = 580; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===KELParser.COMMA); - this.state = 554; + this.state = 582; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2453,11 +2151,11 @@ export default class KELParser extends antlr4.Parser { useFileType() { let localctx = new UseFileTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 58, KELParser.RULE_useFileType); + this.enterRule(localctx, 60, KELParser.RULE_useFileType); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 556; + this.state = 584; _la = this._input.LA(1); if(!(_la===KELParser.FLAT || _la===KELParser.FDC)) { this._errHandler.recoverInline(this); @@ -2484,23 +2182,23 @@ export default class KELParser extends antlr4.Parser { useClause() { let localctx = new UseClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 60, KELParser.RULE_useClause); + this.enterRule(localctx, 62, KELParser.RULE_useClause); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 558; + this.state = 586; this.match(KELParser.USE); - this.state = 559; + this.state = 587; this.useClauseElement(); - this.state = 564; + this.state = 592; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 560; + this.state = 588; this.match(KELParser.COMMA); - this.state = 561; + this.state = 589; this.useClauseElement(); - this.state = 566; + this.state = 594; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -2522,41 +2220,41 @@ export default class KELParser extends antlr4.Parser { useClauseElement() { let localctx = new UseClauseElementContext(this, this._ctx, this.state); - this.enterRule(localctx, 62, KELParser.RULE_useClauseElement); + this.enterRule(localctx, 64, KELParser.RULE_useClauseElement); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 567; + this.state = 595; localctx.attr = this.match(KELParser.ID); - this.state = 568; + this.state = 596; this.match(KELParser.LP); - this.state = 569; + this.state = 597; localctx.t = this.useClauseFileType(); - this.state = 575; + this.state = 603; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 570; + this.state = 598; this.match(KELParser.COMMA); - this.state = 573; + this.state = 601; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.ID: - this.state = 571; + this.state = 599; localctx.e = this.entityMapping(); break; case KELParser.PERMITS: - this.state = 572; + this.state = 600; localctx.p = this.permitsClause(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 577; + this.state = 605; this._errHandler.sync(this); _la = this._input.LA(1); } while(_la===KELParser.COMMA); - this.state = 579; + this.state = 607; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2576,10 +2274,10 @@ export default class KELParser extends antlr4.Parser { useClauseFileType() { let localctx = new UseClauseFileTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 64, KELParser.RULE_useClauseFileType); + this.enterRule(localctx, 66, KELParser.RULE_useClauseFileType); try { this.enterOuterAlt(localctx, 1); - this.state = 581; + this.state = 609; this.match(KELParser.FLAT); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2599,53 +2297,53 @@ export default class KELParser extends antlr4.Parser { nestedEntityMapping() { let localctx = new NestedEntityMappingContext(this, this._ctx, this.state); - this.enterRule(localctx, 66, KELParser.RULE_nestedEntityMapping); + this.enterRule(localctx, 68, KELParser.RULE_nestedEntityMapping); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 583; + this.state = 611; localctx.child = this.match(KELParser.ID); - this.state = 584; + this.state = 612; this.match(KELParser.LP); - this.state = 587; + this.state = 615; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.ID: - this.state = 585; + this.state = 613; localctx.e1 = this.entityMapping(); break; case KELParser.PERMITS: - this.state = 586; + this.state = 614; localctx.p1 = this.permitsClause(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 596; + this.state = 624; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 589; + this.state = 617; this.match(KELParser.COMMA); - this.state = 592; + this.state = 620; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.ID: - this.state = 590; + this.state = 618; localctx.e2 = this.entityMapping(); break; case KELParser.PERMITS: - this.state = 591; + this.state = 619; localctx.p2 = this.permitsClause(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 598; + this.state = 626; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 599; + this.state = 627; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2665,132 +2363,132 @@ export default class KELParser extends antlr4.Parser { entityMapping() { let localctx = new EntityMappingContext(this, this._ctx, this.state); - this.enterRule(localctx, 68, KELParser.RULE_entityMapping); + this.enterRule(localctx, 70, KELParser.RULE_entityMapping); var _la = 0; // Token type try { - this.state = 659; + this.state = 687; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,55,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,57,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 601; + this.state = 629; localctx.e = this.match(KELParser.ID); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 602; + this.state = 630; localctx.e = this.match(KELParser.ID); - this.state = 603; + this.state = 631; this.match(KELParser.LP); - this.state = 604; + this.state = 632; this.useMappingOverride(); - this.state = 609; + this.state = 637; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 605; + this.state = 633; this.match(KELParser.COMMA); - this.state = 606; + this.state = 634; this.useMappingOverride(); - this.state = 611; + this.state = 639; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 612; + this.state = 640; this.match(KELParser.RP); break; case 3: this.enterOuterAlt(localctx, 3); - this.state = 614; + this.state = 642; localctx.e = this.match(KELParser.ID); - this.state = 615; + this.state = 643; this.match(KELParser.LP); - this.state = 616; + this.state = 644; localctx.p = this.match(KELParser.ID); - this.state = 617; + this.state = 645; this.match(KELParser.STAR); - this.state = 622; + this.state = 650; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 618; + this.state = 646; this.match(KELParser.COMMA); - this.state = 619; + this.state = 647; this.useMappingOverride(); - this.state = 624; + this.state = 652; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 625; + this.state = 653; this.match(KELParser.RP); break; case 4: this.enterOuterAlt(localctx, 4); - this.state = 626; + this.state = 654; localctx.e = this.match(KELParser.ID); - this.state = 627; + this.state = 655; this.match(KELParser.LP); - this.state = 628; + this.state = 656; this.match(KELParser.FILTER); - this.state = 629; + this.state = 657; this.match(KELParser.LP); - this.state = 630; + this.state = 658; localctx.f = this.eclBody(); - this.state = 631; + this.state = 659; this.match(KELParser.RP); - this.state = 636; + this.state = 664; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 632; + this.state = 660; this.match(KELParser.COMMA); - this.state = 633; + this.state = 661; this.useMappingOverride(); - this.state = 638; + this.state = 666; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 639; + this.state = 667; this.match(KELParser.RP); break; case 5: this.enterOuterAlt(localctx, 5); - this.state = 641; + this.state = 669; localctx.e = this.match(KELParser.ID); - this.state = 642; + this.state = 670; this.match(KELParser.LP); - this.state = 643; + this.state = 671; localctx.p = this.match(KELParser.ID); - this.state = 644; + this.state = 672; this.match(KELParser.STAR); - this.state = 645; + this.state = 673; this.match(KELParser.COMMA); - this.state = 646; + this.state = 674; this.match(KELParser.FILTER); - this.state = 647; + this.state = 675; this.match(KELParser.LP); - this.state = 648; + this.state = 676; localctx.f = this.eclBody(); - this.state = 649; + this.state = 677; this.match(KELParser.RP); - this.state = 654; + this.state = 682; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 650; + this.state = 678; this.match(KELParser.COMMA); - this.state = 651; + this.state = 679; this.useMappingOverride(); - this.state = 656; + this.state = 684; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 657; + this.state = 685; this.match(KELParser.RP); break; @@ -2813,89 +2511,119 @@ export default class KELParser extends antlr4.Parser { useMappingOverride() { let localctx = new UseMappingOverrideContext(this, this._ctx, this.state); - this.enterRule(localctx, 70, KELParser.RULE_useMappingOverride); + this.enterRule(localctx, 72, KELParser.RULE_useMappingOverride); var _la = 0; // Token type try { - this.state = 685; + this.state = 722; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,59,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,62,this._ctx); switch(la_) { case 1: localctx = new NormalMappingOverrideContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 661; + this.state = 689; localctx.ef = this.match(KELParser.UID); - this.state = 662; + this.state = 690; this.match(KELParser.EQ); - this.state = 663; + this.state = 691; localctx.from = this.dotId(); break; case 2: localctx = new NormalMappingOverrideContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 664; + this.state = 692; localctx.ef = this.match(KELParser.ID); - this.state = 665; + this.state = 693; this.match(KELParser.EQ); - this.state = 667; + this.state = 695; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.NULL) { - this.state = 666; + this.state = 694; localctx.nspec = this.nullSpec(); } - this.state = 670; + this.state = 698; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.FORMAT) { - this.state = 669; + this.state = 697; localctx.fspec = this.formatSpec(); } - this.state = 672; + this.state = 700; localctx.from = this.dotId(); break; case 3: localctx = new NormalMappingOverrideContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 673; + this.state = 701; localctx.ef = this.match(KELParser.ID); - this.state = 674; + this.state = 702; this.match(KELParser.EQ); - this.state = 676; + this.state = 704; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.NULL) { - this.state = 675; + this.state = 703; localctx.nspec = this.nullSpec(); } - this.state = 678; + this.state = 706; localctx.fspec = this.formatSpec(); break; case 4: localctx = new NormalMappingOverrideContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 679; + this.state = 707; localctx.ef = this.match(KELParser.ID); - this.state = 680; + this.state = 708; this.match(KELParser.EQ); - this.state = 681; + this.state = 709; localctx.nspec = this.nullSpec(); break; case 5: - localctx = new ConstantMappingOverrideContext(this, localctx); + localctx = new NormalMappingOverrideContext(this, localctx); this.enterOuterAlt(localctx, 5); - this.state = 682; + this.state = 710; localctx.ef = this.match(KELParser.ID); - this.state = 683; + this.state = 711; + this.match(KELParser.EQ); + this.state = 713; + this._errHandler.sync(this); + _la = this._input.LA(1); + if(_la===KELParser.LIKE) { + this.state = 712; + localctx.lspec = this.likeSpec(); + } + + this.state = 715; + localctx.from = this.dotId(); + break; + + case 6: + localctx = new NormalMappingOverrideContext(this, localctx); + this.enterOuterAlt(localctx, 6); + this.state = 716; + localctx.ef = this.match(KELParser.ID); + this.state = 717; + this.match(KELParser.EQ); + this.state = 718; + localctx.lspec = this.likeSpec(); + break; + + case 7: + localctx = new ConstantMappingOverrideContext(this, localctx); + this.enterOuterAlt(localctx, 7); + this.state = 719; + localctx.ef = this.match(KELParser.ID); + this.state = 720; this.match(KELParser.EQ); - this.state = 684; + this.state = 721; localctx.c = this.simpleConstant(); break; @@ -2918,21 +2646,21 @@ export default class KELParser extends antlr4.Parser { dotId() { let localctx = new DotIdContext(this, this._ctx, this.state); - this.enterRule(localctx, 72, KELParser.RULE_dotId); + this.enterRule(localctx, 74, KELParser.RULE_dotId); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 687; + this.state = 724; this.match(KELParser.ID); - this.state = 692; + this.state = 729; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.DOT) { - this.state = 688; + this.state = 725; this.match(KELParser.DOT); - this.state = 689; + this.state = 726; this.match(KELParser.ID); - this.state = 694; + this.state = 731; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -2954,16 +2682,16 @@ export default class KELParser extends antlr4.Parser { permitsClause() { let localctx = new PermitsClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 74, KELParser.RULE_permitsClause); + this.enterRule(localctx, 76, KELParser.RULE_permitsClause); try { this.enterOuterAlt(localctx, 1); - this.state = 695; + this.state = 732; this.match(KELParser.PERMITS); - this.state = 696; + this.state = 733; this.match(KELParser.LP); - this.state = 697; + this.state = 734; this.permitsSpec(); - this.state = 698; + this.state = 735; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -2983,38 +2711,38 @@ export default class KELParser extends antlr4.Parser { permitsSpec() { let localctx = new PermitsSpecContext(this, this._ctx, this.state); - this.enterRule(localctx, 76, KELParser.RULE_permitsSpec); + this.enterRule(localctx, 78, KELParser.RULE_permitsSpec); var _la = 0; // Token type try { - this.state = 711; + this.state = 748; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.ID: localctx = new VariablePermitsContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 700; + this.state = 737; this.dotId(); break; case KELParser.LSQUARE: localctx = new ConstantPermitsContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 701; + this.state = 738; this.match(KELParser.LSQUARE); - this.state = 702; + this.state = 739; this.match(KELParser.ID); - this.state = 707; + this.state = 744; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 703; + this.state = 740; this.match(KELParser.COMMA); - this.state = 704; + this.state = 741; this.match(KELParser.ID); - this.state = 709; + this.state = 746; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 710; + this.state = 747; this.match(KELParser.RSQUARE); break; default: @@ -3038,16 +2766,16 @@ export default class KELParser extends antlr4.Parser { hintsClause() { let localctx = new HintsClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 78, KELParser.RULE_hintsClause); + this.enterRule(localctx, 80, KELParser.RULE_hintsClause); try { this.enterOuterAlt(localctx, 1); - this.state = 713; + this.state = 750; this.match(KELParser.HINT); - this.state = 714; + this.state = 751; this.match(KELParser.LP); - this.state = 715; + this.state = 752; this.match(KELParser.ID); - this.state = 716; + this.state = 753; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3067,69 +2795,69 @@ export default class KELParser extends antlr4.Parser { logicStatement() { let localctx = new LogicStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 80, KELParser.RULE_logicStatement); + this.enterRule(localctx, 82, KELParser.RULE_logicStatement); try { - this.state = 741; + this.state = 778; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,63,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,66,this._ctx); switch(la_) { case 1: localctx = new LogicPropertyStatementContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 718; + this.state = 755; localctx.c = this.match(KELParser.ID); - this.state = 719; + this.state = 756; this.match(KELParser.COLON); - this.state = 720; + this.state = 757; localctx.p = this.logicPredicate(); - this.state = 721; + this.state = 758; this.match(KELParser.RARROW); - this.state = 722; + this.state = 759; this.logicProductions(); break; case 2: localctx = new LogicPropertyStatementContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 724; + this.state = 761; localctx.c = this.match(KELParser.ID); - this.state = 725; + this.state = 762; this.match(KELParser.DOT); - this.state = 726; + this.state = 763; localctx.mvp = this.match(KELParser.ID); - this.state = 727; + this.state = 764; this.match(KELParser.COLON); - this.state = 728; + this.state = 765; localctx.p = this.logicPredicate(); - this.state = 729; + this.state = 766; this.match(KELParser.RARROW); - this.state = 730; + this.state = 767; this.logicProductions(); break; case 3: localctx = new ConstantDeclStatementContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 732; + this.state = 769; localctx.c = this.match(KELParser.ID); - this.state = 733; + this.state = 770; this.match(KELParser.COLON); - this.state = 734; + this.state = 771; this.logicProductions(); break; case 4: localctx = new EntityGeneratorStatementContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 735; + this.state = 772; this.match(KELParser.GLOBAL); - this.state = 736; + this.state = 773; this.match(KELParser.COLON); - this.state = 737; + this.state = 774; localctx.p = this.logicPredicate(); - this.state = 738; + this.state = 775; this.match(KELParser.RARROW); - this.state = 739; + this.state = 776; this.entityProductions(); break; @@ -3152,10 +2880,10 @@ export default class KELParser extends antlr4.Parser { logicPredicate() { let localctx = new LogicPredicateContext(this, this._ctx, this.state); - this.enterRule(localctx, 82, KELParser.RULE_logicPredicate); + this.enterRule(localctx, 84, KELParser.RULE_logicPredicate); var _la = 0; // Token type try { - this.state = 752; + this.state = 789; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.LP: @@ -3187,17 +2915,17 @@ export default class KELParser extends antlr4.Parser { case KELParser.BAD_REAL_B: case KELParser.BAD_REAL_C: this.enterOuterAlt(localctx, 1); - this.state = 743; + this.state = 780; localctx.ex1 = this.expression(); - this.state = 748; + this.state = 785; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 744; + this.state = 781; this.match(KELParser.COMMA); - this.state = 745; + this.state = 782; localctx.ex2 = this.expression(); - this.state = 750; + this.state = 787; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3227,21 +2955,21 @@ export default class KELParser extends antlr4.Parser { logicProductions() { let localctx = new LogicProductionsContext(this, this._ctx, this.state); - this.enterRule(localctx, 84, KELParser.RULE_logicProductions); + this.enterRule(localctx, 86, KELParser.RULE_logicProductions); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 754; + this.state = 791; this.logicProduction(); - this.state = 759; + this.state = 796; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 755; + this.state = 792; this.match(KELParser.COMMA); - this.state = 756; + this.state = 793; this.logicProduction(); - this.state = 761; + this.state = 798; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3263,14 +2991,14 @@ export default class KELParser extends antlr4.Parser { logicProduction() { let localctx = new LogicProductionContext(this, this._ctx, this.state); - this.enterRule(localctx, 86, KELParser.RULE_logicProduction); + this.enterRule(localctx, 88, KELParser.RULE_logicProduction); try { this.enterOuterAlt(localctx, 1); - this.state = 762; + this.state = 799; localctx.name = this.match(KELParser.ID); - this.state = 763; + this.state = 800; this.match(KELParser.DEFEQ); - this.state = 764; + this.state = 801; localctx.ex = this.expression(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3290,21 +3018,21 @@ export default class KELParser extends antlr4.Parser { entityProductions() { let localctx = new EntityProductionsContext(this, this._ctx, this.state); - this.enterRule(localctx, 88, KELParser.RULE_entityProductions); + this.enterRule(localctx, 90, KELParser.RULE_entityProductions); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 766; + this.state = 803; this.entityProduction(); - this.state = 771; + this.state = 808; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 767; + this.state = 804; this.match(KELParser.COMMA); - this.state = 768; + this.state = 805; this.entityProduction(); - this.state = 773; + this.state = 810; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3326,29 +3054,29 @@ export default class KELParser extends antlr4.Parser { entityProduction() { let localctx = new EntityProductionContext(this, this._ctx, this.state); - this.enterRule(localctx, 90, KELParser.RULE_entityProduction); + this.enterRule(localctx, 92, KELParser.RULE_entityProduction); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 774; + this.state = 811; localctx.name = this.match(KELParser.ID); - this.state = 775; + this.state = 812; this.match(KELParser.LP); - this.state = 776; + this.state = 813; localctx.e1 = this.expression(); - this.state = 781; + this.state = 818; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 777; + this.state = 814; localctx.op = this.match(KELParser.COMMA); - this.state = 778; + this.state = 815; localctx.e2 = this.expression(); - this.state = 783; + this.state = 820; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 784; + this.state = 821; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3368,27 +3096,27 @@ export default class KELParser extends antlr4.Parser { functionStatement() { let localctx = new FunctionStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 92, KELParser.RULE_functionStatement); + this.enterRule(localctx, 94, KELParser.RULE_functionStatement); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 786; + this.state = 823; this.match(KELParser.FUNCTION); - this.state = 787; + this.state = 824; this.match(KELParser.COLON); - this.state = 788; + this.state = 825; localctx.name = this.match(KELParser.ID); - this.state = 790; + this.state = 827; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.LP) { - this.state = 789; + this.state = 826; localctx.ps = this.fparams(); } - this.state = 792; + this.state = 829; this.match(KELParser.LARROW); - this.state = 793; + this.state = 830; this.functionBody(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3408,27 +3136,27 @@ export default class KELParser extends antlr4.Parser { fparams() { let localctx = new FparamsContext(this, this._ctx, this.state); - this.enterRule(localctx, 94, KELParser.RULE_fparams); + this.enterRule(localctx, 96, KELParser.RULE_fparams); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 795; + this.state = 832; this.match(KELParser.LP); - this.state = 796; + this.state = 833; localctx.q1 = this.fparam(); - this.state = 801; + this.state = 838; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 797; + this.state = 834; this.match(KELParser.COMMA); - this.state = 798; + this.state = 835; localctx.q2 = this.fparam(); - this.state = 803; + this.state = 840; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 804; + this.state = 841; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3448,18 +3176,18 @@ export default class KELParser extends antlr4.Parser { fparam() { let localctx = new FparamContext(this, this._ctx, this.state); - this.enterRule(localctx, 96, KELParser.RULE_fparam); + this.enterRule(localctx, 98, KELParser.RULE_fparam); try { this.enterOuterAlt(localctx, 1); - this.state = 807; + this.state = 844; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,71,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,74,this._ctx); if(la_===1) { - this.state = 806; + this.state = 843; localctx.pt = this.paramTypeId(); } - this.state = 809; + this.state = 846; localctx.id = this.match(KELParser.ID); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3479,9 +3207,9 @@ export default class KELParser extends antlr4.Parser { functionBody() { let localctx = new FunctionBodyContext(this, this._ctx, this.state); - this.enterRule(localctx, 98, KELParser.RULE_functionBody); + this.enterRule(localctx, 100, KELParser.RULE_functionBody); try { - this.state = 813; + this.state = 850; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.LP: @@ -3513,12 +3241,12 @@ export default class KELParser extends antlr4.Parser { case KELParser.BAD_REAL_B: case KELParser.BAD_REAL_C: this.enterOuterAlt(localctx, 1); - this.state = 811; + this.state = 848; localctx.kel = this.expression(); break; case KELParser.ECL: this.enterOuterAlt(localctx, 2); - this.state = 812; + this.state = 849; localctx.ecl = this.eclExpression(); break; default: @@ -3542,63 +3270,63 @@ export default class KELParser extends antlr4.Parser { queryDeclaration() { let localctx = new QueryDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 100, KELParser.RULE_queryDeclaration); + this.enterRule(localctx, 102, KELParser.RULE_queryDeclaration); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 815; + this.state = 852; this.match(KELParser.QUERY); - this.state = 816; + this.state = 853; this.match(KELParser.COLON); - this.state = 817; + this.state = 854; localctx.name = this.match(KELParser.ID); - this.state = 819; + this.state = 856; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.LP) { - this.state = 818; + this.state = 855; localctx.ps = this.qparams(); } - this.state = 821; + this.state = 858; this.match(KELParser.LARROW); - this.state = 822; + this.state = 859; this.expression(); - this.state = 827; + this.state = 864; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 823; + this.state = 860; this.match(KELParser.COMMA); - this.state = 824; + this.state = 861; this.expression(); - this.state = 829; + this.state = 866; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 833; + this.state = 870; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.ASOF) { - this.state = 830; + this.state = 867; this.asof(); - this.state = 835; + this.state = 872; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 837; + this.state = 874; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.USING) { - this.state = 836; + this.state = 873; this.using(); } - this.state = 840; + this.state = 877; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.USE) { - this.state = 839; + this.state = 876; this.useClause(); } @@ -3620,27 +3348,27 @@ export default class KELParser extends antlr4.Parser { qparams() { let localctx = new QparamsContext(this, this._ctx, this.state); - this.enterRule(localctx, 102, KELParser.RULE_qparams); + this.enterRule(localctx, 104, KELParser.RULE_qparams); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 842; + this.state = 879; this.match(KELParser.LP); - this.state = 843; + this.state = 880; localctx.q1 = this.qparam(); - this.state = 848; + this.state = 885; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 844; + this.state = 881; this.match(KELParser.COMMA); - this.state = 845; + this.state = 882; localctx.q2 = this.qparam(); - this.state = 850; + this.state = 887; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 851; + this.state = 888; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3660,58 +3388,58 @@ export default class KELParser extends antlr4.Parser { qparam() { let localctx = new QparamContext(this, this._ctx, this.state); - this.enterRule(localctx, 104, KELParser.RULE_qparam); + this.enterRule(localctx, 106, KELParser.RULE_qparam); var _la = 0; // Token type try { - this.state = 868; + this.state = 905; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,81,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,84,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 854; + this.state = 891; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,79,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,82,this._ctx); if(la_===1) { - this.state = 853; + this.state = 890; localctx.pt = this.paramTypeId(); } - this.state = 856; + this.state = 893; localctx.id = this.match(KELParser.ID); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 858; + this.state = 895; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.UID || _la===KELParser.ID) { - this.state = 857; + this.state = 894; localctx.at = this.simpleTypeId(); } - this.state = 860; + this.state = 897; localctx.sid = this.match(KELParser.SID); break; case 3: this.enterOuterAlt(localctx, 3); - this.state = 861; + this.state = 898; this.match(KELParser.PERMITS); - this.state = 862; + this.state = 899; localctx.pid = this.match(KELParser.ID); break; case 4: this.enterOuterAlt(localctx, 4); - this.state = 863; + this.state = 900; this.match(KELParser.DATASET); - this.state = 864; + this.state = 901; this.match(KELParser.OF); - this.state = 865; + this.state = 902; localctx.dstype = this.dotId(); - this.state = 866; + this.state = 903; localctx.dsid = this.match(KELParser.ID); break; @@ -3734,24 +3462,24 @@ export default class KELParser extends antlr4.Parser { paramTypeId() { let localctx = new ParamTypeIdContext(this, this._ctx, this.state); - this.enterRule(localctx, 106, KELParser.RULE_paramTypeId); + this.enterRule(localctx, 108, KELParser.RULE_paramTypeId); try { - this.state = 874; + this.state = 911; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.UID: case KELParser.ID: this.enterOuterAlt(localctx, 1); - this.state = 870; + this.state = 907; localctx.simple = this.simpleTypeId(); break; case KELParser.SET: this.enterOuterAlt(localctx, 2); - this.state = 871; + this.state = 908; localctx.isSet = this.match(KELParser.SET); - this.state = 872; + this.state = 909; this.match(KELParser.OF); - this.state = 873; + this.state = 910; localctx.simple = this.simpleTypeId(); break; default: @@ -3775,11 +3503,11 @@ export default class KELParser extends antlr4.Parser { simpleTypeId() { let localctx = new SimpleTypeIdContext(this, this._ctx, this.state); - this.enterRule(localctx, 108, KELParser.RULE_simpleTypeId); + this.enterRule(localctx, 110, KELParser.RULE_simpleTypeId); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 876; + this.state = 913; _la = this._input.LA(1); if(!(_la===KELParser.UID || _la===KELParser.ID)) { this._errHandler.recoverInline(this); @@ -3806,29 +3534,29 @@ export default class KELParser extends antlr4.Parser { asof() { let localctx = new AsofContext(this, this._ctx, this.state); - this.enterRule(localctx, 110, KELParser.RULE_asof); + this.enterRule(localctx, 112, KELParser.RULE_asof); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 878; + this.state = 915; this.match(KELParser.ASOF); - this.state = 879; + this.state = 916; localctx.eraname = this.match(KELParser.ID); - this.state = 880; + this.state = 917; this.match(KELParser.LP); - this.state = 881; + this.state = 918; this.expression(); - this.state = 884; + this.state = 921; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.COMMA) { - this.state = 882; + this.state = 919; this.match(KELParser.COMMA); - this.state = 883; + this.state = 920; this.expression(); } - this.state = 886; + this.state = 923; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3848,12 +3576,12 @@ export default class KELParser extends antlr4.Parser { using() { let localctx = new UsingContext(this, this._ctx, this.state); - this.enterRule(localctx, 112, KELParser.RULE_using); + this.enterRule(localctx, 114, KELParser.RULE_using); try { this.enterOuterAlt(localctx, 1); - this.state = 888; + this.state = 925; this.match(KELParser.USING); - this.state = 889; + this.state = 926; this.permitsSpec(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3873,51 +3601,51 @@ export default class KELParser extends antlr4.Parser { shellDeclaration() { let localctx = new ShellDeclarationContext(this, this._ctx, this.state); - this.enterRule(localctx, 114, KELParser.RULE_shellDeclaration); + this.enterRule(localctx, 116, KELParser.RULE_shellDeclaration); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 891; + this.state = 928; this.match(KELParser.SHELL); - this.state = 892; + this.state = 929; this.match(KELParser.COLON); - this.state = 893; + this.state = 930; localctx.name = this.match(KELParser.ID); - this.state = 895; + this.state = 932; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.LP) { - this.state = 894; + this.state = 931; localctx.ps = this.qparams(); } - this.state = 897; + this.state = 934; this.match(KELParser.LARROW); - this.state = 898; + this.state = 935; localctx.ex = this.expression(); - this.state = 902; + this.state = 939; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.ASOF) { - this.state = 899; + this.state = 936; this.asof(); - this.state = 904; + this.state = 941; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 906; + this.state = 943; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.USING) { - this.state = 905; + this.state = 942; this.using(); } - this.state = 909; + this.state = 946; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.USE) { - this.state = 908; + this.state = 945; this.useClause(); } @@ -3939,17 +3667,17 @@ export default class KELParser extends antlr4.Parser { visual_section() { let localctx = new Visual_sectionContext(this, this._ctx, this.state); - this.enterRule(localctx, 116, KELParser.RULE_visual_section); + this.enterRule(localctx, 118, KELParser.RULE_visual_section); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 911; + this.state = 948; this.match(KELParser.VIS); - this.state = 915; + this.state = 952; this._errHandler.sync(this); _la = this._input.LA(1); - while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << KELParser.LP) | (1 << KELParser.RP) | (1 << KELParser.EQ) | (1 << KELParser.DQUOTE) | (1 << KELParser.LT) | (1 << KELParser.GT) | (1 << KELParser.DOT) | (1 << KELParser.COMMA) | (1 << KELParser.SEMI) | (1 << KELParser.COLON) | (1 << KELParser.LCURL) | (1 << KELParser.RCURL) | (1 << KELParser.LSQUARE) | (1 << KELParser.RSQUARE) | (1 << KELParser.STAR) | (1 << KELParser.SIGIL) | (1 << KELParser.AMP) | (1 << KELParser.TILDE) | (1 << KELParser.EXCLAIM) | (1 << KELParser.HYPHEN) | (1 << KELParser.MOD) | (1 << KELParser.PLUS) | (1 << KELParser.FSLASH) | (1 << KELParser.CARET) | (1 << KELParser.PIPE) | (1 << KELParser.DEFEQ) | (1 << KELParser.NEQ) | (1 << KELParser.LTGT) | (1 << KELParser.LARROW) | (1 << KELParser.RARROW) | (1 << KELParser.GTEQ))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (KELParser.LEQ - 32)) | (1 << (KELParser.NNEQ - 32)) | (1 << (KELParser.IN - 32)) | (1 << (KELParser.OR - 32)) | (1 << (KELParser.NOT - 32)) | (1 << (KELParser.AND - 32)) | (1 << (KELParser.ERA - 32)) | (1 << (KELParser.NULL - 32)) | (1 << (KELParser.DIV - 32)) | (1 << (KELParser.TRUE - 32)) | (1 << (KELParser.FALSE - 32)) | (1 << (KELParser.LINK - 32)) | (1 << (KELParser.ECL - 32)) | (1 << (KELParser.RETURNS - 32)) | (1 << (KELParser.OPTION - 32)) | (1 << (KELParser.PERMITS - 32)) | (1 << (KELParser.ENTITY - 32)) | (1 << (KELParser.ASSOCIATION - 32)) | (1 << (KELParser.IMPORT - 32)) | (1 << (KELParser.FROM - 32)) | (1 << (KELParser.PACKAGE - 32)) | (1 << (KELParser.END - 32)) | (1 << (KELParser.SHELL - 32)) | (1 << (KELParser.FLAT - 32)) | (1 << (KELParser.QUERY - 32)) | (1 << (KELParser.UID - 32)) | (1 << (KELParser.FORMAT - 32)) | (1 << (KELParser.MODEL - 32)) | (1 << (KELParser.USE - 32)) | (1 << (KELParser.KELBASE - 32)) | (1 << (KELParser.KELQUERY - 32)) | (1 << (KELParser.FDC - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (KELParser.FILTER - 64)) | (1 << (KELParser.HINT - 64)) | (1 << (KELParser.GLOBAL - 64)) | (1 << (KELParser.FUNCTION - 64)) | (1 << (KELParser.DATASET - 64)) | (1 << (KELParser.OF - 64)) | (1 << (KELParser.SET - 64)) | (1 << (KELParser.ASOF - 64)) | (1 << (KELParser.USING - 64)) | (1 << (KELParser.VIS - 64)) | (1 << (KELParser.RESOURCES - 64)) | (1 << (KELParser.ENDRESOURCES - 64)) | (1 << (KELParser.DOUBLESTRING - 64)) | (1 << (KELParser.SID - 64)) | (1 << (KELParser.SINT - 64)) | (1 << (KELParser.PID - 64)) | (1 << (KELParser.PSID - 64)) | (1 << (KELParser.ID - 64)) | (1 << (KELParser.INT - 64)) | (1 << (KELParser.HEXINT - 64)) | (1 << (KELParser.BININT - 64)) | (1 << (KELParser.REAL - 64)) | (1 << (KELParser.STR - 64)) | (1 << (KELParser.TYPDCONST - 64)) | (1 << (KELParser.ESC - 64)) | (1 << (KELParser.SEP_COMMENT - 64)) | (1 << (KELParser.ML_COMMENT - 64)) | (1 << (KELParser.MLMS_COMMENT - 64)) | (1 << (KELParser.JAVADOC_OPEN - 64)) | (1 << (KELParser.EMPTY_JAVADOC - 64)) | (1 << (KELParser.NEWLINE - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (KELParser.COMMENT - 96)) | (1 << (KELParser.WS - 96)) | (1 << (KELParser.BAD_BIN - 96)) | (1 << (KELParser.HEX_NO_X - 96)) | (1 << (KELParser.BAD_HEX - 96)) | (1 << (KELParser.BAD_MIX - 96)) | (1 << (KELParser.BAD_REAL_A - 96)) | (1 << (KELParser.BAD_REAL_B - 96)) | (1 << (KELParser.BAD_REAL_C - 96)) | (1 << (KELParser.ML_COMMENT_START - 96)) | (1 << (KELParser.MLMS_COMMENT_START - 96)) | (1 << (KELParser.JD_COMMENT_START - 96)))) !== 0)) { - this.state = 912; + while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << KELParser.LP) | (1 << KELParser.RP) | (1 << KELParser.EQ) | (1 << KELParser.DQUOTE) | (1 << KELParser.LT) | (1 << KELParser.GT) | (1 << KELParser.DOT) | (1 << KELParser.COMMA) | (1 << KELParser.SEMI) | (1 << KELParser.COLON) | (1 << KELParser.LCURL) | (1 << KELParser.RCURL) | (1 << KELParser.LSQUARE) | (1 << KELParser.RSQUARE) | (1 << KELParser.STAR) | (1 << KELParser.SIGIL) | (1 << KELParser.AMP) | (1 << KELParser.TILDE) | (1 << KELParser.EXCLAIM) | (1 << KELParser.HYPHEN) | (1 << KELParser.MOD) | (1 << KELParser.PLUS) | (1 << KELParser.FSLASH) | (1 << KELParser.CARET) | (1 << KELParser.PIPE) | (1 << KELParser.DEFEQ) | (1 << KELParser.NEQ) | (1 << KELParser.LTGT) | (1 << KELParser.LARROW) | (1 << KELParser.RARROW) | (1 << KELParser.GTEQ))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (KELParser.LEQ - 32)) | (1 << (KELParser.NNEQ - 32)) | (1 << (KELParser.IN - 32)) | (1 << (KELParser.OR - 32)) | (1 << (KELParser.NOT - 32)) | (1 << (KELParser.AND - 32)) | (1 << (KELParser.ERA - 32)) | (1 << (KELParser.NULL - 32)) | (1 << (KELParser.DIV - 32)) | (1 << (KELParser.TRUE - 32)) | (1 << (KELParser.FALSE - 32)) | (1 << (KELParser.LINK - 32)) | (1 << (KELParser.ECL - 32)) | (1 << (KELParser.RETURNS - 32)) | (1 << (KELParser.OPTION - 32)) | (1 << (KELParser.PERMITS - 32)) | (1 << (KELParser.ENTITY - 32)) | (1 << (KELParser.ASSOCIATION - 32)) | (1 << (KELParser.IMPORT - 32)) | (1 << (KELParser.FROM - 32)) | (1 << (KELParser.PACKAGE - 32)) | (1 << (KELParser.END - 32)) | (1 << (KELParser.SHELL - 32)) | (1 << (KELParser.FLAT - 32)) | (1 << (KELParser.QUERY - 32)) | (1 << (KELParser.UID - 32)) | (1 << (KELParser.FORMAT - 32)) | (1 << (KELParser.MODEL - 32)) | (1 << (KELParser.USE - 32)) | (1 << (KELParser.KELBASE - 32)) | (1 << (KELParser.KELQUERY - 32)) | (1 << (KELParser.FDC - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (KELParser.FILTER - 64)) | (1 << (KELParser.HINT - 64)) | (1 << (KELParser.GLOBAL - 64)) | (1 << (KELParser.FUNCTION - 64)) | (1 << (KELParser.DATASET - 64)) | (1 << (KELParser.OF - 64)) | (1 << (KELParser.SET - 64)) | (1 << (KELParser.ASOF - 64)) | (1 << (KELParser.USING - 64)) | (1 << (KELParser.VIS - 64)) | (1 << (KELParser.RESOURCES - 64)) | (1 << (KELParser.ENDRESOURCES - 64)) | (1 << (KELParser.AS - 64)) | (1 << (KELParser.SPC - 64)) | (1 << (KELParser.LIKE - 64)) | (1 << (KELParser.DOUBLESTRING - 64)) | (1 << (KELParser.SID - 64)) | (1 << (KELParser.SINT - 64)) | (1 << (KELParser.PID - 64)) | (1 << (KELParser.PSID - 64)) | (1 << (KELParser.ID - 64)) | (1 << (KELParser.INT - 64)) | (1 << (KELParser.HEXINT - 64)) | (1 << (KELParser.BININT - 64)) | (1 << (KELParser.REAL - 64)) | (1 << (KELParser.STR - 64)) | (1 << (KELParser.TYPDCONST - 64)) | (1 << (KELParser.ESC - 64)) | (1 << (KELParser.SEP_COMMENT - 64)) | (1 << (KELParser.ML_COMMENT - 64)) | (1 << (KELParser.MLMS_COMMENT - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (KELParser.EMPTY_JAVADOC - 96)) | (1 << (KELParser.JAVADOC_OPEN - 96)) | (1 << (KELParser.NEWLINE - 96)) | (1 << (KELParser.COMMENT - 96)) | (1 << (KELParser.WS - 96)) | (1 << (KELParser.BAD_BIN - 96)) | (1 << (KELParser.HEX_NO_X - 96)) | (1 << (KELParser.BAD_HEX - 96)) | (1 << (KELParser.BAD_MIX - 96)) | (1 << (KELParser.BAD_REAL_A - 96)) | (1 << (KELParser.BAD_REAL_B - 96)) | (1 << (KELParser.BAD_REAL_C - 96)) | (1 << (KELParser.ML_COMMENT_START - 96)) | (1 << (KELParser.MLMS_COMMENT_START - 96)) | (1 << (KELParser.JD_COMMENT_START - 96)))) !== 0)) { + this.state = 949; _la = this._input.LA(1); if(_la<=0 || _la===KELParser.ENDVIS) { this._errHandler.recoverInline(this); @@ -3958,11 +3686,11 @@ export default class KELParser extends antlr4.Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 917; + this.state = 954; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 918; + this.state = 955; this.match(KELParser.ENDVIS); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -3982,17 +3710,17 @@ export default class KELParser extends antlr4.Parser { resource_section() { let localctx = new Resource_sectionContext(this, this._ctx, this.state); - this.enterRule(localctx, 118, KELParser.RULE_resource_section); + this.enterRule(localctx, 120, KELParser.RULE_resource_section); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 920; + this.state = 957; this.match(KELParser.RESOURCES); - this.state = 924; + this.state = 961; this._errHandler.sync(this); _la = this._input.LA(1); - while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << KELParser.LP) | (1 << KELParser.RP) | (1 << KELParser.EQ) | (1 << KELParser.DQUOTE) | (1 << KELParser.LT) | (1 << KELParser.GT) | (1 << KELParser.DOT) | (1 << KELParser.COMMA) | (1 << KELParser.SEMI) | (1 << KELParser.COLON) | (1 << KELParser.LCURL) | (1 << KELParser.RCURL) | (1 << KELParser.LSQUARE) | (1 << KELParser.RSQUARE) | (1 << KELParser.STAR) | (1 << KELParser.SIGIL) | (1 << KELParser.AMP) | (1 << KELParser.TILDE) | (1 << KELParser.EXCLAIM) | (1 << KELParser.HYPHEN) | (1 << KELParser.MOD) | (1 << KELParser.PLUS) | (1 << KELParser.FSLASH) | (1 << KELParser.CARET) | (1 << KELParser.PIPE) | (1 << KELParser.DEFEQ) | (1 << KELParser.NEQ) | (1 << KELParser.LTGT) | (1 << KELParser.LARROW) | (1 << KELParser.RARROW) | (1 << KELParser.GTEQ))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (KELParser.LEQ - 32)) | (1 << (KELParser.NNEQ - 32)) | (1 << (KELParser.IN - 32)) | (1 << (KELParser.OR - 32)) | (1 << (KELParser.NOT - 32)) | (1 << (KELParser.AND - 32)) | (1 << (KELParser.ERA - 32)) | (1 << (KELParser.NULL - 32)) | (1 << (KELParser.DIV - 32)) | (1 << (KELParser.TRUE - 32)) | (1 << (KELParser.FALSE - 32)) | (1 << (KELParser.LINK - 32)) | (1 << (KELParser.ECL - 32)) | (1 << (KELParser.RETURNS - 32)) | (1 << (KELParser.OPTION - 32)) | (1 << (KELParser.PERMITS - 32)) | (1 << (KELParser.ENTITY - 32)) | (1 << (KELParser.ASSOCIATION - 32)) | (1 << (KELParser.IMPORT - 32)) | (1 << (KELParser.FROM - 32)) | (1 << (KELParser.PACKAGE - 32)) | (1 << (KELParser.END - 32)) | (1 << (KELParser.SHELL - 32)) | (1 << (KELParser.FLAT - 32)) | (1 << (KELParser.QUERY - 32)) | (1 << (KELParser.UID - 32)) | (1 << (KELParser.FORMAT - 32)) | (1 << (KELParser.MODEL - 32)) | (1 << (KELParser.USE - 32)) | (1 << (KELParser.KELBASE - 32)) | (1 << (KELParser.KELQUERY - 32)) | (1 << (KELParser.FDC - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (KELParser.FILTER - 64)) | (1 << (KELParser.HINT - 64)) | (1 << (KELParser.GLOBAL - 64)) | (1 << (KELParser.FUNCTION - 64)) | (1 << (KELParser.DATASET - 64)) | (1 << (KELParser.OF - 64)) | (1 << (KELParser.SET - 64)) | (1 << (KELParser.ASOF - 64)) | (1 << (KELParser.USING - 64)) | (1 << (KELParser.VIS - 64)) | (1 << (KELParser.ENDVIS - 64)) | (1 << (KELParser.RESOURCES - 64)) | (1 << (KELParser.DOUBLESTRING - 64)) | (1 << (KELParser.SID - 64)) | (1 << (KELParser.SINT - 64)) | (1 << (KELParser.PID - 64)) | (1 << (KELParser.PSID - 64)) | (1 << (KELParser.ID - 64)) | (1 << (KELParser.INT - 64)) | (1 << (KELParser.HEXINT - 64)) | (1 << (KELParser.BININT - 64)) | (1 << (KELParser.REAL - 64)) | (1 << (KELParser.STR - 64)) | (1 << (KELParser.TYPDCONST - 64)) | (1 << (KELParser.ESC - 64)) | (1 << (KELParser.SEP_COMMENT - 64)) | (1 << (KELParser.ML_COMMENT - 64)) | (1 << (KELParser.MLMS_COMMENT - 64)) | (1 << (KELParser.JAVADOC_OPEN - 64)) | (1 << (KELParser.EMPTY_JAVADOC - 64)) | (1 << (KELParser.NEWLINE - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (KELParser.COMMENT - 96)) | (1 << (KELParser.WS - 96)) | (1 << (KELParser.BAD_BIN - 96)) | (1 << (KELParser.HEX_NO_X - 96)) | (1 << (KELParser.BAD_HEX - 96)) | (1 << (KELParser.BAD_MIX - 96)) | (1 << (KELParser.BAD_REAL_A - 96)) | (1 << (KELParser.BAD_REAL_B - 96)) | (1 << (KELParser.BAD_REAL_C - 96)) | (1 << (KELParser.ML_COMMENT_START - 96)) | (1 << (KELParser.MLMS_COMMENT_START - 96)) | (1 << (KELParser.JD_COMMENT_START - 96)))) !== 0)) { - this.state = 921; + while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << KELParser.LP) | (1 << KELParser.RP) | (1 << KELParser.EQ) | (1 << KELParser.DQUOTE) | (1 << KELParser.LT) | (1 << KELParser.GT) | (1 << KELParser.DOT) | (1 << KELParser.COMMA) | (1 << KELParser.SEMI) | (1 << KELParser.COLON) | (1 << KELParser.LCURL) | (1 << KELParser.RCURL) | (1 << KELParser.LSQUARE) | (1 << KELParser.RSQUARE) | (1 << KELParser.STAR) | (1 << KELParser.SIGIL) | (1 << KELParser.AMP) | (1 << KELParser.TILDE) | (1 << KELParser.EXCLAIM) | (1 << KELParser.HYPHEN) | (1 << KELParser.MOD) | (1 << KELParser.PLUS) | (1 << KELParser.FSLASH) | (1 << KELParser.CARET) | (1 << KELParser.PIPE) | (1 << KELParser.DEFEQ) | (1 << KELParser.NEQ) | (1 << KELParser.LTGT) | (1 << KELParser.LARROW) | (1 << KELParser.RARROW) | (1 << KELParser.GTEQ))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (KELParser.LEQ - 32)) | (1 << (KELParser.NNEQ - 32)) | (1 << (KELParser.IN - 32)) | (1 << (KELParser.OR - 32)) | (1 << (KELParser.NOT - 32)) | (1 << (KELParser.AND - 32)) | (1 << (KELParser.ERA - 32)) | (1 << (KELParser.NULL - 32)) | (1 << (KELParser.DIV - 32)) | (1 << (KELParser.TRUE - 32)) | (1 << (KELParser.FALSE - 32)) | (1 << (KELParser.LINK - 32)) | (1 << (KELParser.ECL - 32)) | (1 << (KELParser.RETURNS - 32)) | (1 << (KELParser.OPTION - 32)) | (1 << (KELParser.PERMITS - 32)) | (1 << (KELParser.ENTITY - 32)) | (1 << (KELParser.ASSOCIATION - 32)) | (1 << (KELParser.IMPORT - 32)) | (1 << (KELParser.FROM - 32)) | (1 << (KELParser.PACKAGE - 32)) | (1 << (KELParser.END - 32)) | (1 << (KELParser.SHELL - 32)) | (1 << (KELParser.FLAT - 32)) | (1 << (KELParser.QUERY - 32)) | (1 << (KELParser.UID - 32)) | (1 << (KELParser.FORMAT - 32)) | (1 << (KELParser.MODEL - 32)) | (1 << (KELParser.USE - 32)) | (1 << (KELParser.KELBASE - 32)) | (1 << (KELParser.KELQUERY - 32)) | (1 << (KELParser.FDC - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (KELParser.FILTER - 64)) | (1 << (KELParser.HINT - 64)) | (1 << (KELParser.GLOBAL - 64)) | (1 << (KELParser.FUNCTION - 64)) | (1 << (KELParser.DATASET - 64)) | (1 << (KELParser.OF - 64)) | (1 << (KELParser.SET - 64)) | (1 << (KELParser.ASOF - 64)) | (1 << (KELParser.USING - 64)) | (1 << (KELParser.VIS - 64)) | (1 << (KELParser.ENDVIS - 64)) | (1 << (KELParser.RESOURCES - 64)) | (1 << (KELParser.AS - 64)) | (1 << (KELParser.SPC - 64)) | (1 << (KELParser.LIKE - 64)) | (1 << (KELParser.DOUBLESTRING - 64)) | (1 << (KELParser.SID - 64)) | (1 << (KELParser.SINT - 64)) | (1 << (KELParser.PID - 64)) | (1 << (KELParser.PSID - 64)) | (1 << (KELParser.ID - 64)) | (1 << (KELParser.INT - 64)) | (1 << (KELParser.HEXINT - 64)) | (1 << (KELParser.BININT - 64)) | (1 << (KELParser.REAL - 64)) | (1 << (KELParser.STR - 64)) | (1 << (KELParser.TYPDCONST - 64)) | (1 << (KELParser.ESC - 64)) | (1 << (KELParser.SEP_COMMENT - 64)) | (1 << (KELParser.ML_COMMENT - 64)) | (1 << (KELParser.MLMS_COMMENT - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (KELParser.EMPTY_JAVADOC - 96)) | (1 << (KELParser.JAVADOC_OPEN - 96)) | (1 << (KELParser.NEWLINE - 96)) | (1 << (KELParser.COMMENT - 96)) | (1 << (KELParser.WS - 96)) | (1 << (KELParser.BAD_BIN - 96)) | (1 << (KELParser.HEX_NO_X - 96)) | (1 << (KELParser.BAD_HEX - 96)) | (1 << (KELParser.BAD_MIX - 96)) | (1 << (KELParser.BAD_REAL_A - 96)) | (1 << (KELParser.BAD_REAL_B - 96)) | (1 << (KELParser.BAD_REAL_C - 96)) | (1 << (KELParser.ML_COMMENT_START - 96)) | (1 << (KELParser.MLMS_COMMENT_START - 96)) | (1 << (KELParser.JD_COMMENT_START - 96)))) !== 0)) { + this.state = 958; _la = this._input.LA(1); if(_la<=0 || _la===KELParser.ENDRESOURCES) { this._errHandler.recoverInline(this); @@ -4001,11 +3729,11 @@ export default class KELParser extends antlr4.Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 926; + this.state = 963; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 927; + this.state = 964; this.match(KELParser.ENDRESOURCES); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4025,10 +3753,10 @@ export default class KELParser extends antlr4.Parser { expression() { let localctx = new ExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 120, KELParser.RULE_expression); + this.enterRule(localctx, 122, KELParser.RULE_expression); try { this.enterOuterAlt(localctx, 1); - this.state = 929; + this.state = 966; localctx.be = this.booleanDisjunction(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4048,21 +3776,21 @@ export default class KELParser extends antlr4.Parser { booleanDisjunction() { let localctx = new BooleanDisjunctionContext(this, this._ctx, this.state); - this.enterRule(localctx, 122, KELParser.RULE_booleanDisjunction); + this.enterRule(localctx, 124, KELParser.RULE_booleanDisjunction); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 931; + this.state = 968; this.booleanConjunction(); - this.state = 936; + this.state = 973; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.OR) { - this.state = 932; + this.state = 969; localctx.op = this.match(KELParser.OR); - this.state = 933; + this.state = 970; this.booleanConjunction(); - this.state = 938; + this.state = 975; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -4084,21 +3812,21 @@ export default class KELParser extends antlr4.Parser { booleanConjunction() { let localctx = new BooleanConjunctionContext(this, this._ctx, this.state); - this.enterRule(localctx, 124, KELParser.RULE_booleanConjunction); + this.enterRule(localctx, 126, KELParser.RULE_booleanConjunction); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 939; + this.state = 976; this.booleanTerm(); - this.state = 944; + this.state = 981; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.AND) { - this.state = 940; + this.state = 977; localctx.op = this.match(KELParser.AND); - this.state = 941; + this.state = 978; this.booleanTerm(); - this.state = 946; + this.state = 983; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -4120,16 +3848,16 @@ export default class KELParser extends antlr4.Parser { booleanTerm() { let localctx = new BooleanTermContext(this, this._ctx, this.state); - this.enterRule(localctx, 126, KELParser.RULE_booleanTerm); + this.enterRule(localctx, 128, KELParser.RULE_booleanTerm); try { - this.state = 950; + this.state = 987; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.NOT: this.enterOuterAlt(localctx, 1); - this.state = 947; + this.state = 984; localctx.op = this.match(KELParser.NOT); - this.state = 948; + this.state = 985; localctx.t = this.booleanTerm(); break; case KELParser.LP: @@ -4160,7 +3888,7 @@ export default class KELParser extends antlr4.Parser { case KELParser.BAD_REAL_B: case KELParser.BAD_REAL_C: this.enterOuterAlt(localctx, 2); - this.state = 949; + this.state = 986; localctx.a = this.booleanAtom(); break; default: @@ -4184,17 +3912,17 @@ export default class KELParser extends antlr4.Parser { booleanAtom() { let localctx = new BooleanAtomContext(this, this._ctx, this.state); - this.enterRule(localctx, 128, KELParser.RULE_booleanAtom); + this.enterRule(localctx, 130, KELParser.RULE_booleanAtom); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 952; + this.state = 989; localctx.e1 = this.valueExpression(); - this.state = 955; + this.state = 992; this._errHandler.sync(this); _la = this._input.LA(1); if(((((_la - 3)) & ~0x1f) == 0 && ((1 << (_la - 3)) & ((1 << (KELParser.EQ - 3)) | (1 << (KELParser.LT - 3)) | (1 << (KELParser.GT - 3)) | (1 << (KELParser.NEQ - 3)) | (1 << (KELParser.LTGT - 3)) | (1 << (KELParser.LARROW - 3)) | (1 << (KELParser.GTEQ - 3)) | (1 << (KELParser.LEQ - 3)) | (1 << (KELParser.NNEQ - 3)) | (1 << (KELParser.IN - 3)))) !== 0)) { - this.state = 953; + this.state = 990; localctx.op = this._input.LT(1); _la = this._input.LA(1); if(!(((((_la - 3)) & ~0x1f) == 0 && ((1 << (_la - 3)) & ((1 << (KELParser.EQ - 3)) | (1 << (KELParser.LT - 3)) | (1 << (KELParser.GT - 3)) | (1 << (KELParser.NEQ - 3)) | (1 << (KELParser.LTGT - 3)) | (1 << (KELParser.LARROW - 3)) | (1 << (KELParser.GTEQ - 3)) | (1 << (KELParser.LEQ - 3)) | (1 << (KELParser.NNEQ - 3)) | (1 << (KELParser.IN - 3)))) !== 0))) { @@ -4204,7 +3932,7 @@ export default class KELParser extends antlr4.Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 954; + this.state = 991; localctx.e2 = this.valueExpression(); } @@ -4226,17 +3954,17 @@ export default class KELParser extends antlr4.Parser { valueExpression() { let localctx = new ValueExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 130, KELParser.RULE_valueExpression); + this.enterRule(localctx, 132, KELParser.RULE_valueExpression); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 957; + this.state = 994; localctx.l = this.valueTerm(); - this.state = 962; + this.state = 999; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.HYPHEN || _la===KELParser.PLUS) { - this.state = 958; + this.state = 995; localctx.op = this._input.LT(1); _la = this._input.LA(1); if(!(_la===KELParser.HYPHEN || _la===KELParser.PLUS)) { @@ -4246,9 +3974,9 @@ export default class KELParser extends antlr4.Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 959; + this.state = 996; localctx.r = this.valueTerm(); - this.state = 964; + this.state = 1001; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -4270,17 +3998,17 @@ export default class KELParser extends antlr4.Parser { valueTerm() { let localctx = new ValueTermContext(this, this._ctx, this.state); - this.enterRule(localctx, 132, KELParser.RULE_valueTerm); + this.enterRule(localctx, 134, KELParser.RULE_valueTerm); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 965; + this.state = 1002; localctx.l = this.valueFactor(); - this.state = 970; + this.state = 1007; this._errHandler.sync(this); _la = this._input.LA(1); while(((((_la - 15)) & ~0x1f) == 0 && ((1 << (_la - 15)) & ((1 << (KELParser.STAR - 15)) | (1 << (KELParser.MOD - 15)) | (1 << (KELParser.FSLASH - 15)) | (1 << (KELParser.DIV - 15)))) !== 0)) { - this.state = 966; + this.state = 1003; localctx.op = this._input.LT(1); _la = this._input.LA(1); if(!(((((_la - 15)) & ~0x1f) == 0 && ((1 << (_la - 15)) & ((1 << (KELParser.STAR - 15)) | (1 << (KELParser.MOD - 15)) | (1 << (KELParser.FSLASH - 15)) | (1 << (KELParser.DIV - 15)))) !== 0))) { @@ -4290,9 +4018,9 @@ export default class KELParser extends antlr4.Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 967; + this.state = 1004; localctx.r = this.valueFactor(); - this.state = 972; + this.state = 1009; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -4314,34 +4042,34 @@ export default class KELParser extends antlr4.Parser { valueFactor() { let localctx = new ValueFactorContext(this, this._ctx, this.state); - this.enterRule(localctx, 134, KELParser.RULE_valueFactor); + this.enterRule(localctx, 136, KELParser.RULE_valueFactor); var _la = 0; // Token type try { - this.state = 1000; + this.state = 1037; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,98,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,101,this._ctx); switch(la_) { case 1: localctx = new UnaryValueFactorContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 973; + this.state = 1010; localctx.op = this.match(KELParser.HYPHEN); - this.state = 974; + this.state = 1011; localctx.f = this.valueFactor(); break; case 2: localctx = new PropValueFactorContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 975; + this.state = 1012; localctx.a = this.valueAtom(); - this.state = 978; + this.state = 1015; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.COLON) { - this.state = 976; + this.state = 1013; localctx.op = this.match(KELParser.COLON); - this.state = 977; + this.state = 1014; localctx.tp = this.tableProperty(); } @@ -4350,52 +4078,52 @@ export default class KELParser extends antlr4.Parser { case 3: localctx = new ScopedValueFactorContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 980; + this.state = 1017; localctx.ref = this.qualifiedId(); - this.state = 981; + this.state = 1018; this.match(KELParser.SIGIL); - this.state = 982; + this.state = 1019; localctx.se = this.scopeExpression(); break; case 4: localctx = new ConstValueFactorContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 984; + this.state = 1021; localctx.c = this.constant(); break; case 5: localctx = new NestedValueFactorContext(this, localctx); this.enterOuterAlt(localctx, 5); - this.state = 985; + this.state = 1022; this.match(KELParser.LP); - this.state = 986; + this.state = 1023; localctx.e = this.expression(); - this.state = 987; + this.state = 1024; this.match(KELParser.RP); break; case 6: localctx = new SetValueFactorContext(this, localctx); this.enterOuterAlt(localctx, 6); - this.state = 989; + this.state = 1026; this.match(KELParser.LSQUARE); - this.state = 990; + this.state = 1027; this.expression(); - this.state = 995; + this.state = 1032; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 991; + this.state = 1028; this.match(KELParser.COMMA); - this.state = 992; + this.state = 1029; this.expression(); - this.state = 997; + this.state = 1034; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 998; + this.state = 1035; this.match(KELParser.RSQUARE); break; @@ -4418,25 +4146,25 @@ export default class KELParser extends antlr4.Parser { valueAtom() { let localctx = new ValueAtomContext(this, this._ctx, this.state); - this.enterRule(localctx, 136, KELParser.RULE_valueAtom); + this.enterRule(localctx, 138, KELParser.RULE_valueAtom); var _la = 0; // Token type try { - this.state = 1013; + this.state = 1050; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,100,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,103,this._ctx); switch(la_) { case 1: localctx = new QueryOpValueAtomContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1002; + this.state = 1039; localctx.base = this.leadingId(); - this.state = 1004; + this.state = 1041; this._errHandler.sync(this); _la = this._input.LA(1); do { - this.state = 1003; + this.state = 1040; localctx.qo = this.queryFuncOp(); - this.state = 1006; + this.state = 1043; this._errHandler.sync(this); _la = this._input.LA(1); } while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << KELParser.LP) | (1 << KELParser.DOT) | (1 << KELParser.LCURL))) !== 0)); @@ -4445,35 +4173,35 @@ export default class KELParser extends antlr4.Parser { case 2: localctx = new ProjValueAtomContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1008; + this.state = 1045; localctx.p = this.entityProjection(); break; case 3: localctx = new PatternModelAtomContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1009; + this.state = 1046; localctx.m = this.patternModel(); break; case 4: localctx = new IdValueAtomContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 1010; + this.state = 1047; localctx.id = this.leadingId(); break; case 5: localctx = new AutoMatchValueAtomContext(this, localctx); this.enterOuterAlt(localctx, 5); - this.state = 1011; + this.state = 1048; localctx.sid = this.match(KELParser.SID); break; case 6: localctx = new LinkAtomContext(this, localctx); this.enterOuterAlt(localctx, 6); - this.state = 1012; + this.state = 1049; this.linkExp(); break; @@ -4496,24 +4224,24 @@ export default class KELParser extends antlr4.Parser { queryFuncOp() { let localctx = new QueryFuncOpContext(this, this._ctx, this.state); - this.enterRule(localctx, 138, KELParser.RULE_queryFuncOp); + this.enterRule(localctx, 140, KELParser.RULE_queryFuncOp); try { - this.state = 1018; + this.state = 1055; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.LP: this.enterOuterAlt(localctx, 1); - this.state = 1015; + this.state = 1052; localctx.f = this.funcOrFilter(); break; case KELParser.LCURL: this.enterOuterAlt(localctx, 2); - this.state = 1016; + this.state = 1053; localctx.p = this.entityProjection(); break; case KELParser.DOT: this.enterOuterAlt(localctx, 3); - this.state = 1017; + this.state = 1054; localctx.fs = this.fieldSelector(); break; default: @@ -4537,75 +4265,75 @@ export default class KELParser extends antlr4.Parser { funcOrFilter() { let localctx = new FuncOrFilterContext(this, this._ctx, this.state); - this.enterRule(localctx, 140, KELParser.RULE_funcOrFilter); + this.enterRule(localctx, 142, KELParser.RULE_funcOrFilter); var _la = 0; // Token type try { - this.state = 1048; + this.state = 1085; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,105,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,108,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 1020; + this.state = 1057; this.match(KELParser.LP); - this.state = 1021; + this.state = 1058; this.match(KELParser.RP); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 1022; + this.state = 1059; this.match(KELParser.LP); - this.state = 1023; + this.state = 1060; localctx.p1 = this.pair(); - this.state = 1028; + this.state = 1065; this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,102,this._ctx) + var _alt = this._interp.adaptivePredict(this._input,105,this._ctx) while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { if(_alt===1) { - this.state = 1024; + this.state = 1061; localctx.op1 = this.match(KELParser.COMMA); - this.state = 1025; + this.state = 1062; localctx.p2 = this.pair(); } - this.state = 1030; + this.state = 1067; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,102,this._ctx); + _alt = this._interp.adaptivePredict(this._input,105,this._ctx); } - this.state = 1033; + this.state = 1070; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.COMMA) { - this.state = 1031; + this.state = 1068; localctx.op2 = this.match(KELParser.COMMA); - this.state = 1032; + this.state = 1069; localctx.def = this.expression(); } - this.state = 1035; + this.state = 1072; this.match(KELParser.RP); break; case 3: this.enterOuterAlt(localctx, 3); - this.state = 1037; + this.state = 1074; this.match(KELParser.LP); - this.state = 1038; + this.state = 1075; localctx.e1 = this.expression(); - this.state = 1043; + this.state = 1080; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 1039; + this.state = 1076; localctx.op = this.match(KELParser.COMMA); - this.state = 1040; + this.state = 1077; localctx.e2 = this.expression(); - this.state = 1045; + this.state = 1082; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1046; + this.state = 1083; this.match(KELParser.RP); break; @@ -4628,14 +4356,14 @@ export default class KELParser extends antlr4.Parser { pair() { let localctx = new PairContext(this, this._ctx, this.state); - this.enterRule(localctx, 142, KELParser.RULE_pair); + this.enterRule(localctx, 144, KELParser.RULE_pair); try { this.enterOuterAlt(localctx, 1); - this.state = 1050; + this.state = 1087; localctx.test = this.expression(); - this.state = 1051; + this.state = 1088; localctx.op = this.match(KELParser.RARROW); - this.state = 1052; + this.state = 1089; localctx.value = this.expression(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4655,35 +4383,35 @@ export default class KELParser extends antlr4.Parser { linkExp() { let localctx = new LinkExpContext(this, this._ctx, this.state); - this.enterRule(localctx, 144, KELParser.RULE_linkExp); + this.enterRule(localctx, 146, KELParser.RULE_linkExp); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 1054; + this.state = 1091; this.match(KELParser.LINK); - this.state = 1055; + this.state = 1092; this.match(KELParser.LP); - this.state = 1056; + this.state = 1093; localctx.start = this.expression(); - this.state = 1057; + this.state = 1094; this.match(KELParser.COMMA); - this.state = 1058; + this.state = 1095; localctx.body = this.valueAtom(); - this.state = 1060; + this.state = 1097; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.LSQUARE) { - this.state = 1059; + this.state = 1096; this.linkSpec(); } - this.state = 1062; + this.state = 1099; this.linkDegree(); - this.state = 1063; + this.state = 1100; this.match(KELParser.COMMA); - this.state = 1064; + this.state = 1101; localctx.end = this.expression(); - this.state = 1065; + this.state = 1102; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4703,18 +4431,18 @@ export default class KELParser extends antlr4.Parser { linkSpec() { let localctx = new LinkSpecContext(this, this._ctx, this.state); - this.enterRule(localctx, 146, KELParser.RULE_linkSpec); + this.enterRule(localctx, 148, KELParser.RULE_linkSpec); try { this.enterOuterAlt(localctx, 1); - this.state = 1067; + this.state = 1104; this.match(KELParser.LSQUARE); - this.state = 1068; + this.state = 1105; localctx.from = this.propertyId(); - this.state = 1069; + this.state = 1106; this.match(KELParser.COMMA); - this.state = 1070; + this.state = 1107; localctx.to = this.propertyId(); - this.state = 1071; + this.state = 1108; this.match(KELParser.RSQUARE); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4734,12 +4462,12 @@ export default class KELParser extends antlr4.Parser { linkDegree() { let localctx = new LinkDegreeContext(this, this._ctx, this.state); - this.enterRule(localctx, 148, KELParser.RULE_linkDegree); + this.enterRule(localctx, 150, KELParser.RULE_linkDegree); try { this.enterOuterAlt(localctx, 1); - this.state = 1073; + this.state = 1110; this.match(KELParser.STAR); - this.state = 1074; + this.state = 1111; this.match(KELParser.INT); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4759,27 +4487,27 @@ export default class KELParser extends antlr4.Parser { entityProjection() { let localctx = new EntityProjectionContext(this, this._ctx, this.state); - this.enterRule(localctx, 150, KELParser.RULE_entityProjection); + this.enterRule(localctx, 152, KELParser.RULE_entityProjection); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 1076; + this.state = 1113; localctx.b = this.match(KELParser.LCURL); - this.state = 1077; + this.state = 1114; localctx.e1 = this.namedExpression(); - this.state = 1082; + this.state = 1119; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 1078; + this.state = 1115; this.match(KELParser.COMMA); - this.state = 1079; + this.state = 1116; localctx.e2 = this.namedExpression(); - this.state = 1084; + this.state = 1121; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1085; + this.state = 1122; this.match(KELParser.RCURL); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4799,25 +4527,25 @@ export default class KELParser extends antlr4.Parser { namedExpression() { let localctx = new NamedExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 152, KELParser.RULE_namedExpression); + this.enterRule(localctx, 154, KELParser.RULE_namedExpression); try { - this.state = 1091; + this.state = 1128; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,108,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,111,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 1087; + this.state = 1124; localctx.n = this.match(KELParser.ID); - this.state = 1088; + this.state = 1125; this.match(KELParser.DEFEQ); - this.state = 1089; + this.state = 1126; localctx.ex = this.expression(); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 1090; + this.state = 1127; localctx.ex = this.expression(); break; @@ -4840,29 +4568,29 @@ export default class KELParser extends antlr4.Parser { patternModel() { let localctx = new PatternModelContext(this, this._ctx, this.state); - this.enterRule(localctx, 154, KELParser.RULE_patternModel); + this.enterRule(localctx, 156, KELParser.RULE_patternModel); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 1093; + this.state = 1130; this.match(KELParser.MODEL); - this.state = 1094; + this.state = 1131; this.match(KELParser.LP); - this.state = 1095; + this.state = 1132; this.patternSubmodel(); - this.state = 1100; + this.state = 1137; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 1096; + this.state = 1133; this.match(KELParser.COMMA); - this.state = 1097; + this.state = 1134; this.patternSubmodel(); - this.state = 1102; + this.state = 1139; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1103; + this.state = 1140; this.match(KELParser.RP); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4882,47 +4610,47 @@ export default class KELParser extends antlr4.Parser { patternSubmodel() { let localctx = new PatternSubmodelContext(this, this._ctx, this.state); - this.enterRule(localctx, 156, KELParser.RULE_patternSubmodel); + this.enterRule(localctx, 158, KELParser.RULE_patternSubmodel); var _la = 0; // Token type try { - this.state = 1119; + this.state = 1156; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.PID: localctx = new SingleValuedPatternSubmodelContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1105; + this.state = 1142; this.match(KELParser.PID); break; case KELParser.LCURL: case KELParser.PSID: localctx = new MultiValuedPatternSubmodelContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1107; + this.state = 1144; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.PSID) { - this.state = 1106; + this.state = 1143; localctx.n = this.match(KELParser.PSID); } - this.state = 1109; + this.state = 1146; this.match(KELParser.LCURL); - this.state = 1110; + this.state = 1147; this.match(KELParser.PID); - this.state = 1115; + this.state = 1152; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 1111; + this.state = 1148; this.match(KELParser.COMMA); - this.state = 1112; + this.state = 1149; this.match(KELParser.PID); - this.state = 1117; + this.state = 1154; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1118; + this.state = 1155; this.match(KELParser.RCURL); break; default: @@ -4946,12 +4674,12 @@ export default class KELParser extends antlr4.Parser { fieldSelector() { let localctx = new FieldSelectorContext(this, this._ctx, this.state); - this.enterRule(localctx, 158, KELParser.RULE_fieldSelector); + this.enterRule(localctx, 160, KELParser.RULE_fieldSelector); try { this.enterOuterAlt(localctx, 1); - this.state = 1121; + this.state = 1158; this.match(KELParser.DOT); - this.state = 1122; + this.state = 1159; localctx.id = this.fieldId(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -4971,36 +4699,36 @@ export default class KELParser extends antlr4.Parser { scopeExpression() { let localctx = new ScopeExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 160, KELParser.RULE_scopeExpression); + this.enterRule(localctx, 162, KELParser.RULE_scopeExpression); try { - this.state = 1131; + this.state = 1168; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,113,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,116,this._ctx); switch(la_) { case 1: localctx = new SelfScopeExpressionContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1124; + this.state = 1161; localctx.p = this.tableProperty(); break; case 2: localctx = new OuterScopeExpressionContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1125; + this.state = 1162; this.match(KELParser.CARET); - this.state = 1126; + this.state = 1163; localctx.p = this.tableProperty(); break; case 3: localctx = new ExplicitScopeExpressionContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1127; + this.state = 1164; localctx.se = this.valueAtom(); - this.state = 1128; + this.state = 1165; this.match(KELParser.COLON); - this.state = 1129; + this.state = 1166; localctx.p = this.tableProperty(); break; @@ -5023,38 +4751,38 @@ export default class KELParser extends antlr4.Parser { tableProperty() { let localctx = new TablePropertyContext(this, this._ctx, this.state); - this.enterRule(localctx, 162, KELParser.RULE_tableProperty); + this.enterRule(localctx, 164, KELParser.RULE_tableProperty); var _la = 0; // Token type try { - this.state = 1143; + this.state = 1180; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,115,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,118,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 1133; + this.state = 1170; localctx.id = this.tablePropId(); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 1134; + this.state = 1171; localctx.id = this.tablePropId(); - this.state = 1135; + this.state = 1172; this.match(KELParser.LP); - this.state = 1136; + this.state = 1173; localctx.v = this.expression(); - this.state = 1139; + this.state = 1176; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.COMMA) { - this.state = 1137; + this.state = 1174; this.match(KELParser.COMMA); - this.state = 1138; + this.state = 1175; localctx.w = this.expression(); } - this.state = 1141; + this.state = 1178; this.match(KELParser.RP); break; @@ -5077,10 +4805,10 @@ export default class KELParser extends antlr4.Parser { func_id() { let localctx = new Func_idContext(this, this._ctx, this.state); - this.enterRule(localctx, 164, KELParser.RULE_func_id); + this.enterRule(localctx, 166, KELParser.RULE_func_id); try { this.enterOuterAlt(localctx, 1); - this.state = 1145; + this.state = 1182; this.match(KELParser.ID); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5100,21 +4828,21 @@ export default class KELParser extends antlr4.Parser { qualifiedId() { let localctx = new QualifiedIdContext(this, this._ctx, this.state); - this.enterRule(localctx, 166, KELParser.RULE_qualifiedId); + this.enterRule(localctx, 168, KELParser.RULE_qualifiedId); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 1147; + this.state = 1184; localctx.id1 = this.leadingId(); - this.state = 1152; + this.state = 1189; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.DOT) { - this.state = 1148; + this.state = 1185; this.match(KELParser.DOT); - this.state = 1149; + this.state = 1186; localctx.id2 = this.fieldId(); - this.state = 1154; + this.state = 1191; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5136,34 +4864,34 @@ export default class KELParser extends antlr4.Parser { leadingId() { let localctx = new LeadingIdContext(this, this._ctx, this.state); - this.enterRule(localctx, 168, KELParser.RULE_leadingId); + this.enterRule(localctx, 170, KELParser.RULE_leadingId); try { - this.state = 1160; + this.state = 1197; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.ID: this.enterOuterAlt(localctx, 1); - this.state = 1155; + this.state = 1192; localctx.id = this.match(KELParser.ID); break; case KELParser.UID: this.enterOuterAlt(localctx, 2); - this.state = 1156; + this.state = 1193; localctx.id = this.match(KELParser.UID); break; case KELParser.SINT: this.enterOuterAlt(localctx, 3); - this.state = 1157; + this.state = 1194; localctx.id = this.match(KELParser.SINT); break; case KELParser.PID: this.enterOuterAlt(localctx, 4); - this.state = 1158; + this.state = 1195; localctx.pid = this.match(KELParser.PID); break; case KELParser.PSID: this.enterOuterAlt(localctx, 5); - this.state = 1159; + this.state = 1196; localctx.psid = this.match(KELParser.PSID); break; default: @@ -5187,29 +4915,29 @@ export default class KELParser extends antlr4.Parser { fieldId() { let localctx = new FieldIdContext(this, this._ctx, this.state); - this.enterRule(localctx, 170, KELParser.RULE_fieldId); + this.enterRule(localctx, 172, KELParser.RULE_fieldId); try { - this.state = 1166; + this.state = 1203; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.ID: this.enterOuterAlt(localctx, 1); - this.state = 1162; + this.state = 1199; localctx.id = this.match(KELParser.ID); break; case KELParser.UID: this.enterOuterAlt(localctx, 2); - this.state = 1163; + this.state = 1200; localctx.id = this.match(KELParser.UID); break; case KELParser.PID: this.enterOuterAlt(localctx, 3); - this.state = 1164; + this.state = 1201; localctx.id = this.match(KELParser.PID); break; case KELParser.PSID: this.enterOuterAlt(localctx, 4); - this.state = 1165; + this.state = 1202; localctx.id = this.match(KELParser.PSID); break; default: @@ -5233,10 +4961,10 @@ export default class KELParser extends antlr4.Parser { tablePropId() { let localctx = new TablePropIdContext(this, this._ctx, this.state); - this.enterRule(localctx, 172, KELParser.RULE_tablePropId); + this.enterRule(localctx, 174, KELParser.RULE_tablePropId); try { this.enterOuterAlt(localctx, 1); - this.state = 1168; + this.state = 1205; localctx.id = this.match(KELParser.ID); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5256,19 +4984,19 @@ export default class KELParser extends antlr4.Parser { propertyId() { let localctx = new PropertyIdContext(this, this._ctx, this.state); - this.enterRule(localctx, 174, KELParser.RULE_propertyId); + this.enterRule(localctx, 176, KELParser.RULE_propertyId); try { - this.state = 1172; + this.state = 1209; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.ID: this.enterOuterAlt(localctx, 1); - this.state = 1170; + this.state = 1207; localctx.id = this.match(KELParser.ID); break; case KELParser.UID: this.enterOuterAlt(localctx, 2); - this.state = 1171; + this.state = 1208; localctx.id = this.match(KELParser.UID); break; default: @@ -5292,9 +5020,9 @@ export default class KELParser extends antlr4.Parser { constant() { let localctx = new ConstantContext(this, this._ctx, this.state); - this.enterRule(localctx, 176, KELParser.RULE_constant); + this.enterRule(localctx, 178, KELParser.RULE_constant); try { - this.state = 1177; + this.state = 1214; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.HYPHEN: @@ -5315,15 +5043,15 @@ export default class KELParser extends antlr4.Parser { case KELParser.BAD_REAL_C: localctx = new NonSetConstantContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1174; + this.state = 1211; this.simpleConstant(); break; case KELParser.LSQUARE: localctx = new EmptySetConstantContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1175; + this.state = 1212; this.match(KELParser.LSQUARE); - this.state = 1176; + this.state = 1213; this.match(KELParser.RSQUARE); break; default: @@ -5347,51 +5075,51 @@ export default class KELParser extends antlr4.Parser { simpleConstant() { let localctx = new SimpleConstantContext(this, this._ctx, this.state); - this.enterRule(localctx, 178, KELParser.RULE_simpleConstant); + this.enterRule(localctx, 180, KELParser.RULE_simpleConstant); try { - this.state = 1185; + this.state = 1222; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,121,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,124,this._ctx); switch(la_) { case 1: localctx = new StringConstantContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1179; + this.state = 1216; localctx.s = this.match(KELParser.STR); break; case 2: localctx = new GeneralRealConstantContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1180; + this.state = 1217; localctx.r = this.realConstant(); break; case 3: localctx = new TrueConstantContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1181; + this.state = 1218; localctx.b = this.match(KELParser.TRUE); break; case 4: localctx = new FalseConstantContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 1182; + this.state = 1219; localctx.b = this.match(KELParser.FALSE); break; case 5: localctx = new TypedConstantContext(this, localctx); this.enterOuterAlt(localctx, 5); - this.state = 1183; + this.state = 1220; localctx.t = this.match(KELParser.TYPDCONST); break; case 6: localctx = new GeneralIntConstantContext(this, localctx); this.enterOuterAlt(localctx, 6); - this.state = 1184; + this.state = 1221; localctx.i = this.intConstant(); break; @@ -5414,59 +5142,59 @@ export default class KELParser extends antlr4.Parser { intConstant() { let localctx = new IntConstantContext(this, this._ctx, this.state); - this.enterRule(localctx, 180, KELParser.RULE_intConstant); + this.enterRule(localctx, 182, KELParser.RULE_intConstant); try { - this.state = 1196; + this.state = 1233; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.INT: localctx = new DecIntConstantContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1187; + this.state = 1224; localctx.i = this.match(KELParser.INT); break; case KELParser.HYPHEN: localctx = new NegIntConstantContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1188; + this.state = 1225; this.match(KELParser.HYPHEN); - this.state = 1189; + this.state = 1226; localctx.i = this.match(KELParser.INT); break; case KELParser.HEXINT: localctx = new HexConstantContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1190; + this.state = 1227; localctx.i = this.match(KELParser.HEXINT); break; case KELParser.BININT: localctx = new BinConstantContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 1191; + this.state = 1228; localctx.i = this.match(KELParser.BININT); break; case KELParser.BAD_HEX: localctx = new BadHexConstantContext(this, localctx); this.enterOuterAlt(localctx, 5); - this.state = 1192; + this.state = 1229; localctx.i = this.match(KELParser.BAD_HEX); break; case KELParser.BAD_BIN: localctx = new BadBinConstantContext(this, localctx); this.enterOuterAlt(localctx, 6); - this.state = 1193; + this.state = 1230; localctx.i = this.match(KELParser.BAD_BIN); break; case KELParser.HEX_NO_X: localctx = new NoFlagHexConstantContext(this, localctx); this.enterOuterAlt(localctx, 7); - this.state = 1194; + this.state = 1231; localctx.i = this.match(KELParser.HEX_NO_X); break; case KELParser.BAD_MIX: localctx = new BadMixConstantContext(this, localctx); this.enterOuterAlt(localctx, 8); - this.state = 1195; + this.state = 1232; localctx.i = this.match(KELParser.BAD_MIX); break; default: @@ -5490,41 +5218,41 @@ export default class KELParser extends antlr4.Parser { realConstant() { let localctx = new RealConstantContext(this, this._ctx, this.state); - this.enterRule(localctx, 182, KELParser.RULE_realConstant); + this.enterRule(localctx, 184, KELParser.RULE_realConstant); try { - this.state = 1204; + this.state = 1241; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.REAL: localctx = new RealConstContext(this, localctx); this.enterOuterAlt(localctx, 1); - this.state = 1198; + this.state = 1235; localctx.r = this.match(KELParser.REAL); break; case KELParser.HYPHEN: localctx = new RealConstContext(this, localctx); this.enterOuterAlt(localctx, 2); - this.state = 1199; + this.state = 1236; this.match(KELParser.HYPHEN); - this.state = 1200; + this.state = 1237; localctx.r = this.match(KELParser.REAL); break; case KELParser.BAD_REAL_A: localctx = new BadRealConstContext(this, localctx); this.enterOuterAlt(localctx, 3); - this.state = 1201; + this.state = 1238; localctx.r = this.match(KELParser.BAD_REAL_A); break; case KELParser.BAD_REAL_B: localctx = new BadRealConstContext(this, localctx); this.enterOuterAlt(localctx, 4); - this.state = 1202; + this.state = 1239; localctx.r = this.match(KELParser.BAD_REAL_B); break; case KELParser.BAD_REAL_C: localctx = new BadRealConstContext(this, localctx); this.enterOuterAlt(localctx, 5); - this.state = 1203; + this.state = 1240; localctx.r = this.match(KELParser.BAD_REAL_C); break; default: @@ -5548,31 +5276,31 @@ export default class KELParser extends antlr4.Parser { eclExpression() { let localctx = new EclExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 184, KELParser.RULE_eclExpression); + this.enterRule(localctx, 186, KELParser.RULE_eclExpression); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 1206; + this.state = 1243; this.match(KELParser.ECL); - this.state = 1207; + this.state = 1244; this.match(KELParser.LP); - this.state = 1208; + this.state = 1245; this.eclBody(); - this.state = 1209; + this.state = 1246; this.match(KELParser.RP); - this.state = 1212; + this.state = 1249; this._errHandler.sync(this); _la = this._input.LA(1); if(_la===KELParser.FROM) { - this.state = 1210; + this.state = 1247; this.match(KELParser.FROM); - this.state = 1211; + this.state = 1248; this.eclImportList(); } - this.state = 1214; + this.state = 1251; this.match(KELParser.RETURNS); - this.state = 1215; + this.state = 1252; this.returnTypeId(); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5592,24 +5320,24 @@ export default class KELParser extends antlr4.Parser { eclBody() { let localctx = new EclBodyContext(this, this._ctx, this.state); - this.enterRule(localctx, 186, KELParser.RULE_eclBody); + this.enterRule(localctx, 188, KELParser.RULE_eclBody); try { this.enterOuterAlt(localctx, 1); - this.state = 1218; + this.state = 1255; this._errHandler.sync(this); var _alt = 1; do { switch (_alt) { case 1: - this.state = 1217; + this.state = 1254; this.eclFragment(); break; default: throw new antlr4.error.NoViableAltException(this); } - this.state = 1220; + this.state = 1257; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,125, this._ctx); + _alt = this._interp.adaptivePredict(this._input,128, this._ctx); } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER ); } catch (re) { if(re instanceof antlr4.error.RecognitionException) { @@ -5629,34 +5357,34 @@ export default class KELParser extends antlr4.Parser { eclFragment() { let localctx = new EclFragmentContext(this, this._ctx, this.state); - this.enterRule(localctx, 188, KELParser.RULE_eclFragment); + this.enterRule(localctx, 190, KELParser.RULE_eclFragment); var _la = 0; // Token type try { - this.state = 1235; + this.state = 1272; this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,127,this._ctx); + var la_ = this._interp.adaptivePredict(this._input,130,this._ctx); switch(la_) { case 1: this.enterOuterAlt(localctx, 1); - this.state = 1222; + this.state = 1259; this.match(KELParser.LP); - this.state = 1226; + this.state = 1263; this._errHandler.sync(this); _la = this._input.LA(1); - while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << KELParser.LP) | (1 << KELParser.EQ) | (1 << KELParser.DQUOTE) | (1 << KELParser.LT) | (1 << KELParser.GT) | (1 << KELParser.DOT) | (1 << KELParser.COMMA) | (1 << KELParser.SEMI) | (1 << KELParser.COLON) | (1 << KELParser.LCURL) | (1 << KELParser.RCURL) | (1 << KELParser.LSQUARE) | (1 << KELParser.RSQUARE) | (1 << KELParser.STAR) | (1 << KELParser.SIGIL) | (1 << KELParser.AMP) | (1 << KELParser.TILDE) | (1 << KELParser.EXCLAIM) | (1 << KELParser.HYPHEN) | (1 << KELParser.MOD) | (1 << KELParser.PLUS) | (1 << KELParser.FSLASH) | (1 << KELParser.CARET) | (1 << KELParser.PIPE) | (1 << KELParser.DEFEQ) | (1 << KELParser.NEQ) | (1 << KELParser.LTGT) | (1 << KELParser.LARROW) | (1 << KELParser.RARROW) | (1 << KELParser.GTEQ))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (KELParser.LEQ - 32)) | (1 << (KELParser.NNEQ - 32)) | (1 << (KELParser.IN - 32)) | (1 << (KELParser.OR - 32)) | (1 << (KELParser.NOT - 32)) | (1 << (KELParser.AND - 32)) | (1 << (KELParser.ERA - 32)) | (1 << (KELParser.NULL - 32)) | (1 << (KELParser.DIV - 32)) | (1 << (KELParser.TRUE - 32)) | (1 << (KELParser.FALSE - 32)) | (1 << (KELParser.LINK - 32)) | (1 << (KELParser.ECL - 32)) | (1 << (KELParser.RETURNS - 32)) | (1 << (KELParser.OPTION - 32)) | (1 << (KELParser.PERMITS - 32)) | (1 << (KELParser.ENTITY - 32)) | (1 << (KELParser.ASSOCIATION - 32)) | (1 << (KELParser.IMPORT - 32)) | (1 << (KELParser.FROM - 32)) | (1 << (KELParser.PACKAGE - 32)) | (1 << (KELParser.END - 32)) | (1 << (KELParser.SHELL - 32)) | (1 << (KELParser.FLAT - 32)) | (1 << (KELParser.QUERY - 32)) | (1 << (KELParser.UID - 32)) | (1 << (KELParser.FORMAT - 32)) | (1 << (KELParser.MODEL - 32)) | (1 << (KELParser.USE - 32)) | (1 << (KELParser.KELBASE - 32)) | (1 << (KELParser.KELQUERY - 32)) | (1 << (KELParser.FDC - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (KELParser.FILTER - 64)) | (1 << (KELParser.HINT - 64)) | (1 << (KELParser.GLOBAL - 64)) | (1 << (KELParser.FUNCTION - 64)) | (1 << (KELParser.DATASET - 64)) | (1 << (KELParser.OF - 64)) | (1 << (KELParser.SET - 64)) | (1 << (KELParser.ASOF - 64)) | (1 << (KELParser.USING - 64)) | (1 << (KELParser.VIS - 64)) | (1 << (KELParser.ENDVIS - 64)) | (1 << (KELParser.RESOURCES - 64)) | (1 << (KELParser.ENDRESOURCES - 64)) | (1 << (KELParser.DOUBLESTRING - 64)) | (1 << (KELParser.SID - 64)) | (1 << (KELParser.SINT - 64)) | (1 << (KELParser.PID - 64)) | (1 << (KELParser.PSID - 64)) | (1 << (KELParser.ID - 64)) | (1 << (KELParser.INT - 64)) | (1 << (KELParser.HEXINT - 64)) | (1 << (KELParser.BININT - 64)) | (1 << (KELParser.REAL - 64)) | (1 << (KELParser.STR - 64)) | (1 << (KELParser.TYPDCONST - 64)) | (1 << (KELParser.ESC - 64)) | (1 << (KELParser.SEP_COMMENT - 64)) | (1 << (KELParser.ML_COMMENT - 64)) | (1 << (KELParser.MLMS_COMMENT - 64)) | (1 << (KELParser.JAVADOC_OPEN - 64)) | (1 << (KELParser.EMPTY_JAVADOC - 64)) | (1 << (KELParser.NEWLINE - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (KELParser.COMMENT - 96)) | (1 << (KELParser.WS - 96)) | (1 << (KELParser.BAD_BIN - 96)) | (1 << (KELParser.HEX_NO_X - 96)) | (1 << (KELParser.BAD_HEX - 96)) | (1 << (KELParser.BAD_MIX - 96)) | (1 << (KELParser.BAD_REAL_A - 96)) | (1 << (KELParser.BAD_REAL_B - 96)) | (1 << (KELParser.BAD_REAL_C - 96)) | (1 << (KELParser.ML_COMMENT_START - 96)) | (1 << (KELParser.MLMS_COMMENT_START - 96)) | (1 << (KELParser.JD_COMMENT_START - 96)))) !== 0)) { - this.state = 1223; + while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << KELParser.LP) | (1 << KELParser.EQ) | (1 << KELParser.DQUOTE) | (1 << KELParser.LT) | (1 << KELParser.GT) | (1 << KELParser.DOT) | (1 << KELParser.COMMA) | (1 << KELParser.SEMI) | (1 << KELParser.COLON) | (1 << KELParser.LCURL) | (1 << KELParser.RCURL) | (1 << KELParser.LSQUARE) | (1 << KELParser.RSQUARE) | (1 << KELParser.STAR) | (1 << KELParser.SIGIL) | (1 << KELParser.AMP) | (1 << KELParser.TILDE) | (1 << KELParser.EXCLAIM) | (1 << KELParser.HYPHEN) | (1 << KELParser.MOD) | (1 << KELParser.PLUS) | (1 << KELParser.FSLASH) | (1 << KELParser.CARET) | (1 << KELParser.PIPE) | (1 << KELParser.DEFEQ) | (1 << KELParser.NEQ) | (1 << KELParser.LTGT) | (1 << KELParser.LARROW) | (1 << KELParser.RARROW) | (1 << KELParser.GTEQ))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (KELParser.LEQ - 32)) | (1 << (KELParser.NNEQ - 32)) | (1 << (KELParser.IN - 32)) | (1 << (KELParser.OR - 32)) | (1 << (KELParser.NOT - 32)) | (1 << (KELParser.AND - 32)) | (1 << (KELParser.ERA - 32)) | (1 << (KELParser.NULL - 32)) | (1 << (KELParser.DIV - 32)) | (1 << (KELParser.TRUE - 32)) | (1 << (KELParser.FALSE - 32)) | (1 << (KELParser.LINK - 32)) | (1 << (KELParser.ECL - 32)) | (1 << (KELParser.RETURNS - 32)) | (1 << (KELParser.OPTION - 32)) | (1 << (KELParser.PERMITS - 32)) | (1 << (KELParser.ENTITY - 32)) | (1 << (KELParser.ASSOCIATION - 32)) | (1 << (KELParser.IMPORT - 32)) | (1 << (KELParser.FROM - 32)) | (1 << (KELParser.PACKAGE - 32)) | (1 << (KELParser.END - 32)) | (1 << (KELParser.SHELL - 32)) | (1 << (KELParser.FLAT - 32)) | (1 << (KELParser.QUERY - 32)) | (1 << (KELParser.UID - 32)) | (1 << (KELParser.FORMAT - 32)) | (1 << (KELParser.MODEL - 32)) | (1 << (KELParser.USE - 32)) | (1 << (KELParser.KELBASE - 32)) | (1 << (KELParser.KELQUERY - 32)) | (1 << (KELParser.FDC - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (KELParser.FILTER - 64)) | (1 << (KELParser.HINT - 64)) | (1 << (KELParser.GLOBAL - 64)) | (1 << (KELParser.FUNCTION - 64)) | (1 << (KELParser.DATASET - 64)) | (1 << (KELParser.OF - 64)) | (1 << (KELParser.SET - 64)) | (1 << (KELParser.ASOF - 64)) | (1 << (KELParser.USING - 64)) | (1 << (KELParser.VIS - 64)) | (1 << (KELParser.ENDVIS - 64)) | (1 << (KELParser.RESOURCES - 64)) | (1 << (KELParser.ENDRESOURCES - 64)) | (1 << (KELParser.AS - 64)) | (1 << (KELParser.SPC - 64)) | (1 << (KELParser.LIKE - 64)) | (1 << (KELParser.DOUBLESTRING - 64)) | (1 << (KELParser.SID - 64)) | (1 << (KELParser.SINT - 64)) | (1 << (KELParser.PID - 64)) | (1 << (KELParser.PSID - 64)) | (1 << (KELParser.ID - 64)) | (1 << (KELParser.INT - 64)) | (1 << (KELParser.HEXINT - 64)) | (1 << (KELParser.BININT - 64)) | (1 << (KELParser.REAL - 64)) | (1 << (KELParser.STR - 64)) | (1 << (KELParser.TYPDCONST - 64)) | (1 << (KELParser.ESC - 64)) | (1 << (KELParser.SEP_COMMENT - 64)) | (1 << (KELParser.ML_COMMENT - 64)) | (1 << (KELParser.MLMS_COMMENT - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (KELParser.EMPTY_JAVADOC - 96)) | (1 << (KELParser.JAVADOC_OPEN - 96)) | (1 << (KELParser.NEWLINE - 96)) | (1 << (KELParser.COMMENT - 96)) | (1 << (KELParser.WS - 96)) | (1 << (KELParser.BAD_BIN - 96)) | (1 << (KELParser.HEX_NO_X - 96)) | (1 << (KELParser.BAD_HEX - 96)) | (1 << (KELParser.BAD_MIX - 96)) | (1 << (KELParser.BAD_REAL_A - 96)) | (1 << (KELParser.BAD_REAL_B - 96)) | (1 << (KELParser.BAD_REAL_C - 96)) | (1 << (KELParser.ML_COMMENT_START - 96)) | (1 << (KELParser.MLMS_COMMENT_START - 96)) | (1 << (KELParser.JD_COMMENT_START - 96)))) !== 0)) { + this.state = 1260; this.eclBody(); - this.state = 1228; + this.state = 1265; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1229; + this.state = 1266; this.match(KELParser.RP); break; case 2: this.enterOuterAlt(localctx, 2); - this.state = 1230; + this.state = 1267; _la = this._input.LA(1); if(_la<=0 || _la===KELParser.LP || _la===KELParser.RP) { this._errHandler.recoverInline(this); @@ -5669,25 +5397,25 @@ export default class KELParser extends antlr4.Parser { case 3: this.enterOuterAlt(localctx, 3); - this.state = 1231; + this.state = 1268; this.match(KELParser.EXCLAIM); break; case 4: this.enterOuterAlt(localctx, 4); - this.state = 1232; + this.state = 1269; this.match(KELParser.TILDE); break; case 5: this.enterOuterAlt(localctx, 5); - this.state = 1233; + this.state = 1270; this.match(KELParser.AMP); break; case 6: this.enterOuterAlt(localctx, 6); - this.state = 1234; + this.state = 1271; this.match(KELParser.PIPE); break; @@ -5710,21 +5438,21 @@ export default class KELParser extends antlr4.Parser { eclImportList() { let localctx = new EclImportListContext(this, this._ctx, this.state); - this.enterRule(localctx, 190, KELParser.RULE_eclImportList); + this.enterRule(localctx, 192, KELParser.RULE_eclImportList); var _la = 0; // Token type try { this.enterOuterAlt(localctx, 1); - this.state = 1237; + this.state = 1274; this.eclImportItem(); - this.state = 1242; + this.state = 1279; this._errHandler.sync(this); _la = this._input.LA(1); while(_la===KELParser.COMMA) { - this.state = 1238; + this.state = 1275; this.match(KELParser.COMMA); - this.state = 1239; + this.state = 1276; this.eclImportItem(); - this.state = 1244; + this.state = 1281; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5746,19 +5474,19 @@ export default class KELParser extends antlr4.Parser { eclImportItem() { let localctx = new EclImportItemContext(this, this._ctx, this.state); - this.enterRule(localctx, 192, KELParser.RULE_eclImportItem); + this.enterRule(localctx, 194, KELParser.RULE_eclImportItem); try { - this.state = 1247; + this.state = 1284; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.ID: this.enterOuterAlt(localctx, 1); - this.state = 1245; + this.state = 1282; this.dotId(); break; case KELParser.SIGIL: this.enterOuterAlt(localctx, 2); - this.state = 1246; + this.state = 1283; this.match(KELParser.SIGIL); break; default: @@ -5782,24 +5510,24 @@ export default class KELParser extends antlr4.Parser { returnTypeId() { let localctx = new ReturnTypeIdContext(this, this._ctx, this.state); - this.enterRule(localctx, 194, KELParser.RULE_returnTypeId); + this.enterRule(localctx, 196, KELParser.RULE_returnTypeId); try { - this.state = 1253; + this.state = 1290; this._errHandler.sync(this); switch(this._input.LA(1)) { case KELParser.UID: case KELParser.ID: this.enterOuterAlt(localctx, 1); - this.state = 1249; + this.state = 1286; localctx.simple = this.simpleTypeId(); break; case KELParser.SET: this.enterOuterAlt(localctx, 2); - this.state = 1250; + this.state = 1287; localctx.isSet = this.match(KELParser.SET); - this.state = 1251; + this.state = 1288; this.match(KELParser.OF); - this.state = 1252; + this.state = 1289; localctx.simple = this.simpleTypeId(); break; default: @@ -5899,37 +5627,40 @@ KELParser.VIS = 73; KELParser.ENDVIS = 74; KELParser.RESOURCES = 75; KELParser.ENDRESOURCES = 76; -KELParser.DOUBLESTRING = 77; -KELParser.SID = 78; -KELParser.SINT = 79; -KELParser.PID = 80; -KELParser.PSID = 81; -KELParser.ID = 82; -KELParser.INT = 83; -KELParser.HEXINT = 84; -KELParser.BININT = 85; -KELParser.REAL = 86; -KELParser.STR = 87; -KELParser.TYPDCONST = 88; -KELParser.ESC = 89; -KELParser.SEP_COMMENT = 90; -KELParser.ML_COMMENT = 91; -KELParser.MLMS_COMMENT = 92; -KELParser.JAVADOC_OPEN = 93; -KELParser.EMPTY_JAVADOC = 94; -KELParser.NEWLINE = 95; -KELParser.COMMENT = 96; -KELParser.WS = 97; -KELParser.BAD_BIN = 98; -KELParser.HEX_NO_X = 99; -KELParser.BAD_HEX = 100; -KELParser.BAD_MIX = 101; -KELParser.BAD_REAL_A = 102; -KELParser.BAD_REAL_B = 103; -KELParser.BAD_REAL_C = 104; -KELParser.ML_COMMENT_START = 105; -KELParser.MLMS_COMMENT_START = 106; -KELParser.JD_COMMENT_START = 107; +KELParser.AS = 77; +KELParser.SPC = 78; +KELParser.LIKE = 79; +KELParser.DOUBLESTRING = 80; +KELParser.SID = 81; +KELParser.SINT = 82; +KELParser.PID = 83; +KELParser.PSID = 84; +KELParser.ID = 85; +KELParser.INT = 86; +KELParser.HEXINT = 87; +KELParser.BININT = 88; +KELParser.REAL = 89; +KELParser.STR = 90; +KELParser.TYPDCONST = 91; +KELParser.ESC = 92; +KELParser.SEP_COMMENT = 93; +KELParser.ML_COMMENT = 94; +KELParser.MLMS_COMMENT = 95; +KELParser.EMPTY_JAVADOC = 96; +KELParser.JAVADOC_OPEN = 97; +KELParser.NEWLINE = 98; +KELParser.COMMENT = 99; +KELParser.WS = 100; +KELParser.BAD_BIN = 101; +KELParser.HEX_NO_X = 102; +KELParser.BAD_HEX = 103; +KELParser.BAD_MIX = 104; +KELParser.BAD_REAL_A = 105; +KELParser.BAD_REAL_B = 106; +KELParser.BAD_REAL_C = 107; +KELParser.ML_COMMENT_START = 108; +KELParser.MLMS_COMMENT_START = 109; +KELParser.JD_COMMENT_START = 110; KELParser.RULE_program = 0; KELParser.RULE_annotation = 1; @@ -5952,83 +5683,84 @@ KELParser.RULE_fileType = 17; KELParser.RULE_mappingElement = 18; KELParser.RULE_nullSpec = 19; KELParser.RULE_formatSpec = 20; -KELParser.RULE_compositeIdSpec = 21; -KELParser.RULE_modelDeclaration = 22; -KELParser.RULE_submodelDeclaration = 23; -KELParser.RULE_submodelId = 24; -KELParser.RULE_useDeclaration = 25; -KELParser.RULE_useKelBaseDeclaration = 26; -KELParser.RULE_useKelQueryDeclaration = 27; -KELParser.RULE_useElement = 28; -KELParser.RULE_useFileType = 29; -KELParser.RULE_useClause = 30; -KELParser.RULE_useClauseElement = 31; -KELParser.RULE_useClauseFileType = 32; -KELParser.RULE_nestedEntityMapping = 33; -KELParser.RULE_entityMapping = 34; -KELParser.RULE_useMappingOverride = 35; -KELParser.RULE_dotId = 36; -KELParser.RULE_permitsClause = 37; -KELParser.RULE_permitsSpec = 38; -KELParser.RULE_hintsClause = 39; -KELParser.RULE_logicStatement = 40; -KELParser.RULE_logicPredicate = 41; -KELParser.RULE_logicProductions = 42; -KELParser.RULE_logicProduction = 43; -KELParser.RULE_entityProductions = 44; -KELParser.RULE_entityProduction = 45; -KELParser.RULE_functionStatement = 46; -KELParser.RULE_fparams = 47; -KELParser.RULE_fparam = 48; -KELParser.RULE_functionBody = 49; -KELParser.RULE_queryDeclaration = 50; -KELParser.RULE_qparams = 51; -KELParser.RULE_qparam = 52; -KELParser.RULE_paramTypeId = 53; -KELParser.RULE_simpleTypeId = 54; -KELParser.RULE_asof = 55; -KELParser.RULE_using = 56; -KELParser.RULE_shellDeclaration = 57; -KELParser.RULE_visual_section = 58; -KELParser.RULE_resource_section = 59; -KELParser.RULE_expression = 60; -KELParser.RULE_booleanDisjunction = 61; -KELParser.RULE_booleanConjunction = 62; -KELParser.RULE_booleanTerm = 63; -KELParser.RULE_booleanAtom = 64; -KELParser.RULE_valueExpression = 65; -KELParser.RULE_valueTerm = 66; -KELParser.RULE_valueFactor = 67; -KELParser.RULE_valueAtom = 68; -KELParser.RULE_queryFuncOp = 69; -KELParser.RULE_funcOrFilter = 70; -KELParser.RULE_pair = 71; -KELParser.RULE_linkExp = 72; -KELParser.RULE_linkSpec = 73; -KELParser.RULE_linkDegree = 74; -KELParser.RULE_entityProjection = 75; -KELParser.RULE_namedExpression = 76; -KELParser.RULE_patternModel = 77; -KELParser.RULE_patternSubmodel = 78; -KELParser.RULE_fieldSelector = 79; -KELParser.RULE_scopeExpression = 80; -KELParser.RULE_tableProperty = 81; -KELParser.RULE_func_id = 82; -KELParser.RULE_qualifiedId = 83; -KELParser.RULE_leadingId = 84; -KELParser.RULE_fieldId = 85; -KELParser.RULE_tablePropId = 86; -KELParser.RULE_propertyId = 87; -KELParser.RULE_constant = 88; -KELParser.RULE_simpleConstant = 89; -KELParser.RULE_intConstant = 90; -KELParser.RULE_realConstant = 91; -KELParser.RULE_eclExpression = 92; -KELParser.RULE_eclBody = 93; -KELParser.RULE_eclFragment = 94; -KELParser.RULE_eclImportList = 95; -KELParser.RULE_eclImportItem = 96; -KELParser.RULE_returnTypeId = 97; +KELParser.RULE_likeSpec = 21; +KELParser.RULE_compositeIdSpec = 22; +KELParser.RULE_modelDeclaration = 23; +KELParser.RULE_submodelDeclaration = 24; +KELParser.RULE_submodelId = 25; +KELParser.RULE_useDeclaration = 26; +KELParser.RULE_useKelBaseDeclaration = 27; +KELParser.RULE_useKelQueryDeclaration = 28; +KELParser.RULE_useElement = 29; +KELParser.RULE_useFileType = 30; +KELParser.RULE_useClause = 31; +KELParser.RULE_useClauseElement = 32; +KELParser.RULE_useClauseFileType = 33; +KELParser.RULE_nestedEntityMapping = 34; +KELParser.RULE_entityMapping = 35; +KELParser.RULE_useMappingOverride = 36; +KELParser.RULE_dotId = 37; +KELParser.RULE_permitsClause = 38; +KELParser.RULE_permitsSpec = 39; +KELParser.RULE_hintsClause = 40; +KELParser.RULE_logicStatement = 41; +KELParser.RULE_logicPredicate = 42; +KELParser.RULE_logicProductions = 43; +KELParser.RULE_logicProduction = 44; +KELParser.RULE_entityProductions = 45; +KELParser.RULE_entityProduction = 46; +KELParser.RULE_functionStatement = 47; +KELParser.RULE_fparams = 48; +KELParser.RULE_fparam = 49; +KELParser.RULE_functionBody = 50; +KELParser.RULE_queryDeclaration = 51; +KELParser.RULE_qparams = 52; +KELParser.RULE_qparam = 53; +KELParser.RULE_paramTypeId = 54; +KELParser.RULE_simpleTypeId = 55; +KELParser.RULE_asof = 56; +KELParser.RULE_using = 57; +KELParser.RULE_shellDeclaration = 58; +KELParser.RULE_visual_section = 59; +KELParser.RULE_resource_section = 60; +KELParser.RULE_expression = 61; +KELParser.RULE_booleanDisjunction = 62; +KELParser.RULE_booleanConjunction = 63; +KELParser.RULE_booleanTerm = 64; +KELParser.RULE_booleanAtom = 65; +KELParser.RULE_valueExpression = 66; +KELParser.RULE_valueTerm = 67; +KELParser.RULE_valueFactor = 68; +KELParser.RULE_valueAtom = 69; +KELParser.RULE_queryFuncOp = 70; +KELParser.RULE_funcOrFilter = 71; +KELParser.RULE_pair = 72; +KELParser.RULE_linkExp = 73; +KELParser.RULE_linkSpec = 74; +KELParser.RULE_linkDegree = 75; +KELParser.RULE_entityProjection = 76; +KELParser.RULE_namedExpression = 77; +KELParser.RULE_patternModel = 78; +KELParser.RULE_patternSubmodel = 79; +KELParser.RULE_fieldSelector = 80; +KELParser.RULE_scopeExpression = 81; +KELParser.RULE_tableProperty = 82; +KELParser.RULE_func_id = 83; +KELParser.RULE_qualifiedId = 84; +KELParser.RULE_leadingId = 85; +KELParser.RULE_fieldId = 86; +KELParser.RULE_tablePropId = 87; +KELParser.RULE_propertyId = 88; +KELParser.RULE_constant = 89; +KELParser.RULE_simpleConstant = 90; +KELParser.RULE_intConstant = 91; +KELParser.RULE_realConstant = 92; +KELParser.RULE_eclExpression = 93; +KELParser.RULE_eclBody = 94; +KELParser.RULE_eclFragment = 95; +KELParser.RULE_eclImportList = 96; +KELParser.RULE_eclImportItem = 97; +KELParser.RULE_returnTypeId = 98; class ProgramContext extends antlr4.ParserRuleContext { @@ -6812,6 +6544,62 @@ class PackageImportContext extends ImportStatementContext { KELParser.PackageImportContext = PackageImportContext; +class SpcImportContext extends ImportStatementContext { + + constructor(parser, ctx) { + super(parser); + super.copyFrom(ctx); + } + + IMPORT() { + return this.getToken(KELParser.IMPORT, 0); + }; + + SPC() { + return this.getToken(KELParser.SPC, 0); + }; + + FROM() { + return this.getToken(KELParser.FROM, 0); + }; + + dotId() { + return this.getTypedRuleContext(DotIdContext,0); + }; + + AS() { + return this.getToken(KELParser.AS, 0); + }; + + ID() { + return this.getToken(KELParser.ID, 0); + }; + + enterRule(listener) { + if(listener instanceof KELParserListener ) { + listener.enterSpcImport(this); + } + } + + exitRule(listener) { + if(listener instanceof KELParserListener ) { + listener.exitSpcImport(this); + } + } + + accept(visitor) { + if ( visitor instanceof KELParserVisitor ) { + return visitor.visitSpcImport(this); + } else { + return visitor.visitChildren(this); + } + } + + +} + +KELParser.SpcImportContext = SpcImportContext; + class SimpleImportContext extends ImportStatementContext { constructor(parser, ctx) { @@ -7456,6 +7244,7 @@ class MappingElementContext extends antlr4.ParserRuleContext { this.nspec = null; // NullSpecContext this.fspec = null; // FormatSpecContext this.from = null; // DotIdContext + this.lspec = null; // LikeSpecContext this.c = null; // CompositeIdSpecContext this.u = null; // Token } @@ -7488,6 +7277,10 @@ class MappingElementContext extends antlr4.ParserRuleContext { return this.getTypedRuleContext(FormatSpecContext,0); }; + likeSpec() { + return this.getTypedRuleContext(LikeSpecContext,0); + }; + UID() { return this.getToken(KELParser.UID, 0); }; @@ -7651,6 +7444,61 @@ class FormatSpecContext extends antlr4.ParserRuleContext { +class LikeSpecContext extends antlr4.ParserRuleContext { + + constructor(parser, parent, invokingState) { + if(parent===undefined) { + parent = null; + } + if(invokingState===undefined || invokingState===null) { + invokingState = -1; + } + super(parent, invokingState); + this.parser = parser; + this.ruleIndex = KELParser.RULE_likeSpec; + } + + LIKE() { + return this.getToken(KELParser.LIKE, 0); + }; + + LP() { + return this.getToken(KELParser.LP, 0); + }; + + dotId() { + return this.getTypedRuleContext(DotIdContext,0); + }; + + RP() { + return this.getToken(KELParser.RP, 0); + }; + + enterRule(listener) { + if(listener instanceof KELParserListener ) { + listener.enterLikeSpec(this); + } + } + + exitRule(listener) { + if(listener instanceof KELParserListener ) { + listener.exitLikeSpec(this); + } + } + + accept(visitor) { + if ( visitor instanceof KELParserVisitor ) { + return visitor.visitLikeSpec(this); + } else { + return visitor.visitChildren(this); + } + } + + +} + + + class CompositeIdSpecContext extends antlr4.ParserRuleContext { constructor(parser, parent, invokingState) { @@ -8918,6 +8766,7 @@ class NormalMappingOverrideContext extends UseMappingOverrideContext { this.from = null; // DotIdContext; this.nspec = null; // NullSpecContext; this.fspec = null; // FormatSpecContext; + this.lspec = null; // LikeSpecContext; super.copyFrom(ctx); } @@ -8945,6 +8794,10 @@ class NormalMappingOverrideContext extends UseMappingOverrideContext { return this.getTypedRuleContext(FormatSpecContext,0); }; + likeSpec() { + return this.getTypedRuleContext(LikeSpecContext,0); + }; + enterRule(listener) { if(listener instanceof KELParserListener ) { listener.enterNormalMappingOverride(this); @@ -14242,6 +14095,7 @@ KELParser.FileTypeContext = FileTypeContext; KELParser.MappingElementContext = MappingElementContext; KELParser.NullSpecContext = NullSpecContext; KELParser.FormatSpecContext = FormatSpecContext; +KELParser.LikeSpecContext = LikeSpecContext; KELParser.CompositeIdSpecContext = CompositeIdSpecContext; KELParser.ModelDeclarationContext = ModelDeclarationContext; KELParser.SubmodelDeclarationContext = SubmodelDeclarationContext; diff --git a/src/grammar/kel/KELParserListener.js b/src/grammar/kel/KELParserListener.js index 435a533b..7ab7a754 100644 --- a/src/grammar/kel/KELParserListener.js +++ b/src/grammar/kel/KELParserListener.js @@ -1,4 +1,4 @@ -// Generated from ./KELParser.g4 by ANTLR 4.9.1 +// Generated from ./KELParser.g4 by ANTLR 4.10.1 // jshint ignore: start import antlr4 from 'antlr4'; @@ -113,6 +113,15 @@ export default class KELParserListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by KELParser#spcImport. + enterSpcImport(ctx) { + } + + // Exit a parse tree produced by KELParser#spcImport. + exitSpcImport(ctx) { + } + + // Enter a parse tree produced by KELParser#inlinePackage. enterInlinePackage(ctx) { } @@ -221,6 +230,15 @@ export default class KELParserListener extends antlr4.tree.ParseTreeListener { } + // Enter a parse tree produced by KELParser#likeSpec. + enterLikeSpec(ctx) { + } + + // Exit a parse tree produced by KELParser#likeSpec. + exitLikeSpec(ctx) { + } + + // Enter a parse tree produced by KELParser#compositeIdSpec. enterCompositeIdSpec(ctx) { } diff --git a/src/grammar/kel/KELParserVisitor.js b/src/grammar/kel/KELParserVisitor.js index ababe018..28c22578 100644 --- a/src/grammar/kel/KELParserVisitor.js +++ b/src/grammar/kel/KELParserVisitor.js @@ -1,4 +1,4 @@ -// Generated from ./KELParser.g4 by ANTLR 4.9.1 +// Generated from ./KELParser.g4 by ANTLR 4.10.1 // jshint ignore: start import antlr4 from 'antlr4'; @@ -78,6 +78,12 @@ export default class KELParserVisitor extends antlr4.tree.ParseTreeVisitor { } + // Visit a parse tree produced by KELParser#spcImport. + visitSpcImport(ctx) { + return this.visitChildren(ctx); + } + + // Visit a parse tree produced by KELParser#inlinePackage. visitInlinePackage(ctx) { return this.visitChildren(ctx); @@ -150,6 +156,12 @@ export default class KELParserVisitor extends antlr4.tree.ParseTreeVisitor { } + // Visit a parse tree produced by KELParser#likeSpec. + visitLikeSpec(ctx) { + return this.visitChildren(ctx); + } + + // Visit a parse tree produced by KELParser#compositeIdSpec. visitCompositeIdSpec(ctx) { return this.visitChildren(ctx); diff --git a/src/hpccplatform/session.ts b/src/hpccplatform/session.ts index 96761cf7..846bf95d 100644 --- a/src/hpccplatform/session.ts +++ b/src/hpccplatform/session.ts @@ -33,6 +33,10 @@ class Session { return this._launchConfig.user; } + get password() { + return this._launchConfig.password; + } + get targetCluster() { return this._targetCluster || this._launchConfig.targetCluster; } @@ -300,6 +304,15 @@ class SessionManager { }); } + nbSubmitURI(uri: vscode.Uri, compileOnly: boolean = false): Promise | undefined { + if (this.session) { + return this.session.submit(uri, compileOnly).then(wu => { + this._onDidCreateWorkunit.fire(wu); + return wu; + }); + } + } + submitURI(uri: vscode.Uri, compileOnly: boolean = false) { if (this.session) { return this.session.submit(uri, compileOnly).then(wu => { diff --git a/src/kel/parser.ts b/src/kel/parser.ts index e334196a..88bd2033 100644 --- a/src/kel/parser.ts +++ b/src/kel/parser.ts @@ -1,7 +1,7 @@ import * as vscode from "vscode"; import { Antlr4Error, ErrorListener } from "../util/errorListener"; -import * as antlr4 from "antlr4"; +import antlr4 from "antlr4"; import KELLexer from "../grammar/kel/KELLexer"; import KELParser from "../grammar/kel/KELParser"; import { KELVisitor } from "./visitor"; diff --git a/src/notebook-renderers/ojsRenderer.ts b/src/notebook-renderers/ojsRenderer.ts new file mode 100644 index 00000000..949c75ee --- /dev/null +++ b/src/notebook-renderers/ojsRenderer.ts @@ -0,0 +1,83 @@ +import type { ActivationFunction, RendererContext } from "vscode-notebook-renderer"; +import { OJSRuntime } from "@hpcc-js/observable-md"; +import { IOptions, Workunit } from "@hpcc-js/comms"; +import { OJSOutput } from "../notebook/controller"; + +export const activate: ActivationFunction = context => { + + const ojsRenderer = new OJSRenderer(context); + + return { + renderOutputItem(data, element) { + return ojsRenderer.renderOutputItem(data, element); + }, + + disposeOutputItem(id) { + return ojsRenderer.disposeOutputItem(id); + } + }; +}; + +class OJSRenderer { + + _element: any; + _data: OJSOutput; + _configuration: any; + + constructor(protected context: RendererContext) { + context.onDidReceiveMessage(msg => this.onDidReceiveMessage(msg)); + } + + disposeOutputItem(id) { + if (this._element) { + } + } + + onDidReceiveMessage(msg: any) { + switch (msg.type) { + case "fetchConfigsResponse": + this.render(msg.configurations); + break; + } + } + + renderOutputItem(data, element) { + this._data = data.json(); + this._element = element; + // this.context.postMessage({ command: "fetchConfigs", names: this._data.eclResults.map(eclResult => eclResult.configuration) }); + let ojsResults = {}; + this._data.eclResults.forEach(eclResult => { + ojsResults = { ...ojsResults, ...eclResult.results }; + }); + const runtime = new OJSRuntime(this._element, ojsResults); + runtime.evaluate("", this._data.code, this._data.folder); + } + + async render(configs: { [name: string]: IOptions }) { + const resultPromises = this._data.eclResults.map(eclResult => { + const wu = Workunit.attach(configs[eclResult.configuration], eclResult.wuid); + return wu.watchUntilComplete().then(wu => { + return wu.fetchResults(); + }); + }); + + const ojsResults = {}; + await Promise.all(resultPromises).then(allResults => { + allResults.forEach((results) => { + results.forEach(result => { + const name = result.Name.split(" ").join("_"); + ojsResults[name] = () => result.fetchRows().then(rows => { + if (rows.length === 1 && rows[0][name]) { + return rows[0][name]; + } + return rows; + }); + }); + }); + }); + + const data: OJSOutput = this._data; + const runtime = new OJSRuntime(this._element, ojsResults); + runtime.evaluate("", data.code, data.folder); + } +} diff --git a/src/notebook-renderers/wuRenderer.tsx b/src/notebook-renderers/wuRenderer.tsx new file mode 100644 index 00000000..9044bf37 --- /dev/null +++ b/src/notebook-renderers/wuRenderer.tsx @@ -0,0 +1,80 @@ +import type { ActivationFunction, RendererContext } from "vscode-notebook-renderer"; +import * as React from "react"; +import { render, unmountComponentAtNode } from "react-dom"; +import { IOptions, Workunit } from "@hpcc-js/comms"; +import type { WUOutput } from "../notebook/controller"; + +export const activate: ActivationFunction = context => { + + const wuRenderer = new WURenderer(context); + + return { + renderOutputItem(data, element) { + return wuRenderer.renderOutputItem(data, element); + }, + + disposeOutputItem(id) { + return wuRenderer.disposeOutputItem(id); + } + }; +}; + +class WURenderer { + + _element: any; + _data: WUOutput; + _configuration: any; + + constructor(protected context: RendererContext) { + context.onDidReceiveMessage(msg => this.onDidReceiveMessage(msg)); + } + + disposeOutputItem(id) { + if (this._element) { + unmountComponentAtNode(this._element); + } + } + + onDidReceiveMessage(msg: any) { + switch (msg.type) { + case "fetchConfigResponse": + this.render(msg.configuration); + break; + } + } + + renderOutputItem(data, element) { + this._data = data.json(); + this._element = element; + if (this._data.results) { + render(<> +
{this._data.wuid}
+
Results: {Object.keys(this._data.results).map(key => `${key} ${Array.isArray(this._data.results[key]) ? `(${(this._data.results[key] as any).length} Rows)` : `[${this._data.results[key]}]`}`).join(", ")}
+ , this._element); + } else { + this.context.postMessage({ command: "fetchConfig", name: this._data.configuration }); + } + } + + render(config: IOptions) { + const wu = Workunit.attach(config, this._data.wuid); + + wu.watchUntilComplete((changes) => { + render(
{this._data.wuid}: {wu.State}
, this._element); + }); + wu.watchUntilComplete().then(wu => { + wu.fetchResults().then(results => { + render(<> +
{this._data.wuid}: {wu.State}
+
Results: {results.map(r => `${r.Name.split(" ").join("_")} (${r.Value})`).join(", ")}
+ , this._element); + }).catch(e => { + render(<> +
{JSON.stringify(e)}
+
{JSON.stringify(this._data)}
+
{JSON.stringify(config)}
+ , this._element); + }); + }); + } +} diff --git a/src/notebook/controller.ts b/src/notebook/controller.ts index 5bc98d2c..fbda03bd 100644 --- a/src/notebook/controller.ts +++ b/src/notebook/controller.ts @@ -3,19 +3,27 @@ import * as path from "path"; import { hashSum } from "@hpcc-js/util"; import { sessionManager } from "../hpccplatform/session"; import { deleteFile, writeFile } from "../util/fs"; +import { LaunchConfig, launchConfiguration, LaunchRequestArguments } from "../hpccplatform/launchConfig"; +import { IConnection, IOptions, Workunit } from "@hpcc-js/comms"; function encodeID(id: string) { return id.split(" ").join("_"); } +export interface WUOutput { + configuration: string; + wuid: string; + results: { [id: string]: object }; +} + export interface OJSOutput { code: string; - eclResults: { [id: string]: object }; folder: string; + eclResults: WUOutput[]; } export class Controller { - readonly controllerId = "ecl-notebook-controller-id"; + readonly controllerId = "ecl-kernal"; readonly notebookType = "ecl-notebook"; readonly label = "ECL Notebook"; readonly supportedLanguages = ["ecl", "ojs"]; @@ -33,6 +41,48 @@ export class Controller { this._controller.supportedLanguages = this.supportedLanguages; this._controller.supportsExecutionOrder = true; this._controller.executeHandler = this.execute.bind(this); + + const wuMessagaging = vscode.notebooks.createRendererMessaging("ecl-notebook-wurenderer"); + wuMessagaging.onDidReceiveMessage(event => { + switch (event.message.command) { + case "fetchConfig": + const config = launchConfiguration(event.message.name); + if (config) { + wuMessagaging.postMessage({ + type: "fetchConfigResponse", + configuration: this.configToIOptions(config) + }, event.editor); + } + break; + } + }); + + const ojsMessagaging = vscode.notebooks.createRendererMessaging("ecl-notebook-ojsrenderer"); + ojsMessagaging.onDidReceiveMessage(event => { + switch (event.message.command) { + case "fetchConfigs": + const configurations = {}; + event.message.names.forEach(name => { + configurations[name] = this.configToIOptions(launchConfiguration(name)); + }); + ojsMessagaging.postMessage({ + type: "fetchConfigsResponse", + configurations + }, event.editor); + break; + } + }); + } + + configToIOptions(config?: LaunchRequestArguments): IOptions { + if (!config) return undefined; + return { + baseUrl: `${config.protocol}://${config.serverAddress}:${config.port}`, + userID: config.user, + password: config.password, + rejectUnauthorized: config.rejectUnauthorized, + timeoutSecs: config.timeoutSecs + }; } dispose() { @@ -44,12 +94,19 @@ export class Controller { try { const basename = path.basename(cell.document.uri.fsPath, ".eclnb"); const dirname = path.dirname(cell.document.uri.fsPath); - const code = cell.document.getText(); + let code = ""; + const cells = cell.notebook.getCells(new vscode.NotebookRange(0, cell.index)); + for (const otherCell of cells) { + if (otherCell.document.languageId === cell.document.languageId) { + code += otherCell.document.getText(); + } + } + code += cell.document.getText(); const jobname = `${basename}-${hashSum(code.trim())}`; tmpPath = `${path.join(dirname, jobname)}.tmp`; - await writeFile(tmpPath, cell.document.getText()); + await writeFile(tmpPath, code); const uri = vscode.Uri.file(tmpPath); - const wu = await sessionManager.submitURI(uri); + const wu = await sessionManager.nbSubmitURI(uri); deleteFile(tmpPath); tmpPath = ""; if (wu) { @@ -57,13 +114,27 @@ export class Controller { const results = await wu.fetchResults(); const outputs = {}; await Promise.all(results.map(result => { + const name = encodeID(result.Name); return result.fetchRows().then(rows => { - outputs[encodeID(result.Name)] = rows; + if (rows.length === 1 && rows[0][name]) { + outputs[name] = rows[0][name]; + } else { + outputs[name] = rows; + } }); })); - return vscode.NotebookCellOutputItem.json(outputs); + + const retVal: WUOutput = { + configuration: sessionManager.session.name, + wuid: wu.Wuid, + results: outputs + }; + return vscode.NotebookCellOutputItem.json(retVal, "application/hpcc.wu+json"); } } catch (e) { + if (e.message.indexOf("0003: Definition must contain EXPORT or SHARED value") >= 0) { + return vscode.NotebookCellOutputItem.text("...no action..."); + } return vscode.NotebookCellOutputItem.error(e); } finally { if (tmpPath) { @@ -73,20 +144,35 @@ export class Controller { } private async executeOJS(cell: vscode.NotebookCell, cells: vscode.NotebookCell[]): Promise { - let eclResults = {}; - cell.notebook.getCells() - .filter(c => c !== cell) - .forEach(otherCell => { - otherCell.outputs.forEach(op => { - op.items.filter(item => item.mime === "text/x-json") - .forEach(item => { - try { - eclResults = { ...eclResults, ...JSON.parse(item.data.toString()) }; - } catch (e) { - } - }); + const items = []; + cell.notebook.getCells().filter(c => c !== cell).forEach(otherCell => { + otherCell.outputs.forEach(op => { + op.items.filter(item => item.mime === "application/hpcc.wu+json").forEach(item => { + items.push(item); }); }); + }); + + const eclResults: WUOutput[] = []; + for (const item of items) { + try { + eclResults.push(JSON.parse(item.data.toString())); + // const config = launchConfiguration(data.configuration); + // if (config) { + // const wu = Workunit.attach(this.configToIOptions(config), data.wuid); + // await wu.watchUntilComplete(); + // await wu.fetchResults().then(results => { + // return Promise.all(results.map(r => r.fetchRows())).then(resultRows => { + // results.forEach((r, i) => { + // eclResults[r.Name] = resultRows[i]; + // }); + // }); + // }); + // } + } catch (e) { + } + } + const retVal: OJSOutput = { code: cell.document.getText(), folder: path.dirname(cell.document.uri.path), diff --git a/src/notebook/main.ts b/src/notebook/main.ts index 16aa1879..00a30fa8 100644 --- a/src/notebook/main.ts +++ b/src/notebook/main.ts @@ -3,6 +3,32 @@ import { Controller } from "./controller"; import { Serializer } from "./serializer"; export function activate(ctx: vscode.ExtensionContext) { - ctx.subscriptions.push(vscode.workspace.registerNotebookSerializer("ecl-notebook", new Serializer())); ctx.subscriptions.push(new Controller()); + ctx.subscriptions.push(vscode.workspace.registerNotebookSerializer("ecl-notebook", new Serializer())); + + let publicCell: boolean = true; + + vscode.commands.executeCommand("setContext", "isPublic", publicCell); + vscode.commands.executeCommand("setContext", "isPrivate", !publicCell); + + vscode.commands.registerCommand("notebook.cell.public", (cell: vscode.NotebookCell) => { + // cell.metadata["private"] = true; + publicCell = false; + vscode.commands.executeCommand("setContext", "isPublic", publicCell); + vscode.commands.executeCommand("setContext", "isPrivate", !publicCell); + }); + + vscode.commands.registerCommand("notebook.cell.private", (cell: vscode.NotebookCell) => { + // cell.metadata["private"] = false; + publicCell = true; + vscode.commands.executeCommand("setContext", "isPublic", publicCell); + vscode.commands.executeCommand("setContext", "isPrivate", !publicCell); + }); + + vscode.window.onDidChangeNotebookEditorSelection(evt => { + for (let i = evt.notebookEditor.selection.start; i < evt.notebookEditor.selection.end; ++i) { + const cell = evt.notebookEditor.notebook.cellAt(i); + console.log(JSON.stringify(cell.metadata)); + } + }); } diff --git a/src/notebook/serializer.ts b/src/notebook/serializer.ts index 337a8bfb..55472e5c 100644 --- a/src/notebook/serializer.ts +++ b/src/notebook/serializer.ts @@ -14,7 +14,8 @@ interface RawNotebookCell { } export class Serializer implements vscode.NotebookSerializer { - async deserializeNotebook(content: Uint8Array, _token: vscode.CancellationToken): Promise { + + deserializeNotebook(content: Uint8Array, _token: vscode.CancellationToken): vscode.NotebookData { const contents = new TextDecoder("utf-8").decode(content); let raw: RawNotebookCell[]; @@ -36,7 +37,7 @@ export class Serializer implements vscode.NotebookSerializer { return new vscode.NotebookData(cells); } - async serializeNotebook(data: vscode.NotebookData, _token: vscode.CancellationToken): Promise { + serializeNotebook(data: vscode.NotebookData, _token: vscode.CancellationToken): Uint8Array { const contents: RawNotebookCell[] = []; for (const cell of data.cells) { diff --git a/src/renderer.ts b/src/renderer.ts deleted file mode 100644 index e9a4171a..00000000 --- a/src/renderer.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ActivationFunction } from "vscode-notebook-renderer"; -import { OJSRuntime } from "@hpcc-js/observable-md"; -import { OJSOutput } from "./notebook/controller"; - -export const activate: ActivationFunction = context => { - - return { - renderOutputItem(_data, element) { - const data: OJSOutput = _data.json(); - const runtime = new OJSRuntime(element, data.eclResults); - runtime.evaluate("", data.code, data.folder); - } - }; -}; diff --git a/src/util/errorListener.ts b/src/util/errorListener.ts index 08bb3b88..2eb53590 100644 --- a/src/util/errorListener.ts +++ b/src/util/errorListener.ts @@ -1,5 +1,5 @@ import { Range, TextDocument } from "vscode"; -import { error } from "antlr4"; +import antlr4 from "antlr4"; export interface Antlr4Error { source: string; @@ -9,7 +9,7 @@ export interface Antlr4Error { error: { message: string }; } -export class ErrorListener extends error.ErrorListener { +export class ErrorListener extends antlr4.error.ErrorListener { errors: Antlr4Error[] = []; diff --git a/tsconfig.json b/tsconfig.json index 7b8a3ea7..6272c1ef 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,10 +26,13 @@ "./node_modules/@hpcc-js/*", "../hpcc-js/packages/*" ] - } + }, + "types": [ + "vscode-notebook-renderer" + ] }, "include": [ "./src/**/*.ts", "./src/**/*.tsx" - ] + ], } \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 40830431..cb0e989f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,7 +1,7 @@ /* eslint-disable */ const path = require("path"); -const makeConfig = (argv, { entry, target = "node", libraryTarget = "commonjs", dist = "dist", externals = {} }) => ({ +const makeConfig = (argv, { entry, target = "node", library = { type: "commonjs" }, dist = "dist", externals = {} }) => ({ mode: argv.mode, devtool: argv.mode === "production" ? false : "source-map", target, @@ -11,7 +11,7 @@ const makeConfig = (argv, { entry, target = "node", libraryTarget = "commonjs", output: { path: path.resolve(__dirname, dist), filename: "[name].js", - libraryTarget, + library, globalObject: "this", devtoolModuleFilenameTemplate: "../[resource-path]", }, @@ -63,7 +63,7 @@ const makeConfig = (argv, { entry, target = "node", libraryTarget = "commonjs", }, experiments: { - outputModule: libraryTarget === "module" + outputModule: library?.type === "module" }, plugins: [], @@ -93,9 +93,10 @@ module.exports = (env, argv) => [ makeConfig(argv, { entry: { eclwatch: "./lib-es6/eclwatch.js", - renderer: "./lib-es6/renderer.js" + wuRenderer: "./lib-es6/notebook-renderers/wuRenderer.js", + ojsRenderer: "./lib-es6/notebook-renderers/ojsRenderer.js" }, target: "web", - libraryTarget: "module" - }) + library: { type: "module" } + }), ];