[投稿隱藏表單]
名 稱
E-mail
標 題
內 文
附加圖檔[] []
類別標籤(請以 , 逗號分隔多個標籤)
刪除用密碼(刪除文章用。英數字8字元以內)
  • 可附加圖檔類型:GIF, JPG, PNG,瀏覽器才能正常附加圖檔
  • 附加圖檔最大上傳資料量為 512 KB。當回文時E-mail填入sage為不推文功能
  • 當檔案超過寬 250 像素、高 250 像素時會自動縮小尺寸顯示
  • 目前附加圖檔使用量大小: 25090 KB / 51200 KB
  • 程式碼可使用 [code][/code] 以 google-code-prettify 標亮 (程式自動判斷語言類別)
  • 本版因各種原因有鎖關鍵字,請至字詞黑名單一覽查詢。
  • 這裡是貼圖版程式 Pixmicat! 的相關使用問題回報討論版
  • 本版不是測試版!請自重勿隨意推舊文,謝謝合作

主題一覽
3504: ImageMagick安全漏洞 (0)3488: 無標題 (1)
3503: 適用於 8th.R4 的另類 mod_adminenhance? (0)3486: 請問架一個記憶體需要多少呢? (1)
3501: ADMIN刪除文章 (1)3484: MySQL 指令問題 (1)
3498: pixmicat 5 升級至 8 (1)3475: 有關升級 (6)
3497: pio 8.0 管理員密碼 (0)3473: 無標題 (1)
3496: Ninja (0)3470: 關於 Pixmicat網頁 (2)
3494: 關於錯誤訊息 (1)3468: 無標題 (3)
3493: 密碼錯誤 (1)3466: Pixmicat!-PIO 8th Release.4 (1)
3492: Pixmicat正式URL掛了? (0)3463: 美國知名程式碼代管網站GitHub (0)
3490: 有報錯但不影響運行 (1)3461: Pixmicat!-PIO 使用MySQL資料庫出現問題 (3)
檔名:1308458805599.jpg-(122 KB, 600x600) [以預覽圖顯示]
122 KB突發奇想 名稱: Cecil [11/06/19(日)12:46 ID:0EYr5GWY] No.3093  [回應]
如果裡祭用這樣的構想來架,以最便宜的方式分流
有沒有可能?
雖然SCRIBE 說過要用家每次上傳圖片到2台主機要花上傳圖片的人2倍時間, 不過實際上是否可行. 想問一下意見

構想1. 可以把PHP 運算分流
有回應 1 篇被省略。要閱讀所有回應請按下回應連結。
無標題 名稱: 無名氏 [11/06/20(一)22:46 ID:sr2PqlGY] No.3095   
共享SQL+分散是應該OK...
存取同一個SQL..然後後面加參數去做控制

不過要快到不如圖片檔用FTP的方式存檔(PIX>FTP)
FTP端要鏡像多少根本無所謂
最後RAND取出那台電腦都會有檔案

不過資料量有大到需要這樣@@?
無標題 名稱: 無名氏 [11/06/21(二)00:55 ID:5RQGgMEI] No.3096   
直接用隨機上傳到不同伺服器不就好了
無標題 名稱: Cecil [11/06/22(三)15:03 ID:JESEisi6] No.3099 6推  
 檔名:1308726215305.jpg-(241 KB, 600x600) [以預覽圖顯示] 241 KB
構想3: CPU 分流
由於現在有幾位版主都在家中架設主機
而外國的便宜空間商都限制CPU使用.
不知道這個構想行不行?
無名氏: 構想行不行是要看誰來開發吧... 即使我說行, 你開發的出來嗎? (1d2J9p7. 11/06/22 18:52)
無名氏: 同意.. 而且pixmicat還沒有這麼大的用戶吧 (eRdYKTt. 11/06/23 01:10)
無名氏: 應該沒必要做什麼分流,找個好一點的伺服器比較實在 (eRdYKTt. 11/06/23 01:11)
f2: 之所以會要這麼做,是因為只能用免費空間。如果把裡版架在自己家,大概沒幾天就被抓去當業績了 (tHB3I6q2 11/06/30 11:39)
f2: 而祭典裡的流量一個月大概1T左右,放上免費空間一天就爆了,所以非搞些不一樣的做法 (tHB3I6q2 11/06/30 11:40)
f2: 事實上這種流量大部分付費空間也是一天就爆.... (tHB3I6q2 11/06/30 11:41)
無標題 名稱: scribe◆ScRBg4WCkk [11/06/28(二)22:35 ID:Ky1AHTfU] No.3101   
1.
這感覺太複雜了。
有點像是兩個獨立的網站,共用資料。一方面要記錄圖檔在哪個site,沒有通透性。
而且萬一有一個掛了整個機制就毀了,不推薦。

2.
直接使用CDN吧,圖檔流量分散交給專業的來作就對了。

或者你自己架幾台Replication sites,定期與Primary site作resync的動作,
確保每一台上面的圖檔都是相同的。而Primary site就跟一般使用無異。
使用者的圖檔要求則利用Round-robin DNS的方式隨便挑一台。
只是如果有站台掛點了就比較麻煩(特別是Primary site),可能得加上Load balancer的概念。
參見伺服器負載平衡的做法吧。

3.
比1.單純,就是要分散CPU time。
不過分出去的生成預覽圖所用的CPU不知道有沒有整個版面的30%。
不知道你去呼叫http://quickthumbnail.com/再把預覽圖抓回來怎麼樣
不過你得先等這個網站抓完你的圖才能產生預覽圖,所以會有delay。
給使用者的感覺可能會比較久一點。
無標題 名稱: f2 [11/06/30(四)11:36 ID:tHB3I6q2] No.3103 1推  
我當時的做法是一張圖片分往後面三台圖片主機,顯示時隨機產生url,所以只要主機不一起掛就好。缺點是cpu分不開,而這才是免費空間最容易被鎖的地方
分散製作縮圖事實上cpu用量減少的相當有限

構想一我覺得比較難搞的是共用db的部分,畢竟免費空間才不會讓你做這種比較進階的功能,不然他們還混什麼?而用php處理的話,處理同步產生的Request數量可能不會佔到太多便宜。
◆ScRBg4WCkk: 如果限定得用免空作分流的話,要多繞好幾圈才能達成。我的回應是沒有考慮到只用免空的方式 (MCV.Ojpo 11/06/30 12:53)
無標題 名稱: f2 [11/06/30(四)11:54 ID:tHB3I6q2] No.3104 9推  
事實上,我覺得pixmicat會吃這麼大cpu是遠超出預期之外,php只是生成靜態網頁30頁就可以消耗180M的記憶體有點誇張,而且每次更新事實上有必要更動的都只有少部分的頁面而已。
如果有模組可以限定超過10頁的留言就進入Archive Mode,不再列入排序中(生成固定編號之靜態網頁),限制住必須更新的頁面數量的話,我想應該可以降低不少cpu用量。
ericpony: 可以調整 STATIC_HTML_UNTIL 的值 (jHBWQJm. 11/06/30 12:21)
ericpony: http://pixmicat.wikidot.com/pmcuse:manage (jHBWQJm. 11/06/30 12:21)
◆ScRBg4WCkk: 我想這跟PHP的記憶體管理機制有點關係。程式就只是迴圈產生頁面內容然後寫入。很明顯回收不是太有效率 (MCV.Ojpo 11/06/30 12:56)
◆ScRBg4WCkk: 同上,所以有STATIC_HTML_UNTIL。看來新版本這個參數應該要預設啟用比較好。 (MCV.Ojpo 11/06/30 12:57)
f2: >ericpony:確實這個有幫助,畢竟會翻到10頁前的人少的多,不過也代表如果有人砍站會變的更吃重 (tHB3I6q2 11/06/30 13:03)
f2: 如果生成固定頁面Archive起來,不只是貼文有幫助,也不會喪失讀取效能,還可以順便解決推舊文問題 (tHB3I6q2 11/06/30 13:07)
無名氏: Archive Mode 似乎就是目前2ch的做法, 但目前PMC應沒有掛載點能支援模組實作出此功能 (5SWP1Nvc 11/06/30 22:41)
ericpony: 還是建議在pixmicat.php的主switch前面增加一個掛載點, 讓模組來決定要進入 SW (5SWP1Nvc 11/06/30 22:46)
ericpony: 還是直接輸出ModulePage (須限制最多只能有一個模組掛載在此處). 如此可大幅增加擴充彈性. (5SWP1Nvc 11/06/30 22:47)
無標題 名稱: Cecil [11/06/30(四)23:14 ID:N8xXtbEQ] No.3105 12推  
>>No.3104
其實我現在這樣修改了
主機1 -> 只是打開回應時候使用PHP,
主機2 -> 把圖片轉換, 寫入DB 資料, 使用FTP 上傳圖片, 轉變後的HTM跟DB檔回主機1
圖片主機1 ->接收主機2的圖片檔
圖片主機2 ->接收主機2的圖片檔
圖片主機3 ->接收主機2的圖片檔
這樣的話, 很多CPU 工作都會在主機2
實例請到裡壁上的二次裡祭測試
如果以最便宜的租用空間(每月8美金的共享空間)來設計, 不知道大家會是怎樣想?

另外, F2可不可以上傳一次你寫好的FILEIO.FTP.PHP 來參考一下? 我改寫的那個很糟糕的說......
……
f2: 可能的話最好不動到付費空間的理由,事實上是在於如果遇到條子的時候,是可以從付費途徑追到人的,雖然從國 (3zqAADOI 11/07/01 14:26)
f2: 外比較不好追(國外廠商比較不鳥台灣警方),但是可以的話還是不要留尾巴 (3zqAADOI 11/07/01 14:28)
f2: 另外如我前面所述,記憶體的消耗量也要考慮,8USD的VPS可能不會給你很多RAM,要試了才知道,不過 (3zqAADOI 11/07/01 14:30)
f2: 絕對比共享空間好的多...想拿共享空間放祭典,請小心你的CPU Time... (3zqAADOI 11/07/01 14:31)
Cecil: 想問一下, 好像現在我把版面修改, 只在回應時使用PHP, 其實RAM 使用需要多少? (XolwVKdo 11/07/01 16:30)
Cecil: 現在我把生產HTML 跟圖片的工作轉到另一台主機操作, 其實可減多少CPU 使用量? (XolwVKdo 11/07/01 16:31)
無名氏: 不懂,現在的pixmicat就已經是只在發留言的時候會用到php了 (w1Nt0mek 11/07/02 02:39)
無名氏: 要把更動留言後的靜態頁面產生動作搬走幾乎就等於把整個版面搬走了...還是你指的是把資料庫分開來? (w1Nt0mek 11/07/02 02:40)
Cecil: 所有靜態生成的工作都由別的主機2操作, 完成後HTML以及新增文章的SQLITE資料庫傳回主機1 (k.whoiDM 11/07/03 01:42)
無名氏: 如前述,生成靜態網頁的工作幾乎占了所有的CPU Time,這樣等於把整個版面搬走 (lLstgz2g 11/07/03 10:08)
有部分推文被省略。要閱讀全部推文請按下回應連結。
無標題 名稱: scribe◆ScRBg4WCkk [11/07/01(五)00:36 ID:0efDXbGs] No.3106 1推  
>>No.3104
>f2: 如果生成固定頁面Archive起來,不只是貼文有幫助,也不會喪失讀取效能,還可以順便解決推舊文問題
>無名氏: Archive Mode 似乎就是目前2ch的做法, 但目前PMC應沒有掛載點能支援模組實作出此功能
>ericpony: 還是建議在pixmicat.php的主switch前面增加一個掛載點, 讓模組來決定要進入 SW
>ericpony: 還是直接輸出ModulePage (須限制最多只能有一個模組掛載在此處). 如此可大幅增加擴充彈性.

目前可能使用PostOnDeletion,在文章要被刪除時生成Archive。
生成完文章就從系統消失了,自然回不到。

至於ericpony提的這個點權限太大了,僅次於程式本身了。不知道要這種點來做什麼呢?
如果是將後面頁數導到archive的話,倒是可以在PAGENAV(換頁列)那增加一個往archive的連結即可。
雖然目前是沒辦法達到動態插入。或者也沒這個需要,想要自己去archive list看。
就是archive list需要強化一些就是了,分頁方便瀏覽/可刪除之類的。

而且如果只能有一種模組掛在這,又這麼強大的話,一定很難決定是誰要擺在這。
因為每個模組都想掛在這。

這個做法要先作的話應該可以用redirect的方式,任何瀏覽先經過這個PHP,有需要再redirect給PMC。
這樣的話倒是不必加什麼點。
ericpony: 我提案的前提是所謂"這個PHP" 就是pixmicat.php本身, 這樣似乎就只能靠新增掛載點了X (g2p06Tj. 11/07/01 02:11)
無標題 名稱: 無名氏 [11/07/01(五)14:44 ID:3zqAADOI] No.3107 1推  
fileio.ftp.php source
http://k2yr.yaoif2.twbbs.org/up/
設定檔:
define("FILEIO_PARAMETER", serialize(array(0=>array(0=>array("sateurl"=>"http://xxxx/satellite/k2fastival/satellite.php", "transload"=>true, "key"=>"qxxxxxxxc", "geturl"=>"http://xxxxx/satellite/k2fastival/src/satellite-zoka.php?name="),1=>array("sateurl"=>"http://xxxxxx/satellite/k2fastival/satellite.php", "transload"=>true, "key"=>"xxxxxxxxc", "geturl"=>"http://xxxxxx/satellite/k2fastival/src/satellite-zoka.php?name="),2=>array("sateurl"=>"http://xxxxxx/satellite/k2fastival/satellite.php", "transload"=>true, "key"=>"qwxxxxzxc", "geturl"=>"http://xxxxx/satellite/k2fastival/src/satellite-zoka.php?name=")),1=>true))); // FileIO參數 (Satellite)
Cecil: 謝謝 (k.whoiDM 11/07/03 01:43)
無標題 名稱: ◆u66tJhMAWo [11/07/02(六)07:21 ID:zprt4lmI] No.3108 2推  
>>No.3106
如果在"找不到文章"的頁面加一個掛載點呢?

用文章編號 對照archive的文章編號

如果找到相符的archive,echo archive文章的連結
◆ScRBg4WCkk: 通常來說找不到文章的話,那個連結也不會出現在版面上了。所以你要的可能是反過來列出archive就夠了 (7yukOJy6 11/07/03 20:03)
無名氏: 連結雖不會出現在版面, 但常常會出現在google的搜尋結果, 點進去找不到頁面時還蠻讓人洩氣的 (7DnFKbjo 11/07/12 20:32)

認証碼 名稱: Cecil [11/05/27(五)14:02 ID:hLCQgSss] No.3086  [回應]
好像有人惡意用程式攻擊
還有些人輸入認証碼時不相對
是不是有需要加強認証碼系統?
無標題 名稱: scribe◆ScRBg4WCkk [11/05/27(五)14:32 ID:3Pdie2RM] No.3087   
不是我在說,你剛剛就在攻擊。

驗證碼已經有Google的reCAPTCHA啦,很多下載免空都有用的那個。
我想也不需要加強什麼。
無標題 名稱: Cecil [11/05/27(五)14:42 ID:hLCQgSss] No.3088 6推  
>>No.3087
我想2CAT 主機出了問題
我想發圖便自動貼不停了....
而且這版也有時限吧, 我也不可能在短時間發文
剛才跟ROY 說了想問是不是2CAT 有問題
現在已經全刪了.
因為發現用了這RECAPTCHA 後, 足版跟妹版
也發生對不上文字, 還在早上我給攻擊不停了......
RT◆RTphpfqies: 上班時間msn找不到我這樣,以上。 (.m3cFRj2 11/05/27 15:02)
Alica: reCAPTCHA我也經常眼矬看錯,要擋得住攻擊必要的損失吧。 (ipJcYp56 11/05/27 16:56)
Cecil: 問題應該不是1,2次輸入問題, 好像是完全對不上的錯誤, 是不是發生什麼問題? (hLCQgSss 11/05/27 17:10)
Cecil: 而且我的版早上給人洗了一個小時, 不知道是不是有人找出RECAPTCHA 的BUG 了 (hLCQgSss 11/05/27 17:11)
◆ScRBg4WCkk: 人工吧,總有人很閒的。目前OCR好像也沒辦法100%分析reCAPTCHA (3Pdie2RM 11/05/27 22:04)
◆ScRBg4WCkk: 至於對不上我猜是瀏覽器快取的問題吧,SESSION已經更新了,圖卻沒。 (3Pdie2RM 11/05/27 22:05)
無標題 名稱: Cecil [11/05/27(五)22:56 ID:hLCQgSss] No.3089   
>>No.3088
發圖測試
另外圖中那人洗了1.5小時......
我想沒有人那麼....
無標題 名稱: scribe◆ScRBg4WCkk [11/05/28(六)20:24 ID:vQlB8iqU] No.3090 1推  
 檔名:1306585451209.jpg-(264 KB, 1227x7348) [以預覽圖顯示] 264 KB
>>No.3089
這張圖吧。
由於長寬乘起來超過8M,所以會造成PHP執行中斷。
現在的PHP預設值已經是128M了,所以我改了設定。
◆ScRBg4WCkk: 改了一些程式,6th.Release RC。正式版不遠了。 (vQlB8iqU 11/05/28 20:42)
無標題 名稱: scribe◆ScRBg4WCkk [11/06/30(四)10:52 ID:MCV.Ojpo] No.3102 2推  
發現Alica改的meta expires似乎會讓Fx快取舊頁面而且非得Ctrl+F5強制更新才可以看到。

重現情況:
1. 發文/回文
2. 看到更新後的結果 (但這一頁是index.htm)
3. 按下K島選單頁面連結,看到沒更新前的 (這一頁是 /)

雖然index和/根本是同一頁,可是網址就是不同。
把expires改成舊的2000甚至是拿掉似乎就不會快取了。
有些神奇。
Alica: 那就乾脆拿掉好了?真是神奇… (2MNY/7fw 11/07/01 15:19)
◆ScRBg4WCkk: SVN裡已拿掉meta (7yukOJy6 11/07/03 20:05)

無標題 名稱: 無名氏 [11/06/21(二)20:35 ID:kNO1WT5.] No.3097 2推 [回應]
問個很淺的問題
請問有辦法修改背景樣式嗎?
像是換背景圖之類
感謝說明
無名氏: CSS (改mainstyle.css) (zM.cD3YQ 11/06/21 23:57)
無名氏: 我試著成功修改了背景顏色 請問如果要加圖片呢? (UUa9iFTQ 11/06/22 00:46)
無標題 名稱: 無名氏 [11/06/22(三)00:51 ID:UUa9iFTQ] No.3098   
html { background-image: url(bg/bg1.png); background: #F00; color: #800000; }

使用背景圖請問這樣子對嗎
無標題 名稱: 無名氏 [11/06/28(二)21:54 ID:Ky1AHTfU] No.3100   
>>No.3098
你如果要用背景圖就不要用背景色,除非你的圖有去背,而且不是使用預設的並排顯示。

你可以試看看

html { background-image: url(bg/bg1.png); color: #800000; }

模組分享 mod_movepost 名稱: ericpony [10/10/24(日)05:10 ID:jGauA/sk] No.2800 2推 [回應]
http://ericpony.csie.org/test/module/mod_movepost.php.txt

可以在後臺移動文章和討論串(移動討論串首篇就會整串一起移)的模組。
目前測試ok, 版上的強者們有空有興趣的話請幫忙補完和除錯^^b
anacel◆4qjYkMDZ8o: 謝謝, 試用中. (9DH.fByw 10/10/26 21:18)
◆ScRBg4WCkk: 如果在開發模組時遇到API沒有提供的,或需修改的,可以提出修改意見,大家再想想怎麼改 (3yS5G./Y 11/04/17 10:55)
模組分享 mod_bookmark 名稱: ericpony [11/04/17(日)07:03 ID:aH8S2cLc] No.3059 5推  
 檔名:1302995039374.png-(13 KB, 460x382) [以預覽圖顯示] 13 KB
說明: 將萌版和詢問版的M文功能(現已移除)模組化
demo: http://ericpony.csie.org/~boylove/
source: http://ppt.cc/t!k1

Javascript和網頁部份係直接改寫自原本的程式碼
原開發者 Kirur 慷慨提供範例和源碼 謹此致謝
歡迎有興趣的島民繼續改進或改寫本模組^^
無名氏: 好東西耶,謝謝分享 (yW08gOwE 11/04/17 10:57)
◆u66tJhMAWo: 好東西! (ro7Y0B3E 11/04/17 19:30)
ericpony: 更新: 1.消除 iframe 對於 history 的影響 2.修正+"'等字元無法正確儲存的問題 (pstQgZjc 11/04/18 01:07)
Cecil: PONY 有沒有更詳細的解譯? 看了也不知道這模組的用途 (41e29CYY 11/04/19 14:03)
ericpony: 就提供一個介面讓使用者把討論串的網址存在cookie裡, 方便日後快速存取. (Cg3nB8KY 11/04/20 07:36)
mod_opentag (改) 名稱: ericpony [11/06/01(三)18:29 ID:WbwH0hNI] No.3091   
基於 r782 所做的小修改 :P
Source: http://ppt.cc/AMGQ
1. 支援新版 fetchPosts (r710), 增進效率.
2. 修正標籤中有空格時, 標籤雲會出錯的問題.
例如, 假設有個標籤是 "final fantasy",
原本的標籤雲會生成 "final", "fantasy" 兩個標籤,
但因為標籤比對必須100%符合, 所以這兩個標籤都找不到東西.
新版本修正了這個問題.
cookie + delete 名稱: taylorchu◆RXm61rnmYY [11/06/03(五)01:26 ID:1jik7xM6] No.3092   
<?php

function like_afterTopic($topic)
{
return '<b>我喜歡這篇文章 <a href = "misc.php?plugin=like&add=' .$topic. '">[❤]</a> <a href = "misc.php?plugin=like">[歷史紀錄]</a></b>';
}

function like_page()
{
if(isGet('add') && isValidEntry('topic', $_GET['add']))
{
if(isset($_COOKIE['like'][$_GET['add']]))
{
$title = $_COOKIE['like'][$_GET['add']];
}
else
{
$topicEntry = readEntry('topic', $_GET['add']);
$title = $topicEntry['title'];
setcookie('like[' .$_GET['add']. ']', $title, time()+60*60*24*30);
}
return '<p>你喜歡這篇文章: <b>' .$title. '</b> <a href = "misc.php?plugin=like">[歷史紀錄]</a></p>';
}
else if(isGET('delete') && isValidEntry('topic', $_GET['delete']))
{
setcookie('like[' .$_GET['delete']. ']', '');
return '<p>已刪除收藏! <a href = "misc.php?plugin=like">[返回]</a></p>';
}
else
{
$output = '<p>以下是你曾經收藏的文章</p>
<ul>';
if($_COOKIE['like'])
{
foreach($_COOKIE['like'] as $key => $value)
{
$output .= '<li><a href = "misc.php?plugin=like&delete=' .$key. '">[刪去]</a><a href = "view.php?topic='. $key .'">'. $value .'</a></li>';
}
}
else
{
$output .= '<li>尚無資料</li>';
}
$output .= '</ul>';
return $output;
}
}

?>

關於清空版面 名稱: 無名氏 [11/05/16(一)22:54 ID:weiKYyZw] No.3078  [回應]
好像永遠沒辦法清空 囧"

永遠都會剩下 no.1

請問這是什麼問題呢?
無標題 名稱: scribe◆ScRBg4WCkk [11/05/16(一)23:36 ID:6uXiwSVE] No.3079   
不可能清空的,空的話程式會有無法預期的結果。
這也是為什麼初始化會產生 No.1,而常常被當成來自過去的人的發言。

所以不知道你要清空的目的。

檔名:1305394401353.jpg-(488 KB, 1416x1545) [以預覽圖顯示]
488 KB無標題 名稱: 無名氏 [11/05/15(日)01:33 ID:0zlEFVwI] No.3076 2推 [回應]
我想在整個頁面的左上角加上一個CSS選單,
但將code插在模板裡之後,
所有的文章在按下"回應"後,
都會出現錯誤訊息。
是我的code放錯地方了嗎 ...?
看那個錯誤訊息, 第114行什麼也沒看出來 ...
無名氏: 把define("USE_XHTML", 1);改為define("USE_XHTML", 0);後 (0zlEFVwI 11/05/15 03:31)
無名氏: 就沒有出現問題了 (0zlEFVwI 11/05/15 03:31)
無標題 名稱: RT◆RTphpfqies [11/05/15(日)09:41 ID:6xvDruk.] No.3077 1推  
網址中的 "&" 符號要寫成 "&amp;"
無名氏: 了解了, 感謝回答!! (0zlEFVwI 11/05/15 12:48)

【刪除文章】[]
刪除用密碼:
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40]