package  tg 
 
import  ( 
	"context"  
	"errors"  
	"fmt"  
	"sort"  
	"strings"  
 
	"go.uber.org/multierr"  
 
	"github.com/gotd/td/bin"  
	"github.com/gotd/td/tdjson"  
	"github.com/gotd/td/tdp"  
	"github.com/gotd/td/tgerr"  
) 
 
 
var  ( 
	_ = bin .Buffer {} 
	_ = context .Background () 
	_ = fmt .Stringer (nil ) 
	_ = strings .Builder {} 
	_ = errors .Is  
	_ = multierr .AppendInto  
	_ = sort .Ints  
	_ = tdp .Format  
	_ = tgerr .Error {} 
	_ = tdjson .Encoder {} 
) 
 
 
type  InputUserClassArray  []InputUserClass  
 
 
func  (s  InputUserClassArray ) Sort  (less  func (a , b  InputUserClass ) bool ) InputUserClassArray  { 
	sort .Slice (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputUserClassArray ) SortStable  (less  func (a , b  InputUserClass ) bool ) InputUserClassArray  { 
	sort .SliceStable (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputUserClassArray ) Retain  (keep  func (x  InputUserClass ) bool ) InputUserClassArray  { 
	n  := 0  
	for  _ , x  := range  s  { 
		if  keep (x ) { 
			s [n ] = x  
			n ++ 
		} 
	} 
	s  = s [:n ] 
 
	return  s  
} 
 
 
func  (s  InputUserClassArray ) First  () (v  InputUserClass , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [0 ], true  
} 
 
 
func  (s  InputUserClassArray ) Last  () (v  InputUserClass , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [len (s )-1 ], true  
} 
 
 
func  (s  *InputUserClassArray ) PopFirst  () (v  InputUserClass , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [0 ] 
 
	 
	copy (a [0 :], a [1 :]) 
	var  zero  InputUserClass  
	a [len (a )-1 ] = zero  
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
 
 
func  (s  *InputUserClassArray ) Pop  () (v  InputUserClass , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [len (a )-1 ] 
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
 
 
func  (s  InputUserClassArray ) AsInputUser  () (to  InputUserArray ) { 
	for  _ , elem  := range  s  { 
		value , ok  := elem .(*InputUser ) 
		if  !ok  { 
			continue  
		} 
		to  = append (to , *value ) 
	} 
 
	return  to  
} 
 
 
func  (s  InputUserClassArray ) AsInputUserFromMessage  () (to  InputUserFromMessageArray ) { 
	for  _ , elem  := range  s  { 
		value , ok  := elem .(*InputUserFromMessage ) 
		if  !ok  { 
			continue  
		} 
		to  = append (to , *value ) 
	} 
 
	return  to  
} 
 
 
type  InputUserArray  []InputUser  
 
 
func  (s  InputUserArray ) Sort  (less  func (a , b  InputUser ) bool ) InputUserArray  { 
	sort .Slice (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputUserArray ) SortStable  (less  func (a , b  InputUser ) bool ) InputUserArray  { 
	sort .SliceStable (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputUserArray ) Retain  (keep  func (x  InputUser ) bool ) InputUserArray  { 
	n  := 0  
	for  _ , x  := range  s  { 
		if  keep (x ) { 
			s [n ] = x  
			n ++ 
		} 
	} 
	s  = s [:n ] 
 
	return  s  
} 
 
 
func  (s  InputUserArray ) First  () (v  InputUser , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [0 ], true  
} 
 
 
func  (s  InputUserArray ) Last  () (v  InputUser , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [len (s )-1 ], true  
} 
 
 
func  (s  *InputUserArray ) PopFirst  () (v  InputUser , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [0 ] 
 
	 
	copy (a [0 :], a [1 :]) 
	var  zero  InputUser  
	a [len (a )-1 ] = zero  
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
 
 
func  (s  *InputUserArray ) Pop  () (v  InputUser , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [len (a )-1 ] 
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
 
 
type  InputUserFromMessageArray  []InputUserFromMessage  
 
 
func  (s  InputUserFromMessageArray ) Sort  (less  func (a , b  InputUserFromMessage ) bool ) InputUserFromMessageArray  { 
	sort .Slice (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputUserFromMessageArray ) SortStable  (less  func (a , b  InputUserFromMessage ) bool ) InputUserFromMessageArray  { 
	sort .SliceStable (s , func (i , j  int ) bool  { 
		return  less (s [i ], s [j ]) 
	}) 
	return  s  
} 
 
 
func  (s  InputUserFromMessageArray ) Retain  (keep  func (x  InputUserFromMessage ) bool ) InputUserFromMessageArray  { 
	n  := 0  
	for  _ , x  := range  s  { 
		if  keep (x ) { 
			s [n ] = x  
			n ++ 
		} 
	} 
	s  = s [:n ] 
 
	return  s  
} 
 
 
func  (s  InputUserFromMessageArray ) First  () (v  InputUserFromMessage , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [0 ], true  
} 
 
 
func  (s  InputUserFromMessageArray ) Last  () (v  InputUserFromMessage , ok  bool ) { 
	if  len (s ) < 1  { 
		return  
	} 
	return  s [len (s )-1 ], true  
} 
 
 
func  (s  *InputUserFromMessageArray ) PopFirst  () (v  InputUserFromMessage , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [0 ] 
 
	 
	copy (a [0 :], a [1 :]) 
	var  zero  InputUserFromMessage  
	a [len (a )-1 ] = zero  
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
 
 
func  (s  *InputUserFromMessageArray ) Pop  () (v  InputUserFromMessage , ok  bool ) { 
	if  s  == nil  || len (*s ) < 1  { 
		return  
	} 
 
	a  := *s  
	v  = a [len (a )-1 ] 
	a  = a [:len (a )-1 ] 
	*s  = a  
 
	return  v , true  
} 
  
The pages are generated with Golds   v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds  is a Go 101  project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1  (reachable from the left QR code) to get the latest news of Golds .