From 562311375d9b86a1a4e09006d6b94f32ee318e88 Mon Sep 17 00:00:00 2001 From: Ivan Reshetnikov Date: Sat, 2 Nov 2024 00:35:58 +0500 Subject: [PATCH] Update my website to v2.1.0 --- comfycamp.yml | 8 +- roles/comfycamp/meta/argument_specs.yml | 16 + roles/comfycamp/tasks/main.yml | 12 +- roles/comfycamp/templates/comfycamp.env | 9 - roles/comfycamp/templates/comfycamp.toml.j2 | 9 + roles/comfycamp/vars/main.yml | 5 - vaulted_vars.yml | 423 ++++++++++---------- 7 files changed, 247 insertions(+), 235 deletions(-) create mode 100644 roles/comfycamp/meta/argument_specs.yml delete mode 100644 roles/comfycamp/templates/comfycamp.env create mode 100644 roles/comfycamp/templates/comfycamp.toml.j2 delete mode 100644 roles/comfycamp/vars/main.yml diff --git a/comfycamp.yml b/comfycamp.yml index 8e47778..76d1b73 100644 --- a/comfycamp.yml +++ b/comfycamp.yml @@ -2,7 +2,7 @@ - hosts: webservers roles: - name: comfycamp - postgresql_password: "{{ postgresql_users.comfycamp }}" - jwt_secret: "{{ comfycamp_jwt_secret }}" - secret_key_base: "{{ comfycamp_secret_key_base }}" - smtp_password: "{{ mail_users['comfycamp@comfycamp.space'] }}" + database_url: postgres://comfycamp:{{ postgresql_users.comfycamp }}@postgresql:5432/comfycamp + openid_discovery_url: "https://auth.comfycamp.space/application/o/comfycamp/.well-known/openid-configuration" + openid_client_id: "4XfAX6yccJf10dedRuLp997xORtXKij02oNIej8k" + openid_client_secret: "{{ comfycamp.openid_client_secret }}" diff --git a/roles/comfycamp/meta/argument_specs.yml b/roles/comfycamp/meta/argument_specs.yml new file mode 100644 index 0000000..88a8050 --- /dev/null +++ b/roles/comfycamp/meta/argument_specs.yml @@ -0,0 +1,16 @@ +--- +argument_specs: + main: + options: + database_url: + type: str + required: true + openid_discovery_url: + type: str + required: true + openid_client_id: + type: str + required: true + openid_client_secret: + type: str + required: true diff --git a/roles/comfycamp/tasks/main.yml b/roles/comfycamp/tasks/main.yml index 0fec8c0..953afd6 100644 --- a/roles/comfycamp/tasks/main.yml +++ b/roles/comfycamp/tasks/main.yml @@ -4,22 +4,24 @@ path: /etc/comfycamp state: directory owner: root - group: root mode: "1700" - name: Copy comfycamp config become: true ansible.builtin.template: - src: comfycamp.env - dest: /etc/comfycamp/.env + src: comfycamp.toml.j2 + dest: /etc/comfycamp/config.local.toml owner: root - group: root mode: "0600" - name: Create comfycamp container become: true community.docker.docker_container: name: comfycamp - image: git.comfycamp.space/lumin/comfycamp:v2.0.1 + image: git.comfycamp.space/lumin/comfycamp:v2.1.0 networks: - name: postgresql - name: haproxy + volumes: + - /etc/comfycamp/config.local.toml:/usr/src/comfycamp/config.local.toml:ro + env: + RUST_LOG: warn restart_policy: unless-stopped diff --git a/roles/comfycamp/templates/comfycamp.env b/roles/comfycamp/templates/comfycamp.env deleted file mode 100644 index 52ea2ba..0000000 --- a/roles/comfycamp/templates/comfycamp.env +++ /dev/null @@ -1,9 +0,0 @@ -PHX_HOST=comfycamp.space -DATABASE_URL=postgres://{{ postgresql_user }}:{{ postgresql_password }}@postgresql:5432/comfycamp -SECRET_KEY_BASE={{ secret_key_base }} -SMTP_RELAY=comfycamp.space -SMTP_FROM=comfycamp@comfycamp.space -SMTP_USERNAME=comfycamp@comfycamp.space -SMTP_PASSWORD={{ smtp_password }} -SMTP_PORT=587 -JWT_SECRET={{ jwt_secret }} diff --git a/roles/comfycamp/templates/comfycamp.toml.j2 b/roles/comfycamp/templates/comfycamp.toml.j2 new file mode 100644 index 0000000..8d38a28 --- /dev/null +++ b/roles/comfycamp/templates/comfycamp.toml.j2 @@ -0,0 +1,9 @@ +url = "https://comfycamp.space" + +[database] +url = "{{ database_url }}" + +[openid] +discovery_url = "{{ openid_discovery_url }}" +client_id = "{{ openid_client_id }}" +client_secret = "{{ openid_client_secret }}" diff --git a/roles/comfycamp/vars/main.yml b/roles/comfycamp/vars/main.yml deleted file mode 100644 index 5256fe4..0000000 --- a/roles/comfycamp/vars/main.yml +++ /dev/null @@ -1,5 +0,0 @@ -postgresql_user: comfycamp -postgresql_password: -smtp_password: -jwt_secret: -secret_key_base: diff --git a/vaulted_vars.yml b/vaulted_vars.yml index 90b11ff..a322476 100644 --- a/vaulted_vars.yml +++ b/vaulted_vars.yml @@ -1,213 +1,212 @@ $ANSIBLE_VAULT;1.1;AES256 -37653738373233376237353836326534666561343865386464383338353665366536313032636436 -3630633233333562363561366636343132313366663337330a636233323765373037353237303566 -35613165346265666330653435663763303364633164313536613364633261373965343032616136 -3732346366336632660a643565653261303163396137656264666462663432373837616433326165 -31356631626434626332363966626331326664356234326131636561313631363236393432303834 -35343138353738366432376639313662383338343632316363333562306164303539633730393966 -64326635303364626137306361663564376531616466323536646539373438316332303933643732 -61313336613033363931326562633462633534663164303933653331663231656663393532666231 -61316338663631613039613838666435633036613966316235346434626530386362353564343332 -33356235353433366437633066653363623763653231666435303662636435303033363337633265 -34393539613063326536633630646366346138306431306465363035386232313937373166353935 -37333766313065366233633937373431333061326333373430353738383465646337633633306338 -64623438326665313431303165353335616266383235653731636531383436383033313133616230 -33623534656661383161613734303230386636663662386532383562393461663762373331663766 -39616230636135383031653035333434613963316136343062363363613138393266383539616631 -35333834366331653539323338633231336433656262343438313438303438613739323230613733 -32303063303561363263356461313735346330333637383665633163353366373832636535636133 -66616635663533303335656237613962383663623536663331633666383063316535393832366161 -62343963663564363530383335636565613564366332366563306539636339376465363038313361 -38333163373837363639313663313339393531373033366536636263663238323564396631373865 -62386533336638616337656662363133346436613939656532303930336530343337636436313630 -64353832656664393030363432333139353439636331646437616663383830663534383461643334 -64353030336330636165343431643961616638363563636465633238303233666237343230663765 -66313666323332306431366238326330633534353664326131376438613237653364653735643838 -37333831633036303136663731643939656561616531363033343261633830626339396536313466 -34646433333936633132663232373539326335653966643764343434363438376265643635313737 -66316334666465313465373238383463323561363334396439613639346337306639666133363666 -32613830383262343964346535333465353031626431383733353763303162303865643430653239 -35656635666132373863653163323632393234313435636464326334353935336566346661653033 -39306563363065303165373732636132343339663865663361623366666163386463636339666633 -36383836346565383561303131306437333638386530626265383265636462386338343335303834 -61313430386636626234643630346663326262653866333963633234383566646565326662336163 -38616563363035376562346536326363663064306338346336653130346366613532336561336234 -34393930303661336665326634313230313439323431353535666130336565623264643466616630 -34373637346636653565646664633739653837323130653731356565616265336438366663313561 -65326339373332343232373534646231623461343065303261373430373636356263313638333437 -62643662376132393334373934663033363330316137616365326136336134646334386161306131 -36613065316433363561356661353733393766373561666532303638353466643734323261353139 -35623738363938303461623964393830616666616562326235643534313937663331633263336535 -32356536393636396331656335633261666438633333326238336661626232633635333131303264 -66646633386534663365616638343934636537313232303236353534353331393962343037323664 -39623063333932616531343565386233353436356436363866313262343932386533356361663462 -62623939373962646434356439656165353266353663636233356338323865333361643166326165 -35663961356564646232356466353563343832396537366635376435656332656539303833646362 -32663761653562323632373665303133353938663563643463313536383962663936313433356439 -30636530336430633532626264653466343137356633313464613936323633396232323463646231 -30653162653533336161356435316435336435616365333432333334376536626261396530373034 -66663231663765323836316234633734643131393462663463633266383361663635633663313364 -33316163336539336561663765393431306139623662313631383963666433386466633261666364 -63396232666461663466623035316337646161303638373265663036323933376239636137383764 -33633531386333346263353564613638343030326436313966356161643334633965343537643735 -65633461633436643039336166613766353162343862616436383330656536623762373364623230 -35333631396662323261646635356434396131633964663831336364343962383539366264333133 -65396437376561613566323839353331333933656139616336316534633966623931663736393130 -31623961326130613438633231626238373532633531306361306363353436613163326565356437 -30306461646232376264616463313235303738653766313233346465383633616330303538613432 -65336365343038653435623233666334366363353535663662373934303536373034666537616537 -37646534373361633332366337313630663539626339643337316162323736323766663738626438 -32653533633931333461353935343238366630613866616565333938663234393230376638333738 -37656239373131383434323333623466396237666237306532346464653237313635623738336437 -31326138646265643131616366663166616332616639383339353131323262353363643562353634 -37326438623962333465633431373438346538346336356535363233376636343065313930346339 -31653337613533346636626463333234623562306331633865343963393132346430313437623363 -65316633643739366532366635636466646231373334393965316565383764366531613363316430 -37623834343963616363656139623837333437633263333537373165366464323532303135326266 -34623937666630626637356630353139613736326438346233316562353831616137393334303161 -63633362353036373137366337616133363230616534353639323332313339613864633230623238 -39336636616661333038326136636662653730636536333966323938656338623437393238363833 -64383433343934636330623363363766303336313262323066353436346235626632383239316361 -35353030646265336232346530373030643731313436373837663031343036363135363330633137 -31643533316263653631373964326262666163643633643662383036616161653766623339396362 -61383135366666376665313634633534666134323762666438373439393565303135333366303538 -31663461343031316330623334366435393166363634383239366561663762333562323966373563 -32353961343361666661306539323132653535346466633135303364656334353865336636616535 -33643736313438353765633266373964663739656336363838393039646565643738323663313237 -62396166373733326266363264613165313665656665386431346566616133313966356566356261 -38363764653665636566633762316133353833626133646133313834376134343039316464336463 -31393932326538366533653133633961306434346335366663373534386233343532363866376364 -32306233643031633735343232396634376339376561393631666361396337326361313564646337 -33626139663935313434393030376539643439393331643832663539336465666632636566343432 -61623865356631346333613030383935366663373764333961333639626635383038376662346430 -37326464333835643938626434666162376165393837396264393533383765386631323632383939 -34323431323134366561343063346131383664663231303232356363313434663738373135343733 -37313633303862383663666665396262303232653536396236303036643736323131333939656231 -66643464623661333233396630353938306366613134363666326163386366383463636263656630 -37303232663161396533633535363535633330633335366634303964616138643062373162623731 -62363361383461633934393430613664316437626565626433323637646133643632616463383433 -31396136323833343134623634663335623134643765636237393631613464383635363135613530 -35653030623565373264316434386138373931656262633231353135633034376163386662343330 -38633232356564643733346633313631313662353137623137323931643466333462353639623933 -62653261323533306332626263613763666134633134383935666637313237313530393033663266 -39373237306465333761363361663436333932343164626264376365363231363963643332656632 -61303932306139666363313739373764333435396234366465363563383831383933356664303166 -32623763343866316135356439363139336464343263323863353866333038636564396265613235 -61366536366164323432383830623064363036616363303861303538653730303539396336376563 -35633964306637396365373730376338373933353934646133626230363837336163306636336131 -65353630333633306236666639643035366432356363313064386266313936303163636366373733 -35343163353832623239633530316232343864313366383235303830333661623436616164333866 -32633463306333626337366137663263613739376364316661306662613862346430386332636231 -66373336643531306266343061333637373263636661656465656165366633386163663432623665 -39616362613931623264653430646563633334356536626131333539633164393066333631303864 -31633731613332393462353538626464363739643265653332386630343132613862636637366336 -62633562363531303737303665343234663565303737366164386431303736306238633963643662 -62613935653864353937383764356364343263656635656666626236316232383665613865636138 -33633435373133333264386233643734386438623036643361663530383063313539393037663039 -33626564376165343339333361316565633764656334383730383564613565653831336262303737 -35656162306438626462383165363863643265326538303762326662363335623566636435323166 -35353164656136643538396434323933626334303764383130303065383461373631393138633938 -33633864663738643031316563633035653931643031613064343633383036333934663938316538 -39633763646138343162626436616532316566663931373264336334376234663966313763303637 -32643766653736346638333066366165613237343337343966303833626462653031616138353266 -33393262646138346564366538316565626561376537636134353263306337316438333965633465 -34633664613539343863653630343738323939633062316231396431326335353734366535376263 -64316161383163356436373632636365626663356337633234373361396466643965336239646639 -37636266316133323732393335636330616130396161336639316434316662626366346162643337 -33333634643030623934363130366362646161396466303731663134623164356436313334373834 -34356136383137333462633837313963313034633365373036396639396635643261356339636330 -36633961336437396332346163346665613861363130356665666333393038396361346532393738 -33336631373465333365623032663734653736303536333666343536623336383264363631376534 -30656135616134356161353830306130316135373132633233383336323164373039333864306337 -65616238383534636334623663613831613334663663613761313161356136646334356439623737 -33666564623036666235653964636461343434616134353462333566666334313161383136306334 -30366234653061326435343431623434386537353062666339386433633761623561373061636264 -64343734393637346437383538333766653563383337653763373763613035633231323361376461 -62326562383162303939313933386631633530316531323637633036393462633731366537336239 -33646135643538376266383831656137373634663062643363633463323134633831636431656466 -37373838343030336330386561653962323137323133326239333361393433336538383636633837 -65306561336434386236636139613366366566303466373463333939323161663539356131633735 -66663162633730663263326639336137626230386537353461333762633330616263363764376137 -64303630396436623431396132613562646265643464393835363132646365333263363764393866 -66353162393964356533643531373766313963613161383234613265336533393335646232333466 -34306437386230373366643864356562333737316633366564393564633232353466333930623239 -32313063323865306631663361326265353638346365343433303436333639393434303863313263 -34363832306238343938346236363431626439636161373361353964353437653062373932313539 -66313632366439623439643931333365646261393163393765316263316436386338326161646364 -64626535396664383630323639353538336134366465303666626631616266363162336637373536 -30353637336532383863653831336666646437376464393531333036313238613937666661663532 -38356331306534643936363964343638363566393361653864396430383531333563643436343161 -31333936653632643066333030323265646436653037633937623937636536363035626136373963 -66366265616639623130616662313332346536313030353433353935373435653634666233323030 -35633365356535363837383832656463303336666662353731343032313339623930383830653732 -66383164663634386237373236363832646239656232333062626464316236643934653037316237 -65633531363462653630386364373364336331613536643734663733633130363238343663613339 -61636466333830313964336666343735303939333462333635386665626333363266343464623735 -32393739323138306639633832313662346138316237643830653936653932366230323038633839 -66376463653633386330386162376334303830643165333833653439633438313534356333633736 -66313330633938663039656638396631616332666266653232323133656365316131323234333062 -61393663323733656236333532316665663562663136633038633739343663646664396234386339 -35373362333166343133363061323166373836373438643165343861386263323637363630393737 -63636363353330386563323766323731656636646436333133656262383935356432306331663265 -65383163346538393733376430386164326536363236383839343537316665363665313930356364 -62616165356635356232633337373032646136616165623763313530383137666162623364356262 -64353364356630623532316237376333383864653163666333343134613537336338353838353263 -38363633343463643932663666383034356561623830366436396534353030633130656663313164 -66636134353530633237316633383462353130653963346165646431653563316333386430643365 -61633236303337663534363430393864336130373534666539643130376439346230316335373239 -63613439623431346166366664323365643862353431363436656336393733316434346335626530 -37623561376361333863313537326534663665313931316438623261313063623561623034366331 -65333432396265663464383131396232326336323163356431393863306639313237333931363362 -33323137636633636133613361396361663430633465663638363930316134623261323630626566 -37366333333237386535623261336530666664373630373965646136396234343464353036386262 -66636463643034363764666462356335633461393762303832303130376131623639363234336466 -38323730363866353166623936393862373363646361346135393063613563306533383237613233 -35343537346363303433306537313766363635633164383566343765323863333863393730333263 -39343763346631353032656663396238653438643264346536666462663937643436386565376331 -32356462333530306464353038336264396337343639643236663330316638313263613536333337 -61386431373663646231336562343135303232616535666163373664363232376432313535343138 -61306330333330383139336435376561356461636662306137303938653739333131636530666632 -32393630386165366365653830346562663962313665356235323531616562306430663930313136 -30633234383238393332383862303066336230346535383633656334376638313766653466666466 -35336265643166363138373536393031643833643564333265303766613035343763363364393366 -33323839383263613338613862346630373561653033633439633864643566353334336666326334 -39646464363564633761616265333030376130363365626238333966653836376139623639336162 -65356237623137383366373865313135333737393531613363636666333639636335336636323334 -31306437653032656236376161653664613564616236383935323432383631356464343462353564 -63386166383462653365363962643837326638336361636533643233656164313139363830393336 -33303332643536623931396562356133643435343238383032633463616330313661353935303130 -36386536386533333665663038643131343165623465343536323634323433363363396665653765 -34313830333163313964346434663731613461666563396262383234346131316531333130653438 -32313032306164653739656664343861396430633635333735386666653833333033373038646539 -34613731383231373531363237323663333635636534393135396438306661363438306332383961 -30636636666164313733373639306663383734393733303166363332363234643634323464646136 -62323134356462333831323336346266616339656361316433656464386636353962386637316631 -63323236316232396164323435333665313962303139326338656266333766316231303031633964 -66383734663537613238303764333165333065313165656266393666663937626539393861666561 -39383233663039356639643437656531333361346566663732386135356234653532393363303965 -63623235343536313466323065343432383861356230373630613730616436303438353765343832 -65336230346131383131373466393932383363333063303234326333623331656337613530373637 -32643032636434353538626265343036653065386233663933346261663564636138306231626636 -31646136393636346434636636653230653230363035353133663734336133336436643061373261 -32346537613733636137306539303432333833633134326539323031653132343731613032396133 -30306264653132366633326439653635336661326665333332323331373763653862633536373631 -39663831396232373738616562623737633038636432613333326537336564633631346566656138 -66333664646631663731666439366264373162653532313739663131366339356532336663313738 -36336533616630303564393566653735623432396637656138316366333163383730386433383962 -61303337626165663033383964613331353163333465613034353238626134323239633363363935 -63336330636661396137316338653338643137646663646339313863653666316639316462306163 -65333939333033376161393934343333653335303937663661353765306336333730363361383036 -39373433353764373838616232393336313432643461313332633135636430633238653666353635 -66663630323365353432353031383065656339646432353265666562643761303765666234343634 -30323861373237346433373834326530323364363634303839623961346431303338306134666535 -63656663383839613562663765326530383439346661373465623234303063383239386535616265 -64623661306239306461333463306139303734636239366135633364323436353530303634326138 -35623737333731643032643632633265343934343961663963343162636339663461363561646630 -62386463383530316662663562616433666262653861396335396233636637353463316262343431 -64326532326532303833643939323364306261653165633463343265383734343663633333636162 -61303038336533613566333634386333303739316464333830366366653139323739303062656464 -66323337383662333261616462656237626235303033343934363633633435643032666433643138 -38613935356261396139353564633861333666353538303363666664303937666531363637383636 -31636563643562373863353363343831333039376139333262613334626435633035646437316363 -64346632656232363161623835393263303964343366353438633561623031646363353130643866 -65623230613331346330 +31376237396661663235386439336462393237613233383364393430626366363634376435333437 +3836363266326339643761623033346263326130303966390a323566323263376563313265383234 +38363432636532303966663435613436343530353435643731356664613531643863623631366232 +3634663239393234380a303132616361623937303564373037386231393339396661633732366264 +64333930333438363532306331633032643034363563306461373230376634343264333835353266 +39363662303639646639353730356135376631343036356665353863306539663465613264656432 +63383364356562396231633233323465333864376630396363316235363063383033333339616131 +63376466353136306532396635393533303934306436393861373664363033613137373036356631 +62616236633938363231656362316663396563636536353032633230656130393833353866326263 +38303663316139663330643630373765356165613837303566326430333864313931333235376233 +31333634323738336330373332303734313238643662333434643731626234616238306132306639 +31386337633962373162336435336630373063356635656138396166633334383439343564376262 +65363265663033326565343030313439613866376531626337653439356366346637663035396161 +34323237316439666562363436303539353333396431656439623431353435363833393138356162 +30613263623266653761323233326361633834366230393030623633636437393365666261323164 +30323065633563626462663436316138666439353161386366383331633038366661653534383766 +31613165633732316131643934623733343234353963353031616430396536623235623236626231 +66383532646430666264313266646639316538396331646466626530306433666130313332633964 +37663864326564373837666532376665386264646438663433363532623062396630646464346536 +62343665373638333430386663313434653466666661303337316161313462343430306537626632 +64333134666434366161663434363938346137313061663034396438323138643836643931333163 +38646363346462646131366266613862326366623062393063343864373532653366313561663939 +34376134636662303233393736333765333862623461316230336333386664613232653964646266 +62623264363733656331316264353736613331373339373833346261316264323561376464313062 +35366564323561623534633264363831343331343262306638643363363663373165623265376665 +30323733663863383731336266376332376161326531306466666264343831393435366539353961 +65353635353936373662353265366662386564386161373633643361393230303437376433633365 +63616338376561363736326163356166353962323737656234313136613238633634646232656333 +38383161653035323764316261313361333734633761373932636338366135653439383834326531 +31386435633761323862323037323038316533613135653465323330336233653736636436386461 +35616436306538396163663637356266633530393032393366383831396532326531663537306133 +61663138313163313038313365646564623638643033613134313839393330366436653462323666 +38623363363965363135643164323266323861346665646166336131336264346431303937333839 +37346535353166393361323537636632336361306463613566623565663766656463393431646336 +31363638623664626332323239383465663931656235353830653332316136306537613733343134 +64356134363331376135666135646230663030353239306164366366356362326361393938363566 +31633663656362643165336236623737623063646664316436373464643834616330663730333761 +63373561393664313138623465303930343136306633656332373830396262353839666564643931 +32613634636335636535396431363663366262626666396461393035653437396130623764343333 +31366233323136333036643833326237616561623166633663376435383133656332363930646639 +33653431346131616439313364396431616131393439613933626131383833313365373136313439 +38313462386139616637633232363834333237313366343066343539366166383366393462643561 +33636361613832336363653966633264313638656266626635646464373832663461383631363164 +34386163376130633864383433386265363637313266363238326533383033613061653036666566 +31643130303830643632313062653034386564316163303937336634643336323131643361373832 +34333334633833376238353932343836646539643632363266326332626130393133623266643138 +34633131393530373361613431393265303034653134333833363961336663323936613062613962 +39343630323263656335353664323236623734356632623338633336383634373766633936306362 +66303832383061623039303735383465633763663666316632623664633863326439316135663133 +34626661353862353266363534373533356563393362323137303138663232396436393736316562 +39373466316533626130396637373364363031396539323863393830376162393063303264393433 +36393037616133366336373138653739353234343935656562353237363261363039636561303666 +31666665326466663830623835626466613036333862376361333030306435653234346339343038 +61666434356566396464363031653764653230643362643466363032316530366431646633336135 +31623238623531623466373038353563386331356662623630643633386339633462383734386463 +39653933306365306131636561306333633961623136363163303835663937653930633939323033 +34656436653035666163373865646264643038393963306434616335353332353835653631643932 +33643963386330663639333037313238653634613130313434346164373565353465633837396565 +65356636663363383339346139646530313134623638646330303063343439666432373935303439 +32393036356339653232653865653761346338643731653434646661363966643435376362396461 +63373233663534623364323934636466373039323765396530623939633135653832633862656531 +37616634636266613432313263653932653964373430363166613961303933666536303665386439 +36616461633937303264366262353930626332313133323438633630346332396233336466643334 +66356161396561333634646661363166633033383635303730616531316434613933316639353432 +61636430656266376464396633346533373265353564623464346166383266353164333463313635 +37613964623764663134616138636134646665626135383736616361346564353038393864616233 +65353336663938666336313066333639336561326161643834356662386632343235396339376537 +66326462313332646633653830643535336239313235643162326562653963323732303533353966 +65326632623762336336633236633639356662353738363435363439623939643064343932313762 +32663066653164626639623563646262333436366661636263633463356662393031643832613639 +35626635383438333834336430346436303030363031613937366365386666306137643033653134 +32363339663937363132306661613935326563653461616131353031663231333238633265636436 +66616337323335316330366563346464306662313035356466616132656663643361326236663533 +38303439646163323061656338653863626131313137396336373034343930613962663137383164 +66613362653433303539363533316263316632313538316364643263303533353738643031393239 +36316664633033353764393461383931393362616137326134363837313664623063636430323231 +38393135366133616534323166653565303863313762396131333065626565663666663662643730 +66643631633663343362326237646337346235343136373138396434383961363663313461396361 +31396433386365363532393633336132616433633666646535366630353964343437623662653562 +62643830373736386535643762316663336163303937656531383166633430643035313939356333 +63636534303033343165633865326132306539383462303063643762626261376565373735656562 +61396337313266323831343431313163653637653061323838316362323739653131353437353134 +66356236643665643537386664363733643938613964613932323835356364316631336331393534 +64396164386433396465653234373031363138313439613133323235663663353934626430393166 +30373262303632646132666261303730653566656632373262386136386364323065656266643561 +36343933643638353332373766656130343836323062663333646138346137363362346339323936 +38393739363063316164386462353663343562653761323738333834356636313932633861656535 +32303133353564663238363030346531643362343763613634313132653539343030363535343438 +64636236393139346239353065366531623762393566363434343634376237666333336566343038 +36666234623530386465343130316236656361663466333361643033386238396130653664396134 +35656333313634366265616131323566613163333463326364346331316535363365333662336438 +62303863623066323539653662386163646239623766303030613333653863303639373062656434 +61316533343433646333323664653762333139633466626533626539383532663832663965383661 +63373334663439363165376438343463653664326138383839653865656138613466396462373733 +64666361393433633866666665396539356538646130383763663034336138336231356464613238 +66366664383036363532303137333664336336383561306536313431643039333835643334346138 +64366163386538313366383131613332376166363565613464363131373466373363363936343661 +39663331323832616632383866316263396331336336366563633636343934323361613866373334 +30376631623137663639386630383238643561633330363035316631643234316634663538383732 +38656333616634313431326133336563626664643237643766313563343133306338633461393733 +38343030386130646139363837396639396665646533373035333237633532353464333763616430 +65383236616534373932663934366464323935626663376265613063663362313932646638323634 +64623164393235386264666363386437323166326234303261643361636534383831316234646232 +39323761393038656338653461313462346266653434663763613636643736346233393234643463 +64376131316236323564666238616535623361393064616436663538336430616332343932316530 +65626631616562303933663236646536653363613832343431346631663538613938343533623961 +37316234376536376561643566663434623836643337343765633765373361656562323863303465 +66633634636263623262396563373931356266653938356337313636623861363664633262633934 +62303238653138653063653134333537306235663263383234663637636565366637363965393631 +65656635386536643765656562386139663931653664386230316531346466393830646563663764 +35303834623131386661323166336463653835666564386166303664393831373736333162363535 +33373632613865393064623135666564633665666663656163303832613761336234316331653663 +64353461303838316166336530363665346461323163346130393061316461353962613239376336 +63313932653366613231643937353939326236333231363238633636386239653066396630633331 +34356139373338643365613766323334353361376163323733656661323634656439316435643434 +65383365336364313139393262363132373532313730353639333734373039343838343830373363 +35653864363265363938373261396139363166356336393764663633376439623838643138363363 +39383833643066333233373635646363366266353832333934396639336662613532363765343937 +61613365613333346632303033383166393561663166313830396135663565323636333530363563 +39356362313161613863656166316266353438646166333166363265383733373066383465656463 +38353131343737306234346333616162333064353033376232356139383035333931363966333331 +32633036333566663233613134343766383534653239323736623230653264643734633030616433 +31316365663639666462383738303661303730313833346263353263323037366262303739636564 +64313931636535313738383537366664323934393437393930356430663161663532666434653330 +37313132393234373039383933623564313166343632373364656538313764646661633763653063 +35383336376639396361383961356266333363383363353939383863646333643732613230643733 +38613064376365343930366263663065666262323538656333663333383763306631393863616436 +66336637386135663832656330396634383331323036343633636338303833366431343538396637 +35363061326565353261353635373165653936366337646433626238613634633131623561616233 +37383566353463376132366137643236613437326334333536666630656437336130363037353432 +38366266376234343761313032653632333861346333323530643530393836316437336366643537 +63653661386461636632643639303665396131616366323530316462643334613838636564366661 +32366634646433376565386263306231643665376335613334653638313366336265626339333661 +62626366383138643261343332393261653030653638376165303337343462373462636332393139 +61633935666135656631346331646439623530626263326365333731313034333937366234363865 +62336664333564616636323662616664356638623063363731383863376233663435356437366535 +65663963616262346536333831303665313538353764663932316163373733643366363239306537 +34303632653563373763626433316438343161336666663631363637353634633431363738336232 +32346236663465373233623737303732323230356534343931373439376230616536326432316634 +37646235653438366431646232313164626161656530363666396162636531323433633037313130 +37316337383065343561646666633631343336333135353966393463653739386165383836656264 +31653232343433663137313065663035353565633632313565393864636266323932313032373932 +30616466386663613838396332303536303762623335613665653539653666323537386563303062 +34353966646233393339333139323465393764396630343439363339643063386638313862643937 +37303438306438313138656539393732376636323236333339393966336163313530623638613161 +36356464623537343731373037313566393066356161383130343633393266393963396135346132 +37393334633638373831313536346235353131333835323662353036626362386331386439383035 +33396537333333313638663138653930396564303539373766616430326364383833663033346639 +66393862386261613461343231616135643932393738316231653837363864343864313364353033 +36343461383934313339333864646631326161313530306330386338663762396330366130643835 +62313165633165616331383237343438663366343936646437633464636438366135306635633332 +64353761616537383537663630373430666161356563303930396363656262356436633035666135 +64323061346137613232353861386432663261663533336635386438363063663663383834626636 +64303930366564303738626165346135613536363164633931343064346532643161313833356262 +34303530383536313331333139376464303934383135336562376437363466616436383963356537 +37386262316166633139633463346165323639313331353037323637613565346232383838323363 +61653963633232373737666663316464623234383064653366393461393239623934616332636230 +61623232616138383233343932666565626566383736633038343435386162633434613039623836 +34353963393530366665653137333835383365393831646662393633383562353232643138353536 +34336434346539343033333865316339326661643666383137363939343566326161353936303430 +35653732333638373532623231366230666164663465633863613133316434613635313262393033 +31383934643431303032346665626663633632623430663436343833336563393336336232303735 +61663834666366356436346337306436666239323337623434316331383339323839373234616235 +35373634653962663632383137366630616132633364313063613363666461626432646534666239 +34663836616363396230333832343563616336313235343931636438326134363066616439333864 +64366562383365663230316239626631633137316330633061386130623837353032623666616233 +63396137623262383236383034353265336263626430636131646438633164393732363336343331 +31616663383863643534663936356535636465313131373362386431396330346366616431656661 +36356463393762623866643234333533353334653563653233616635356261353237323564386239 +32613633343432633033613231343335393134306466623133636139393237303035653963383532 +65316230356461326132373434653064336536333531386338376430646231386165313930346166 +66336536373738353235653437363430333063666666393538386661393430373137613035663034 +30373663373839353461383932643464613736303036333231633465346231376134616462393463 +31643665643664386632383530666137646261383361376361363239343637616462633233333465 +66303434653264333431646661666439633164346365666436643862653766643736353837613239 +62613265356432383036666662373737323338623635346361346632343332623530376466313631 +32303965643033653833396334646264643932323663333563313038303864333235303362393838 +30623663306138333536356261366331313632343561613466313261343561666132346135356131 +36653765316263333064373165613537396530386530366434363531653563363862303230343130 +63326163343466373466346237646235396134303133656163343132393466663364633834633539 +35616164373935366161366639666462313866383832396264373161333066356332313434386236 +38623931633532653232366563333461646230363732343261663965653366643132376130386333 +38616433356532326635316262663732353363386232393036333739653338306464373065336536 +65386139303539333939373435353563376435366332313934313331356433343132393530316163 +33343636383732396635366662383538663337393463636430363732386639373037623738336366 +35363031383937343434613936656666363566373733383038666631363136303132653832623939 +61336239613664636631636163386636613133386138393561363938343964666331646139303962 +39643765336439383965376235333764343939653164636331376436333437363839393230333536 +36633935386363326364313061336464323030306137613664643063653838636661663265393634 +33613332336462393134326233363837373866376130383339326439633637316132346164343731 +34663162393037333430343766643463303032313839353330663134363362653936653664626637 +64343538366135643466633238343634396630363036306265363339333363656136376634636139 +37316461383864623261646466333938643536663963616433613930393531336431626630653964 +64366634663934643561326631333662353938393339613532373162393230626665613034346365 +38303738346662333634326661343666316466626235326266623131663264356438663966636339 +39616265333639393737613861353239363133343466346432643465376230656238323365643537 +34663262386433356436633233653364636365663036393437653238616566333736396266333333 +31636139636138653934373532623331333030396233663132633435373032353264343466313033 +31663130646336303831653330396630636335383932613165373738376230363031303537646239 +31663430333234646465323131643839393337653836643837653431653034386636336261646662 +63393530613166386364393238356362386231316631663037376166336136356235313666303266 +63366234316331666664376662373439393563646134396332613436323636333635333739366231 +34356132653030613132313030383366663132343631376536373434353963366138643264626534 +62653931386465396135383337383635333336376462643931626535336432366539323964363838 +63656535333062343766366663343535656665313730356562336234336163616633616539316663 +39626662323338633264316134303639353937383965396434323462626632313536336264396139 +63326162316331393036313562613439363631636530646664353933326130643537663133383432 +34313432346334346336623831383834633064623036386262356563636634656330373964626165 +63653937323532333337353635343864343534613333343462313733623735346237653930323237 +62373330396433373966373961343832353739333835366333656237303562333663373233343233 +643332613538333230356462366138653138