// Copyright © 2002 Microsoft Corporation.  All rights reserved.
var NB  = -1;
var Ii  =  0;
var B_  =  1;
var _BOUNDS_ = 0;
var _JOIN_L = 1;
var _JOIN_R = 2;
var _JOIN_ALL = 3;
var NOBOUNDS = 4;
var _b_table = new Array();
var wb_base_path = "";

var wb_rfc_1766_lang = "";

function lang_string( in_string, in_scid ){
	this.str = in_string;
	this.scid = in_scid;
}

function _btr( in_OP, in_CL, in_QU, in_GL, in_NS, in_EX, in_SY, in_IS, in_PR, in_PO, in_NU, in_AL, in_ID, in_IN, in_HY, in_BA, in_BB, in_B2, in_ZW, in_CM ){
	this._row = new Array( in_OP, in_CL, in_QU, in_GL, in_NS, in_EX, in_SY, in_IS, in_PR, in_PO, in_NU, in_AL, in_ID, in_IN, in_HY, in_BA, in_BB, in_B2, in_ZW, in_CM );
}
				  	 // OP  CL  QU  GL  NS  EX  SY  IS  PR  PO  NU  AL  ID  IN  HY  BA  BB  B2  ZW  CM
/*OP*/_b_table[_b_table.length] = new _btr( B_, B_, B_, NB, NB, NB, B_, NB, B_, B_, B_, B_, B_, NB, B_, B_, B_, B_, B_, B_ );
/*CL*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, NB, NB, B_, NB, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_ );
/*QU*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, B_, NB, B_, B_, B_, B_, B_, Ii, B_, B_, B_, B_, B_, B_ );
/*GL*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, NB, NB, Ii, Ii, Ii, Ii, Ii, Ii, Ii, Ii, Ii, Ii, NB, Ii );
/*NS*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, NB, NB, B_, B_, B_, B_, B_, B_, Ii, Ii, B_, B_, NB, Ii );
/*EX*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, B_, NB, B_, B_, B_, B_, B_, B_, Ii, Ii, B_, B_, NB, Ii );
/*SY*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, B_, NB, B_, B_, Ii, B_, B_, B_, Ii, Ii, B_, B_, NB, Ii );
/*IS*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, B_, NB, B_, B_, Ii, B_, B_, B_, Ii, Ii, B_, B_, NB, Ii );
/*PR*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, NB, NB, B_, B_, Ii, Ii, Ii, B_, Ii, Ii, B_, B_, NB, Ii );
/*PO*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, NB, NB, B_, B_, B_, B_, B_, B_, Ii, Ii, B_, B_, NB, Ii );
/*NU*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, B_, NB, B_, Ii, Ii, Ii, B_, Ii, Ii, Ii, B_, B_, NB, Ii );
/*AL*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, B_, NB, B_, B_, Ii, Ii, Ii, Ii, Ii, Ii, B_, B_, NB, Ii );
/*ID*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, B_, NB, B_, Ii, B_, Ii, B_, Ii, Ii, Ii, B_, B_, NB, Ii );
/*IN*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, NB, NB, B_, B_, B_, B_, B_, Ii, Ii, Ii, B_, B_, NB, Ii );
/*HY*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, B_, NB, B_, B_, B_, B_, B_, B_, Ii, Ii, B_, B_, NB, Ii );
/*BA*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, B_, NB, B_, B_, B_, B_, B_, B_, Ii, Ii, B_, B_, NB, Ii );
/*BB*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, NB, NB, Ii, Ii, Ii, Ii, Ii, Ii, Ii, Ii, Ii, Ii, NB, Ii );
/*B2*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, B_, NB, B_, B_, B_, B_, B_, B_, Ii, Ii, B_, NB, NB, Ii );
/*ZW*/_b_table[_b_table.length] = new _btr( B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, B_, NB, Ii );
/*CM*/_b_table[_b_table.length] = new _btr( B_, B_, B_, Ii, Ii, NB, NB, NB, B_, B_, Ii, Ii, B_, Ii, Ii, Ii, B_, B_, NB, Ii );

function script_run_obj( in_lang_string ){
	this.str = in_lang_string.str;
	if ( hasDictionary( wb_rfc_1766_lang ) ) this.str = case_fold( this.str, wb_rfc_1766_lang );
	this.scid = in_lang_string.scid;
	this.brks = new Array( this.str.length );
	this.bcls = get_brks( this.str );
	this.ccs = get_ccs( this.str );
	if(this.bcls[0] == id_CM) this.bcls = id_AL;
	reassign_complex_classes( this.bcls );
	for( var i = 0; i < this.str.length; i++ ) {
		if ( reassign_ideo_AL_syllable( this.str.substr( i, 1 ) ) ) this.bcls[i] = id_AL;
	}	
}

function reassign_complex_classes( cls ){
	for ( var i = 0; i < cls.length; i++ ) {
		switch( cls[i] ) {
			case id_AI:
			case id_CB:
			case id_SA:
			case id_SG:
			case id_XX:
				cls[i] = id_AL;
			default:
				;
		}
	}
}

function reassign_ideo_AL_syllable( in_value ) {
var v = in_value.charCodeAt(0);
if (
((v>=0x1100)&&(v<=0x1159))||
((v>=0x2E80)&&(v<=0x2FFF))||
((v>=0x3041)&&(v<=0x309E))||
((v>=0x30A1)&&(v<=0x30FE))||
((v>=0x3130)&&(v<=0x3163))||
((v>=0x3165)&&(v<=0x318F))||
((v>=0x3400)&&(v<=0x4DBF))||
((v>=0x4E00)&&(v<=0x9FAF))||
((v>=0xF900)&&(v<=0xFAFF))||
((v>=0xAC00)&&(v<=0xD7AF))||
((v>=0xA000)&&(v<=0xA48F))||
((v>=0xA490)&&(v<=0xA4CF))||
((v>=0x2E80)&&(v<=0x2FFF))||
((v>=0xFF10)&&(v<=0xFF19))||
((v>=0xFF21)&&(v<=0xFF3A))||
((v>=0xFF41)&&(v<=0xFF5A))||
((v>=0x20000)&&(v<=0x2A6D6))||
((v>=0x2F800)&&(v<=0x2FA1D))
){ return true;	}
return false;
}

function create_script_runs( in_string ) {
	var strs = new Array();
	if ( in_string.length == 0 ) return strs;
	var scripts = get_scrs( in_string );
	var lst_scr = scripts[0];
	strs[strs.length] = new lang_string( in_string.substr( 0, 1 ), lst_scr );
	var index = 0;
	var dis = get_dictionary_scripts();
	for ( var i = 1; i < in_string.length; i++ ) {
		if (( scripts[i] == id_scr_INHERITED ) || ( scripts[i] == lst_scr ) || ( scripts[i] == id_scr_COMMON )){
			var test = strs[index];
			test.str+=in_string.substr( i, 1 );
			strs[index] = test;
			continue;
		} else {
			var b_s_ls = false;
			var b_s_cs = false;

			for( var t = 0; t < dis.length; t++ ){
				if ( lst_scr == dis[t] ) b_s_ls = true;	
				if ( scripts[i] == dis[t] ) b_s_cs = true;
			}

			if (( b_s_ls == true ) && ( b_s_cs == true )) {
				var test = strs[index];
				test.str+=in_string.substr( i, 1 );
				strs[index] = test;
				continue;
			}
			index++;
			lst_scr = scripts[i];
			strs[strs.length] = new lang_string( in_string.substr( i, 1 ), lst_scr );
		}
	}
	var runs = new Array();
	for( var i = 0; i < strs.length; i++ ){
		strs[i].str = trim( strs[i].str );		
		runs[runs.length] = new script_run_obj( strs[i] );
	}
	return runs;
}

function setup_standard_breakers( scr_run ){
	var cls = scr_run.bcls;
	var ccs = scr_run.ccs;
	var count = scr_run.str.length;
	if ( !count ) return;
  	var before_cls = cls[0];
 	var ich;
	for ( ich = 1; ich < count; ich++ ) {
		if ( cls[ich] == id_SP ) {
			scr_run.brks[ich-1] = NB;
			continue;
		}
		if ( cls[ich] == id_CM ){
			if( cls[ich-1] == id_SP ){
				cls = id_ID;
				if (ich > 1)
					scr_run.brks[ich-2] = _b_table[cls[ich-2]]._row[id_ID] == B_ ? B_ : NB;
			}
			scr_run.brks[ich-1] = NB;
			continue;
		}    
		var nbrk = _b_table[before_cls]._row[cls[ich]];
 		if ( nbrk == Ii ) scr_run.brks[ich-1] = 	(( before_cls == id_SP ) ? Ii : NB );
		else scr_run.brks[ich-1] = nbrk;
	}
	scr_run.brks[0] = NB;
	scr_run.brks[ich-1] = B_;
 	return;
}

function setup_word_lookup_breakers( in_script_run ) {
	var dr = add_dict_rng( in_script_run.scid );
	var pr = add_pat_rng( in_script_run.scid );
	var fwo = new fwo_obj( in_script_run.str, in_script_run.scid );
	fwo = match_dict_patterns( fwo, dr, pr );
	var fwo_rev = new fwo_obj( in_script_run.str, in_script_run.scid );
	fwo_rev = match_dict_patterns_rev( fwo_rev, dr, pr );
	var fwo_new = new fwo_obj( in_script_run.str, in_script_run.scid );		
	if (( fwo.offsets.length > 0 ) && ( fwo_rev.offsets.length < fwo.offsets.length )){
		var p_f = 0; var p_r = 0;
		while( p_f < fwo.offsets.length ){
			var o_f = fwo.offsets[p_f];
			var o_r = null;
			if ( p_r < fwo_rev.offsets.length )	 o_r = fwo_rev.offsets[p_r];
			if ( o_r != null ){
				if (( o_r.start == o_f.start) && ( o_r.length > o_f.length ) && ( o_r.b_dict == true )){
					var i_test = p_f;
					var match_len = 0;
					var is_better = false;
					while( true ){
						var o_test = fwo.offsets[i_test];
						match_len+=o_test.length;
						if ( o_test.b_dict == false )	is_better = true;
						if ( match_len >= o_r.length )	break;
						i_test++;
					}
					if (( is_better ) && ( match_len == o_r.length )){
						fwo_new.add_word_offest( o_r.start, o_r.length, o_r.b_dict );
						p_f = i_test + 1;
						p_r++;
						continue;
					}
				}
			}
			if ( o_r != null ){
				if ( o_f.start <= o_r.start )	p_f++;
				if ( o_r.start <= o_f.start )	p_r++;				
			} else p_f++;
			fwo_new.add_word_offest( o_f.start, o_f.length, o_f.b_dict );
		}
	}
	if (( fwo_new.offsets.length < fwo.offsets.length ) && ( fwo_new.offsets.length != 0 ))	fwo = fwo_new;

	if ( fwo.offsets.length != 0 ) {
		for( var i = 0; i < in_script_run.brks.length; i++ ) {
			if ( in_script_run.brks[i] == B_ ) {
				for( var x = 0; x < fwo.offsets.length; x++ ) {
					var s = fwo.offsets[x].start;
					var e = fwo.offsets[x].start + fwo.offsets[x].length - 1;
					if (( i >= s ) && ( i < e )) in_script_run.brks[i] = NB;
				}
			} else {
				if ( i == fwo.offsets[0].start - 1 ) {
					in_script_run.brks[i] = B_;
					continue;
				}
				for( var x = 0; x < fwo.offsets.length; x++ ) {
					var e = fwo.offsets[x].start + fwo.offsets[x].length - 1;
					if (( i == e ) && ( i != in_script_run.brks.length - 1 )) in_script_run.brks[i] = B_;
				}
			}
		}

		var cont = 0;
		for( var i = 0; i < in_script_run.str.length; i++ ){
			if (	( in_script_run.ccs[i] == id_cc_Nd ) ||
				( in_script_run.ccs[i] == id_cc_Nl ) ||
				( in_script_run.ccs[i] == id_cc_No ))
				cont++;
			else	cont = 0;
			if ( cont == 2 ){
				in_script_run.brks[i-1] = NB;
				cont--;
			}
		}
	}
}

function split_on_breakers( in_script_run ) {
	var in_string		= in_script_run.str;
	var in_breakers		= in_script_run.brks;
	var in_brk_classes	= in_script_run.bcls;
	var in_chr_classes	= in_script_run.ccs;
	var ret = new Array();
	var b_start_new = true;
	for( var i = 0; i < in_string.length; i++ ) {
		if ( b_start_new == true ) {
			ret[ret.length] = "";
			b_start_new = false;
		}
		if (( in_chr_classes[i] == id_cc_Pc ) || ( in_chr_classes[i] == id_cc_Pd ) || ( in_chr_classes[i] == id_cc_Pe ) || ( in_chr_classes[i] == id_cc_Pf ) || ( in_chr_classes[i] == id_cc_Pi ) || ( in_chr_classes[i] == id_cc_Po ) || ( in_chr_classes[i] == id_cc_Ps ) ){
			if( ret[ret.length-1] == "" ) ret[ret.length-1] = in_string.substr( i, 1 );
			else  ret[ret.length] = in_string.substr( i, 1 );
			b_start_new = true;
			continue;
		}
		if ( in_brk_classes[i] == id_SP ){
			if ( ( i-1 ) > -1  ) {
				if ( in_breakers[i - 1] != B_ ){
					if( ret[ret.length-1] != "" ) b_start_new = true;
				}
			}
			continue;
		}
		if (( in_breakers[i] == B_ ) && ( i < in_string.length - 1) ) b_start_new = true;
		var compose = ret[ret.length-1];
		compose += in_string.substr( i, 1 );
		ret[ret.length-1] = compose;
	}
	return ret;
}

function create_tokens( input_string, out_scids, out_mixed_case, out_tok_exp_ops ) {
	if ( input_string.length == 0 ) return null;
	var arr_list = new Array();
	var in_string = mapvoicedhalfwidthkana( trim( normalspace( input_string )));
	if ( in_string.length == 0 ) return null;
	
	load_mappings( wb_rfc_1766_lang );
	
	var script_runs = create_script_runs( in_string );

	for ( var i=0; i < script_runs.length; i++ ) {
		setup_standard_breakers( script_runs[i] ); 
		setup_word_lookup_breakers( script_runs[i] );
		var toks = split_on_breakers( script_runs[i] );
		var toks_final = new Array();
		var i_bc_pos = 0;
		for( var x = 0; x < toks.length; x++ ) {
			out_mixed_case[out_mixed_case.length] = toks[x];
			toks_final[x] = case_fold( toks[x], wb_rfc_1766_lang );
			arr_list[arr_list.length] = toks_final[x];
			var src_run = script_runs[i];
			out_scids[out_scids.length] = src_run.scid;
			var first_bc = src_run.bcls[i_bc_pos];
			if (( first_bc == id_SP ) && ( i_bc_pos < src_run.bcls.length-1 )){
				i_bc_pos++; first_bc = src_run.bcls[i_bc_pos];
			}		
			i_bc_pos += toks[x].length;

			var tok_op = get_grep_bounds( toks[x],  wb_rfc_1766_lang );

			if ( first_bc == id_IS ) tok_op = NOBOUNDS;
			if ( first_bc == id_EX ) tok_op = NOBOUNDS;
			if ( first_bc == id_HY ) tok_op = NOBOUNDS;
			if ( first_bc == id_OP ) tok_op = _JOIN_L;
			if ( first_bc == id_CL ) tok_op = _JOIN_R;
			if ( first_bc == id_QU ) tok_op = _JOIN_ALL;

			out_tok_exp_ops[out_tok_exp_ops.length] = tok_op;
		}
	}
	if ( arr_list.length > 0 ) return arr_list;
	else return null;
}
// SIG // Begin signature block
// SIG // MIIbDwYJKoZIhvcNAQcCoIIbADCCGvwCAQExCzAJBgUr
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFJ9pMDDGeUB2
// SIG // esYf2lSFGBqsJ3bGoIIV6jCCBIUwggNtoAMCAQICCmEF
// SIG // 9x4AAAAAADIwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UE
// SIG // BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
// SIG // BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
// SIG // b3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENv
// SIG // ZGUgU2lnbmluZyBQQ0EwHhcNMDkwNzEzMjMwMDE4WhcN
// SIG // MTAxMDEzMjMxMDE4WjCBgzELMAkGA1UEBhMCVVMxEzAR
// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
// SIG // bjENMAsGA1UECxMETU9QUjEeMBwGA1UEAxMVTWljcm9z
// SIG // b2Z0IENvcnBvcmF0aW9uMIIBIjANBgkqhkiG9w0BAQEF
// SIG // AAOCAQ8AMIIBCgKCAQEAtYypnJSEYRrMLiLEoJNkCd6F
// SIG // obCQXfzJbGi18e/8jmv0+KBu11HeYKMnY9T237ZM0kUL
// SIG // pz3Yb/7tpxhj0x/GgdS/BzeXQCt/519aNdmTT6vzKpLw
// SIG // po2B7AUk3Nu4YWNTYQI1ONa49e57VKbJWDXp9BXv2gds
// SIG // BS1NpLa6mzu4MTB+RbypoSU5DEOkRzuXnCBEcjfPUKBN
// SIG // TfTDZdxE0Qg7ON0+xRdsRsetcyTAj4nB6uq6zWipEtZY
// SIG // DFMWDP45A9aB8j5cV/N622bhBxjZGQMU9uZFmSpRTJDX
// SIG // Wu+vtzsMKU1tIK4Ht5Iu6GnKnzBC58MyigsiSjLonAzG
// SIG // UQMmAW2ScwIDAQABo4IBAjCB/zATBgNVHSUEDDAKBggr
// SIG // BgEFBQcDAzAdBgNVHQ4EFgQUh4G33+76d/pZBWM3BArX
// SIG // 6dqg4OAwDgYDVR0PAQH/BAQDAgeAMB8GA1UdIwQYMBaA
// SIG // FFdFdBxdsPbIQwXgjFQtjzKn/kiWMEkGA1UdHwRCMEAw
// SIG // PqA8oDqGOGh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9w
// SIG // a2kvY3JsL3Byb2R1Y3RzL0NvZGVTaWdQQ0EuY3JsME0G
// SIG // CCsGAQUFBwEBBEEwPzA9BggrBgEFBQcwAoYxaHR0cDov
// SIG // L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9Db2Rl
// SIG // U2lnUENBLmNydDANBgkqhkiG9w0BAQUFAAOCAQEANiGE
// SIG // 9Y+DIU2HqD+L58WkD0wwbll0mwuXdBapsfNwpK/CDDMk
// SIG // 86BK+sHkIca22epcW5Fh9yJt/zH8F07XzUDjndLltNL6
// SIG // jWwH2neayivuDVlHzwTCEGf66ulDO7fm0ZzZjiNgbhKb
// SIG // w9l+XFcy3ZQN333FSJJNSHa3osBTlT78OqOTfPKFBMfG
// SIG // hTiXNvgSkyIAmU55r5brWiCDrNBcWjCwAOJrOY8kido9
// SIG // DKRGeWI2U2rXyc2SCPuH5VT1fFnFxHd9sMEsmMeXbEOn
// SIG // +CD4g1RknmD44kqlZ9RJv1SIfVJE81HAJtHFfPCJ1hEJ
// SIG // KMJFRYAdkCK9jqIFPjyzT73XOeCIkzCCBM0wggO1oAMC
// SIG // AQICCmEWtSkAAAAAABAwDQYJKoZIhvcNAQEFBQAwdzEL
// SIG // MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
// SIG // EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
// SIG // c29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9z
// SIG // b2Z0IFRpbWUtU3RhbXAgUENBMB4XDTEwMDEwNDIxMTIw
// SIG // M1oXDTEzMDEwNDIxMjIwM1owgbYxCzAJBgNVBAYTAlVT
// SIG // MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
// SIG // ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
// SIG // YXRpb24xEDAOBgNVBAsTB25DaXBoZXIxJzAlBgNVBAsT
// SIG // Hm5DaXBoZXIgRFNFIEVTTjpBQ0QzLUFFNjYtRTBCNTEl
// SIG // MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy
// SIG // dmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
// SIG // ggEBAOMoqtk8Q0L4BhO64sf5wS9ZyzyV51SQbMNYlWKz
// SIG // D2y9g9stWIgIkgvbzXbHVsbg7irTiDtcyqlwowAjIixT
// SIG // OOhQx/EUCY0dy3yL9aYza6/IRl9Le17556bHL0KFZzaN
// SIG // YEryE2bcsDltzhDK3XIFWHKd8gA7ADntJlM+Hs3uUJLN
// SIG // hfQ6/YGhBV8L6UQO79VZQCYoy4JOTivIFCK7cB3kPdH9
// SIG // YHZUTDns73c4i4z+dK/nFvRwMbjLrdTdi7b6AK3tdBSw
// SIG // Rb78ZYjhrfxJ21/R1M50edSNhm+z9ZcHIS2aYcn8uhtM
// SIG // 0uiruVDk0yv0wdlN1kCsFKeIhXNeaD5jt0HUZr0CAwEA
// SIG // AaOCARkwggEVMB0GA1UdDgQWBBTh8K4PDQX8MvMcfRl/
// SIG // z8TFv5FVTTAfBgNVHSMEGDAWgBQjNPjZUkZwCu1A+3b7
// SIG // syuwwzWzDzBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
// SIG // Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0
// SIG // cy9NaWNyb3NvZnRUaW1lU3RhbXBQQ0EuY3JsMFgGCCsG
// SIG // AQUFBwEBBEwwSjBIBggrBgEFBQcwAoY8aHR0cDovL3d3
// SIG // dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNyb3Nv
// SIG // ZnRUaW1lU3RhbXBQQ0EuY3J0MBMGA1UdJQQMMAoGCCsG
// SIG // AQUFBwMIMA4GA1UdDwEB/wQEAwIGwDANBgkqhkiG9w0B
// SIG // AQUFAAOCAQEAjVtJKFSHyYqpk/6b+I1UcSCdwDiTJym5
// SIG // y5ZTios1tZQ3Fli9nj4XJ19ZL+Rdfh3iWdwH+2IY5WO/
// SIG // 9AvPTdpbMPbImv8mWb8ZwxCy8OMewQyZ2lWSxswS38BY
// SIG // TN2a1B0j+YYSROcmAuiAQWgWVDYdp2WzxDOh46SY2b5i
// SIG // kE+SN7apiBdUSB+dwiLYciq5wzCTPjfsKam5zgvVwskW
// SIG // pudeVQ3MgYRh6SwD25umG1MCOIsKWJEXyHFwFs4uxmP8
// SIG // eZ+DBIK0gecvV2mtuKUfIzZ29hWUhgoe6t0RO2ZE0hVa
// SIG // z6YrKB9OxQpzV0uVA2Ci6+kyfr09j6a9SSopwVcxwBDf
// SIG // UTCCBgcwggPvoAMCAQICCmEWaDQAAAAAABwwDQYJKoZI
// SIG // hvcNAQEFBQAwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZ
// SIG // MBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UE
// SIG // AxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0
// SIG // aG9yaXR5MB4XDTA3MDQwMzEyNTMwOVoXDTIxMDQwMzEz
// SIG // MDMwOVowdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UE
// SIG // AxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBMIIBIjAN
// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn6Fssd/b
// SIG // SJIqfGsuGeG94uPFmVEjUK3O3RhOJA/u0afRTK10MCAR
// SIG // 6wfVVJUVSZQbQpKumFwwJtoAa+h7veyJBw/3DgSY8InM
// SIG // H8szJIed8vRnHCz8e+eIHernTqOhwSNTyo36Rc8J0F6v
// SIG // 0LBCBKL5pmyTZ9co3EZTsIbQ5ShGLieshk9VUgzkAyz7
// SIG // apCQMG6H81kwnfp+1pez6CGXfvjSE/MIt1NtUrRFkJ9I
// SIG // AEpHZhEnKWaol+TTBoFKovmEpxFHFAmCn4TtVXj+AZod
// SIG // UAiFABAwRu233iNGu8QtVJ+vHnhBMXfMm987g5OhYQK1
// SIG // HQ2x/PebsgHOIktU//kFw8IgCwIDAQABo4IBqzCCAacw
// SIG // DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUIzT42VJG
// SIG // cArtQPt2+7MrsMM1sw8wCwYDVR0PBAQDAgGGMBAGCSsG
// SIG // AQQBgjcVAQQDAgEAMIGYBgNVHSMEgZAwgY2AFA6sgmBA
// SIG // VieX5SUT/CrhClOVWeSkoWOkYTBfMRMwEQYKCZImiZPy
// SIG // LGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9z
// SIG // b2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9vdCBDZXJ0
// SIG // aWZpY2F0ZSBBdXRob3JpdHmCEHmtFqFKoKWtTHNY9AcT
// SIG // LmUwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5t
// SIG // aWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvbWlj
// SIG // cm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEBBEgw
// SIG // RjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3Nv
// SIG // ZnQuY29tL3BraS9jZXJ0cy9NaWNyb3NvZnRSb290Q2Vy
// SIG // dC5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
// SIG // hvcNAQEFBQADggIBABCXisNcA0Q23em0rXfbznlRTQGx
// SIG // LnRxW20ME6vOvnuPuC7UEqKMbWK4VwLLTiATUJndekDi
// SIG // V7uvWJoc4R0Bhqy7ePKL0Ow7Ae7ivo8KBciNSOLwUxXd
// SIG // T6uS5OeNatWAweaU8gYvhQPpkSokInD79vzkeJkuDfcH
// SIG // 4nC8GE6djmsKcpW4oTmcZy3FUQ7qYlw/FpiLID/iBxoy
// SIG // +cwxSnYxPStyC8jqcD3/hQoT38IKYY7w17gX606Lf8U1
// SIG // K16jv+u8fQtCe9RTciHuMMq7eGVcWwEXChQO0toUmPU8
// SIG // uWZYsy0v5/mFhsxRVuidcJRsrDlM1PZ5v6oYemIp76Kb
// SIG // KTQGdxpiyT0ebR+C8AvHLLvPQ7Pl+ex9teOkqHQ1uE7F
// SIG // cSMSJnYLPFKMcVpGQxS8s7OwTWfIn0L/gHkhgJ4VMGbo
// SIG // QhJeGsieIiHQQ+kr6bv0SMws1NgygEwmKkgkX1rqVu+m
// SIG // 3pmdyjpvvYEndAYR7nYhv5uCwSdUtrFqPYmhdmG0bqET
// SIG // pr+qR/ASb/2KMmyy/t9RyIwjyWa9nR2HEmQCPS2vWY+4
// SIG // 5CHltbDKY7R4VAXUQS5QrJSwpXirs6CWdRrZkocTdSIv
// SIG // MqgIbqBbjCW/oO+EyiHW6x5PyZruSeD3AWVviQt9yGnI
// SIG // 5m7qp5fOMSn/DsVbXNhNG6HY+i+ePy5VFmvJE6P9MIIG
// SIG // gTCCBGmgAwIBAgIKYRUIJwAAAAAADDANBgkqhkiG9w0B
// SIG // AQUFADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkwFwYK
// SIG // CZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRN
// SIG // aWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3Jp
// SIG // dHkwHhcNMDYwMTI1MjMyMjMyWhcNMTcwMTI1MjMzMjMy
// SIG // WjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
// SIG // Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
// SIG // TWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN
// SIG // aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQTCCASIwDQYJ
// SIG // KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+N34U3jLEG
// SIG // VmY2TtQK6zYjkR6vq41Y6cTPwZ86CiTExMResO4VFMX6
// SIG // PpkzaxlpcvR8BV/lmSVE1zUZipDcKI6QDO/VkGGt3twY
// SIG // cC2DyW+vhSz43bm5MP1xeByD/cipuYJnDXq4wQnCvBaX
// SIG // Vz8cmNNp1zCQkJCNMB/YJtSee4jZ4gntl0lF6wRSgXV7
// SIG // uLUiuC5Wu9fPqU48CoOiqDrFrbYBDmrPIrQjH2zVJ+e3
// SIG // fsG01TKteSUcQobinYX0V9obWS8tJpIpxbPXhaOeYFqU
// SIG // 5nuce16CNEtt/9TuJ9Ci3NGQDM59DhV8iKw0x8BsmIRK
// SIG // yUR5aCjfIoMNuIosSGHi/hECAwEAAaOCAiMwggIfMBAG
// SIG // CSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRXRXQcXbD2
// SIG // yEMF4IxULY8yp/5IljALBgNVHQ8EBAMCAcYwDwYDVR0T
// SIG // AQH/BAUwAwEB/zCBmAYDVR0jBIGQMIGNgBQOrIJgQFYn
// SIG // l+UlE/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixk
// SIG // ARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29m
// SIG // dDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlm
// SIG // aWNhdGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5l
// SIG // MFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwubWlj
// SIG // cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL21pY3Jv
// SIG // c29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYw
// SIG // RAYIKwYBBQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0
// SIG // LmNvbS9wa2kvY2VydHMvTWljcm9zb2Z0Um9vdENlcnQu
// SIG // Y3J0MHYGA1UdIARvMG0wawYJKwYBBAGCNxUvMF4wXAYI
// SIG // KwYBBQUHAgIwUB5OAEMAbwBwAHkAcgBpAGcAaAB0ACAA
// SIG // qQAgADIAMAAwADYAIABNAGkAYwByAG8AcwBvAGYAdAAg
// SIG // AEMAbwByAHAAbwByAGEAdABpAG8AbgAuMBMGA1UdJQQM
// SIG // MAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4ICAQAw
// SIG // vLAgpGKgp+85JmE93KzGmdCGxC71gzJlXiI+m9aG+Oi2
// SIG // n8qL1jt1C6GRPkzdZHSMSfKIjBhnbP4VZka4OkZCl8iR
// SIG // N9Qksees0+pBFIN308lPBV+jFFK/lqQvPlZbEHXOU8PO
// SIG // BVRptGXJJKUP4SW4GrlN5QK5UB5Ps5gMHZUC7iJZrSLL
// SIG // BXQLBEV7BFng2A+z60z4YN3CeJ7Rup9r9/PufkQRQNK9
// SIG // uptLFghupL5V5KY4EqNI9BxVeoog0X3+kduUjy/Ce2um
// SIG // ZIVPo+UsNCldC7/1xzgvxCDEVjH2ac6F+AqR7NDWrro4
// SIG // BQzrbk9MnAMpqqL8GKApDA1cXFYjV9oclg3IJjbBRMvl
// SIG // 4eZvieeP6Zi1c9N44+2jATx05V68bPYhiWcF7JedtbH9
// SIG // r6bpcqXDNOEvn/n0ajniLQSCW/zQnK58nRH55rVTGXS6
// SIG // OUo5631Cs0o7Nz3CSnsnmOfiTpsbSlQ4aiM3vmq3SO7q
// SIG // Qg1JJJGOtwQul2/k50W7j039YNnXWcLYgNZgNHu3oZMg
// SIG // /oG4qqVcCemKDb4oTX7X6A/tZXjRMV+5ZtvfQucLzAIH
// SIG // jd//IAajRWW0szKNLpHiTbSpyfq8awQOsp/qn96kyQqW
// SIG // 9I332Jio8IUCCFmkIKYsCxryUgbtaeVkGBvgo6veynwU
// SIG // YUO4ZfU2o1UTK2csTRswTDGCBJEwggSNAgEBMIGHMHkx
// SIG // CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
// SIG // MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
// SIG // b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jv
// SIG // c29mdCBDb2RlIFNpZ25pbmcgUENBAgphBfceAAAAAAAy
// SIG // MAkGBSsOAwIaBQCggb4wGQYJKoZIhvcNAQkDMQwGCisG
// SIG // AQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQB
// SIG // gjcCARUwIwYJKoZIhvcNAQkEMRYEFHx3oxE7INtkLEnF
// SIG // J38vNIV8ldhUMF4GCisGAQQBgjcCAQwxUDBOoCaAJABN
// SIG // AGkAYwByAG8AcwBvAGYAdAAgAEwAZQBhAHIAbgBpAG4A
// SIG // Z6EkgCJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbGVh
// SIG // cm5pbmcgMA0GCSqGSIb3DQEBAQUABIIBAGBe+b1vjLpw
// SIG // E3TxNMoUyynqMnMQlAp8mgkM94KCRDBGlWHPQuHQ42Fa
// SIG // Y1v3TjlfJd64WQ/xMx0PihbpyqP0vBvq7QX9jpNyJGUI
// SIG // D3DrKJpmIrfozkfXoVn7pfBTfWaK2bVcZmindLy259SA
// SIG // SegFaGYEy+TqsXNFM8WnUB1SSoXAFNTkLZdo+E0vZQhC
// SIG // F9BPSSphG7wmUFtWHyP1KvMInkav09IB0kYu3Ow5dleS
// SIG // N91RxWIZB8XI8qjNuXpL5CaJp03lEuhmR0mqAsPbgxdo
// SIG // DFHWh4G8QV9smdgI7ezx84so4nE/mq8XgV0zOLRHThMR
// SIG // 93Kj07/VBPtYIBQfI0V8NOOhggIdMIICGQYJKoZIhvcN
// SIG // AQkGMYICCjCCAgYCAQEwgYUwdzELMAkGA1UEBhMCVVMx
// SIG // EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
// SIG // ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
// SIG // dGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3Rh
// SIG // bXAgUENBAgphFrUpAAAAAAAQMAcGBSsOAwIaoF0wGAYJ
// SIG // KoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0B
// SIG // CQUxDxcNMTAwMjE5MjIzNzM2WjAjBgkqhkiG9w0BCQQx
// SIG // FgQUrAeuTjW+21KHotfA9dY1V2ErWI8wDQYJKoZIhvcN
// SIG // AQEFBQAEggEAOXCc/JJfnrwaPUdqpyJ4I3xdfoOKdJ3O
// SIG // 5iVCcVwYA3pfrALpIy6A7FJ0abSBj0CcEsSmphj4lgMU
// SIG // 5EO1tI2sz8Jg6YD6Gk9pdmh1LMUSP05o7hgzcAUhfQi2
// SIG // RFZy75/wiSdM6QquH4eO3PMfIDUK0vDsoXF2cP8bzhi4
// SIG // K32b3cmxFJ4TcqKhwLms+XLN6xiSUhm9VO8gLYfhm83v
// SIG // csn+sf+TjJpn6XWUUIplRlysAwrwmCbhLV4ACEALLzjO
// SIG // ycwlZN9hm9vXeFoEhJIO22j05fjRmC/FH9RBEGUSqnFx
// SIG // KSQ/TAPAgZCkFFebUroh+HEfHXebqv3lZiUME/1+tJzZOg==
// SIG // End signature block
