text:
Honey, I Shrunk the Race Track
by Bob Marlow | Mar 14, 2019
In 1903, the first automobile race was run on the one-mile dirt oval at the New York State Fairgrounds in Syracuse, New York, and in 2015 the last such race was run. The track, built originally in 1826 for horse racing, was razed following the 2015 event and the site was redeveloped as part of the larger fairgrounds. That, most racing fans figured, was that.
There was a time in the United States when most national championship races were contested on one-mile fairgrounds tracks, tracks which existed in nearly every state, tracks on which drivers such as Mario Andretti, A.J. Foyt, Johnny Rutherford, and Al Unser all competed. Today, only a handful remain, and only three of them – the DuQuoin State Fairgrounds in Illinois, the Indiana State Fairgrounds in Indianapolis, and the Illinois State Fairgrounds in Springfield – still host motor racing.
After 2015 no one expected racing to return to the fairgrounds in Syracuse, but on a recent late winter weekend, we were there for the first event to be conducted on a temporary indoor track erected inside the Exposition Center, a 136,000-square foot building built on part of the land formerly occupied by the mile.
True, it was no national championship event, and it wasn't Super Dirt Week, the hugely popular season-ending race that, after more than 40 years, was evicted from the fairgrounds after 2015 and forced to move to the half-mile Oswego Speedway. But it was racing, it was at the New York State Fairgrounds, and by all appearances, it was a success.
The track was a one-tenth-mile oval laid out on the concrete floor of the building, and the cars were TQ Midgets, the same single-seaters that race as part of a winter indoor series in Atlantic City, New Jersey, and Allentown, Pennsylvania. "I never thought I'd ever be calling a race at the fairgrounds again," public address announcer Shane Andrews told us, but there he was, along with his colleague Paul Szmal, each happily behind a fairgrounds microphone.
Also, there were more than 100 racing teams, split among the TQ Midgets and two support classes, along with event sponsors VP Racing Fuels and RPM Raceway, 2019 "Ms. Motorsports" Taylor Fullin, and several thousand fans. The National Anthem was sung to perfection by Mimi Lazzaro, daughter of the late and highly-respected New York State racer Lou Lazzaro.
The new Exposition Center, opened for the first time late last summer, is a bright and comfortable facility. Only some teething problems with the new building, which was constructed under a tight deadline (and likely with lowest bidders, some nepotism, and perhaps a greased palm here and there) threatened to disrupt the proceedings. The p.a. system was inconsistent and the ventilation system was noisy, but even a delay a Friday night due to the lights going out did not diminish the enthusiasm of the spectators. They waved their cellphone flashlights during the delay and cheered mightily for their hometown favorites.
The hometown boys did not disappoint, with New Yorkers Justin Bonsignore and Erick Rudolph claiming victory on Friday and Saturday, respectively, over a field that encompassed drivers from multiple states. Rudolph, who swapped the lead with Bonsignore several times on Friday but who remained out front decisively on Saturday, earned the overall series championship.
Indoor racing is very much a contact sport, with sparks flying and tempers flaring. On Friday, following an on-track incident, two teams got involved in a shouting contest which devolved to the point that both were, ahem, asked to leave. On Saturday, Matt Janisch, winner of the first event in the winter series in Allentown, provided some unintentional fireworks by suffering an end-over flip on the frontstretch in the main event, then made a brief visit to the pits for repairs and stormed from the back to a ninth-place finish.
When the historic mile track was eliminated, under a revitalization plan supported by New York State Governor Andrew Cuomo, countless racing fans swore off the fairgrounds and to this day have only nasty things to say about the guv. But we have to concede, the modernization of the fairgrounds makes sense in light of land-use considerations and contemporary entertainment preferences. That racing has been able to return to the fairgrounds, even in this distinctively different form, is okay by us.
Photo for CarShowSafari.com by J.J. Lane


text:
<?php

defined('IN_IA') or exit('Access Denied');

function uni_owned($uid = 0, $is_uni_fetch = true) {
	global $_W;
	$uid = intval($uid) > 0 ? intval($uid) : $_W['uid'];
	$uniaccounts = array();

	$user_accounts = uni_user_accounts($uid);
	if (empty($user_accounts)) {
		return $uniaccounts;
	}

	if (!empty($user_accounts) && !empty($is_uni_fetch)) {
		foreach ($user_accounts as &$row) {
			$row = uni_fetch($row['uniacid']);
		}
	}
	return $user_accounts;
}

function uni_user_accounts($uid = 0, $type = 'app') {
	global $_W;
	$uid = intval($uid) > 0 ? intval($uid) : $_W['uid'];
	if (!in_array($type, array('app', 'wxapp', 'webapp', 'phoneapp'))) {
		$type = 'app';
	}
	$type = $type == 'app' ? 'wechats' : $type;
	$cachekey = cache_system_key("user_{$type}_accounts:{$uid}");
	$cache = cache_load($cachekey);
	if (!empty($cache)) {
		return $cache;
	}
	$field = '';
	$where = '';
	$params = array();
	$user_is_founder = user_is_founder($uid);
	if (empty($user_is_founder) || user_is_vice_founder($uid)) {
		$field .= ', u.role';
		$where .= " LEFT JOIN " . tablename('uni_account_users') . " u ON u.uniacid = w.uniacid WHERE u.uid = :uid AND u.role IN(:role1, :role2) ";
		$params[':uid'] = $uid;
		$params[':role1'] = ACCOUNT_MANAGE_NAME_OWNER;
		$params[':role2'] = ACCOUNT_MANAGE_NAME_VICE_FOUNDER;
	}
	$where .= !empty($where) ? " AND a.isdeleted <> 1 AND u.role IS NOT NULL" : " WHERE a.isdeleted <> 1";

	$sql = "SELECT w.*, a.type" . $field . " FROM " . tablename('account_' . $type) . " w LEFT JOIN " . tablename('account') . " a ON a.acid = w.acid AND a.uniacid = w.uniacid" . $where;
	$result = pdo_fetchall($sql, $params, 'uniacid');
	cache_write($cachekey, $result);
	return $result;
}

function account_owner($uniacid = 0) {
	global $_W;
	load()->model('user');
	$uniacid = intval($uniacid);
	if (empty($uniacid)) {
		return array();
	}
	$ownerid = pdo_getcolumn('uni_account_users', array('uniacid' => $uniacid, 'role' => 'owner'), 'uid');
	if (empty($ownerid)) {
		$ownerid = pdo_getcolumn('uni_account_users', array('uniacid' => $uniacid, 'role' => 'vice_founder'), 'uid');
		if (empty($ownerid)) {
			$founders = explode(',', $_W['config']['setting']['founder']);
			$ownerid = $founders[0];
		}
	}
	$owner = user_single($ownerid);
	if (empty($owner)) {
		return array();
	}
	return $owner;
}

function uni_accounts($uniacid = 0) {
	global $_W;
	$uniacid = empty($uniacid) ? $_W['uniacid'] : intval($uniacid);
	$account_info = pdo_get('account', array('uniacid' => $uniacid));
	if (!empty($account_info)) {
		$accounts = pdo_fetchall("SELECT w.*, a.type, a.isconnect FROM " . tablename('account') . " a INNER JOIN " . tablename(uni_account_tablename($account_info['type'])) . " w USING(acid) WHERE a.uniacid = :uniacid AND a.isdeleted <> 1 ORDER BY a.acid ASC", array(':uniacid' => $uniacid), 'acid');
	}
	return !empty($accounts) ? $accounts : array();
}

function uni_fetch($uniacid = 0) {
	global $_W;
	load()->model('mc');

	$uniacid = empty($uniacid) ? $_W['uniacid'] : intval($uniacid);
	$cachekey = "uniaccount:{$uniacid}";
	$cache = cache_load($cachekey);
	if (!empty($cache)) {
		return $cache;
	}

	$acid = table('account')->getAccountByUniacid($uniacid);
	if (empty($acid)) {
		return false;
	}
	$account_api = WeAccount::create($acid['acid']);
	if (is_error($account_api)) {
		return $account_api;
	}
	$account = $account_api->account;
	if (empty($account) || $account['isdeleted'] == 1) {
		return array();
	}

	$owner = account_owner($uniacid);

	$account['uid'] = $owner['uid'];
	$account['starttime'] = $owner['starttime'];
	if (!empty($account['endtime'])) {
		$account['endtime'] = $account['endtime'] == '-1' ? 0 : $account['endtime'];
	} else {
		$account['endtime'] = $owner['endtime'];
	}

	$account['groups'] = mc_groups($uniacid);
	$account['setting'] = uni_setting($uniacid);
	$account['grouplevel'] = $account['setting']['grouplevel'];
	$account['logo'] = tomedia('headimg_'.$account['acid']. '.jpg').'?time='.time();
	$account['qrcode'] = tomedia('qrcode_'.$account['acid']. '.jpg').'?time='.time();

		$account['switchurl'] = wurl('account/display/switch', array('uniacid' => $account['uniacid']));
		if (!empty($account['settings']['notify'])) {
		$account['sms'] = $account['setting']['notify']['sms']['balance'];
	} else {
		$account['sms'] = 0;
	}
		$account['setmeal'] = uni_setmeal($account['uniacid']);

	cache_write($cachekey, $account);
	return $account;
}

function uni_site_store_buy_goods($uniacid, $type = STORE_TYPE_MODULE) {
	$cachekey = cache_system_key($uniacid . ':site_store_buy_' . $type);
	$site_store_buy_goods = cache_load($cachekey);
	if (!empty($site_store_buy_goods)) {
		return $site_store_buy_goods;
	}
	$store_table = table('store');
	if ($type != STORE_TYPE_API) {
		$store_table->searchWithEndtime();
		$site_store_buy_goods = $store_table->searchAccountBuyGoods($uniacid, $type);
		$site_store_buy_goods = array_keys($site_store_buy_goods);
	} else {
		$site_store_buy_goods = $store_table->searchAccountBuyGoods($uniacid, $type);
		$setting = uni_setting_load('statistics', $uniacid);
		$use_number = isset($setting['statistics']['use']) ? intval($setting['statistics']['use']) : 0;
		$site_store_buy_goods = $site_store_buy_goods - $use_number;
	}
	cache_write($cachekey, $site_store_buy_goods);
	return $site_store_buy_goods;
}

function uni_modules_by_uniacid($uniacid, $enabled = true) {
	global $_W;
	load()->model('user');
	load()->model('module');
	$cachekey = cache_system_key(CACHE_KEY_ACCOUNT_MODULES, $uniacid, $enabled);
	$modules = cache_load($cachekey);
	if (empty($modules)) {
		$founders = explode(',', $_W['config']['setting']['founder']);
		$owner_uid = pdo_getcolumn('uni_account_users',  array('uniacid' => $uniacid, 'role' => 'owner'), 'uid');
		$condition = "WHERE 1";
		$site_store_buy_goods = array();

			$account_info = uni_fetch($_W['uniacid']);
			$goods_type = $account_info['type'] == ACCOUNT_TYPE_APP_NORMAL ? STORE_TYPE_WXAPP_MODULE : STORE_TYPE_MODULE;
			$site_store_buy_goods = uni_site_store_buy_goods($uniacid, $goods_type);

		if (!empty($owner_uid) && !in_array($owner_uid, $founders)) {
			$uni_modules = array();
			$packageids = pdo_getall('uni_account_group', array('uniacid' => $uniacid), array('groupid'), 'groupid');
			$packageids = array_keys($packageids);

			if (IMS_FAMILY == 'x') {
				$store = table('store');
				$site_store_buy_package = $store->searchUserBuyPackage($uniacid);
				$packageids = array_merge($packageids, array_keys($site_store_buy_package));
			}
			if (!in_array('-1', $packageids)) {
				$uni_groups = pdo_fetchall("SELECT `modules` FROM " . tablename('uni_group') . " WHERE " .  "id IN ('".implode("','", $packageids)."') OR " . " uniacid = '{$uniacid}'");
				if (!empty($uni_groups)) {
					foreach ($uni_groups as $group) {
						$group_module = (array)iunserializer($group['modules']);
						$uni_modules = array_merge($group_module, $uni_modules);
					}
				}
				$user_modules = user_modules($owner_uid);
				$modules = array_merge(array_keys($user_modules), $uni_modules, $site_store_buy_goods);
				if (!empty($modules)) {
					$condition .= " AND a.name IN ('" . implode("','", $modules) . "')";
				} else {
					$condition .= " AND a.name = ''";
				}
			}
		}
		$condition .= $enabled ?  " AND (b.enabled = 1 OR b.enabled is NULL) OR a.issystem = 1" : " OR a.issystem = 1";
		$sql = "SELECT a.name FROM " . tablename('modules') . " AS a LEFT JOIN " . tablename('uni_account_modules') . " AS b ON a.name = b.module AND b.uniacid = :uniacid " . $condition . " ORDER BY b.displayorder DESC, b.id DESC";
		$modules = pdo_fetchall($sql, array(':uniacid' => $uniacid), 'name');
		cache_write($cachekey, $modules);
	}

	$module_list = array();
	if (!empty($modules)) {
		foreach ($modules as $name => $module) {
			$module_info = module_fetch($name);
			if ($module_info['welcome_support'] != MODULE_SUPPORT_SYSTEMWELCOME &&
				($module_info['app_support'] != MODULE_SUPPORT_ACCOUNT && in_array($_W['account']['type'], array(ACCOUNT_TYPE_OFFCIAL_NORMAL, ACCOUNT_TYPE_OFFCIAL_AUTH)) ||
								$module_info['webapp_support'] != MODULE_SUPPORT_WEBAPP && in_array($_W['account']['type'], array(ACCOUNT_TYPE_WEBAPP_NORMAL)) ||
				$module_info['phoneapp_support'] != MODULE_SUPPORT_PHONEAPP && in_array($_W['account']['type'], array(ACCOUNT_TYPE_PHONEAPP_NORMAL)))) {
				continue;
			}
			if (!empty($module_info)) {
				$module_list[$name] = $module_info;
			}
		}
	}
	$module_list['core'] = array('title' => '系统事件处理模块', 'name' => 'core', 'issystem' => 1, 'enabled' => 1, 'isdisplay' => 0);
	return $module_list;
}

function uni_modules($enabled = true) {
	global $_W;
	return uni_modules_by_uniacid($_W['uniacid'], $enabled);
}

function uni_modules_app_binding() {
	global $_W;
	$cachekey = cache_system_key(CACHE_KEY_ACCOUNT_MODULES_BINDING, $_W['uniacid']);
	$cache = cache_load($cachekey);
	if (!empty($cache)) {
		return $cache;
	}
	load()->model('module');
	$result = array();
	$modules = uni_modules();
	if(!empty($modules)) {
		foreach($modules as $module) {
			if($module['type'] == 'system') {
				continue;
			}
			$entries = module_app_entries($module['name'], array('home', 'profile', 'shortcut', 'function', 'cover'));
			if(empty($entries)) {
				continue;
			}
			if($module['type'] == '') {
				$module['type'] = 'other';
			}
			$result[$module['name']] = array(
				'name' => $module['name'],
				'type' => $module['type'],
				'title' => $module['title'],
				'entries' => array(
					'cover' => $entries['cover'],
					'home' => $entries['home'],
					'profile' => $entries['profile'],
					'shortcut' => $entries['shortcut'],
					'function' => $entries['function']
				)
			);
			unset($module);
		}
	}
	cache_write($cachekey, $result);
	return $result;
}

function uni_groups($groupids = array(), $show_all = false) {
	load()->model('module');
	global $_W;
	$cachekey = cache_system_key(CACHE_KEY_UNI_GROUP);
	$list = cache_load($cachekey);

	if (empty($list)) {
		$condition = ' WHERE uniacid = 0';
		$list = pdo_fetchall("SELECT * FROM " . tablename('uni_group') . $condition . " ORDER BY id DESC", array(), 'id');
		if (!empty($groupids)) {
			if (in_array('-1', $groupids)) {
				$list[-1] = array('id' => -1, 'name' => '所有服务', 'modules' => array('title' => '系统所有模块'), 'templates' => array('title' => '系统所有模板'));
			}
			if (in_array('0', $groupids)) {
				$list[0] = array('id' => 0, 'name' => '基础服务', 'modules' => array('title' => '系统模块'), 'templates' => array('title' => '系统模板'));
			}
		}

		if (!empty($list)) {
			foreach ($list as $k => &$row) {
				if (!empty($row['modules'])) {
					$modules = (array)iunserializer($row['modules']);
					$row['modules'] = $row['wxapp'] = $row['webapp'] = $row['phoneapp'] = array();
					if (empty($modules)) {
						continue;
					}
					foreach ($modules as $modulename) {
						$module = module_fetch($modulename);
						if (empty($module)) {
							continue;
						}
						if ($module['wxapp_support'] == MODULE_SUPPORT_WXAPP) {
							$row['wxapp'][] = $modulename;
						}
						if ($module['webapp_support'] == MODULE_SUPPORT_WEBAPP) {
							$row['webapp'][] = $modulename;
						}
						if ($module['phoneapp_support'] == MODULE_SUPPORT_PHONEAPP) {
							$row['phoneapp'][] = $modulename;
						}
						if ($module['app_support'] == MODULE_SUPPORT_ACCOUNT) {
							if (!empty($module['main_module'])) {
								continue;
							}
							$row['modules'][] = $modulename;
							if (!empty($module['plugin_list'])) {
								foreach ($module['plugin_list'] as $plugin) {
									$row['modules'][] = $plugin;
								}
							}
						}
					}
				}

				if (!empty($row['templates'])) {
					$row['templates'] = (array)iunserializer($row['templates']);
					if (!empty($row['templates'])) {
						$row['templates'] = pdo_getall('site_templates', array('id' => $row['templates']), array('id', 'name', 'title'), 'name');
					}
				}
			}
		}
		cache_write($cachekey, $list);
	}
	$group_list = array();
	if (!empty($groupids)) {
		foreach ($groupids as $id) {
			$group_list[$id] = $list[$id];
		}
	} else {
		if (user_is_vice_founder() && empty($show_all)) {
			foreach ($list as $group_key => $group) {
				if ($group['owner_uid'] != $_W['uid']) {
					unset($list[$group_key]);
					continue;
				}
			}
		}
		$group_list = $list;
	}

	$module_section = array('modules', 'phoneapp', 'wxapp', 'webapp');
	if (!empty($group_list)) {
		foreach ($group_list as $id => $group) {
			foreach ($module_section as $section) {
				if (!empty($group_list[$id][$section])) {
					$modules = $group_list[$id][$section];
					$group_list[$id][$section] = array();

					foreach ($modules as $modulename) {
						$group_list[$id][$section][$modulename] = module_fetch($modulename);
					}
				}
			}
		}
	}
	return $group_list;
}

function uni_templates() {
	global $_W;
	$owneruid = pdo_fetchcolumn("SELECT uid FROM ".tablename('uni_account_users')." WHERE uniacid = :uniacid AND role = 'owner'", array(':uniacid' => $_W['uniacid']));
	load()->model('user');
		$owner = user_single(array('uid' => $owneruid));
	if (empty($owner) || user_is_founder($owner['uid'])) {
		$groupid = '-1';
	} else {
		$groupid = $owner['groupid'];
	}
	$extend = pdo_getall('uni_account_group', array('uniacid' => $_W['uniacid']), array(), 'groupid');
	if (!empty($extend) && $groupid != '-1') {
		$groupid = '-2';
	}
	if (empty($groupid)) {
		$templates = pdo_fetchall("SELECT * FROM " . tablename('site_templates') . " WHERE name = 'default'", array(), 'id');
	} elseif ($groupid == '-1') {
		$templates = pdo_fetchall("SELECT * FROM " . tablename('site_templates') . " ORDER BY id ASC", array(), 'id');
	} else {
		$group = pdo_fetch("SELECT id, name, package FROM ".tablename('users_group')." WHERE id = :id", array(':id' => $groupid));
		$packageids = iunserializer($group['package']);
		if (!empty($extend)) {
			foreach ($extend as $extend_packageid => $row) {
				$packageids[] = $extend_packageid;
			}
		}
		if(is_array($packageids)) {
			if (in_array('-1', $packageids)) {
				$templates = pdo_fetchall("SELECT * FROM " . tablename('site_templates') . " ORDER BY id ASC", array(), 'id');
			} else {
				$wechatgroup = pdo_fetchall("SELECT `templates` FROM " . tablename('uni_group') . " WHERE id IN ('".implode("','", $packageids)."') OR uniacid = '{$_W['uniacid']}'");
				$ms = array();
				$mssql = '';
				if (!empty($wechatgroup)) {
					foreach ($wechatgroup as $row) {
						$row['templates'] = iunserializer($row['templates']);
						if (!empty($row['templates'])) {
							foreach ($row['templates'] as $templateid) {
								$ms[$templateid] = $templateid;
							}
						}
					}
					$ms[] = 1;
					$mssql = " `id` IN ('".implode("','", $ms)."')";
				}
				$templates = pdo_fetchall("SELECT * FROM " . tablename('site_templates') .(!empty($mssql) ? " WHERE $mssql" : '')." ORDER BY id DESC", array(), 'id');
			}
		}
	}
	if (empty($templates)) {
		$templates = pdo_fetchall("SELECT * FROM " . tablename('site_templates') . " WHERE id = 1 ORDER BY id DESC", array(), 'id');
	}
	return $templates;
}

function uni_setting_save($name, $value) {
	global $_W;
	if (empty($name)) {
		return false;
	}
	if (is_array($value)) {
		$value = serialize($value);
	}
	$unisetting = pdo_get('uni_settings', array('uniacid' => $_W['uniacid']), array('uniacid'));
	if (!empty($unisetting)) {
		pdo_update('uni_settings', array($name => $value), array('uniacid' => $_W['uniacid']));
	} else {
		pdo_insert('uni_settings', array($name => $value, 'uniacid' => $_W['uniacid']));
	}
	$cachekey = "unisetting:{$_W['uniacid']}";
	$account_cachekey = "uniaccount:{$_W['uniacid']}";
	cache_delete($cachekey);
	cache_delete($account_cachekey);
	return true;
}

function uni_setting_load($name = '', $uniacid = 0) {
	global $_W;
	$uniacid = empty($uniacid) ? $_W['uniacid'] : $uniacid;
	$cachekey = "unisetting:{$uniacid}";
	$unisetting = cache_load($cachekey);
	if (empty($unisetting)) {
		$unisetting = pdo_get('uni_settings', array('uniacid' => $uniacid));
		if (!empty($unisetting)) {
			$serialize = array('site_info', 'stat', 'oauth', 'passport', 'uc', 'notify',
				'creditnames', 'default_message', 'creditbehaviors', 'payment',
				'recharge', 'tplnotice', 'mcplugin', 'statistics', 'bind_domain');
			foreach ($unisetting as $key => &$row) {
				if (in_array($key, $serialize) && !empty($row)) {
					$row = (array)iunserializer($row);
				}
			}
		} else {
			$unisetting = array();
		}
		cache_write($cachekey, $unisetting);
	}
	if (empty($unisetting)) {
		return array();
	}
	if (empty($name)) {
		return $unisetting;
	}
	if (!is_array($name)) {
		$name = array($name);
	}
	return array_elements($name, $unisetting);
}

if (!function_exists('uni_setting')) {
	function uni_setting($uniacid = 0, $fields = '*', $force_update = false) {
		global $_W;
		load()->model('account');
		if ($fields == '*') {
			$fields = '';
		}
		return uni_setting_load($fields, $uniacid);
	}
}

function uni_account_default($uniacid = 0) {
	global $_W;
	$uniacid = empty($uniacid) ? $_W['uniacid'] : intval($uniacid);
	$uni_account = pdo_fetch("SELECT * FROM ".tablename('uni_account')." a LEFT JOIN ".tablename('account')." w ON a.uniacid = w.uniacid AND a.default_acid = w.acid WHERE a.uniacid = :uniacid", array(':uniacid' => $uniacid));
		if (empty($uni_account)) {
		$uni_account = pdo_fetch("SELECT * FROM ".tablename('uni_account')." a LEFT JOIN ".tablename('account')." w ON a.uniacid = w.uniacid WHERE a.uniacid = :uniacid ORDER BY w.acid DESC", array(':uniacid' => $uniacid));
	}
	if (!empty($uni_account)) {
		$account = pdo_get(uni_account_tablename($uni_account['type']), array('acid' => $uni_account['acid']));
		if (empty($account)) {
			$account['uniacid'] = $uni_account['uniacid'];
			$account['acid'] = $uni_account['default_acid'];
		}
		$account['type'] = $uni_account['type'];
		$account['isconnect'] = $uni_account['isconnect'];
		$account['isdeleted'] = $uni_account['isdeleted'];
		$account['endtime'] = $uni_account['endtime'];
		return $account;
	}
}

function uni_account_tablename($type) {
	switch ($type) {
		case ACCOUNT_TYPE_OFFCIAL_NORMAL:
		case ACCOUNT_TYPE_OFFCIAL_AUTH:
			return 'account_wechats';
		case ACCOUNT_TYPE_APP_NORMAL:
		case ACCOUNT_TYPE_APP_AUTH:
			return 'account_wxapp';
		case ACCOUNT_TYPE_WEBAPP_NORMAL:
			return 'account_webapp';
		case ACCOUNT_TYPE_PHONEAPP_NORMAL:
			return 'account_phoneapp';
	}
}

function uni_user_account_role($uniacid, $uid, $role) {
	$vice_account = array(
		'uniacid' => intval($uniacid),
		'uid' => intval($uid),
		'role' => trim($role)
	);
	$account_user = pdo_get('uni_account_users', $vice_account, array('id'));
	if (!empty($account_user)) {
		return false;
	}
	return pdo_insert('uni_account_users', $vice_account);
}

function uni_user_see_more_info($user_type, $see_more = false) {
	global $_W;
	if (empty($user_type)) {
		return false;
	}
	if ($user_type == ACCOUNT_MANAGE_NAME_VICE_FOUNDER && !empty($see_more) || $_W['role'] != $user_type) {
		return true;
	}

	return false;
}

function uni_owner_account_nums($uid, $role) {
	$account_num = $wxapp_num = $webapp_num = $phoneapp_num = 0;
	$condition = array('uid' => $uid, 'role' => $role);
	$uniacocunts = pdo_getall('uni_account_users', $condition, array(), 'uniacid');
	if (!empty($uniacocunts)) {
		$all_account = pdo_fetchall('SELECT * FROM (SELECT u.uniacid, a.default_acid FROM ' . tablename('uni_account_users') . ' as u RIGHT JOIN '. tablename('uni_account').' as a  ON a.uniacid = u.uniacid  WHERE u.uid = :uid AND u.role = :role ) AS c LEFT JOIN '.tablename('account').' as d ON c.default_acid = d.acid WHERE d.isdeleted = 0', array(':uid' => $uid, ':role' => $role));
		foreach ($all_account as $account) {
			if ($account['type'] == ACCOUNT_TYPE_OFFCIAL_NORMAL || $account['type'] == ACCOUNT_TYPE_OFFCIAL_AUTH) {
				$account_num++;
			}
			if ($account['type'] == ACCOUNT_TYPE_APP_NORMAL || $account['type'] == ACCOUNT_TYPE_APP_AUTH) {
				$wxapp_num++;
			}
			if ($account['type'] == ACCOUNT_TYPE_WEBAPP_NORMAL) {
				$webapp_num++;
			}
			if ($account['type'] == ACCOUNT_TYPE_PHONEAPP_NORMAL) {
				$phoneapp_num++;
			}
		}
	}
	$num = array(
		'account_num' => $account_num,
		'wxapp_num' => $wxapp_num,
		'webapp_num' => $webapp_num,
		'phoneapp_num' => $phoneapp_num
	);
	return $num;
}
function uni_update_week_stat() {
	global $_W;
	$cachekey = "stat:todaylock:{$_W['uniacid']}";
	$cache = cache_load($cachekey);
	if(!empty($cache) && $cache['expire'] > TIMESTAMP) {
		return true;
	}
	$seven_days = array(
		date('Ymd', strtotime('-1 days')),
		date('Ymd', strtotime('-2 days')),
		date('Ymd', strtotime('-3 days')),
		date('Ymd', strtotime('-4 days')),
		date('Ymd', strtotime('-5 days')),
		date('Ymd', strtotime('-6 days')),
		date('Ymd', strtotime('-7 days')),
	);
	$week_stat_fans = pdo_getall('stat_fans', array('date' => $seven_days, 'uniacid' => $_W['uniacid']), '', 'date');
	$stat_update_yes = false;
	foreach ($seven_days as $sevens) {
		if (empty($week_stat_fans[$sevens]) || $week_stat_fans[$sevens]['cumulate'] <=0) {
			$stat_update_yes = true;
			break;
		}
	}
	if (empty($stat_update_yes)) {
		return true;
	}
	foreach($seven_days as $sevens) {
		if($_W['account']['level'] == ACCOUNT_SUBSCRIPTION_VERIFY || $_W['account']['level'] == ACCOUNT_SERVICE_VERIFY) {
			$account_obj = WeAccount::create();
			$weixin_stat = $account_obj->getFansStat();
			if(is_error($weixin_stat) || empty($weixin_stat)) {
				return error(-1, '调用微信接口错误');
			} else {
				$update_stat = array();
				$update_stat = array(
					'uniacid' => $_W['uniacid'],
					'new' => $weixin_stat[$sevens]['new'],
					'cancel' => $weixin_stat[$sevens]['cancel'],
					'cumulate' => $weixin_stat[$sevens]['cumulate'],
					'date' => $sevens,
				);
			}
		} else {
			$update_stat = array();
			$update_stat['cumulate'] = pdo_fetchcolumn("SELECT COUNT(*) FROM " . tablename('mc_mapping_fans') . " WHERE acid = :acid AND uniacid = :uniacid AND follow = :follow AND followtime < :endtime", array(':acid' => $_W['acid'], ':uniacid' => $_W['uniacid'], ':endtime' => strtotime($sevens)+86400, ':follow' => 1));
			$update_stat['date'] = $sevens;
			$update_stat['new'] = $week_stat_fans[$sevens]['new'];
			$update_stat['cancel'] = $week_stat_fans[$sevens]['cancel'];
			$update_stat['uniacid'] = $_W['uniacid'];
		}
		if(empty($week_stat_fans[$sevens])) {
			pdo_insert('stat_fans', $update_stat);
		} elseif (empty($week_stat_fans[$sevens]['cumulate']) || $week_stat_fans[$sevens]['cumulate'] < 0) {
			pdo_update('stat_fans', $update_stat, array('id' => $week_stat_fans[$sevens]['id']));
		}
	}
	cache_write($cachekey, array('expire' => TIMESTAMP + 7200));
	return true;
}

function uni_account_rank_top($uniacid) {
	global $_W;
	if (!empty($_W['isfounder'])) {
		$max_rank = pdo_getcolumn('uni_account', array(), 'max(rank)');
		pdo_update('uni_account', array('rank' => ($max_rank + 1)), array('uniacid' => $uniacid));
	}else {
		$max_rank = pdo_getcolumn('uni_account_users', array('uid' => $_W['uid']), 'max(rank)');
		pdo_update('uni_account_users', array('rank' => ($max_rank['maxrank'] + 1)), array('uniacid' => $uniacid, 'uid' => $_W['uid']));
	}
	return true;
}

function uni_account_last_switch() {
	global $_W, $_GPC;
	$cache_key = cache_system_key(CACHE_KEY_ACCOUNT_SWITCH, $_GPC['__switch']);
	$cache_lastaccount = (array)cache_load($cache_key);

	if (strexists($_W['siteurl'], 'c=webapp')) {
		$uniacid = $cache_lastaccount['webapp'];
	} else if (strexists($_W['siteurl'], 'c=wxapp')) {
		$uniacid = $cache_lastaccount['wxapp'];
	} else if (strexists($_W['siteurl'], 'c=phoneapp')) {
		$uniacid = $cache_lastaccount['phoneapp'];
	} else {
		$uniacid = $cache_lastaccount['account'];
	}

	return $uniacid;
}

function uni_account_switch($uniacid, $redirect = '', $type = ACCOUNT_TYPE_SIGN) {
	global $_W;
	if (!in_array($type, array(ACCOUNT_TYPE_SIGN, WXAPP_TYPE_SIGN, WEBAPP_TYPE_SIGN, PHONEAPP_TYPE_SIGN))) {
		return error(-1, '账号类型不合法');
	}
	uni_account_save_switch($uniacid, $type);
	isetcookie('__uid', $_W['uid'], 7 * 86400);
	if (!empty($redirect)) {
		header('Location: ' . $redirect);
		exit;
	}
	return true;
}

function uni_account_save_switch($uniacid, $type = ACCOUNT_TYPE_SIGN) {
	global $_W, $_GPC;
	load()->model('visit');
	if (!in_array($type, array(ACCOUNT_TYPE_SIGN, WXAPP_TYPE_SIGN, WEBAPP_TYPE_SIGN, PHONEAPP_TYPE_SIGN))) {
		return error(-1, '账号类型不合法');
	}

	if (empty($_GPC['__switch'])) {
		$_GPC['__switch'] = random(5);
	}

	$cache_key = cache_system_key(CACHE_KEY_ACCOUNT_SWITCH, $_GPC['__switch']);
	$cache_lastaccount = cache_load($cache_key);
	if (empty($cache_lastaccount)) {
		$cache_lastaccount = array(
			$type => $uniacid,
		);
	} else {
		$cache_lastaccount[$type] = $uniacid;
	}

	visit_system_update(array('uniacid' => $uniacid, 'uid' => $_W['uid']));
	cache_write($cache_key, $cache_lastaccount);

	cache_write('we7:$cache_last_account_type', $type);

	isetcookie('__uniacid', $uniacid, 7 * 86400);
	isetcookie('__switch', $_GPC['__switch'], 7 * 86400);
	return true;
}

function account_create($uniacid, $account) {
	global $_W;
	$accountdata = array('uniacid' => $uniacid, 'type' => $account['type'], 'hash' => random(8));
	$user_create_account_info = permission_user_account_num();
	if (empty($_W['isfounder']) && empty($user_create_account_info['usergroup_account_limit'])) {
		$accountdata['endtime'] = strtotime('+1 month', time());
		pdo_insert('site_store_create_account', array('endtime' => strtotime('+1 month', time()), 'uid' => $_W['uid'], 'uniacid' => $uniacid, 'type' => ACCOUNT_TYPE_OFFCIAL_NORMAL));
	}
	pdo_insert('account', $accountdata);
	$acid = pdo_insertid();
	$account['acid'] = $acid;
	$account['token'] = random(32);
	$account['encodingaeskey'] = random(43);
	$account['uniacid'] = $uniacid;
	unset($account['type']);
	pdo_insert('account_wechats', $account);
	return $acid;
}

function account_fetch($acid) {
	$account_info = pdo_get('account', array('acid' => $acid));
	if (empty($account_info)) {
		return error(-1, '公众号不存在');
	}
	return uni_fetch($account_info['uniacid']);
}

function uni_setmeal($uniacid = 0) {
	global $_W;
	if(!$uniacid) {
		$uniacid = $_W['uniacid'];
	}
	$owneruid = pdo_fetchcolumn("SELECT uid FROM ".tablename('uni_account_users')." WHERE uniacid = :uniacid AND role = 'owner'", array(':uniacid' => $uniacid));
	if(empty($owneruid)) {
		$user = array(
			'uid' => -1,
			'username' => '创始人',
			'timelimit' => '未设置',
			'groupid' => '-1',
			'groupname' => '所有服务'
		);
		return $user;
	}
	load()->model('user');
	$groups = pdo_getall('users_group', array(), array('id', 'name'), 'id');
	$owner = user_single(array('uid' => $owneruid));
	$user = array(
		'uid' => $owner['uid'],
		'username' => $owner['username'],
		'groupid' => $owner['groupid'],
		'groupname' => $groups[$owner['groupid']]['name']
	);
	if(empty($owner['endtime'])) {
		$user['timelimit'] = date('Y-m-d', $owner['starttime']) . ' ~ 无限制' ;
	} else {
		if($owner['endtime'] <= TIMESTAMP) {
			$user['timelimit'] = '已到期';
		} else {
			$year = 0;
			$month = 0;
			$day = 0;
			$endtime = $owner['endtime'];
			$time = strtotime('+1 year');
			while ($endtime > $time)
			{
				$year = $year + 1;
				$time = strtotime("+1 year", $time);
			};
			$time = strtotime("-1 year", $time);
			$time = strtotime("+1 month", $time);
			while($endtime > $time)
			{
				$month = $month + 1;
				$time = strtotime("+1 month", $time);
			} ;
			$time = strtotime("-1 month", $time);
			$time = strtotime("+1 day", $time);
			while($endtime > $time)
			{
				$day = $day + 1;
				$time = strtotime("+1 day", $time);
			} ;
			if (empty($year)) {
				$timelimit = empty($month)? $day.'天' : date('Y-m-d', $owner['starttime']) . '~'. date('Y-m-d', $owner['endtime']);
			}else {
				$timelimit = date('Y-m-d', $owner['starttime']) . '~'. date('Y-m-d', $owner['endtime']);
			}
			$user['timelimit'] = $timelimit;
		}
	}
	return $user;
}

function uni_is_multi_acid($uniacid = 0) {
	global $_W;
	if(!$uniacid) {
		$uniacid = $_W['uniacid'];
	}
	$cachekey = "unicount:{$uniacid}";
	$nums = cache_load($cachekey);
	$nums = intval($nums);
	if(!$nums) {
		$nums = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename('account_wechats') . ' WHERE uniacid = :uniacid', array(':uniacid' => $_W['uniacid']));
		cache_write($cachekey, $nums);
	}
	if($nums == 1) {
		return false;
	}
	return true;
}

function account_delete($acid) {
	global $_W;
	load()->func('file');
	load()->model('module');
	load()->model('job');
	$jobid  = 0;
		$account = pdo_get('uni_account', array('default_acid' => $acid));
	if ($account) {
		$uniacid = $account['uniacid'];
		$state = permission_account_user_role($_W['uid'], $uniacid);
		if (!in_array($state, array(ACCOUNT_MANAGE_NAME_OWNER, ACCOUNT_MANAGE_NAME_FOUNDER, ACCOUNT_MANAGE_NAME_VICE_FOUNDER))) {
			itoast('没有该公众号操作权限!', url('account/recycle'), 'error');
		}
		if($uniacid == $_W['uniacid']) {
			isetcookie('__uniacid', '');
		}
		cache_delete("uniaccount:{$uniacid}");
		$modules = array();
				$rules = pdo_fetchall("SELECT id, module FROM ".tablename('rule')." WHERE uniacid = '{$uniacid}'");
		if (!empty($rules)) {
			foreach ($rules as $index => $rule) {
				$deleteid[] = $rule['id'];
			}
			pdo_delete('rule', "id IN ('".implode("','", $deleteid)."')");
		}

		$subaccount = pdo_fetchall("SELECT acid FROM ".tablename('account')." WHERE uniacid = :uniacid", array(':uniacid' => $uniacid));
		if (!empty($subaccount)) {
			foreach ($subaccount as $childaccount) {
				@unlink(IA_ROOT . '/attachment/qrcode_'.$childaccount['acid'].'.jpg');
				@unlink(IA_ROOT . '/attachment/headimg_'.$childaccount['acid'].'.jpg');
				file_remote_delete('qrcode_'.$childaccount['acid'].'.jpg');
				file_remote_delete('headimg_'.$childaccount['acid'].'.jpg');
			}
			if (!empty($acid)) {
				$jobid = job_create_delete_account($uniacid, $account['name'], $_W['uid']);
			}
		}

				$tables = array(
			'account','account_wechats', 'account_wxapp', 'wxapp_versions', 'account_webapp', 'account_phoneapp',
			'phoneapp_versions','core_paylog','core_queue','core_resource',
			 'cover_reply', 'mc_chats_record','mc_credits_recharge','mc_credits_record',
			'mc_fans_groups','mc_groups','mc_handsel','mc_mapping_fans','mc_mapping_ucenter','mc_mass_record',
			'mc_member_address','mc_member_fields','mc_members','menu_event',
			'qrcode','qrcode_stat', 'rule','rule_keyword','site_article','site_category','site_multi','site_nav','site_slide',
			'site_styles','site_styles_vars','stat_keyword', 'stat_rule','uni_account','uni_account_modules','uni_account_users','uni_settings', 'uni_group', 'uni_verifycode','users_permission',
			'mc_member_fields', 'wechat_news',
		);
		if (!empty($tables)) {
			foreach ($tables as $table) {
				$tablename = str_replace($GLOBALS['_W']['config']['db']['tablepre'], '', $table);
				pdo_delete($tablename, array( 'uniacid'=> $uniacid));
			}
		}
	} else {
		$account = account_fetch($acid);
		if (empty($account)) {
			itoast('子公众号不存在或是已经被删除', '', '');
		}
		$uniacid = $account['uniacid'];
		$state = permission_account_user_role($_W['uid'], $uniacid);
		if($state != ACCOUNT_MANAGE_NAME_FOUNDER && $state != ACCOUNT_MANAGE_NAME_OWNER) {
			itoast('没有该公众号操作权限!', url('account/recycle'), 'error');
		}
		$uniaccount = uni_fetch($account['uniacid']);
		if ($uniaccount['default_acid'] == $acid) {
			itoast('默认子公众号不能删除', '', '');
		}
		pdo_delete('account', array('acid' => $acid));
		pdo_delete('account_wechats', array('acid' => $acid, 'uniacid' => $uniacid));
		cache_delete("uniaccount:{$uniacid}");
		cache_delete("unisetting:{$uniacid}");
		cache_delete('account:auth:refreshtoken:'.$acid);
		$oauth = uni_setting($uniacid, array('oauth'));
		if($oauth['oauth']['account'] == $acid) {
			$acid = pdo_fetchcolumn('SELECT acid FROM ' . tablename('account_wechats') . " WHERE uniacid = :id AND level = 4 AND secret != '' AND `key` != ''", array(':id' => $uniacid));
			pdo_update('uni_settings', array('oauth' => iserializer(array('account' => $acid, 'host' => $oauth['oauth']['host']))), array('uniacid' => $uniacid));
		}
		@unlink(IA_ROOT . '/attachment/qrcode_'.$acid.'.jpg');
		@unlink(IA_ROOT . '/attachment/headimg_'.$acid.'.jpg');
		file_remote_delete('qrcode_'.$acid.'.jpg');
		file_remote_delete('headimg_'.$acid.'.jpg');
	}
	return $jobid;
}

function account_wechatpay_proxy () {
	global $_W;
	$proxy_account = cache_load(cache_system_key('proxy_wechatpay_account:'));
	if (empty($proxy_account)) {
		$proxy_account = cache_build_proxy_wechatpay_account();
	}
	unset($proxy_account['borrow'][$_W['uniacid']]);
	unset($proxy_account['service'][$_W['uniacid']]);
	return $proxy_account;
}

function uni_account_module_shortcut_enabled($modulename, $uniacid = 0, $status = STATUS_ON) {
	global $_W;
	$module = module_fetch($modulename);
	if(empty($module)) {
		return error(1, '抱歉,你操作的模块不能被访问!');
	}
	$uniacid = intval($uniacid);
	$uniacid = !empty($uniacid) ? $uniacid : $_W['uniacid'];

	$module_status = pdo_get('uni_account_modules', array('module' => $modulename, 'uniacid' => $uniacid), array('id', 'shortcut'));
	if (empty($module_status)) {
		$data = array(
			'uniacid' => $uniacid,
			'module' => $modulename,
			'enabled' => STATUS_ON,
			'shortcut' => $status ? STATUS_ON : STATUS_OFF,
			'settings' => '',
		);
		pdo_insert('uni_account_modules', $data);
	} else {
		$data = array(
			'shortcut' => $status ? STATUS_ON : STATUS_OFF,
		);
		pdo_update('uni_account_modules', $data, array('id' => $module_status['id']));
		cache_build_module_info($modulename);
	}
	return true;
}

function uni_account_member_fields($uniacid) {
	if (empty($uniacid)) {
		return array();
	}
	$account_member_fields = pdo_getall('mc_member_fields', array('uniacid' => $uniacid), array(), 'fieldid');
	$system_member_fields = pdo_getall('profile_fields', array(), array(), 'id');
	$less_field_indexes = array_diff(array_keys($system_member_fields), array_keys($account_member_fields));
	if (empty($less_field_indexes)) {
		foreach ($account_member_fields as &$field) {
			$field['field'] = $system_member_fields[$field['fieldid']]['field'];
		}
		unset($field);
		return $account_member_fields;
	}

	$account_member_add_fields = array('uniacid' => $uniacid);
	foreach ($less_field_indexes as $field_index) {
		$account_member_add_fields['fieldid'] = $system_member_fields[$field_index]['id'];
		$account_member_add_fields['title'] = $system_member_fields[$field_index]['title'];
		$account_member_add_fields['available'] = $system_member_fields[$field_index]['available'];
		$account_member_add_fields['displayorder'] = $system_member_fields[$field_index]['displayorder'];
		pdo_insert('mc_member_fields', $account_member_add_fields);
		$insert_id = pdo_insertid();
		$account_member_fields[$insert_id]['id'] = $insert_id;
		$account_member_fields[$insert_id]['field'] = $system_member_fields[$field_index]['field'];
		$account_member_fields[$insert_id]['fid'] = $system_member_fields[$field_index]['id'];
		$account_member_fields[$insert_id] = array_merge($account_member_fields[$insert_id], $account_member_add_fields);
	}
	return $account_member_fields;
}

function uni_account_global_oauth() {
	load()->model('setting');
	$oauth = setting_load('global_oauth');
	$oauth = !empty($oauth['global_oauth']) ? $oauth['global_oauth'] : array();
	return $oauth;
}

function uni_search_link_account($module_name, $account_type) {
	global $_W;
	$module_name = trim($module_name);
	if (empty($module_name) || empty($account_type) || !in_array($account_type, array(ACCOUNT_TYPE_OFFCIAL_NORMAL, ACCOUNT_TYPE_OFFCIAL_AUTH, ACCOUNT_TYPE_APP_NORMAL, ACCOUNT_TYPE_WEBAPP_NORMAL))) {
		return array();
	}
	if (in_array($account_type, array(ACCOUNT_TYPE_OFFCIAL_NORMAL, ACCOUNT_TYPE_OFFCIAL_AUTH))) {
		$owned_account = uni_user_accounts($_W['uid'], 'app');
	} elseif ($account_type == ACCOUNT_TYPE_APP_NORMAL) {
		$owned_account = uni_user_accounts($_W['uid'], 'wxapp');
	} elseif ($account_type == ACCOUNT_TYPE_WEBAPP_NORMAL) {
		$owned_account = uni_user_accounts($_W['uid'], 'webapp');
	} else {
		$owned_account = array();
	}
	if (!empty($owned_account)) {
		foreach ($owned_account as $key => $account) {
			if ($account['type'] != $account_type) {
				unset($owned_account[$key]);
				continue;
			}
			$account['role'] = permission_account_user_role($_W['uid'], $account['uniacid']);
			if (!in_array($account['role'], array(ACCOUNT_MANAGE_NAME_OWNER, ACCOUNT_MANAGE_NAME_FOUNDER))) {
				unset($owned_account[$key]);
			}
		}
		foreach ($owned_account as $key => $account) {
			$account_modules = uni_modules_by_uniacid($account['uniacid']);
			if (empty($account_modules[$module_name])) {
				unset($owned_account[$key]);
				continue;
			}
			if (in_array($account_type, array(ACCOUNT_TYPE_OFFCIAL_NORMAL, ACCOUNT_TYPE_OFFCIAL_AUTH)) && $account_modules[$module_name]['app_support'] != MODULE_SUPPORT_ACCOUNT) {
				unset($owned_account[$key]);
			} elseif ($account_type == ACCOUNT_TYPE_APP_NORMAL && $account_modules[$module_name]['wxapp_support'] != MODULE_SUPPORT_WXAPP) {
				unset($owned_account[$key]);
			} elseif ($account_type == ACCOUNT_TYPE_WEBAPP_NORMAL && $account_modules[$module_name]['webapp_support'] != MODULE_SUPPORT_WEBAPP) {
				unset($owned_account[$key]);
			}
		}
	}
	return $owned_account;
}

function uni_account_oauth_host() {
	global $_W;
	$oauth_url = $_W['siteroot'];
	$unisetting = uni_setting_load();
	if (!empty($unisetting['bind_domain']) && !empty($unisetting['bind_domain']['domain'])) {
		$oauth_url = $unisetting['bind_domain']['domain'] . '/';
	} else {
		if (!empty($unisetting['oauth']['host'])) {
			$oauth_url = $unisetting['oauth']['host'] . '/';
		} else {
			$global_unisetting = uni_account_global_oauth();
			$oauth_url = !empty($global_unisetting['oauth']['host']) ? $global_unisetting['oauth']['host'] . '/' : $oauth_url;
		}
	}
	return $oauth_url;
}

redpajama_set_name: RedPajamaGithub


text:
Battered U.S. Restaurants and Bars Miss Out on Stimulus Bailout
Leslie Patton
Dec 23 2020, 1:13 AM Dec 23 2020, 10:41 PM December 23 2020, 1:13 AM December 23 2020, 10:41 PM
(Bloomberg) -- The $900 billion U.S. stimulus package doesn't allocate direct funding for restaurants and bars, another blow to two of the hardest-hit parts of the U.S. economy.
The wide-ranging spending bill does allow small businesses to take out loans. It also directly funds several beleaguered industries, but doesn't include restaurants and bars. With more states restricting indoor activities, these establishments are already facing a bleak future.
"Independent restaurants and bars will continue to close without additional relief this winter, leaving millions more out of work," the Independent Restaurant Coalition said in a statement.
Those industries have been decimated by the pandemic that continues to rage across America. Bankruptcies and closures are surging. And while revenue has recovered somewhat from its low in April, sit-down eateries are still struggling. These declines have also hurt suppliers, including beer and spirits providers.
Democrats in the House passed the Restaurants Act earlier this year that would have provided $120 billion in direct funding, but the Republican-controlled Senate declined to take up the legislation. Meanwhile, the stimulus set aside about $15 billion each for the airline and entertainment industries.
Despite the lack of a bailout, the stimulus proved to be "a hard fought victory" that provides the sector an "element of hope" entering the new year, according to Sean Kennedy, executive vice president of public affairs for the National Restaurant Association.
"Is this a long-term solution? No," Kennedy said. "We're just looking to survive the next three months."
Restaurants and bars, along with other small businesses, can apply for aid from the Paycheck Protection Program, the vehicle created by the first stimulus earlier this year. The PPP, which received $284 billion in additional funds, lets firms borrow 2.5 times monthly payroll costs, with restaurants and bars allowed to receive 3.5 times.
Another critical part of the aid package, according to Kennedy, is that business expenses, such as rent, that are allowed to be deducted from federal taxes, can be paid with PPP funds. This was not the case in the first round of PPP, he said.
"Our biggest fear is that congress would leave town having done nothing, and they were on that path," Kennedy said. "It's clear we're going to have severe economic challenges going forward. Our work isn't done."
Follow All The Political News In India On BloombergQuint

redpajama_set_name: RedPajamaCommonCrawl


text:
Invalidovna (French "hôtel des invalides") is a building in Karlín, a district of Prague.

Invalidovna was built from 1731-1737 as a dormitory for war invalids (veterans) by Kilián Ignác Dienzenhofer. Its model was Les Invalides, a building for veterans inaugurated in Paris in 1679.

Only a ninth of the original design was ever completed. At most, about 1200 inmates lived there. In 1935, all inhabitants moved to another "invalidovna", at Hořice, and the building was used by the Czech army. After this, it was used as an army archive. The building was damaged by a large flood in 2002, and most of the archive materials were destroyed. The building currently awaits an expensive reconstruction. One possible future use is as an open space for culture and social life.

Several scenes from 1984 American drama film Amadeus directed by Miloš Forman were shot in the building.

The metro station Invalidovna is named after this building.

References

Baroque architecture in the Czech Republic
Buildings and structures in Prague
Archives in the Czech Republic
1730s establishments in the Holy Roman Empire

redpajama_set_name: RedPajamaWikipedia


The cooler can be operated at two levels.
2. Press the button once for each cooling level.
The highest cooling power is active when two LEDs are lit.
If the cooler was switched on the last time the ignition was switched on, it will likewise be switched on the next time the ignition is switched on.


text:
Tags: MLB, Baseball, Sports, Astros
Fickle February forecasting
Santa Fe gunman Dimitrios Pagourtzis remains incompetent to stand trial, Galveston County DA's office says
Meet the Astros' littlest fan.
PEARLAND, Texas – Meet one little Astros fan who was born with baseball in his blood.
Aaron Brooks is 3 years old and has been an Astros fan since the day he was born.
"Outside of 'Mama' and 'Dada,' his first words (was) ball and one of his first phrases (was), 'Let's go Astros!' " Aaron's mom, Melba Brooks, said. "He's been an Astros fan since the womb. We actually took our maternity shoot in the Astros' dugout, so he didn't have a choice but to be a fan. If you're going to do it you got to do it right, so I called up the Astros and asked, 'Can I take the pictures in the dugout,' and they said nobody had ever asked ... you never know if you don't ask."
Aaron smiles whenever he hears the name Jose Altuve and loves to cheer on the team.
"At the beginning every player (was) Altuve," Brooks laughed. "In this second series, he's learned Bregman."
This family never misses a moment and loves taking Aaron to the games.
"He gets to the game...all the fans love him," Brooks said. "At first they think he's not going to cheer, but he gets the crowd going."
Aaron got to go to his first World Series game Tuesday, and Brooks said it was a memorable experience for the family, one they will never forget.


text:
Full House Season 8 Episode 23
Michelle Rides Again (1)
Full Episode: Michelle Rides Again (1)
Full Episode Summary
Changes are on the horizon for the Tanner clan as this 2-part series finale begins. High school senior D.J. is planning to forego prom night, which sends Kimmy on a chase to find her best friend a date. Former business partners Jesse and Joey have the opportunity to appear on live television with professional wrestlers, but this is hardly the type of material they are used to working with. Stephanie is rehearsing a portion of Romeo and Juliet with a handsome classmate, but she doesn't understand why he always freezes up during the kissing scene. Lastly, Michelle is excited when Danny gives her permission to participate in a horseback riding competition, but the pressure to win results in a terrifying accident.moreless
More Full Episodes
S 8 : Ep 24
Aired 5/23/95
All Stood Up
Aired 4/4/95
More Info About This Show
Comedy, Kids
90s, for the nostalgic, feel good comedy, child stars, Coming of Age
Listings | Closed Captioning | Rating Guidelines


text:
Attacks on Asian Americans
When most people have a bad day they take a nap or push through a workout to cheer themselves up. But in March of 2021, a man police claim was "having a bad day" drove to three spas in Atlanta and opened fire, murdering eight people—six of whom were women of Asian descent. It sparked a worldwide conversation about discrimination and an outcry for change.
Unfortunately, the Atlanta shooting wasn't the first attack on Asian Americans this year. In February, a video of Vicha Ratanapkadee, an 84-year-old Thai immigrant, being tackled in San Francisco went viral. The video shows a man rushing across the street in broad daylight to charge at Ratanapkadee, who later died. Chesa Boudin, the city's district attorney, told the New York Times that there was "no evidence to suggest" the crime was racially motivated. The suspect's lawyers said he had an "outburst of rage."
While the number of hate crimes reported in major U.S. cities decreased last year, crimes directed at Asian Americans spiked. According to a study from the Center for the Study of Hate and Extremism at California State University, San Bernardino, hate crimes in 16 metropolitan areas, including New York and Los Angeles, dipped seven percent from 2019 to 2020—but those targeting Asian Americans spiked nearly 150%.
Stop AAPI (Asian American and Pacific Islander) Hate, a national reporting center, documented 3,292 anti-Asian incidents in 2020. And by February 28 of 2021, their national report stated 503 more incidents had already occurred. "The number of hate incidents reported to our center represent only a fraction of the number of hate incidents that actually occur," the report said. "But it does show how vulnerable AsianAmericans are to discrimination, and the types of discrimination they face."
Most of the discrimination documented in the report are incidents of verbal harassment (68%) or shunning (20%). It said 11% of incidents were violent —a fact that University of Miami senior Sarah Simon said is new and scary. "Anti-Asian hate crimes are at an all-time high," the exercise physiology major said, "and the physical violence is new for me. I've never really had to worry about that, and it's crazy that I feel that way now."
Across the United States, many Asian Americans are on high alert. After the February attack on Vicha Ratanapkadee, the Royal Thai Consulate-General in Los Angeles warned Thai individuals in California to be keep their guard up when in public. According to the Tennessean, just 48.7% of Asian American students in Tennessee returned to in-person schooling when given the option to stop learning remotely—the smallest percentage out of any ethnic group. In New York City, Asian Americans make up 18% of students, but less than 12% of them returned to attend in-person classes."
I spoke to a school principal who said a woman brought her child on the subway to school, and she was harassed on the train," said Washington Post education reporter Moriah Balingit. "And after that, she decided to keep her daughter home. She was afraid to ride the subway. Asian Americans are disproportionately making the decision to keep their children home."
The Coronavirus is commonly cited as a major reason for the rise in anti-Asian American hate. "Because of the COVID-19 pandemic, I have definitely seen an increase in anti-Asian hate," said senior Jamie Harn. "At first, it would just be people joking about Asian food and how it's 'sketchy and disgusting.' But I think as more people started blaming China for the virus, people would always ask me if Vietnam was a dirty country or if our food can also cause a pandemic."
She said that even people close to her would say that they had to stay away from Asian food just in case.
Some far-right groups and individuals including former president Donald Trump referred to the disease as the "China" or "Wuhan" virus. "A recent report by the University of California in San Francisco directly linked Trump's first tweet about the Chinese virus to a significant increase in anti-Asian hashtags," said Yunqiu (Daniel) Wang, a senior lecturer and biology adviser at UM."
The election has corresponded with a resurgence of anti-Asian hate," Joel Finkelstein, the co-founder of the Network Contagion Research Institute, told the Washington Post "There are a lot of people looking for others to blame." In January, they reported, "Terms including 'China,' 'Wuhan' and 'flu' surged on far-right forums like Telegram, 8kun and TheDonald.
"The physical violence is new for me. I've never really had to worry about that, and it's crazy that I feel that way now."
—Sarah Simon, UNIVERSITY OF MIAMI SENIOR
Harmful stereotypes and phenomena including the "model minority" label and fetishization of Asian women may also play into the violence. The "model minority" myth," University of Maryland Baltimore County professor Charissa Cheah told the Washington Post, perpetuates the idea that Asian-Americans as a group have succeeded in this country and have "moved beyond discrimination." She said another harmful and sometimes conjoined issue is "the sexualization and exoticization of Asian-American females in a very disturbing way." The Stop AAIP Hate report showed that Asian-American women are 2.3 times more likely than men to report hate incidents.
For Abby Pak, a freshman at UM, "I feel like jokes towards the Asian race are often overlooked. Being called Jackie Chan or Ching Chong isn't 'just a joke,' but actually so racist and hurtful. Ever since I was young I just laughed it off, especially because I grew up in a really white area," said Pak. She said that recently a man approached her while at a restaurant with friends and ask if she believed in God or studied the Bible. "When I said I didn't, he said 'oh, you study the Karate Kid right?' Comments like that are often very unnecessary and just not funny."
When the Atlanta shooter confessed to his killings, he told authorities they were not racially motived, but that he was a "sex addict" trying to "eliminate temptation." But many advocates, activists and academics don't buy it. Instead, they note that such violence and sentiment lie at the intersection of racism and misogyny."
Violence can be racially and gendered motivated—that is, racialized misogyny," said Donna Coker, a professor at the UM School of Law. "That the two are intertwined. There is a long history of white men fetishizing Asian women, of presuming them to be sexually available. In addition, there is a long history of blaming women—and particularly women who are of racially subordinated groups—for male sexual desire."
"The killer showed that for him, these women were not worth respect as human beings, but were sexual objects," said Claire Oueslati-Porter, a senior lecturer in gender and sexuality studies at the University of Miami College of Arts and Sciences. "He specifically went to Asian businesses with Asian workers. There were other businesses on the same street that he could have attacked but didn't. The fact that he felt he had the power to 'eliminate' Asian women means that he was engaged in white supremacist patriarchal violence. He denied racism, but a lot of racism isn't understood as such by the racist. The killer justified his violence by using his religiosity, describing these human beings as 'temptations."
For all the claims of "bad days," tantrums and sexual fanaticism, the numbers don't lie: Attacks on Asian-Americans have skyrocketed in the past year, and it's hard to chalk these incidents up to coincidence.
There are things people can do to combat anti-Asian discrimination, even if they aren't personally affected by the phenomenon. "People should learn the history and culture of Asian countries and see all the beautiful parts of them," said Harn. "It's unfair to blame one single country for the pandemic when one, pandemics could and have originated from many places and two, other countries could have helped with the spread of it." Pak agreed. "I think UM students can help in combating the issue by always being an ally and watching what they say," she said. "I know some people think they are just making a joke but it isn't as funny as they think it is."
*Some reporting courtesy of UM Communications.
words_rachelle barrett. design_katrina schmidt.
This article was published in Distraction's summer 2021 print issue.
Tooth Gems
Santería: Little Havana, Big Charm
Deep Dive: Solace, Empathy & The Hardships Of Friendship
From Theater to Drag: an Interview with Daniel Barrett
Deep Dive: Something About Music


I've been making it up as I go…spinach, frozen bananas, a mix of frozen fruit containing cantaloupe, strawberry, mango, and papaya. I sometimes add an apple.
Oh my goodness….all time classic, Beginners Luck!!!
Flu fighter. I am really sick right now with the flu. As soon as I gulp down the flu fighter smoothie I feel better and more awake. Thank you!
My favorite is the Skinny Mint Green Smoothie! It's so delicious, that I could drink it all day long!
OPTIONAL: cacao nibs sprinkled on top.
Shoot how do you choose one? Adding one different thing enhances the flavor so much. My favorite would probably be the Straw-bana Peach or Melon Berry. I love the berries!
My favorite is GINGERLICIOUS! I feel like I could drink it everyday!!
I am really enjoying the 30 day challenge! A Vitamix would make my smoothies much better and hopefully more appealing to my kids and husband. I have an old blender I am using but my husband and kids aren't fans of chewing their smoothies… So far the one I like best is the Quick Pick Me Up! Thanks for sharing all these recipes that are getting me on the right track!
I love Brain Fuel! Especially with the hemp hearts on top.
I love the citrus banana boost from the Fresh Start 21 recipes! It's so clean and light but packed with just enough flavor to make it extra special.
Thanks for all that you ladies do!! Recipes are amazing.
Citrus breeze is my favorite, because it is so refreshing and yummy!
So hard to choose but I'm going with Hawaiian Breeze!! Takes me to the islands on a cold winter's day!
I love the Chocolate Dipped Strawberries one. And so does my husband! Win win!
One of many favorite smoothie is apple pie. I love how it is just a sweet as pie but doesn't bog me down.
I might not be original enough, but my first love was the beginner's luck and it still is my favorite smoothie after all this time! I feel like I drink a glass full of spring. I like it not only for its taste, but also for its energizing light color!
I have loved everyone of them that I have tried, but I'd have to say Coconut Dream is my fav. Thank you both so much!!


text:
Q: Swift - Core Data Seeding Class I am following the current tutorial on creating a large class to handle seeding a large database with data.
http://www.andrewcbancroft.com/2015/02/25/using-swift-to-seed-a-core-data-database/
My database is populated using JSON, though I am wanting to copy the pattern the author uses in the above article.
During the article he mentions this approach violates the single-use responsibility. I am aware that classes should take a single responsibility, but given a situation such as mine where I will need to seed quite a large dataset when the user logs in for example, is there another approach to take?
I apologise if this comes off as inciting a discussion, that isn't my intention, my question is wether this style of seeding is commonplace in production or if not, what is the best pattern to implement this kind of data seeding.

A: I don't think it's possible to really answer how everyone imports data in production as everyone could do different things.
Instead, I just want to mention that according to Apple's "Core Data Programming Guide" the most efficient way to import data is via a batch import process. This process is detailed here.
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html
With that said I would store your data in a JSON file that is stored either on a web service, or in the app bundle as a resource, and then use the NSJsonSerialization class to convert it to foundation objects that your code can reason with. Then I would use the principals outlined in the guide above to create a bulk import process to seed your database.
That's pretty much it, and Apple's examples are pretty straight forward. I would also state it would be best to run this process on a background thread as the OS may terminate your application if the import takes a long time to complete.
Hope this helps!
* EDIT *
Here is an example of how you can use protocols and generics to perform tasks against any type of object. You can use this pattern to perform any type of operation, so just take the concept and enter your Core Data logic.
This is merely an example of a pattern one could follow, and shouldn't be considered a plug-in-play implementation. It will need to be adapted to support the Core Data bulk import and saving. However, it does clearly show a way to take a dictionary, or array of dictionaries, and decode them to objects. Then what you do with your objects is completely up to you.
protocol JSONDecodable {

    // This is used so you can have a unified way to instantiate an instance without relying on sub-classing NSObject
    init()

    // This can be implemented so you can manually decode a single object of the type from a dictionary
    static func decodeFromJSON(json: AnyObject?) -> AnyObject?

    // This is used so that you can manually set the values to the object. This is required as Swift reflection doesn't support dynamic property setting
    func setValueForKey(value: AnyObject?, forKey: String)
}

// This class is responsible for decoding a JSON dictionary into an object
class JSONDecoder<T:JSONDecodable>: NSObject {

    //MARK: Initialization

    required override init() {
        // do any initialization here
    }

    //MARK: Public Methods

    /**
        Creates a single object from the JSON. This method should only be used if the JSON will only ever contain a single object

        :json: A dictionary of data
        :returns: An object of the given type
    */
    func toSingle(json: AnyObject?) -> T? {

        // process single object, and return an array with the one object
        if let dict = json as? [NSObject: AnyObject] {
            return self.makeObject(dict)
        }

        return nil
    }

    /**
        Creates a list of objects from the JSON. This method should only be used if the JSON will contain multiple objects

        :json: A dictionary of data
        :returns: An list of objects of the given type
    */
    func toArray(json: AnyObject?) -> [T]? {

        // process array
        if let arr = json as? [AnyObject] {
            return self.makeObjects(arr)

        } else if let dict = json as? [NSObject: AnyObject] {
            // process single object, and return an array with the one object
            var arr = [T]()
            arr.append(self.makeObject(dict))
            return arr
        }

        return nil
    }

    //MARK: The Magic

    private func makeObjects(jsonArray: [AnyObject]?) -> [T]? {

        var returnArray: [T] = [T]()

        if let jArray = jsonArray {
            for jObject in jArray {
                if let dict = jObject as? [NSObject: AnyObject] {
                    returnArray.append(self.makeObject(dict))
                }
            }
        }

        if returnArray.count > 0 {
            return returnArray
        } else {
            return nil
        }
    }

    private func makeObject(jsonDict: [NSObject: AnyObject]) -> T {

        var returnObject = T.self() // this is where the init() function in the protocol comes in handy. It allows us to use generics to create a dynamic instance of our object

        for (key, value) in jsonDict {
            if let k = key as? String {
                returnObject.setValueForKey(value, forKey: k) // this is where the setValueForKey(value: AnyObject?, forKey: String) function in the protocol comes in handy. It allows us to let the object it's self set it's own values.
            }
        }

        return returnObject
    }
}

// This is an example class that implements the protocol which means it can be sent through the decoding process
class Employee: NSManagedObject, JSONDecodable {

    //MARK: - Properties
    var employeID: Int!
    var name: Int!
    var hireDate: NSDate?
    var department: Department?

    //MARK: - Initialization
    override required init() {
        // Necessary to satisfy the JSONDecodable protocol
    }

    static func decodeFromJSON(json: AnyObject?) -> AnyObject? {

        var decoder = JSONDecoder<Employee>()
        return decoder.toSingle(json)
    }

    func setValueForKey(value: AnyObject?, forKey: String) {

        switch (forKey) {
        case "employeID":
            self.employeID = value as! Int

        case "name":
            self.name = value as! String

        case "hireDate":

            if let v = value as? String {
                let dateFormatter = NSDateFormatter()
                dateFormatter.dateFormat = "MM/dd/yyyy"
                self.hireDate = dateFormatter.dateFromString(v)
            }

        case "department":
            if let v = value as? [NSObject: AnyObject] {

                if let dept = Department.decodeFromJSON(dict) as? Department {
                    self.department = dept
                }
            }

        default:
            NSLog("[setValueForKey] Unable to find property \(forKey)")
        }
    }
}

redpajama_set_name: RedPajamaStackExchange


text:
Glory for McIntosh at ISSF World Cup in China
By Alex Bell
The first medals have been awarded at the International Shooting Sport Federation World Cup Rifle/Pistol in China, with Scotland's Seonaid McIntosh taking home gold.
Despite placing third after the kneeling discipline in the three positions 50m rifle final, McIntosh came back strong in the prone and standing at Putian Sports Training Base.
Her final score of 462.1 placed her ahead of China's Ruijiao Pei and Nina Christen of Switzerland.
It's been a stellar year for McIntosh, with silver and gold at the Rio World Cup in August and European gold in September.
She is now guaranteed to finish the year as world number one.
Waking up to a gold medal from the @ISSF_Shooting World Cup Finals in China!! What a year it's been for British Shooting's Olympic shooter of the year, Seonaid McIntosh! ?????????? Bring on 2020!! #IGoBeyond (? @MacCoach10) pic.twitter.com/23y3jZ8Ff9
— British Shooting (@GBShooting) November 19, 2019
In the men's 50m rifle three positions final, Filip Nepejchal of Czech Republic struck gold.
He secured a new junior world record with a score of 462.9.
Silver went to Serbian Milenko Sebic, with 461.5 and Sergey Kamenskiy of Russia rounding out the podium (449.8).
Tomorrow sees the finals of the 25m pistol women and rapid fire pistol for men.
Competition at the season-ending event continues until Friday (November 22).
November 2019: Lin bids for home success at ISSF World Cup Final for rifle and pistol
September 2019: ISSF members hit out at organisation's "disrespectful" social media posts
September 2019: Liam Morgan: Is the proposed new ISSF constitution a step forward or backward?
September 2019: ISSF to hold extraordinary assembly in December to amend constitution
September 2019: India win both mixed team golds as ISSF World Cup closes in Rio de Janeiro
Alex Bell Desk Editor
Follow @@AJBell109
Alex Bell was the editor-in-chief of the 2018 Commonwealth Games News Service in the Gold Coast. Before that, he was an award-winning magazine and newspaper chief sub-editor for News International, Bauer, NZME and others. He was also a sports writer for newshub.co.nz, specialising in football, cricket, boxing, rugby, tennis, golf and athletics. Alex has also worked as a television producer.
Contact Alex
Read more of Alex's articles
Follow @@AJBell109 on Twitter
ISSF World Cup Seonaid McIntosh


text:
Happy Wheels Online Game
In compelled knowingly to adopt the beast, ought to
In the novel The Prince by Niccolò Machiavelli, Machiavelli uses straightforwardness to foster a "how-to" guide on what princes need to do to retain their power. Although it was 50 decades ago, it remains relevant to today's culture and politics as elected officials continue to chase the support of the people. The people haven't changed, what Machiavelli himself said long ago continues to be applicable, "…the nature of the people is variable." (6,6,52).
Machiavelli carried an opposing view of human nature, where the people's purpose on this world was to be in the service of the powerful who in return balanced violence and goodness. Machiavelli addresses how the people are easily influenced, but emphasizes how necessary it is to confront their concerns and aspirations. "…a powerful and courageous prince will overcome all such difficulties by giving at one-time hope to his subjects that the evil will not be for long, at another time fear of the cruelty of the enemy, then preserving himself adroitly from those subjects who seem to him to be too bold." (10,3,83). Machiavelli did not promote mistreatment of the people (who were very self-absorbed); however, he did not oppose any doings from which benefits could be gained from.
In order to keep that power, according to Machiavelli, a prince needs to possess the two natures of a fox and a lion. This metaphor means that a prince should mimic the attitude of scheming fox, but also the might of a lion. "A prince, therefore, being compelled knowingly to adopt the beast, ought to choose the fox and the lion; because the lion cannot defend himself against snares and the fox cannot defend himself against wolves." (18,2,125). The lion can compel its "prey" to obey, and the fox will sneakily avoid being despised. A fox is capable of detecting traps and the lion can scare off the enemies, making it a perfect combination.
Something Machiavelli mentioned was the fact that a prince should give the impression of being "…merciful, faithful, humane, religious, upright…" (18,7,127), but "…you may be able and know how to change to the opposite." (18,7,127). A politician's campaign, in modern society, consists of deceiving the people and unfortunately it works well. In 2016, the year Donald Trump was elected, many of his voters thought he was not a bad guy, that all he wanted was to protect America. Yet, in recent months those same voters have been shocked at his actions, clearly, some didn't see what others did. All of Trump's actions have been horrendous, hence so many dislike him very much, something Machiavelli said would happen. "But, I repeat, it is necessary for a prince to have the people friendly, otherwise he has no security in difficult times." (9,5,78). President Trump is not helping the people, in fact, Trump is only adding fuel to the fire.
To conclude, Machiavelli promotes ways in which to keep the state guarded as well as the princes' position, with a clear distinction between politics and ethics. Ruling does not seem easy, Machiavelli appears to know exactly what to do to change that.
Many a ruler to the nationals are. Through this
Chapter 5Data Presentation
The commercial building in Moscow. Trump would profit from
The their plan to challenge the threat. The aim
Matthias D
The our generation today. From the earliest days of
New Students Essays
Informative Speech Outline Title
Gender discrimination has been an issue and topic of debates and discussions for decades
English sought new ideas in various areas of Turkish architecture on the Ottoman lands and they tried to get started with some of these ideas
QualificationGraduate Diploma in Management Module NameGraduate Diploma in ManagementModule NumberAssignment TitleBuilding A Brand Strategy through Brand EquityName of CandidateDelakshana Mohan Candidate No
Ruby Moon was made by Matt Cameron and is optimistic
Intro Touch footy in the 1968 had their first competition
In the Pursuit of Happiness According to the Merriam-Webster's Collegiate Dictionary
Copyright © 2020 Happy Wheels Online GameAuthor Landing Page | Developed By Rara Theme Powered by WordPress.
I'm Harold!


text:
HomeArts & CultureMuseums, galleries, libraries
The museums and Libraries of St. Moritz
varied and unique
As a world-renowned Alpine resort, St. Moritz has a lot to offer – including a wide selection of museums. These include the fairytale Mili Weber House and the Forum Paracelsus, which brings the history of St. Moritz's healing mineral springs to life. Visitors can even sample St Moritz's famous mineral water at the drinking fountain. The Segantini Museum St. Moritz, meanwhile, is of major international importance.
The grand dome of the Segantini Museum St. Moritz, which opened in 1908, is an eyecatcher in and of itself. But that's not all it has to offer – inside, the building houses the world's most comprehensive collection of works by this outstanding artist. Giovanni Segantini was a great reviver of Alpine painting in the late 19th century and a major artist in the field of realistic symbolism.
The spectacular Alpine triptych 'Life – Nature – Death', the central panel of which Segantini was working on up until his death, forms the museum's pièce de résistance and can be found in the dome of the building. Since 2001, the Segantini Museum St. Moritz has also been home to nine exceptional paintings and three drawings belonging to the Otto Fisch-bacher / Giovanni Segantini Foundation.
This group of major works by the great reviver of Alpine painting is unmatched anywhere else in the world. Nowhere else can you find a more comprehensive or significant collection of Giovanni Segantini's artistic work than in the Segantini Museum St. Moritz.
Museums in and around St. Moritz.
Different Photographer


text:
Saudi Arabia to Lift Nationwide Coronavirus Curfew, Resume Economic Activities From Sunday
Restrictions will remain, however, for religious pilgrimages, international travel and social gatherings of more than 50 people
A restaurant's security personnel checks the temperature of a woman before enter the restaurant after reopened, in Riyadh, Saudi Arabia June 13, 2020.Credit: AHMED YOSRI/ REUTERS
Saudi Arabia will end a nationwide curfew and lift restrictions on businesses from Sunday morning after three months of lockdown to curb the spread of coronavirus, state news agency SPA quoted a source in the interior ministry as saying on Saturday.
The curfew will be lifted as of 6 A.M. local time on Sunday. Restrictions will remain, however, for religious pilgrimages, international travel and social gatherings of more than 50 people.
The kingdom introduced stringent measures to curb the spread of the novel coronavirus in March, including 24-hour curfews on most towns and cities.
In May, it announced a three-phase plan to ease restrictions on movement and travel, culminating in the curfew completely ending on June 21.
The number of coronavirus infections has risen in recent weeks following a relaxation of movement and travel restrictions on May 28.
The kingdom has recorded 154,223 cases of COVID-19 and a total of 1,230 deaths, the highest in the six-nation Gulf Cooperation Council.
Saudi Arabia plans to limit numbers at the annual haj pilgrimage to prevent a further outbreak of coronavirus cases, sources familiar with the matter told Reuters earlier this month.
The great coronavirus reset: UAE eases restrictions, but normalcy may never return
As Gulf economies shrink, foreigners are jumping ship
Race protests spark calls for Arab states to end 'exploitative' migrant worker system
Some 2.5 million pilgrims visit the holiest sites of Islam in Mecca and Medina for the week-long haj, a once-in-a-lifetime duty for every able-bodied Muslim who can afford it. Saudi Arabia asked Muslims in March to put haj plans on hold and suspended the umrah pilgrimage until further notice.
Thirty Years Since the Gulf War: How the U.S. Stopped Israel From Attacking Iraq


Separate whites from yolks. Add cream in yolks, butter, sugar, salt and vanilla sugar, stir all, mix flour with baking powder, sift on yolk mass and mix to make it smooth.
Separately mix whites into foam, add in batter, stir gently.
Spread some batter on heated dry pan, about 1 tbsp, fry pancakes under lid, over low heat, till golden color from both sides.
If you want, you can fry in oil. You can serve pancakes with sour cream, jam, honey or condensed milk.
Top of recipe "Mini-pancakes for breakfast"


2015 GEO Holiday Gift Guide!
It's that time of year again! Snow is falling from the sky, geese are all but off the bike paths, and the Holidays are nearly here! As magical as it all is, the looming Holiday season means making sure you have the right gifts for everyone on your list. We at Great Escape Outfitters are here to make sure you have the perfect gift for the adventurous ones on your list! I won't be too long winded, I know you all need as much time as possible to get that list checked off... so here we go!
This one may seem obvious, but it's one that can easily be overlooked. We've got what you see and much much more, from a canoeing Santa Claus to a canvas tent, an outhouse and everything in between. Outdoor lovers and gear freaks love to collect these ornaments reflecting the fun and freedom of the outdoors. With cabin-themed ornaments as well as outdoor sports such as climbing and paddling, you're sure to find something that fits you perfectly.
Buffs are an everymans everything. These little fabric tubes make a perfect addition to any wardrobe. We carry a wide range of styles, colours and fabrics to suit your needs! Going somewhere hot? We have a high UV Buff for that. Looking for a sophisticated piece for the urbanite in your life? We have a Merino Wool Buff for that. Need a functional item to keep your loved ones warm? Get them an Original Buff this year under the tree. A BUFF® quickly transforms into 12 different technical base layers for your head and neck - all in a package of the size of an energy bar. Adjust the way you wear it to combat changing weather on the fly. These are a staple on Santa's list this year.
Addicted to that Lumberjack/jane look that is sweeping the country? Love the look of a winter cottager? Miss the 60's? We have the styles to kit out your vintage look this season. Auclair Deerskin mitts with beaded trim and glove liners will make your hands not only hot to the touch but hot to the eye! Keep that noggin steaming with Reefs heavy knit watch cap. This heathered look will go with any jacket, keeping everything above your eyes toasty while keeping all eyes on you! Finally Smartwool's Popcorn Cable Knit socks have that throwback look that will bring attention to your feet while keeping Winter's cold gaze away.
I don't need to say much about this, three Smartwool socks in a box?... I'll take two! These packs come with three different weights and cushionings to keep your feet on their toes all season long! Keep those feet singing with joy with these comfortable socks in fun patterns. These three packs will make a great gift for anyone whether their an outdoorsy wanderer or an urban explorer.
Who hasn't taken a sip out of a Nalgene bottle? You can never have enough of these life staples. Stay hydrated on the go, be it in the city or the mountains. All BPA free, these bottles are a great gift for anyone looking to quench that thirst. We have a huge selection from your classic Nalgene we all know to the new sport top activity bottle to the sippy cups with awesome designs on them to keep your little ripper happy all day long. These bottles are a must for any stocking.
In a huge selection of colours, these awesome looking, comfortable and extremely functional baselayers are some of the best pieces of clothing you will ever give as a gift. The Icebreaker BodyFit 200 Oasis Long-Sleeve Crew is an active baselayer made from Bodyfit 200 merino wool to keep your body at an ideal temperature while you explore the outdoors. Merino wool naturally regulates your body temperature and is antimicrobial for long backpacking trips and limited-luggage travel. Complete with offset shoulder seams to prevent pack-rub, anti-chafe seams, and a drop-tail hem for added coverage when you reach, bend, and twist around. This piece is perfect again for outdoors or urban explorers in your life .
The Osprey FlapJill/Flapjack Pack has become a mainstay for those looking for an everyday pack that doesn't look like the status quo. The pack has a simple look and feel of a classic rucksack but underneath its sleek exterior are features that fit into our modern world. Fully functional and highly organized this pack is for those that want to bring the outdoor world to their everyday life. For the student or traveler on your list, this one hits all the targets!
This fun, mid-cut boot offers you classic styling and dependable warmth. Waterproof suede leather upper is soft and pliable, lined with fleece, and trimmed with faux fur for eye-catching style. It's likely to be on the Holiday list of a lady in your life. These boots have been seen on the likes of Jessica Alba, Gwen Stephani and a host of other celebrities. They not only work well but they look great!
Even when blustery winter weather settles over Ottawa, you still have to make your daily commute. Slip on the Men's street-styled Pajar Trooper Boot for the warmth and traction you need plus the high-top styling you love. The side zip makes for easy on and off while the Pajar Canada patch signifies to all your bold choice in winter footwear. These will get the reaction your looking for this Holiday season when the Pajar box makes its way out of the wrapping. These boots are on every stylish guys list.
These items will put a smile on anyone's face when they dig into the stocking. Collapsible lexan wine glasses (red and white!) to class up your next hike. Colourful Carabiners for the climber in your life. Sporks from Sea to Summit for your next culinary adventure. Princeton Tec Byte headlamps in three colours for your night time ramblings and Nuun Tablets to spruce up any glass of water with a sugar free boost! These items are all under $30 and will be sure to spread the cheer this year! Well those are the 10 gift ideas to make your Holiday Season a memorable one! You can purchase all of these items and more at Great Escape Outfitters at 369 Richmond Road here in Ottawa. Or Online at www.greatescapeoutfitters.com Keep reading below to see some of our staffs top picks!


1. For the curry: Heat the oil in a saucepan, add the onion and cook for 1-2 minutes, then add the turkey and cook until the meat is sealed, this will take approximately 5 minutes.
2. Add the curry paste and cook for 1-2 minutes, then add the coconut milk, and continue to cook for 15-20 minutes.
3. Finally, add the carrots and fine green beans and heat through for 3-4 minutes.
4. Transfer to a serving dish.


text:
3 December 2019 / SF News / Joe Kukura
Guy Who Brought Loaded Semi-Automatic Gun To Pride Event Gets 18 Months in Prison
Four people were arrested for bringing guns to Pride this year, according to SFPD, and one with priors was just sentenced to a year and a half in federal prison.
SF Pride is not an open-carry event, nor is any public event in any incorporated town in California. So bringing a handgun to Pride is illegal, yet a small handful of people are arrested for trying every year. One such armed man is on his way to jail, as the East Bay Times reports that 22-year-old Evonta Bailey brought a loaded semi-automatic to this year's Pride and was just sentenced to 18 months in federal prison. The mitigating factor here is that Bailey was already out on bail for a previous gun charge, and had recently missed his court date on that one.
According to the original police report published July 2, at about 3:30 p.m. on Pride Saturday, Bailey entered the Civic Center party area when SFPD "recognized [the] subject from prior police contacts." They ran a records check and found an outstanding felony warrant for the previous charges, tried to arrest him and he attempted to flee, at which point "the officers and suspect fell to the ground." (Sounds more like they tackled him.) His waistband was packing a loaded 12-round semi-automatic plus eight additional rounds, and he was arrested.
"At worst, this indicates that Mr. Bailey believed that there was a realistic possibility he would have to use the gun that day," U.S. Attorney Lina Peng said in a court filing. "At best, this indicates that Mr. Bailey has associated himself with individuals or activity for which he believed a loaded gun was required for protection."
Here is the gun in question, a Taurus G2C 9mm pistol. It retails online for a shockingly cheap $200-$250.
Bailey's attorney said that he was a previous victim of gun violence, and was just hoping to defend himself. "Before he had hit his teenage years, [Bailey] was already 'dodging bullets' and other kids regularly assaulted him in his neighborhood," assistant federal public defender Angela Chuang said in her own filing. "By the time he reached adulthood, he had cycled through numerous different group homes after he was removed from his mother's custody at the age of nine or 10. In the last few years alone, Mr. Bailey lost two of his best friends to incidents of gun violence."
The judge was unmoved, and Bailey got the 18 months plus three years of supervised release after he's out.
Guns at Pride are no joke. There were shooting incidents in 2013, 2014, and 2015, with injuries in each case. The LBGTQ community remains on edge after the 2016 Pulse nightclub shooting, and many still remember the Castro Halloween mass shooting in 2009. As San Francisco's gay cultural events become iconic annual traditions, they've been drawing different, younger, and larger crowds with a much higher risk factor. In the Halloween incident a decade ago, the shooting was reportedly not prompted by hate, but just by some sort of beef between different factions of armed teens, but bystanders were nonetheless injured.
Related: SF Pride Reaches Secret Settlement With Man Shot During 2013 Celebration [SFist]
Image: Matt Biddulph via Flickr
Day Around the Bay: SFPD Prepares For Mission Chaos If 49ers Win
Many Bay Area Hospitals at Risk of Earthquake Collapse, 12 Years Past Retrofit Deadline
SF Restaurants, Food & Drink
Kitchen Story Set to Open Korean-Themed Sequel In Oakland's Rockridge
Restaurateur Hoyul Steven Choi is continuing on in building his Bay Area empire in the coming year, and the next addition to open will be a second location of Kitchen Story in Oakland's Rockridge neighborhood — this time with more of a Korean focus rather than Thai.
SF Politics
Kamala Harris Ends Presidential Run
The shining moment now over and the financial and political realities setting in, California Senator Kamala Harris is calling off her campaign for the presidency as of today.
Joe Kukura


text:
GOP congressman says to not 'buy a boat' when asked about plan to hike sales tax
Buddy Carter wants to replace the federal income tax with a consumption tax of 30 per cent (AP)
The Republican congressman who has proposed replacing the federal income tax with a national sales tax defended his plan by saying if people buy a boat, they would pay taxes and if they didn't, they would not pay taxes.
Representative Buddy Carter is the lead sponsor of the Fair Tax Act, which would replace the federal income tax with a consumption tax of 30 per cent.
Democrats have said the legislation would disproportionately hit the poorest Americans since a sales tax would eat more of their income than that of wealthier people.
But Mr Carter defended his legislation to The Independent.
"Democrats want to have control over everyone," he said. "They want to have control over your paycheck. The fair tax gives you control over your over your paycheck."
Mr Carter said that his legislation is much fairer.
"That's what we're talking about a national sales tax or consumption tax where you decide if you want to buy a boat, you're going to pay taxes," he said. "You don't want to pay the taxes, don't buy the boat."
Many Republicans have not signed onto the legislation. House Speaker Kevin McCarthy told reporters he opposed it.
Democratic senator Joe Manchin of West Virginia seemed incredulous when The Independent asked him about it.
"Are you serious," he said. "Oh my goodness, 30 per cent sales tax will kill the average American."
Senate Majority Leader Chuck Schumer and House Minority Leader Hakeem Jeffries criticised it in a joint press conference on Monday and said it was important to highlight even if the bill couldn't pass in the Democrat-controlled Senate.
"It's very important, first, to make sure this plan dies, as I said. The right wing MAGA Republicans have a lot of power, certainly in the House," Mr Schumer said in response to a question from The Independent.
But Mr Carter said those criticisms were unfair and said that families would get a prebate to cover basic expenses.
"Everyone gets a prepaid at the first of the month to cover the bare necessities to cover food, clothing," he said. "To cover rent."
SNP 'could raise Scottish income tax to plug hole in spending plans'
Democrats urge McCarthy to deny George Santos access to classified data


In case you are searching for your very first dedicated server, this one will be able to accommodate almost any busy web site including all corresponding processes. It is insured by a twenty–four–seven technical support service and then a 99.9% network uptime warranty.
E–mail us anytime for tips and advice.
Our sysadmins are at your beck and call continuously to guarantee your machine runs in a reliable network setup. Furthermore, our welcoming and educated support team is online 24 hours a day, 7 days a week, to to answer any queries that you may have about our dedicated hosting servers. However, if you seek support with our Site Control Panel or with any of the installed in advance free applications, we are here to assist you.
Bringing a dedicated hosting server to functioning can potentially be an extensive activity. It includes adding the required hardware features, configuring the Linux OS version, and testing the server, and so on. That is why, the vast majority of dedicated servers hosting suppliers will charge you for server setup when you sign up.
At PNGSME Web Services, we have implemented a different strategy. We will never charge you a single dime on the announced cost. There won't be any costs for putting together your server and we will not bill you anything for the server to be running properly either.
Our dedicated hosting servers are provided with a number of absolutely free bonuses to make you take care of your very own server setup cost–free. We give you a free of cost Hepsia Site Control Panel delivering boundless domain hosting possibilities, a drag–and–drop File Manager, an extensive web stats tracking interface combined with multi–language support. In addition, you'll acquire one no cost dedicated IP address, and even a website channel reseller account and a ClientExec support & billing install – in case you like to run your personal reseller web hosting online business.
Setting up a file backup of a dedicated hosting server in general is too hard for technically inexperienced customers. At PNGSME Web Services, you are able to acquire fifty GB of off–site back up capacity on a standalone backup server located within one and the same network system as your dedicated hosting server. As a result, the back up process will always be extremely fast.
The server backup storage is a major component of the Optional Managed Services offer. It could also be bought as a separate upgrade.
Should you encounter an issue with your server or need to install specific application but don't see how, we're here for you. With our Installation & Troubleshooting service plan, you are able to rely on our expert sys operators to fix any challenge with your dedicated hosting server or to mount any software package that you really need. The plan is readily available as a separate upgrade and is also an important component of the Optional Managed Services package deal that we give you.
Manage your sites and web apps with a click.
In case that you demand a dedicated hosting server for your resource–hungry websites, in such a case you also need a comfortable way to coordinate them. While the computer terminal interface is effective, generally, it isn't user–friendly enough for everyone to use. That's why, we offer the zero cost Site Control Panel with all dedicated hosting servers. It will turn the tricky dedicated hosting server administration responsibilities into painless actions.
Furthermore, with the PNGSME Web Services Site Control Panel, you will at the same time get all of the 100% free bonus items and devices that are usually obtainable simply with our Linux web hosting packages accounts.


We appreciate that each assignment is different as are the individual needs and requirements of both employer clients and job seeking professionals that we work with at any particular time. Therefore this highlights the importance of the ongoing professional consultancy service that we provide at each stage of the recruitment process to ensure that all parties involved are updated, informed and engaged at all times. We understand your requirements and expectations from the outset and accordingly provide the best fit for your specific business needs. As a result, our employer clients often request that we work on their recruitment campaigns on an exclusive basis.
We can confidently provide employers with insight and guidance on all aspects of what perhaps may be an unknown legal and company secretarial territory from a business recruitment perspective.
Internal business needs are constantly evolving and so to control or more often reduce expenditure previously allocated to outsourced services, a growing number of specialist business functions are being retained in house. We recruit for these roles every day so let our specialist expertise and knowledge help you to make your recruitment process as efficient and cost effective as possible.
Trust, confidentiality, honesty and professionalism are at the core of the services that we provide at all times. This is the foundation to building successful long term relationships with both employer clients and candidates.


text:
Chester Novell Turner (born September 30, 1946) is an American filmmaker known for his blaxploitation horror films Black Devil Doll From Hell and Tales from the QuadeaD Zone. Since their releases in the 1980s, Turner's movies have developed cult followings and are considered to be much sought after collector's items. A copy of Black Devil Doll From Hell is currently archived by the Yale University Library and Turner's other movie was featured as part of a horror film symposium hosted by Yale University in 2016.

Turner has expressed interest in creating sequels to both of his movies.

Filmmaking career
Prior to creating Black Devil Doll From Hell and Tales from the QuadeaD Zone, Turner wrote several horror stories and worked in the home remodeling business. He began developing his films during the 1980s after the advent of home video recorders made amateur filmmaking more accessible to non-professional creators and his first film, Black Devil Doll From Hell, was filmed over a period of several years. Turner, who had no prior experience, took a correspondence course in filmmaking before shooting his first movie. During filming Turner began dating his female star, Shirley L. Jones, and the pair's working relationship would continue into Turner's second movie.

Turner released his first film through the now-defunct video distributor Hollywood Home Video, who heavily edited the movie prior to its release in 1984. He would later describe the experience as unpleasant, as Turner was unable to tell how many videos the company sold and potentially received far less than what he was actually owed. This led Turner and Jones to release the second film independently.

In 1996, rumors surfaced that Turner had been killed in a horrifying car accident. Grief spread among his devotees. Although, by then, DVDs had started to replace VHS as the home entertainment option of choice, Mr. Turner's films became some of the most prized VHS horror titles among fans who treasured the low-fi beauty of a chunky plastic box of tape.

Post-filmmaking career
After releasing both films, Turner shifted his focus back to his home remodeling business and to raising a family. He remained unaware that his movies had achieved a cult following, as his fanbase was unable to locate him until about 2013, when Louis Justin of Massacre Video tracked Turner down in order to gain permission to release both films to DVD. Prior to Justin locating Turner many fans believed that Turner died in a car accident in the 1990s, a rumor that was only disspelled after Turner began making public appearances.

Filmography
Black Devil Doll From Hell (1984)
Tales from the QuadeaD Zone (1987)

References

External links

1946 births
Living people
African-American film directors
African-American film producers
Film producers from Illinois
African-American screenwriters
Screenwriters from Illinois
People from Chicago
Film directors from Illinois
20th-century African-American people