  | 
              
	              
	                
  
    |   | 
   
  
    
        
        WinApp C#  จากโค้ดประมาณนี้ ผมอยากวิธีให้มันเขียนให้น้อยๆลง กว่านี้ ได้ไม๊ครับ     | 
   
  
    |   | 
   
 
 
 
              
  
          
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 เวลาผมเขียน winapp ผมไม่เขียนให้มันผูกกัน ให้ยุ่งยากครับ 
แต่ ผมจะใช้ list เก็บ form pointer  แยกเป็น form ไปเลยครับ 
เวลา create new form ก็แค่ส่ง พารามิเตอร์ เข้าไปในแต่ละ form 
ทำงานอิสระ แยกกันไปเลย                        
               
               | 
             
            
              
			                
  ประวัติการแก้ไข 2019-06-27 08:27:07              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 08:24:06 | 
                        By :
                            Chaidhanan | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 @TOR 
 
ปัญหาของคุณผมเคยตอบไปเมื่อหลายปีที่ผ่านมา ณ. www.greatefrirnds.biz (ไม่แน่ใจว่า ผมเขียนถูกไหม?) 
ตอนนั้นถ้าผมใส่สูทรผูกไทร์ เป็นผู้ดี ความคิดเห็นของผมก็ยังอยู่ 
แต่ถ้าผมใส่กางเกงในตัวเดียว/บางครั้งก็ไม่ใส่ และออกมาเดินเพ่นพ่านนอกบ้าน (เขาลบทิ้งทันที) 
--- ตอนนั้นคนที่ถามเขาใช้ Visual FoxPro  มา Call .NET Framework 4.x) 
 
ผมจำไม่ได้ว่ากระทู้ไหน? และจำไม่ได้ว่าตอนนั้นผมชื่ออะไร? +55555 
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 10:20:50 | 
                        By :
                            หน้าฮี | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 Code (VB.NET) 
    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim db As New dbBigDataContext
            Dim kUnit = db.Units
            Dim frmUnitCode As New BasicCode2(kUnit)
            frmUnitCode.Show()
        End Sub
    End Class
    Public Class BasicCode2
        Private kTargetTable As Data.Linq.Table(Of Units)
        Sub New(ByVal kTableName As Data.Linq.Table(Of Units))
            kTargetTable = kTableName
            Call LoadData()
        End Sub
        Private Sub LoadData()
            '/// ตรงนี้ยังติดปัญหาเรื่อง การเปลียนค่าชื่อตารางทีต้องการ ในที่นี้คือ Units เป็นอืน ๆ เช่น Categories , Colors ว่าจะทำอย่างไร ///
            Dim kBasicCodes = From k In kTargetTable Select k.UnitCode, k.Description
                              Order By UnitCode
            'code C R U D
            dgvBasicCode.DataSource = kBasicCodes.ToList()
        End Sub
    End Class
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 10:39:25 | 
                        By :
                            หน้าฮี | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ดูคห 3 ครับ                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 13:19:13 | 
                        By :
                            Chaidhanan | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ลองส่งเป็นค่าที่จำเป็นไปที่ form นั้นไหมครับ 
จากหน้าจอที่ให้มาก็ส่ง 
ข้อมูลของ row ที่จะแก้ไป  (อาจส่งไปเป็น datatable / dataset / datarow / array ไปก็ได้) 
แล้วส่ง ชือ table ไป 
 
ปุ่ม save ก็แค่เขียนคำสั่ง update ชื่อtable where ตาม id 
สั่ง execute ก็น่าจะได้แล้วครับ                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 14:01:05 | 
                        By :
                            fonfire | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 "ยังยืนยัน นอนยันให้ไปอ่านเรื่อง OOP จากนั้น ก้ไป Dapper หรือ ไม่ก็ EF ลากวางเลิกได้แล้ว" 
 
หรือไม่ก็ตัวอย่างบางตอนนะ สร้างโปรเจ็คชื่อ Vol.SampleForm 
 
แล้วสร้างฟอร์มชื่อ frmBase หน้าตาตามนี้ หรือไม่ก็ได้เด้อ 
 
  
 
 
โค้ดข้างใน 
 
Code (C#) 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Vol.SampleForm
{
    public partial class frmBase : Form
    {
        private string childObj;
        public frmBase(string _childObj)
        {
            InitializeComponent();
            this.childObj = _childObj;
            this.Text = _childObj;
            this.label1.Text = _childObj;
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            this.button1.Click += new EventHandler(Save);
        }
        private void Save(object sender, EventArgs e)
        {
            string objectToInstantiate = "Vol.SampleForm."+this.childObj+ ", Vol.SampleForm";
            var objectType = Type.GetType(objectToInstantiate);
            var instantiatedObject = Activator.CreateInstance(objectType) as ITestClass;
            // set a property value
            instantiatedObject.Name = "Test Name";
            // get a property value
            var name = instantiatedObject.Name;
            // call a method - this outputs "My name is MyNewTestClass"
            //Console.Write(instantiatedObject.DoSpecialThing());
            MessageBox.Show(instantiatedObject.DoSpecialThing());
        }
        private void button2_Click(object sender, EventArgs e)
        {
            string objectToInstantiate = "Vol.SampleForm." + this.childObj + ", Vol.SampleForm";
            var objectType = Type.GetType(objectToInstantiate);
            var instantiatedObject = Activator.CreateInstance(objectType) as ITestClass;
            // set a property value
            instantiatedObject.Name = "Test Name";
            // get a property value
            var name = instantiatedObject.Name;
            // call a method - this outputs "My name is MyNewTestClass"
            //Console.Write(instantiatedObject.DoSpecialThing());
            MessageBox.Show(instantiatedObject.Save());
        }
    }
    public interface ITestClass
    {
        int Id { get; set; }
        string Name { get; set; }
        string DoSpecialThing();
        string Save();
    }
    public class Product : ITestClass
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string DoSpecialThing()
        {
            return "My name is Product";
        }
        public string Save()
        {
            //Code บลาๆๆๆๆๆๆ
            return "Save Product เด้อ";
        }
    }
    public class Unit : ITestClass
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Save()
        {
            //Code บลาๆๆๆๆๆๆ
            return "Save Unit เด้อ";
        }
        public string DoSpecialThing()
        {
            return "My name is Unit";
        }
    }
}
 
 
อีกนิด 
สร้างอีกฟอร์ม คือฟอร์มที่จะเรียกใช้ชื่อ frmMain ก็ได้ 
และลองสร้าง Button 1 อัน แล้วโค้ดภายในก็ประมาณนี้ 
 
Code (C#) 
 private void button1_Click(object sender, EventArgs e)
        {
         
            var frm = new frmBase("Product");
            frm.Show();
            
            frm = new frmBase("Unit");
            frm.Show();
        }
 
 
 
แล้วลองรันดู  
ถ้ายังไม่ตรงวัตถุประสงค์ ก็ขออภัยด้วยเด้อครับผม  
 
หรือไม่ก็เขาไปอ่านที่นี้ก็ได้ครับ  
 
https://jeremylindsayni.wordpress.com/2019/02/11/instantiating-a-c-object-from-a-string-using-activator-createinstance-in-net/                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 14:52:47 | 
                        By :
                            บัญดิษฐ | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 เสริมอีกนิดครับ เดียวจะไม่ใช่ OOP  
แก้ไขหน้า frmBase นิดหน่อย 
Code (C#) 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Vol.SampleForm
{
    public partial class frmBase : Form
    {
        private string childObj;
        public frmBase(string _childObj)
        {
            InitializeComponent();
            this.childObj = _childObj;
            this.Text = _childObj;
            this.label1.Text = _childObj;
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            this.button1.Click += new EventHandler(Save);
        }
        private void Save(object sender, EventArgs e)
        {
            string objectToInstantiate = "Vol.SampleForm."+this.childObj+ ", Vol.SampleForm";
            var objectType = Type.GetType(objectToInstantiate);
            var instantiatedObject = Activator.CreateInstance(objectType) as ITestClass;
            // set a property value
            instantiatedObject.Details.Name = "Test Name";
            // get a property value
            var name = instantiatedObject.Details.Name;
            // call a method - this outputs "My name is MyNewTestClass"
            //Console.Write(instantiatedObject.DoSpecialThing());
            MessageBox.Show(instantiatedObject.DoSpecialThing());
        }
        private void button2_Click(object sender, EventArgs e)
        {
            string objectToInstantiate = "Vol.SampleForm." + this.childObj + ", Vol.SampleForm";
            var objectType = Type.GetType(objectToInstantiate);
            var instantiatedObject = Activator.CreateInstance(objectType) as ITestClass;
            // set a property value
            instantiatedObject.Details.Name = "Test Name";
            // get a property value
            var name = instantiatedObject.Details.Name;
            // call a method - this outputs "My name is MyNewTestClass"
            //Console.Write(instantiatedObject.DoSpecialThing());
            MessageBox.Show(instantiatedObject.Save());
        }
    }
    public interface ITestClass
    {
        TempDetails Details { get; set; }
      
        string DoSpecialThing();
        string Save();
    }
    public class Product : ITestClass
    {
        public TempDetails Details { get; set; } = new TempDetails();
        public string DoSpecialThing()
        {
            return "My name is Product";
        }
        public string Save()
        {
            //Code บลาๆๆๆๆๆๆ
            return "Save Product เด้อ";
        }
    }
    public class Unit : ITestClass
    {
        public TempDetails Details { get; set; } = new TempDetails();
        public string Save()
        {
            //Code บลาๆๆๆๆๆๆ
            return "Save Unit เด้อ";
        }
        public string DoSpecialThing()
        {
            return "My name is Unit";
        }
    }
    public class TempDetails
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}
 
 
หรือไม่ก็ง่ายก็ตามคุณ FONFIRE                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 15:15:07 | 
                        By :
                            บัญดิษฐ | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 คือที่พยายาม ยึดรูปแบบการเขียนโปรแกรมง่ายๆ เพราะว่าในแล็บ ไม่มี IT ครับ 
อย่างน้อยถ้าผมลาออกไปปลูกผัก ก็ยังพอจะมีคนมาจับงานแทนได้ 
 
ผมจึงลดโค้ดที่ต้องใช้ ความซับซ้อน หรือ ผลักงานที่ซับซ้อนมากองไว้จุดเดียว ไม่ว่าจะสร้าง ไลบรารี่ขึ้นมา หรือสร้างคลาสขึ้นมา 
 
อีกอย่างคือ เวลาผมเอาโค้ดไปแจกให้คนอื่นใช้งาน หรือ ฝึกเขียนต่อ เขาก็จะได้เขียนง่าย ครับ 
ที่ผมใช้ datawizard เป็นหลัก เพราะจะให้มองว่า การเขียนโปรแกรมไม่จำเป็นต้องมาศึกษา sql ขั้นสูง 
ขอแค่ตีความต้องการออกเราก็สามารถเขียนโปรแกรมเชื่อมฐานข้อมูลได้ง่ายๆ โดยที่ ไม่ต้องรู้ซะด้วยซ้ำว่า select * from table มันคืออะไร 
 
และโค้ดที่เขียนก็จะพยายาม เขียนให้มันง่ายๆเข้าไว้ สั้นเข้าไว้ครับ 
 
อาทิตย์ ก่อน Auditor มาตรวจแล็บเขาก็บ่น ว่าอยากได้ LIMS ซึ่่งมันราคาแพง 
ทั้งๆที่ หากเราจะเจาะจงแค่ผลแล็บมันก็ไม่ยาก  
แต่คนที่ทำงานแล็บต้องรู้ก่อนว่าการจะเขียนมันควรเริ่มจากจุดไหนบ้าง 
ซึ่งผมอยากจะทำให้จุดนั้นมันง่าย และเรียนรู้ไม่ยากจนเกินไป ครับ                        
               
               | 
             
            
              
			                
  ประวัติการแก้ไข 2019-06-27 15:38:46              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 15:32:12 | 
                        By :
                            lamaka.tor | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 @TOR_CHEMISTRY, ALLS 
 
ถ้าพวกคุณรู้ความจริง พวกคุณจะสงสารผม จนน้ำตาไหลไม่หยุดเลยเชียวแหละ 
 
ผมเป็นพลทหารชั้นเลว ออกรบอยู่แนวหน้า อาวุธมีเพียงจอบและหัวใจ 
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 15:37:37 | 
                        By :
                            หน้าฮี | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ตัวแปร ส่งผ่าน list ครับ จะส่งเป็นค่า หรือจะส่งเป็น pointer ก็ได้หมด 
function callback ก็ส่งผ่าน list ได้ครับ จะส่งไปกี่ function ก็ได้  
แล้ว อ้างอิง ลิสต์ เอา  
อาจจะใช้ตำแหน่ง คู่ 0 2 4 6 ..... เก็บ type ข้อมูล 
ตำแหน่งคี่ 1 3 5 7 เก็บ pointer ของ value 
 
ให้เราสร้าง function callback ไว้ที่ class ที่เรียกใช้ template form  
จะสร้าง กี่ function ก็ได้ list เก็บได้หมด  
 
ใน template form 
เราสามารถ เขียน override Create ได้ จะให้มันรับตัวแปรอะไรก็ได้ 
สร้างตัวแปร private มาเก็บ function callback สำหรับ Save , delete หรืออะไรก็ได้ว่าไป 
 
ตัวอย่างก็ที่ผมส่งให้นั่นแหล่ะครับ แต่ตัวอย่างมันน้อยไปหน่อย                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 16:27:18 | 
                        By :
                            Chaidhanan | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ถ้ากระผมเดาไม่ผิด ความหมายของท่าน Chaidhanan 
น่าจะประมาณนี้ใช่ไหมครับ 
--- อันนี้เป็นการดึงข้อมูล Json 
Code (JavaScript) 
async function doAjax(args) {
    let result;
    try {
        result = await $.ajax({
            url: ajaxurl,
            type: 'POST',
            data: args
        });
        return result;
    } catch (error) {
        console.error(error);
    }
}
//Method 1
const stuff = await doAjax();
//Method 2
doAjax().then((data) => doStuff(data))
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 18:21:40 | 
                        By :
                            หน้าฮี | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 ผมชอบความซุกซนของคุณ TOR 
--- สิ่งนี้หายากมากฯ 
 
ถ้าคุณ TOR เข้าใจในส่ิงที่คุณ บัญดิษฐ อธิบายมา มันก็จบ ณ.วันนั้น แต่ก็ไม่ใช่ ณ. วันนี้(ปัจจุบัน) 
 
ปล. ผมไม่ได้ข้ามแค่ความสงสัย แต่ผมพยายามข้ามความต้องการของคนอื่นฯ                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 18:32:38 | 
                        By :
                            หน้าฮี | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 อันนี้ผมไม่ได้ยอ  Admin ที่นี่ใจกว้างมาก มากเสียจนกระผมละอายใจตัวเอง 
ผมไม่อาย และผมหน้าด้านพอ ที่จะขอโทษทุกทุกคน 
 
ผมเป็นคนที่มีเหตุผลกำกับ 
รู้ดี รู้ชั่ว อะไรควร อะไรไม่ควร 
 
 
กระผมปรารนา อยากจะให้กระทุ้นี้เป็นตำนานของ www.thaicreate.com 
ขอบคุณสำหรับทุกฯท่านครับ ที่มอบความสุขให้กับกระผม 
 
... ของผมมีความหมาย และจะเป็นคุณมากเสียกว่าเป็นโทษ                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 18:43:24 | 
                        By :
                            หน้าฮี | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 @บัญดิษฐ, @fonfire, @Chaidhanan, @TOR 
 
--- ผมมีโลกส่วนตัวอยู่ที่ [email protected] ถ้าคุณอยากจะด่าผมมาได้เลยครับตามสะดวก แต่ถ้าจะชมก็ไม่จำเป็ฯต้องมา 
 
 
ณ. ที่แห่งนั้นของผม มีแต่ได้กลับไป ไม่มีเสีย และที่แห่งนั้นกระผมเป็นสุถาพชน ทุกฯ สถานะการณ์                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 19:01:21 | 
                        By :
                            หน้าฮี | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 โอ๊วววววววววววววววววววววววววววว 
 
งั้นเดี๋ยวขอแก้ CAR ตัวนี้ให้เสร็จก่อนนะครับ 
รอบหน้าจะรื้อ ความรู้ และ โค้ด ใหม่ดูครับ                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2019-06-27 19:53:45 | 
                        By :
                            lamaka.tor | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
      		  
	
     | 
   
 
                 |