Run ollama

This commit is contained in:
Ivan R. 2024-11-17 23:18:27 +05:00
parent ac426cd7ea
commit 0a1c433a88
Signed by: lumin
GPG key ID: E0937DC7CD6D3817
6 changed files with 380 additions and 235 deletions

14
ollama.yml Normal file
View file

@ -0,0 +1,14 @@
- hosts: webservers
roles:
- name: ollama
database_url: postgres://openwebui:{{ postgresql_users.openwebui }}@postgresql:5432/openwebui
webui_secret_key: "{{ ollama.webui_secret_key }}"
webui_url: https://ai.comfycamp.space
enable_login_form: false
admin_email: admin@comfycamp.space
enable_oauth_signup: true
oauth_client_id: pUiGwuYn4HP26e0R95IqCYhICay1qsLQIHSTZnxT
oauth_client_secret: "{{ ollama.client_secret }}"
oauth_provider_name: Comfy Camp
openid_provider_url: https://auth.comfycamp.space/application/o/ollama/.well-known/openid-configuration
openid_redirect_uri: https://ai.comfycamp.space/oauth/oidc/callback

View file

@ -107,6 +107,9 @@ frontend https
acl host_freshrss hdr(host) -i rss.comfycamp.space acl host_freshrss hdr(host) -i rss.comfycamp.space
use_backend freshrss if host_freshrss use_backend freshrss if host_freshrss
acl host_ai hdr(host) -i ai.comfycamp.space
use_backend openwebui if host_ai
acl host_grafana hdr(host) -i grafana.comfycamp.space acl host_grafana hdr(host) -i grafana.comfycamp.space
use_backend grafana if host_grafana use_backend grafana if host_grafana
@ -240,3 +243,6 @@ backend phoenix
backend uptime_kuma backend uptime_kuma
server s1 uptime-kuma-1:3001 check server s1 uptime-kuma-1:3001 check
backend openwebui
server s1 open-webui-1:8080

View file

@ -0,0 +1,41 @@
argument_specs:
main:
options:
database_url:
type: str
required: true
database_pool_size:
type: int
webui_secret_key:
type: str
required: true
webui_url:
type: str
enable_login_form:
type: bool
admin_email:
type: str
task_model:
type: str
enable_rag_web_search:
type: str
enable_search_query:
type: bool
enable_oauth_signup:
type: bool
oauth_client_id:
type: str
oauth_client_secret:
type: str
oauth_scopes:
type: str
oauth_provider_name:
type: str
openid_provider_url:
type: str
openid_redirect_uri:
type: str
oauth_username_claim:
type: str
oauth_merge_accounts_by_email:
type: bool

View file

@ -0,0 +1,54 @@
---
- name: Create ollama docker volumes
become: true
community.docker.docker_volume:
name: "{{ item }}"
loop:
- ollama
- open-webui
- name: Create ollama network
become: true
community.docker.docker_network:
name: ollama
- name: Run ollama
become: true
community.docker.docker_container:
name: ollama-1
image: ollama/ollama:0.4.2
volumes:
- ollama:/root/.ollama
networks:
- name: ollama
restart_policy: unless-stopped
- name: Run ollama web ui
become: true
community.docker.docker_container:
name: open-webui-1
image: ghcr.io/open-webui/open-webui:git-96c8654
env:
OLLAMA_BASE_URL: http://ollama-1:11434
DATABASE_URL: "{{ database_url }}"
DATABASE_POOL_SIZE: "{{ database_pool_size | string }}"
WEBUI_SECRET_KEY: "{{ webui_secret_key }}"
WEBUI_URL: "{{ webui_url }}"
ENABLE_LOGIN_FORM: "{{ enable_login_form | string }}"
ADMIN_EMAIL: "{{ admin_email }}"
TASK_MODEL: "{{ task_model }}"
ENABLE_RAG_WEB_SEARCH: "{{ enable_rag_web_search | string }}"
ENABLE_SEARCH_QUERY: "{{ enable_search_query | string }}"
ENABLE_OAUTH_SIGNUP: "{{ enable_oauth_signup | string }}"
OAUTH_MERGE_ACCOUNTS_BY_EMAIL: "{{ oauth_merge_accounts_by_email | string }}"
OAUTH_USERNAME_CLAIM: "{{ oauth_username_claim }}"
OAUTH_CLIENT_ID: "{{ oauth_client_id }}"
OAUTH_CLIENT_SECRET: "{{ oauth_client_secret }}"
OAUTH_SCOPES: "{{ oauth_scopes }}"
OAUTH_PROVIDER_NAME: "{{ oauth_provider_name }}"
OPENID_PROVIDER_URL: "{{ openid_provider_url }}"
OPENID_REDIRECT_URI: "{{ openid_redirect_uri }}"
volumes:
- open-webui:/app/backend/data
networks:
- name: ollama
- name: haproxy
- name: postgresql
restart_policy: unless-stopped

View file

@ -0,0 +1,19 @@
database_pool_size: 5
enable_login_form: true
admin_email: ""
task_model: llama3.1
enable_rag_web_search: true
enable_search_query: true
enable_oauth_signup: false
oauth_client_id: ""
oauth_client_secret: ""
oauth_merge_accounts_by_email: false
oauth_username_claim: preferred_username
oauth_scopes: openid email profile
oauth_provider_name: SSO
openid_provider_url: ""
openid_redirect_uri: ""

View file

@ -1,236 +1,247 @@
$ANSIBLE_VAULT;1.1;AES256 $ANSIBLE_VAULT;1.1;AES256
30373463346361363832616462626534336233633936383032613437326433353437366363313032 38303939653832653463626363373732363731643437653435356231363165633765366534643733
6430316535363530346633373638666262613436623133310a663037356562333334396261363833 3632366430343539376437396332656233393534376433310a646465623437663965623532663363
62663133363265326230333961313364343134623032376165323961386132326637383062373065 64653166396565656332303561643533663638613662323130636337386665306563646161656333
3732653962616263360a663538613837303533653031376161643037623434336331613533356630 6538376238333032630a333333346639643034386565376538326234333238656630623331363865
65623563366666333463613436303534356238663934616530353363633635393466323636346437 34346630666534393339373638313465626231376633353239383631383334393166346365626534
39643166613332326662373938366165336137623065356633646362316262663033633430326334 31643435313062363533333765376261656561343162653665376661383461386130303638396630
38616337333566643536383138663762313161376534663132343763653464346561333331633339 30393134303935666165333333323238353539626337643631666166636136626362633736386234
34636464613032633061646564623661656466393633653266323366363333393339363732376532 65623534383932363966653939313939666164653737636637346263363964383834303862616261
32363063303865646561323637623632636435643866393131313131313131343031373234613061 65613539386434633633373365623162326437623635346438643661316539363662323335343330
65336162633836383839333237353266316566666430333339333235313536303562653763396534 62643533626631393433333731326435373031633361633539333166666231633737393963633237
39386238623737376234333266366132626136613632653239366538356462363030313464613431 65343363646133333964366463383763613731356166366465363635366538343139323631316565
35616139373039623562306365623536346139643631653664396434383163663866313237663831 38306632613332333839663436313539313963306166376639316433623437613736643239323436
63646131343663386231613237663638393061643131363436323561396430336333373538323430 64656533366136353533653039636637626437386161346532363835353534633366366566643666
34323234623034356231663036643365646366376638323966313361313738316135643535623462 61383836646130383361393739663631656538663438623733376634623938396165633433623130
66636338356436666637303537626566633437393163343434336435666433653461356337376138 34656438363736393433373830663538663261313963623366363161643936303137323239363430
61623465653631633139626239343430323761353266353263323561386165356166666134623666 61666631653965373831306261633139393063366666393262626134323762396633376434393037
36313538326433396131323266383033613133323566656162633965383739653164363237333039 63666163326630393038616564393537643031663332666237346334616366303338303062646262
30373138626433343465666165356633346436646630333465376238343661653266313834623862 33303636326265323332633538623535386432383161613530396262366430646438313130383230
37616137656564363131343035653266313965333436353932313566363031353239356265363361 36643565303663646663303161383536633531333365333664633438646631313361316136326433
63623466646131323064306166626137306537613565666435616533623764613138643264383036 63306566316164653666393437366164623739643634303462356465616530303931663563303838
65376136386539653666366136616533626433653030636563316232663031663365356631626431 32356433653130303036663636666231343737663830303435316631383737623265653438396538
66653161633661643764666462333162363139626230303132663231636666343938393137333932 37613537353430386531343066356665336230663465306164316631623538383066643263343232
63613937663464303538306165353039356165396636646666313232633132373933303162303762 61656534323666613638636261643130376465316430383830346164623565616366343436636566
63653763633061306366393261653163633437306237386533663639326566306538346137343730 30373263346262616233393131653262343630613737346132326261656136393934366632633136
65366132346531363239613161363466623830666236346266636634643833613263636632353438 36653438363833653232636362396461376630376531326633306339396534663663616539656665
31666131303866333562376437363536333133633036353139643162626666656466336132303932 37396336366465623961303432383933306564366139646265653438323966616630333839616239
39646639663364633736393138623566383538663839613533303866326232373431366239336266 35376366383962636566353530366133373833386533356464386532303135663664366333323631
38633665313338636238653035646262356431333334633137646137633535396537306334613333 64303632636166376432336161363362623834366262633531376463363065623436313761326365
64313163346365336131393832333064303033366634313663333262666361636131386138323764 64383836353562383233363863356238343234626363343964633136343530323939333335623932
63613634666566616635336232663431353639326161313866326135303961333337636138336234 33646563343265373538623265393033653638363561396436303336343465663039316633323436
39643966663266653464626331306662383235366537383039643563636464613563313365383737 39383236616231343463326261373764616231653837653631386136643530313538633639353166
64303264643265316530326165333465306635383235313662646564333762333234616265313638 32306534376438306564393438336363313461396466376235356431376637323266363263636333
30653064326438663230386432343961653936356130316534613837653062623663633934333132 39643733383766383536386535343832373131396533323663643063333861353832663237643731
63643364393730633936343136626661383137643033316630336163383238616464326465366564 38366162363865333765333731303064343965646138666366303162653462303962633239326235
39323931636564663536626237313066646436633632376262353964643635626163376163633133 33363234333965353863343965373061346562393566323565393531336637363931656362343739
36363933313466356363613665383061386362333037373030393066326265333133636166613532 65373165623535313766643864666162376535393437343335393661633430643039383461636131
35343530373666623036643339303438376534343535346533393134343133383037666437363166 39373533336134396561623761383338373734623537336565363836303435646237326633336363
33653962376362383031323337386364326232613366613134343030306134323235623630306631 35343631666235383566323564626137616636373830646262633661393432666430386638646233
64343165653661633135633035366262336362643435633733343866323136393562393833653733 63323864613765363539666235653864363335333530616364356138353361663031663237616161
63646432356264323764336561633135336365393866623265366166303666666663653334343132 61666132313635313364353433646232326165353034376333383738633433383635316232323837
66393538303739663736366362633264346238306566333962373265663366306465366238623333 36633566653330623161636139383566313235623061386339373966346437323265386163626431
61333830393362326662393833326165393863643734386239333165346664343337373466626361 36653534336265626439636261376230643463353765386632666361613636383237383731656461
66666165663438383363636261323136376334636435396233393034623461623134653066646461 63353138353836376336376265356565363634633337393133346633666664386430386437333564
33653363333862393932306437633333396233653535353637663634323037393537343531393663 61386334393766313464643666653864306564356633623037656330383331633165323539393737
61643664386434366232333366303637616332366131383936373236366363373166363931343838 34353331373764633666643032336136386632393735643133386465396530346239326333643364
66626561393337373532326132663936393535613533393930663065633264343666343237633439 65323035363066393431663537643231613038336361386566303034343363346164396563336531
33616363353762633538653034626137333736303661323034636163356662623336643833303537 33636137313839303963613564356338363833386430346132656333323366303464353163353632
62373637643638356339396462613332336263633532343533353062636234646130326535663931 34373165353762383030303439663936646263656439616266396265663835626538326537353833
66316165623539396232373262356161643966643935666262316166336162643565333063656265 38633761623331643263356538353263663863393233303139346132383964363735353334626532
37313338383665386266633231326162303432646663353930643638626261343832616438316338 35356138386661643232353237306462326465306430303362363864376630343937623938383464
38633366616335393633323764306531356236633663336532666634646430323066643938636565 32616537653136646330333033653461313565656535306236663530363934663730663331363964
65626337353338653739363634376236373230646439353531353065353135313239353534653661 32313833653239363162326237316430363535306138323865663733396361646563626230326332
31323261323838653631653038386663646335313265613166643131313036663566353561373535 65313366313362376363343939326135623365366564323364383364663639663863663337363236
39663731363636366630386631306561616338663630396265343734623563663339316362383531 37363131613837333539393938626637633139373332303062303636343830656532396562386161
63623063316562663631336133376232643732643038653662393632336639306465303566653935 30323233363334643164313835373761363566306461313633336365313033343731616632373263
34323865353532306630303436623335326161363866303738323733613138636633393036633535 31616433643566393139353666373964323838666133613030396661353238323737616235663135
39646135393336653538386165316139363436653766623232343537346162373866313338316337 61666532623636336237653532616135366465623534366134613961343636303334313633366436
62306236616163613731316261626535313766323837316162643262626334393661643164623262 62653936336666373839656631353330396139383137343834366339653534663832333533303062
39353632333765383230636130633765663761323437643230356637343330383230336637323638 65616561376564323337353362383663353439623539383839393132653964653634353031333030
37613534646361346161383433386465353833383765613565616365323034396164353531656437 35666561313534663134616539343165333665303632643132396632353261643566303839373465
64633066626339303366616136653461616537303962623761636431623837626636353634663433 30353833306563656639316365356563323638326634316362653137393435336364333738353031
65396466636232653362663965313738316531383264353731393431346236393466653439396137 66656632343134616439336337336161353834626462383761656561663062386561316636326135
62363937346538363365333538373639313361323662393236333633646632363032383931653936 63643436336463396364633763653735303766396539373861656162623434323539613031663839
34653533646633636139336436613335633736306165303066313266326532633535366462326331 66653330386135646539353338663066653037366464306233386136323838616237306162303530
64323263373364663866373362623738343539383433316664646462393161643931653561376432 63643638643963363131653035396565333862353632643733383136366635313839623766303531
62373266613532666366663232636565393662643834636237633964613139646431343064613233 63336338666162646130646134613162636365663061623635336464313435333962316162383363
37656535396430636361386334343365663439383363366564313462656334316330356232636237 37393434313062663037656437383036363066373561373335386239663837326431333264373439
64393561363064313461613233306466303733386230383131353864643031346633373065343537 34636236383361343138343037316462323339346662346333643761663336666235383461376334
33663731656537316239383538333961336164633439386236346539316132636432376637303438 30666136643164633564666564613231633361303339663833343264633031333465306237303334
31393563623133323461653035326231306435613564643536633033333537646431393264353337 64356165663263616566663437303935353264393538613766336563623730636562656635646266
62643962363164666633373066356337373835626635326434656435633936343865363837356236 66383339343738656431346333383537653338386466343736666138633930366235396138383461
33383063323230646331663566653538373738356363313030366231393664313338353262663262 36623763333761643833383262613436353563393134653765656139633665376230333034336137
63663264653636393235333330643131616531363531633565623531393731623238373161663065 30623131353265333665346631653535613538663537613238373237646564333438356466383161
37636533353862643134333430386232643735373934623939656362383064633162306633363139 61326362306335363461343566626661623533656133306437343766303437316534363133646333
30643163306563646433366232363039653034383034393338343263626562373766343139636432 32613032323434363166356133316162303166383766623665623062316135626332303935303335
30383036653262343365636431613665633930663165386337653031336462373336323534393039 37306332326464323431393631663839633366653837663338366432333334303439646532326165
36316636633966326661396532653032356161326431653237376135323461653539356466366365 62386162303533343664373665303265326432663331613262323738303337623037363962613537
33336532643531663732313733316364653361653536656633333331613636633338376432316137 66616161303435323436356262663463633963303933386336623161616665626436383264373864
64326561623432376434663432396532336364326530663563366261393862303036313734623535 37313561616361353166633039306265653237376363633930663235663732653834366131373038
63363030353232613064613262633563313464396233633535663832376339393736336665623131 35623565356363616532323133346338383138316639303063306134386663613361343038613736
35333533363862303133653832306638306534656330373130383561343937656339653466393162 66363765346139353363306566613132363461353332353230343364313538633936306632383038
39626331376632623065643631393034323766323231393931363432383531346530383037613532 33343266393136633263376366336635633864393331646333356234353162373733326633373630
36353935346535376163313634303430616233376564306663303165623933353862343837666464 66323261633933333834653363333932336164633637363939323462333233653535333335323736
39643264383333356633623134626132663435393565666263613261643930306262663165626139 32643332333539356562366666663734353234323534616434616562323666323462306336396164
62393961376166366431643566626539376135653663343031303937643930613435626366663062 38396536326232346361616131333364646239643231353135376334613335386462346138646136
61616637396566363732313631633334616163346135383936373465626465306630303363393764 36346163333566383937353261643264656433393766653461623734316566333539303961306432
36623463656234633164633737356532313263616536366237636630363166353333306637653335 39326638616234303166306534633738396565353138323635333335356432343861616332623538
64616230613033383765646164646533376432353338303838656232646533623730663234333462 33336533343730313066633930366130396566343031303935643962643133386133623365613663
38666132666434643839636164666530636230366531386131333566313362393136353836356262 64393564653230643165373732616563366631363239336637383139626232316461373037366164
38653437653464313232303265316431393830303862323138653661346635396133666239353766 36303263616338663564623861663433653761663836613835656162303865323631363138386130
34633166393165623531343437306166393930633130653339326436356662666434653962316633 37393731613837363835383639336535336633393733613964613637633161363431613232663436
63306133636431303964356166626464616266326162636361633137663735646434623138333936 35393739316165343335363065633863663737373134616430333966333037613361353533343064
39373139633864393436383931343361616537646131653564663536306561323933343539656532 35383037373334333963336335323737653436356465646161313237313431623461663335346566
65313733626162356334386230346132373133316636306131643438353037356465313132356363 33303761383736623538366438306134633538336634336330643861343136303635643763303063
33653234623537393436336163626532326363303263323665643831313666366461336432636631 65376430343136393436383030653862393832633066663834343562373830313936326265613964
32346365323837666436636438636563366134636363303566643735643235303139646538633263 62326163383233303938666263346464343630373533623466336130333238656631613761666365
32656531373330373530313261363535313430303337333136373339323830623535646137373137 36373930336162323563633932633832393335323064353339373962616165643763666230653735
39643934366235666633343039346562643864633639383335663765653834656636333665346131 65653966336263633565323666656237336261333463653866636363633539623630626336353763
65316366663665626632313464316463376339643738633933313131333461653530623732653966 35316538363432396533333561636462373764363438386238623735623166613931386166646630
30353437396535303261343737333938396366383136356333663461666238353862386237336264 36353632383763383664616436653363633639656262313833323237386561386236616362626532
63353034616563396231343434336137653432313734666633316330376163663139303064336238 62383430346436656639376433333937306438353461343834656261336163366563643062626463
61623965643432626233326431626530616466663164326662316464636466313666353939316437 33353662393836396233326330353830356435626234646538643235643661313736353836363235
38326265303630333631303364346464626465356438373931313131663631356330363863363066 32616133396530346339383163616331336331666366613030616263306531303361383261376262
30363936393537356238663762363635666565643036646564363164333162313263663933346163 31396432356536623366336562373833343733313432613763343462336131313837666435323639
33336163306237643834316333653535613533303863346333616630353231383261393765373466 30303033656466313832656231383132323134666136386538363034663264343039353763373261
35633061373835663831613830393234363335656639303262366633656462626535643637383465 63646236366365393964613965613664643539623136343161346338383236376262616465353465
34316665383337643030633862636266306631643935356633343762646261343734636338303730 62346135366237303030313533373864613538313337613162636162623462383631356636313336
62363833623031343130653665613536623135343036363762343532663131643365343163343462 63303831353662643239633434356537396531333930373633623836316436633236623431353066
37333863643236633635653038383762663035306361363138336462633534356133303831313163 62383366316261396632643062373233346532616261616330303437653336366433323534323030
65306131663338343366353232646134326234356130663962663635353837663863643937383339 30343937323363303063386436363432343065366330383762666233366234383162303364303631
32636138376163363936353831656463356663356633663534346336353131313662303839613063 35346163303061323633306466636562303934663835366630383266346361626235663931663837
36633538613336383037613132396563356631656338393166313463666237373761363734373037 64643034646539626231616133383035363937643432633261386361623263313362636664323632
39316238613930396633616465336463363031383630306261323839646630303662383936366432 35336131663863626630373066316335343561303635663934613632373234363264663864383831
35376534393063646337373137356565343562623438646437666361663330303835313831313837 35366165386466393130316664656437326432613866613238366232643833316361313038356631
39376263366265613964363730353939363331383361643966383663333634303434616534386138 63383737363062323632366561373030613338343837656330633366613435353336653161373833
35366335643332353964623965333237626538326163333733313239646535613930656266366463 66663237333733343033386563663661663862363339393430376534643661653462653432663533
63336134613037623938343530303764346331323362656632356362386337393736306563306663 39343330646635353034313338323733396362663339633664376339663839663730306565633166
66313837303461323066656338326339633635353435383135626333386234373239333263656532 66643237316231323334633864353139396664376538343566306535616364396263316131666232
32366362323266323139376232663066333563663666633937393362646433656561623432666232 30656663623535373439363830383561323831353664383133366362613938306437353630353035
36353961366661323264353061353736616230383337646638656439363639613536353162396237 62646639346334376434346461303462303635396362336138633839393030396235313132626163
38386238376137353937653336333639393463333838353632336235336566633562303033653362 37303532636433333466633734306363646566343236353731616463383863346434393134326461
34643539613037373834353139323638313532633663653837363166323931356330316431373639 65373430343064363462666234653464313638616466363035633663306131366361623630373039
66663836316265663063306637343530303334386433386630363436616133643961313835353336 35636662613366366263623361313465306236376262316263343666343136303533323562653165
66333236336332353433376566353135303161633539623539366637353262313330346661386635 34323063356133623961303738623337396431306264663761646235343338646332376530663433
34376564336635326362326631623533366665663862313833623863326435346639323133353835 36363864633964303235386530326161323639393861613062343764626361623730616435393034
35613162643934353064313330666163303730376666313133613035393964633736666639393535 64366264646561326461383132626330316166623339663435303339383064656365613133656637
35373262396535373166303233343431316338316534633261343063306232343262626164643561 31383133306436363863323537373932393937646539643835323466323937333766356339656164
66343332376332353235343462353165326638333465633138346239633833396364336632353338 35326661373637353535623135353530313536323733623736333033326564356538393935616437
65363330653734646565663466346131616533333833303962326664323737653937396664663431 38316366663932323364333238316333373366366238633832393933313436346461306265356430
31303833653162373231653231383438666637326439386234323432613561613363353166396563 61393834643763616634303232626164386461323966666631366534336465663435316137616330
36373436356333306563643739636562363161303366643237613166343233653033656362663065 31373232633565636261323530323165636161366534306437366236666430393765353866623539
61646365343265326232303439303739343937653637346132343561383363663034646565623638 31626532356564663230353338383565646635336265653262626231613832396263616666613462
35383037663565326137636163643463383930323936346465626562333337653531623232653531 32653034643737363931646634346339633366653730303066623039643035303337373538303761
33323836623463346535626562383834383238303432653735313437323165666134366663643232 33326533313863323931616638646231323964626434613133643531613631306364616266366563
32313531383138383531343337303333616136643937333131303735313766303334333636376663 31646237396235623162643130313563343734313363663037393734313663326335373038376139
38626366313137626466616330333236376432646334363637383438656261623530643938396561 62323136366231623238306362396638396334663237633436386239663031373734386437333562
38623538386338646335363165343632353937623333343865346232623763633130623662626531 30646266616331653131653236336634343563636233613731613665316565376565363865666336
64663566323536373364306365316532333430323661623861643263663738383031376136373231 62343234373163643238333830383065613033343934393338373966336530373135346235363262
62626365336364616534323761303462613035626535623735303538323938356265353131623730 63633265633939666665396630336461626533343935643665323332323131633833626466356131
63383130623365333835383461626235656333386131636233353734666334376630363666373737 34313531303939666666356430326236353534623634616661343363303562666138326266643331
30326635636438363166643361323864393832616538313466366630346537626231356365616433 63653163353337393330303762323537373865643765363930323661316136346536313964653338
64636463303262666237356137666332356338396632306135663431366135343461306566386633 62343063303636363463373362346234353731323235373163336337643038376439343834643462
31373564383039316135656631623934306439626637396631323235636362373562636339323161 39313137323637643766343266303761343636373932383633656437356530663233613564643037
33363632316138356563633033333833613434633838616232393230346333626661623230643861 64393863393431663064393062323536663332643134316539333264633033393036643962643261
38333166646132373630613432323234633137666435323339653438663932613461633235373633 31316164333735353830383061646633333838613761393665346562633362663034613635336564
38613637373736656263396239663035663261333066376435613264656138313462336266303731 33303033616633386466653837386338383163383038636532323437666431656263373966623939
33623863633535386164363466393230393162616133313230336330323339396631386334663430 63623664353430383963386430613734646164643935623534323865303036306665373433313139
63333161623062623437386437326438396661363863633836326333626137386435656536383331 30663363656331663834666530386165326366353837666434666264356566666236363534623632
37353434313730313361353565373730393631613433333338666139373064316165313835326635 64383232333232653833636366653133376432626531633861333938333765626432613933626130
30393361663964656565396531386465306336393034333133376637383334393161393866656564 65336664653461666664623330356539356534636365306464373030313636333465623132346130
63383731363739663263333639366538326236313932336130623965653236373730646532656136 32343834663332323934346137643832363531303238366130326365313038363339303738666136
66623131373965376138323961663561633336653963613765396533376462386566363362623238 30343435333661343032613164666138343434643433643034643637303131663765386362343534
30613362373131636363343762343364363038316264333962383632663734653663383037643464 39346236333734323338326134656562303361616639666361633936383735313635313238303033
65626334616566373335396435633863633062626363343563363333323063666261313662353864 36643638353638356132636138626239633666373365653830656562323263633564393437323539
33313237616261646435386534636435646466353239633165333538626663626163656161646338 32656664336636613734666638653633353439623630643531393436343039376161396335336635
30353961373761626261646565333830383235386331356532663536313335353835333032326635 62646432356463623266323061366663656163626535343735623064386437386338656363343235
31313836323937366261663939353035386264393839663139623661663139336163383232336165 30613431313035313236333666373861323166636338646361363466323834313633656231616165
33333137386163373635613237333432653431633362343236643963636162353632353534623361 31643439356565313531613734623439383937383835383866326164373633626662663536383234
66333534623330323439373238346565613165326336333030656536353730373162323930353234 32323030346335623166653063366533663866383736333561656463333566616631333165653038
30653732316561303934373238366366376135383036383632623836353430643462316139613562 35386531346561656663366535663565323234386361306633336136663033376264333539646136
64343462626433636433656139616534373635313236326338386438366133363934613361613437 34323233356330343065383335366362353165633736323862396165626337313333666164396262
61343061646362343363663966343834643939376233653464373237326133656234303164336461 33343034656261336630646464303266656137356434383738383738336235386236353664356337
63613763396363336334313866656431363835656164396532366231663739613333343935383232 61356264663231653637356265343930626430386166303333303437386333623464386363653939
33616233376562346637623162333764643663663637346332656337333865626535303363336638 33376431663539386331633830623363303636313537636465366130353338386430626433323332
63386562616532623135656532386538383664396632626635373832366463366564623732636538 35393533303436343138303934366632626365373635636661386639643431333463303466656633
66393532313631646663373839653337653230346165373338343166393936306633656265323430 38326436376134613931643563396261353638363637363364666631643632343633373731663837
32653861616362666632643063663536383437633533376437616135336538383932326138656565 32663233343463666234663931623962643932613033343561393366303563653637646137376162
61306534613262323230616364613463623062386565653036663861373933353562353364663433 38653330376131306332626532626539653433623430383262636531653864333665373962323532
30666535383461653033653638303935616465666339323962393933333666313136646663626138 36386636336264666664353033323061363165373565396231353637323837346532633666636266
62373661326534613731346466386162316232646634323765326533613034366663366265656435 34376566386230613633313231613331346665373165323638633966623361376334633139393534
35616139653966393135646637343063383036646436616362646132623638366435356431333634 36633935383362313932666464393137366537636632313431663935316166323833366530643437
38626265653662383135346433323131366564626562636338656432623561396139623532636361 64616262666162326361306462306430653536346333666363616530393134323237343963336431
33333234316535623262663532636436306437643434303366656262386434356139643662656636 37373532363862653666646135383762376133393433303762373362313466353732333935373866
33613439653562636434653439653265336435373231653538383336663561343733363231653936 36386561343234663663633931616632373933383866346534636633346138303236613438386665
34306161646266626565303938616463353731386236343466663463363264373763643533636530 38633364353236643439326664663939336639336562613538363363303936346566346163633436
32313936356139646539353233666131333139303835376262303061313831623138643362363966 38626265643833643432663166393132323330393466633736663236663830636132626237613166
35646434333665626638633034323763343132646230313433336535663735393736313838373463 37323431306636343565356261333636353739313763663266383633613363633935313033646333
63633232623538343632396664636435396538393635356539323662356363396631333263373731 64613434633262383162393662626461616336356563326139356136313931636132306662373861
64333833383336373733353932396337623937373061636239356261313363316163356434653461 36383761396666363239353635666666646233626635613830323332363136356135363163306463
33363436316165633436633238356662633166373065613338633638363266303838333765353536 61393965383632613734356230366631306462323163343065643331343738383762633065663237
35646265616562313530333431313737393635333230636331306564636336386638356633336132 39636534623231366635623239316537306461306330373565633731376263316165653361643031
30626432333065633864346533333632306136333339363964383033616230383430386139636630 61343334366634373238303263393665623836366139313661636466663034383934376464356163
39643337633533643830386138353034613830346165613037343166396238366238346135396636 34646234643432376138663131363533373138313763616264353834303430636339396163613065
35333930396462303736306530353939366561313837613166653331623034343538396464653337 65376661323936656234303935613633306363623662666236653961323564373333653536323937
38613134346663636438363230303332363339326139653263303230643833323261326337646264 34353962636638393664313539666565663738613966383133646161336338313935343730653561
34353365663439653538663835373435383764633733353163336536616665393763366564626137 39643438333234646534316565653864376363386439363838363738386533636638663138643866
30613439356534663237346262386435333038366633373662616266306461333536356239666439 66356266346562323535313934356262353330616662636232656230346263316566623937326233
66323236326130336232306439613334313134316162653665326331333661343763373532303637 39663362373162376565303538623734316463646361326634373038313236663838656664633662
36316134366433623839323535303331623431346633613432346631303266643430663834353234 66636537333837616331346665623338306131386161666435343362316130353034616164643064
36616663383630663164303165643930343930303630353437313837376537313862303964633232 64663638353361616438643431633263643133383164646166623833383838626335393837373437
62363036663164303037376163306464323665383339333364386265626234663936623739303464 62313431646434656466386564323037333662386636636361396635633662383265646332316236
39336137353361653634306634613465363935633764323733656162366633353532656162613733 61643239306430306331323137333663626633323961366561313730626462663630643734623736
30633661303936313738346432303135396138346133323331616661343135613664616164666137 36613339356539396265643061323030323530323439313034393134303132333265363934643436
61366666333132303364353361323536663665373861643134663963353639313866373335666437 63363437323334646537353335303532353666363362356163346334633638633936313936393336
66373630336366313437653763393033616231396564363363396431363263323565313762623264 32643438323132623261336362396135616364613461376338336261373535383134666339653464
31303434393565336237326635383438383331323266336539333063613938306162343430313434 36343637326431343639336237363239376661653439613462343839326331376236613766333237
62353863666165336434646261303862623334633636653235323730636238366633633838616335 63623565626464376533636263623730343065393166636630343035653466313539316230346532
66376432626432373337376438383962336362613963333161656331313732363565653238613130 39653164383839653034383362336662323833656632396262623766333234313835386535393661
38656661653663363537373064363864646438303139363739366332633738653462663436343966 36653935323066643130373636633630336335396430316261616132663066373432643363386563
64326634323439366535343537613238366235386439643331656332306338383836616564333536 39646337316463346539366566373763333133366435613433613764386430666439656136613265
63643331666336663061323633353733386631316639633265613836636663386331326665633030 66663735393166313438633665393465316336336437326337336330353838373965343535333430
65313034316462316532313065633965636330633830343139313064653566343639333034613264 30323833393962646535616461613331363965343734313636376531393934396139326438343531
35663464313431306431646439333066303738653366383762663363666333646163303365313739 31366437643464343464356337633137303563656130313361653465383532643263383830353139
65643638613335333165366363323535666532376465343535386530346531323137626562393137 34303965326562656132623862613935666137376161623735653662373261633035653037666362
61613830323432623762613532623435333765643965616661653534333964306565353931386539 65313934333963623431386636613630363564613231353933366436366134376337666336323739
32636565313462353337316532643937306162663437313034616634663137356235643930623862 63653565623538663366376262373731303433396638333732643834313430653632313737316435
31393263613831646561366636366165336335616134353663656138626262656561343330326234 65363462653561343130643837383266393438623866643136623666373764323363646533333966
61646134303138623931373035396530653064363233313365373437646335656638363238316438 30373665356237656639323132373731313365636161393934346665656561356562363036326161
35363138373938313939333737353239396330356334306234653230313539366135633630643535 36663566303530356537636238383439376435316561613466666538356436343663663336623765
36303063323763656330373733653138353065316235333338383061623261343934666532393939 32306536356334623061383965633338633466633931356330323965373065646135623366613636
63316466316663326163633536333462373632653665663636363137303336636531336663326432 39653065343433323231663261626262313634656631376161646562636334653736363863306462
62646261303364646230376335376563376230613137386234633937366665626236396161336165 64643936393661323237336533653566316264336537386630366562353862633462623533623839
39363065613636353733373530636430333439333130346138323565303264376663633263373335 32633436323031366230616664373136313639636266333538323062323231623634643931376234
33646533376665353865336333353531393734343564663933636435323733616237313534353163 36363666666137656230633430333635616362356330653162363163323961653062383334363330
36386233353939666238653131306465646263626264343265303830626130366234306636383361 61636432646566346239386638306663346233613866336434376336666164373662303964363766
66653762326432633237623066363638343630666234656466356131306334623132653339656165 64636136346365396236656238323630346534363966363930613264316161383933313766313032
65633136316530386665333235343264303235643761643837616235613530666461363166626363 32343663626139303133626462366438396463643433656437386264323330363464373866323466
32383937366534346138653337653764323566373962663062393262356266303738313139393462 64396333326562363063353236373831616661373861633437303932373333343535376639636163
37353439643966336463396363316562336662336338633261636365323232666534383763333333 30316661303266376536303364346461306563663232643633316334393832316664363231633764
33313966343230636464636538663666356637663036323038663062356161346461393866646163 66653962663064646236353566613935396532373364353938336266613233633065646463663639
39396235323631636236343466343063353033363538663430366432346535623539333631306239 34393334323862336531323832313637623565393633316431613639396561353737343134613434
31643738613164396266616362396536333330363432333865633239336632343930346535616562 31363465663364366262373236616639363665653165373561346430303432316565333237326138
34373763666530393261376538383664313630396435373065376362616135633931383766326566 34626130373436336161636632666331653762656463323764646536613132303062643965616235
64353862613434316532383037626266366437646137643435323136376362653031343139613234 31383839383632643463363365663133373637613938393535346335393630666566396137303365
61303636333464373631323534323265646236393665623239616330376638396437393863646266 39623762383165616530333035393736663666333739356232373137333137653763386637363239
30383632643336643236653332653639653065363337303665623034646566333166353930663537 35323536373566326432333834666135663463343330316433376435633766663139656137626539
34303563326636383466653438303238393731333839303832316431353864333163333937633832 39396437333833326665633037653732366335376439626565326339313037316432376438353539
66306533623961386531636337333035663336396162373439396335643930383531363031366237 64666634646333343934343966383461386530653934396264633262383165666663643539343435
33353139663035326533643432613966333231666437333635636539356430353233633331393134 39373665393834663137346133346439303766646130626437376136383964363138313663656239
36633737633631323737383033666233333061306332616331653536636233663031353538396335 65636334356334613933373335356130373833323634363330333337623566363038353366356133
61336532623539623838663539326366306531643063323763393762633764383435346161386636 62636362613737343635346236633530633033313431376439656565343662636535383762376162
32383837353939633831663661613437383533353564663865373539363064376436356437613631 35303637336433646531363137623731383663623035653164653232363533316437376436303238
39653235313232383839316633313736373165363939613930323835643264623331343663336333 39363630323466353633343166393038623239626632333135623230393062343431353231383961
32663366373166343339666636666331623064363039613933373834636437303336363565623231 35383761613566613934636633343361613133626536316637323631386431346232663031396236
643264663362373833376333363461396566 64306261666536303664343662396464343031383036326139633863633237656466373764656533
64383037343063643563306133656137663162616637653131373836303636323930323232653834
61623732336561343331633364396637343138363266336134316135663762393263333637363630
33633964666262396361343832303033373662386231333531333064373430666435303762363764
65383332313330386231663966396532396232623935353162396431613034643538393939373835
63363561363863393737353730336564323633663735346138613562616236353631393739636637
66633234303965303734323665303333633663353936363933323731656464626337343337623433
62343666356562613964653662363434383563343636386137353365393537333735623934623237
38393664636634633764333936613566346465663538613532393265376662663663656632323565
36366539363266663338306237306563663133656162656566643466643138666462643237383661
36326436373438373730626363396563376538313731323532373330366136656535353463396336
3634336533353830663239353138313336623131353063313538