.Fatalf("error opening %v: %v", wtmpFilepath, err)
	}

	wtmpFileInfo, err := os.Stat(wtmpFilepath)
	if err != nil {
		t.Fatalf("error performing stat on %v: %v", wtmpFilepath, err)
	}

	size := wtmpFileInfo.Size()

	loginUtmp := utmpC{
		Type: DEAD_PROCESS,
	}
	copy(loginUtmp.Device[:], "pts/2")

	err = binary.Write(wtmpFile, byteOrder, loginUtmp)
	if err != nil {
		t.Fatalf("error writing to %v: %v", wtmpFilepath, err)
	}

	events, errs = mbtest.ReportingFetchV2(f)
	if len(errs) > 0 {
		t.Fatalf("received error: %+v", errs[0])
	}

	if len(events) == 0 {
		t.Fatal("no events were generated")
	} else if len(events) != 1 {
		t.Fatalf("only one event expected, got %d: %v", len(events), events)
	}

	checkFieldValue(t, events[0].RootFields, "event.kind", "event")
	checkFieldValue(t, events[0].RootFields, "event.category", []string{"authentication"})
	checkFieldValue(t, events[0].RootFields, "event.type", []string{"end"})
	checkFieldValue(t, events[0].RootFields, "event.action", "user_logout")
	checkFieldValue(t, events[0].RootFields, "process.pid", 14962)
	checkFieldValue(t, events[0].RootFields, "source.ip", "10.0.2.2")
	checkFieldValue(t, events[0].RootFields, "related.ip", []string{"10.0.2.2"})
	checkFieldValue(t, events[0].RootFields, "user.name", "vagrant")
	checkFieldValue(t, events[0].RootFields, "related.user", []string{"vagrant"})
	checkFieldValue(t, events[0].RootFields, "user.terminal", "pts/2")

	// We truncate to the previous size to force a full re-read, simulating an inode reuse.
	if err := wtmpFile.Truncate(size); err != nil {
		t.Fatalf("error truncating %v: %v", wtmpFilepath, err)
	}

	events, errs = mbtest.ReportingFetchV2(f)
	if len(errs) > 0 {
		t.Fatalf("received error: %+v", errs[0])
	}

	if len(events) == 0 {
		t.Fatal("no events were generated")
	} else if len(events) != 1 {
		t.Fatalf("only one event expected, got %d", len(events))
	}

	// utmpdump: [7] [14962] [ts/2] [vagrant ] [pts/2       ] [10.0.2.2            ] [10.0.2.2       ] [2019-01-24T09:51:51,367964+00:00]
	checkFieldValue(t, events[0].RootFields, "event.kind", "event")
	checkFieldValue(t, events[0].RootFields, "event.category", []string{"authentication"})
	checkFieldValue(t, events[0].RootFields, "event.type", []string{"start", "authentication_success"})
	checkFieldValue(t, events[0].RootFields, "event.action", "user_login")
	checkFieldValue(t, events[0].RootFields, "event.outcome", "success")
	checkFieldValue(t, events[0].RootFields, "process.pid", 14962)
	checkFieldValue(t, events[0].RootFields, "source.ip", "10.0.2.2")
	checkFieldValue(t, events[0].RootFields, "user.name", "vagrant")
	checkFieldValue(t, events[0].RootFields, "


t_msg_pic(msg)
                await sect_secbuff_learn.finish(MessageSegment.image(pic))
            else:
                await sect_secbuff_learn.finish(msg, at_sender=True)
        else:
            sect_info = sql_message.get_sect_info(sect_id)
            if sect_info.secbuff == 0:
                msg = f"本宗尚未获得宗门神通，请宗主发送宗门神通搜寻来获得宗门神通！"
                if XiuConfig().img:
                    msg = await pic_msg_format(msg, event)
                    pic = await get_msg_pic(msg)
                    await sect_secbuff_learn.finish(MessageSegment.image(pic))
                else:
                    await sect_secbuff_learn.finish(msg, at_sender=True)

            sectsecbuffidlist = get_sect_secbuff_id_list(sect_id)

            if msg not in get_secname_list(sectsecbuffidlist):
                msg = f"本宗还没有该神通，请发送本宗有的神通进行学习！"
                if XiuConfig().img:
                    msg = await pic_msg_format(msg, event)
                    pic = await get_msg_pic(msg)
                    await sect_secbuff_learn.finish(MessageSegment.image(pic))
                else:
                    await sect_secbuff_learn.finish(msg, at_sender=True)

            userbuffinfo = UserBuffDate(user_info.user_id).BuffInfo
            secbuffid = get_secnameid(msg, sectsecbuffidlist)
            if str(userbuffinfo.sec_buff) == str(secbuffid):
                msg = f"道友请勿重复学习！"
                if XiuConfig().img:
                    msg = await pic_msg_format(msg, event)
                    pic = await get_msg_pic(msg)
                    await sect_secbuff_learn.finish(MessageSegment.image(pic))
                else:
                    await sect_secbuff_learn.finish(msg, at_sender=True)

            secbuffconfig = config['宗门神通参数']

            secbuff = items.get_data_by_item_id(secbuffid)
            secbufftype = secbuff['level']
            secbuffgear = buffrankkey[secbufftype]
            #获取逻辑
            materialscost = secbuffgear * secbuffconfig['学习资材消耗']
            if sect_info.sect_materials >= materialscost:
                sql_message.update_sect_materials(sect_id, materialscost, 2)
                sql_message.updata_user_sec_buff(user_info.user_id, secbuffid)
                secmsg = get_sec_msg(secbuff)
                msg = f"本次学习消耗{materialscost}宗门资材，成功学习到本宗{secbufftype}神通：{secbuff['name']}\n{secbuff['name']}：{secmsg}"
                if XiuConfig().img:
                    msg = await pic_msg_format(msg, event)
                    pic = await get_msg_pic(msg)
                    await sect_secbuff_learn.finish(MessageSegment.image(pic))
                else:
                    await sect_secbuff_learn.finish(msg, at_sender=True)
            else:
                msg = f"本次学习需要消耗{materialscost}宗门资材，不满足条件！"
                if XiuConfig().img:
                    msg = await pic_msg_format(msg, event)
                    pic = await get_msg_pic(msg)
                    await sect_secbuff_learn.finish(MessageSegment.image(pic))
                else:
                    await sect_secbuff_learn.finish(msg, at_sender=True)
    else:
        msg = f"道友尚未加入宗门！"
        if XiuConfig().img:
            msg = await pic_msg_format(msg, event)
            pic = await get_msg_pic(msg)
            await sect_secbuff_learn.finish(MessageSegment.image(pic))
        else:
            await sect_secbuff_learn.finish(msg, at_sender=True)

@upatkpractice.handle()
async def _(bot: Bot, event: GroupMessageEvent):
    await data_check_conf(bot, event)

    try:
        user_id, group_id, userinfo = await data_check(bot, event)
    except MsgError:
        return

    sect_id = userinfo.sect_id
    if sect_id:
        sect_materials = int(sql_message.get_sect_info(sect_id).sect_materials)#当前资材
        useratkpractice = int(userinfo.atkpractice) #当前等级
        if useratkpractice == 25:
            msg = f"道友的攻击修炼等级已达到最高等级!"
            if XiuConfig().img:
                msg = await pic_msg_format(msg, event)
                pic = await get_msg_pic(msg)
                await upatkpractice.finish(MessageSegment.image(pic))
            else:
                await upatkpractice.finish(msg, at_sender=True)

        sect_level = get_sect_level(sect_id)[0] if get_sect_level(sect_id)[0] <= 25 else 25#获取当前宗门修炼等级上限，500w建设度1级,上限25级

        sect_position = userinfo.sect_position
        if sect_position == 4:
            msg = f"道友所在宗门的职位为：{jsondata.sect_config_data()[f'{sect_p


Slider',
	  slot: 'ValueLabel',
	  overridesResolver: (props, styles) => styles.valueLabel
	})(({
	  theme,
	  ownerState
	}) => _extends$1({
	  ["&.".concat(sliderClasses.valueLabelOpen)]: {
	    transform: 'translateY(-100%) scale(1)'
	  },
	  zIndex: 1,
	  whiteSpace: 'nowrap'
	}, theme.typography.body2, {
	  fontWeight: 500,
	  transition: theme.transitions.create(['transform'], {
	    duration: theme.transitions.duration.shortest
	  }),
	  top: -10,
	  transformOrigin: 'bottom center',
	  transform: 'translateY(-100%) scale(0)',
	  position: 'absolute',
	  backgroundColor: theme.palette.grey[600],
	  borderRadius: 2,
	  color: theme.palette.common.white,
	  display: 'flex',
	  alignItems: 'center',
	  justifyContent: 'center',
	  padding: '0.25rem 0.75rem'
	}, ownerState.size === 'small' && {
	  fontSize: theme.typography.pxToRem(12),
	  padding: '0.25rem 0.5rem'
	}, {
	  '&:before': {
	    position: 'absolute',
	    content: '""',
	    width: 8,
	    height: 8,
	    bottom: 0,
	    left: '50%',
	    transform: 'translate(-50%, 50%) rotate(45deg)',
	    backgroundColor: 'inherit'
	  }
	}));
	const SliderMark = styled$1('span', {
	  name: 'MuiSlider',
	  slot: 'Mark',
	  shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'markActive',
	  overridesResolver: (props, styles) => styles.mark
	})(({
	  theme,
	  ownerState,
	  markActive
	}) => _extends$1({
	  position: 'absolute',
	  width: 2,
	  height: 2,
	  borderRadius: 1,
	  backgroundColor: 'currentColor'
	}, ownerState.orientation === 'horizontal' && {
	  top: '50%',
	  transform: 'translate(-1px, -50%)'
	}, ownerState.orientation === 'vertical' && {
	  left: '50%',
	  transform: 'translate(-50%, 1px)'
	}, markActive && {
	  backgroundColor: theme.palette.background.paper,
	  opacity: 0.8
	}));
	const SliderMarkLabel = styled$1('span', {
	  name: 'MuiSlider',
	  slot: 'MarkLabel',
	  shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'markLabelActive',
	  overridesResolver: (props, styles) => styles.markLabel
	})(({
	  theme,
	  ownerState,
	  markLabelActive
	}) => _extends$1({}, theme.typography.body2, {
	  color: theme.palette.text.secondary,
	  position: 'absolute',
	  whiteSpace: 'nowrap'
	}, ownerState.orientation === 'horizontal' && {
	  top: 30,
	  transform: 'translateX(-50%)',
	  '@media (pointer: coarse)': {
	    top: 40
	  }
	}, ownerState.orientation === 'vertical' && {
	  left: 36,
	  transform: 'translateY(50%)',
	  '@media (pointer: coarse)': {
	    left: 44
	  }
	}, markLabelActive && {
	  color: theme.palette.text.primary
	}));

	const extendUtilityClasses = ownerState => {
	  const {
	    color,
	    size,
	    classes = {}
	  } = ownerState;
	  return _extends$1({}, classes, {
	    root: clsx(classes.root, getSliderUtilityClass("color".concat(capitalize(color))), classes["color".concat(capitalize(color))], size && [getSliderUtilityClass("size".concat(capitalize(size))), classes["size".concat(capitalize(size


[4165] = {"Elissa Dumas","Instructora de portal"},
[4166] = {"Gacela",nil},
[4167] = {"Dendrythis","Vendedora de alimentos y bebidas"},
[4168] = {"Elynna","Suministros de sastrería"},
[4169] = {"Jaeana","Vendedora de carne"},
[4170] = {"Ellandrieth","Pertrechos"},
[4171] = {"Merelyssa","Mercader de armas de filo"},
[4172] = {"Anadyia","Vendedora de túnicas"},
[4173] = {"Landria","Mercader de arcos"},
[4174] = {"Siannai","Mercader de flechas"},
[4175] = {"Vinasia","Mercader de armaduras de tela"},
[4176] = {"Ki'rasia","Mercader de armaduras de tela"},
[4177] = {"Melea","Mercader de armaduras de malla"},
[4178] = {"Shaia","Mercader de armaduras de malla"},
[4179] = {"Freillania","Mercader de escudos"},
[4180] = {"Ealyshia Susurrocío","Mercader de armas de dos manos"},
[4181] = {"Fyrenna","Vendedora de alimentos y bebidas"},
[4182] = {"Dalmond","Pertrechos"},
[4183] = {"Naram Garralarga","Forjador de armas"},
[4184] = {"Geenia Sombrasol","Alfayate de prendas especiales"},
[4185] = {"Shaldyn","Sastre"},
[4186] = {"Mavralyn","Suministros para armaduras de cuero y peletería"},
[4187] = {"Harlon Guardaspina","Armero y forjador de escudos"},
[4188] = {"Illyanie","Mercader de armaduras de tela"},
[4189] = {"Valdaron","Suministros de sastrería"},
[4190] = {"Kyndri","Panadera"},
[4191] = {"Allyndia","Vendedora de alimentos y bebidas"},
[4192] = {"Taldan","Vendedor de bebidas"},
[4193] = {"Grondal Brisaluna","Instructor de sastrería"},
[4194] = {"Ullanna","Suministros comerciales"},
[4195] = {"Tiyani","Vendedora de alimentos y bebidas"},
[4196] = {"Enjambre silítido",nil},
[4197] = {"Ken'zigla",nil},
[4198] = {"Braelyn Manofuego",nil},
[4200] = {"Laird","Vendedor de pescado"},
[4201] = {"Ziz Fizziks",nil},
[4202] = {"Gerenzo Silbillave",nil},
[4203] = {"Ariyell Cielosombra","Mercader de armas"},
[4204] = {"Firodren Llamaluna","Instructor de herboristería"},
[4205] = {"Dorion","Instructor de cazadores"},
[4206] = {"Talar","Instructor de osos"},
[4207] = {"Valyen Cantolupo","Instructor de lobos"},
[4208] = {"Lairn","Banquero"},
[4209] = {"Garryeth","Banquero"},
[4210] = {"Alegorn","Instructor de cocina"},
[4211] = {"Dannelor","Instructor de primeros auxilios"},
[4212] = {"Telonis","Instructor de peletería"},
[4213] = {"Taladan","Instructor de encantamiento"},
[4214] = {"Erion Sombrusurro","Instructor de pícaros"},
[4215] = {"Anishar","Instructor de pícaros"},
[4216] = {"Char


/*
 * This file is part of the openHiTLS project.
 *
 * openHiTLS is licensed under the Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *
 *     http://license.coscl.org.cn/MulanPSL2
 *
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 *
 * -----------------------------------------------------------------------------
 *
 * ARMv7 assembly optimization for SM3:
 *   Contributors: Zhao Runchen, Li Xukai, Wang Weijia
 *   Affiliation: Shandong University and Quan Cheng Laboratory
 *   Date: 2025.7.10
 *
 * -----------------------------------------------------------------------------
 */

#include "hitls_build.h"
#ifdef HITLS_CRYPTO_SM3
.syntax unified
.arch armv7
.thumb

// State update function for 0~15 rounds, sp register points to the message w[i], r0 is the constant 0x79cc4519
.macro RF0 a b c d e f g h i
    LDR r1, [sp], #0x04                         // r1 = w[i]
    LDR r2, [sp, #0x0C]                         // r2 = w[i+4]
    EOR r2, r1                                  // r2 = w[i] ^ w[i+4]
    ADD \h, r1                                  // h += w[i]                (r1 is free now)
    ADD \d, r2                                  // d += w[i] ^ w[i + 4]     (r2 is free now)

	ADD r1, \e, r0, ROR #(32-\i%32)%32          // r1 = ss1 = ((a <<< 12) + e + T[i]) <<< 7
    ADD r1, r1, \a, ROR #20
    ROR r1, #25

    EOR r3, \e, \f                              // h += (e ^ f ^ g) + ss1
    EOR r3, \g
    ADD \h, r3
    ADD \h, r1

    EOR r3, \h, \h, ROR #23                     // h = h ^ (h <<< 9) ^ (h <<< 17)
    EOR \h, r3, \h, ROR #15

    EOR r2, r1, \a, ROR #20                     // r2 = ss2 = (a <<< 12) ^ ss1
    EOR r3, \a, \b                              // d += (a ^ b ^ c)+ ss2
    EOR r3, \c
    ADD \d, r3
	ADD \d, r2

    ROR \b, #23                                 // b = b <<< 9, f = f <<< 19
    ROR \f, #13
.endm

// State update function for rounds 16~63, sp register points to the message w[i], r0 is the constant 0x7a879d8a
.macro RF1 a b c d e f g h i
    LDR r1, [sp], #0x04                         // r1 = w[i]
    LDR r2, [sp, #0x0C]                         // r


(sName) << _T(" already exists, but is not of type UINT") << newl;
            return nullptr;
        }

        pCvar->SetUnsignedInteger(uiValue);
        pCvar->AddFlags(iFlags);
        return reinterpret_cast<CCvarui*>(pCvar);
    }
    else if (pElem)
    {
        Console << _T("Console element ") << pElem->GetName() << _T(" already exists") << newl;
        return nullptr;
    }
    else
        return K2_NEW(ctx_Console,  CCvarui)(sName, uiValue, iFlags | CONEL_DYNAMIC, nullptr);
}

/*====================
  ICvar::CreateFloat
  ====================*/
CCvarf* ICvar::CreateFloat(const tstring &sName, float fValue, int iFlags)
{
    CConsoleElement *pElem(ConsoleRegistry.GetElement(sName));

    if (pElem != nullptr && pElem->GetType() == ELEMENT_CVAR)
    {
        ICvar *pCvar = static_cast<ICvar *>(pElem);
        if (pCvar->GetType() != CT_FLOAT)
        {
            Console.Warn << _T("A cvar named ") << QuoteStr(sName) << _T(" already exists, but is not of type FLOAT") << newl;
            return nullptr;
        }

        pCvar->SetFloat(fValue);
        pCvar->AddFlags(iFlags);
        return reinterpret_cast<CCvarf*>(pCvar);
    }
    else if (pElem)
    {
        Console << _T("Console element ") << pElem->GetName() << _T(" already exists") << newl;
        return nullptr;
    }

    return K2_NEW(ctx_Console,  CCvarf)(sName, fValue, iFlags | CONEL_DYNAMIC, nullptr);
}

/*====================
  ICvar::CreateString
  ====================*/
CCvars* ICvar::CreateString(const tstring &sName, const tstring &sValue, int iFlags)
{
    CConsoleElement *pElem = ConsoleRegistry.GetElement(sName);

    if (pElem && pElem->GetType() == ELEMENT_CVAR)
    {
        ICvar *pCvar = static_cast<ICvar *>(pElem);
        if (pCvar->GetType() != CT_STRING)
        {
            Console.Warn << _T("A cvar named ") << QuoteStr(sName) << _T(" already exists, but is not of type STRING") << newl;
            return nullptr;
        }

        pCvar->Set(sValue);
        pCvar->AddFlags(iFlags);
        return reinterpret_cast<CCvars*>(pCvar);
    }
    else if (pElem)
    {
        Console << _T("Console element ") << pElem->GetName() << _T(" already exists") << newl;
        return nullptr;
    }
    else
        return K2_NEW(ctx_Console,  CCvars)(sName, sValue, iFlags | CONEL_DYNAMIC, nullptr);
}

/*====================
  ICvar::CreateVec3
  ====================*/
CCvarv3*    ICvar::CreateVec3(const tstring &sName, const CVec3f &v3Value, int iFlags)
{
    CConsoleElement *pElem = ConsoleRegistry.GetElement(sName);

    if (pElem && pElem->GetType() == ELEMENT_CVAR)
    {
        ICvar *pCvar = static_cast<ICvar *>(pElem);
        if (pCvar->GetType() != CT_VEC3)
        {
            Console.Warn << _T("A cvar named ") << QuoteStr(sName) << _T(" already exists, but is not of type VEC3") << newl;
            return nullptr;
        }

        pCvar->Set(XtoA(v3Value));
        pCvar->AddFlags(iFlags);
        return reinterpret_cast


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

namespace Microsoft.IdentityModel.Protocols.Tests
{
    public class MessageComparer
    {
        public static bool AreEqual(AuthenticationProtocolMessage authenticationProtocolMessage1, AuthenticationProtocolMessage authenticationProtocolMessage2)
        {
            if (!DoObjectsHaveSameNullState(authenticationProtocolMessage1, authenticationProtocolMessage2))
            {
                return false;
            }

            if (authenticationProtocolMessage1 == null)
            {
                return true;
            }

            if (!DoObjectsHaveSameNullState(authenticationProtocolMessage1.IssuerAddress, authenticationProtocolMessage2.IssuerAddress))
            {
                return false;
            }

            if (authenticationProtocolMessage1.IssuerAddress != null && authenticationProtocolMessage1.IssuerAddress != authenticationProt


                         ))),
                                );
                              })
                          : Padding(
                              padding: EdgeInsets.all(4),
                              child: Text('未获取到收藏的节点～'),
                            ),
                ],
              ),
              ListTile(
                enabled: userName.isNotEmpty, // 登录后打开
                leading: Icon(Icons.child_care),
                title: Text(S.of(context).following),
                onTap: () {
                  if (Navigator.canPop(context)) Navigator.pop(context);
                  Navigator.push(
                      context,
                      MaterialPageRoute(
                          builder: (context) => FollowingPage()));
                },
              ),
              ListTile(
                enabled: userName.isNotEmpty,
                leading: Icon(Icons.add),
                title: Text(S.of(context).create),
                onTap: () {
                  if (Navigator.canPop(context)) Navigator.pop(context);
                  // TODO
                  // Navigator.push(
                  //     context,
                  //     new MaterialPageRoute(
                  //         builder: (context) => new NewTopicPage(),
                  //         fullscreenDialog: true));
                },
              ),
              Divider(
                height: 0,
              ),
              ListTile(
                leading: Icon(Icons.settings),
                title: Text(S.of(context).settings),
                onTap: () {
                  if (Navigator.canPop(context)) Navigator.pop(context);
                  Navigator.push(
                      context,
                      MaterialPageRoute(
                          builder: (context) => SettingPage()));
                },
              ),
              AboutListTile(
                icon: Icon(Icons.info),
                child: Text(S.of(context).about),
                applicationName: "V2LF",
                applicationVersion: "v2020.9",
                applicationLegalese: '© 2020 Wml',
                applicationIcon: Image.asset(
                  "assets/images/icon/ic_launcher.png",
                  width: 64.0,
                  height: 64.0,
                ),
                aboutBoxChildren: <Widget>[
                  Padding(
                    padding: const EdgeInsets.only(top: 24.0),
                    child: RichText(
                        text: TextSpan(
                      children: [
                        TextSpan(
                            style: aboutTextStyle,
                            text:
                                "V2LF is a v2ex unofficial app.'V2LF' means 'way to love flutter'.\n\nTo see the progress for this project, please visit the "),
                        _LinkTextSpan(
                          style: linkStyle,
                          url: 'https://trello.com/b/YPOJsfQx/v2lf',
                          text: 'v2lf roadmap',
                        ),
                        TextSpan(
                          style: aboutTextStyle,
                          text: '.\n\n¯\\_(ツ)_/¯',
                        ),
                      ],
                    )),
                  )
                ],
              )
            ],
          ),
        ),
      ),
    );
  }

  void checkDailyAward() {
    DioWeb.checkDailyAward().then((onValue) {
      if (!onValue) {
        DioWeb.dailyMission();
        print('准备去领取奖励...');
      } else {
        print('已经领过奖励了...');
      }
    });
  }

  checkLoginState() {
    print('wml：checkLoginState');
    if (SpHelper.sp.containsKey(SP_USERNAME)) {
      userName = SpHelper.sp.getString(SP_USERNAME);
      var avatarUrl = SpHelper.sp.getString(SP_AVATAR);
      avatar = Utils.avatarLarge(
          avatarUrl.startsWith('https:') ? avatarUrl : 'https:' + avatarUrl);
      // 显示诗词
      getOnePoem();
      // 显示未读通知数目
      if (SpHelper.sp.getString(SP_NOTIFICATION_COUNT) != null) {
        notificationCount = SpHelper.sp.getString(SP_NOTIFICATION_COUNT);
      }
    }
  }

  Future getOnePoem() async {
    String today = DateTime.now().toString().substring(0, "yyyy-MM-dd".length);
    print('今天是：' + today);
    var spPoem = SpHelper.sp.getStringList(SP_TODAY_POEM);


/***** defines *****/
#define LIBBENCHMARK_DATA_STRUCTURE_QUEUE_UMM_PTHREAD_SPINLOCK_PROCESS_SHARED_GET_KEY_FROM_ELEMENT( queue_umm_element )             ( (queue_umm_element).key )
#define LIBBENCHMARK_DATA_STRUCTURE_QUEUE_UMM_PTHREAD_SPINLOCK_PROCESS_SHARED_SET_KEY_IN_ELEMENT( queue_umm_element, new_key )      ( (queue_umm_element).key = (void *) (lfds710_pal_uint_t) (new_key) )
#define LIBBENCHMARK_DATA_STRUCTURE_QUEUE_UMM_PTHREAD_SPINLOCK_PROCESS_SHARED_GET_VALUE_FROM_ELEMENT( queue_umm_element )           ( (queue_umm_element).value )
#define LIBBENCHMARK_DATA_STRUCTURE_QUEUE_UMM_PTHREAD_SPINLOCK_PROCESS_SHARED_SET_VALUE_IN_ELEMENT( queue_umm_element, new_value )  ( (queue_umm_element).value = (void *) (lfds710_pal_uint_t) (new_value) )
#define LIBBENCHMARK_DATA_STRUCTURE_QUEUE_UMM_PTHREAD_SPINLOCK_PROCESS_SHARED_GET_USER_STATE_FROM_STATE( queue_umm_state )          ( (queue_umm_state).user_state )

/***** structures *****/
struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_element
{
  struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_element
    *next;

  void
    *key,
    *value;
};

struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_state
{
  /* TRD : the pointers are on separate cache lines so threads enqueuing do not
           physically collide with thread dequeuing; this is done to be fair in
           the benchmark to the lock-free code, which does the same

           since we're not atomic, we don't need to be LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES
           bytes apart (e.g. the ERG on ARM), only cache line length in bytes
  */

  struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_element LFDS710_PAL_ALIGN(LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES)
    *enqueue_umm,
    *dequeue_umm;

  pal_lock_pthread_spinlock_process_shared_state LFDS710_PAL_ALIGN(LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES)
    lock_enqueue_umm,
    lock_dequeue_umm;

  void
    *user_state;
};

/***** public prototypes *****/
void libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_init( struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_state *qs, struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_element *qe, void *user_state );
void libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_cleanup( struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_state *qs, void (*element_dequeue_umm_callback)(struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_state *qs, struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_element *qe, enum flag dummy_flag) );

void libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_enqueue_umm( struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_state *qs, struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_element *qe );
int libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_dequeue_umm( struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_state *qs, struct libbenchmark_datastructure_queue_umm_pthread_spinlock_process_shared_element **qe );


29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjEzOUNERDlFMjQwMTFFMkI1MjREMzE5MzUyMDY2QjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjEzOUNEREFFMjQwMTFFMkI1MjREMzE5MzUyMDY2QjUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMTM5Q0REN0UyNDAxMUUyQjUyNEQzMTkzNTIwNjZCNSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCMTM5Q0REOEUyNDAxMUUyQjUyNEQzMTkzNTIwNjZCNSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgphuRAAAAEWSURBVHjatJRNDoIwEIWLCbj0Io26YeHGhJXewpW3cM9VOAIhYePGm7hxYWSn/NQ3OJhaqfiDk3whtPNeZ1qoUEqJFtYgBQdQqFsU/J7y/JPOHAjADmRgCzbABx4/NzyecV5gM1uBPYiBtFTcIDlvz7oHs4Anwg4Tk5B1dYVO7SjEDpzAUnweMRiBWbPZWUdreUfLpF9TZSlcXTC3rFwBB1ALA0vOFuQ0OQaJJUmxkdAM2yKpffj78VvKL/n7Kvm9iaoll/QFtUmrDcHFqEhoFXWNe+BMbZZgYuwRRWEIXhmTviSzI1hoE80mu5b9cbgL3Zj0x3dO8524n2YEpkB+aSRZH/X+B/T2b/7l1uj9Pvv5pr0KMACXbp+MpGwscgAAAABJRU5ErkJggg==");
  background-repeat: no-repeat;
}
.webix_toolbar.webix_layout_subbar {
  background: transparent;
}
.webix_toolbar.webix_layout_subbar .webix_view {
  color: #555555;
}
.webix_el_tabbar + .webix_multiview {
  background-color: #f4f4f4;
}
.webix_view .webix_win_head {
  border-bottom: 1px solid #e5e5e5;
}
.webix_view .webix_win_head > .webix_view > .webix_template {
  color: #555555;
  background: #e


GLOBL ·Name(SB),$24

DATA ·Name+0(SB)/8,$·Name+16(SB


D/CS7CvEtW0zvzrVvI3E08dqolgWFLttJutLArlV20wPbSRYllzjHmR9SSDX3cf6GX7UL/Ygpl+Zmpqax0rWlwRzvZ33X+DVZ7oRXGRfSR/Xb5tR2TkMro7aSADINpM2brBtxszk8NEdsZHgBdlXUsgNt81oI5OYuT5qA7qRyWTIvpJSbkBgOStvzG0YE6IFaMlGks1m69hmyPqSZK4cINXuqd0yY18WDqgA24eb1UcKwO7ubsVGElTI+pJsrgwsHrqSY7YNJ6nPRiKehJhu4erUhx0RZH0ZYG71S2gjpHJoWRrBOZ8TA3Te2uAvypP1ZcC5MmMdD5jvZ01B1ufaGNd6Ejt3oalURHVYIevLYHOjzgqd6JqJuI9j0EX9ujjZV1LMlSlloxR0X7BtRvyopWkswZCyMJwZvq0Xiq/irWRfIW7DGetCwG1lDKznYeGTGeClio1EUZRAG0lYP8uZtUjWl8TbZgLrnKfPdQW3uh/DRdpmxKqb6k/yvo2ntWKKxsueqbAXwl4wWV/SYJsJdlj9wI6OPAaVz0YCCzdhX0Z1L3i0bDMY3WcQftO+LdSCQraZVNhmAnv3r2EfKwsj6iLkyzuV/hUvuTpw3Doq8vm8e7sbmGaPG4bxEkJO5XK5wEEyZ/lQEJesL2myzYigKu9hbK/7HhgiiyD7Soq5jS2msJZ7iaBa83beamwkInt1upD1ZZBtM2LeOlOk28o7ImoFVQFWHn4L2OoaOF/xkH2FuHUDa+3Mf2I3S4OJ6+elyMMJMNH84dnf8umrwIxCJajIvkLcKG7FNiNW2jDQYf2Rq1DmDKben5XBJTLZ/AZM+Tcm+wpxI7nW8q/19XUnUnEDjGplCHMTg8kTx8KikuwrxG3WNoMhZZasnhbZV4jbFdsM2VeI2yo3oCkk+wpx2+M2bJsh+wpxu2ebAbKvELfJcSwg+wpxu2GbWV1dJfsKcTvGrdhmyL5C3E5y3X0ssq8Qt2Ncb+ed7CvE7RjXZ5sh+wpxO8ENtM2QfYW47XJDbTNkXyFuO1zFHhgj+wpxO8q1BkiFkSRsUAzIvkLcFrhWYG1tbYVFJtlXiNs0t/IlNNlXiNtprpWxwowkZF8hbivcqLNCp5B9hbgtcTU7coPuI/sKcduzzZB9hbid5FYyVsiZQZCNREz2Chr3sGwkd+7c+Ufc8d+69nfBMZ54x0F2dnbCjhbiDjg3cIC0URtJcLPbfQsKcfufW8lYISXQRtJA6YoFhbiDxWVd1AFQSXH5fwEGAL+grJqdriJzAAAAAElFTkSuQmCC";

let x_unique_id = Math.random().toString(36).substring(2, 12);
console.log(x_unique_id);

// 信息查询：微信读书
const queryWeread = (isbn, title, subtitle, author, translator, publisher) => {
    const handleResponse = (responseDetail) => {
        const result = JSON.parse(responseDetail.responseText);
        console.log(result);
        if (result.errmsg === "") {
            const { url, price } = result.data;

            let html_template_purchase = `

            微信读书

             ${price}元

            购


{
                State::Associated { active_timeout_event_id, .. } => *active_timeout_event_id,
                _ => panic!("expected Associated"),
            },
            None
        )
    }

    #[test]
    fn handle_mgmt_frame() {
        let mut fake_device = FakeDevice::new();
        let mut r_sta = make_remote_client();
        r_sta.state = StateMachine::new(State::Authenticating);
        let mut fake_scheduler = FakeScheduler::new();
        let mut ctx = make_context(fake_device.as_device(), fake_scheduler.as_scheduler());

        r_sta
            .handle_mgmt_frame(
                &mut ctx,
                mac::CapabilityInfo(0),
                None,
                mac::MgmtHdr {
                    frame_ctrl: mac::FrameControl(0b00000000_10110000), // Auth frame
                    duration: 0,
                    addr1: [1; 6],
                    addr2: [2; 6],
                    addr3: [3; 6],
                    seq_ctrl: mac::SequenceControl(10),
                },
                &[
                    0, 0, // Auth algorithm number
                    1, 0, // Auth txn seq number
                    0, 0, // Status code
                ][..],
            )
            .expect("expected OK");
    }

    #[test]
    fn handle_mgmt_frame_assoc_req() {
        let mut fake_device = FakeDevice::new();
        let mut r_sta = make_remote_client();
        r_sta.state = StateMachine::new(State::Authenticated);
        let mut fake_scheduler = FakeScheduler::new();
        let mut ctx = make_context(fake_device.as_device(), fake_scheduler.as_scheduler());

        r_sta
            .handle_mgmt_frame(
                &mut ctx,
                mac::CapabilityInfo(0),
                Some(Ssid::from("coolnet")),
                mac::MgmtHdr {
                    frame_ctrl: mac::FrameControl(0b00000000_00000000), // Assoc req frame
                    duration: 0,
                    addr1: [1; 6],
                    addr2: [2; 6],
                    addr3: [3; 6],
                    seq_ctrl: mac::SequenceControl(10),
                },
                &[
                    0, 0, // Capability info
                    10, 0, // Listen interval
                    // IEs
                    1, 8, 1, 2, 3, 4, 5, 6, 7, 8, // Rates
                    50, 2, 9, 10, // Extended rates
                    48, 2, 77, 88, // RSNE
                ][..],
            )
            .expect("expected OK");

        let msg = fake_device
            .next_mlme_msg::<fidl_mlme::AssociateIndication>()
            .expect("expected MLME message");
        assert_eq!(
            msg,
            fidl_mlme::AssociateIndication {
                peer_sta_address: CLIENT_ADDR,
                listen_interval: 10,
                ssid: Some(Ssid::from("coolnet").into()),
                capability_info: CapabilityInfo(0).raw(),
                rates: vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                rsne: Some(vec![48, 2, 77, 88]),
            },
        );
    }

    #[test]
    fn handle_mgmt_frame_not_permitted() {
        let mut fake_device = FakeDevice::new();
        let mut r_sta = make_remote_client();
        r_sta.state = StateMachine::new(State::Authenticating);
        let mut fake_scheduler = FakeScheduler::new();
        let mut ctx = make_context(fake_device.as_device(), fake_scheduler.as_scheduler());

        assert_variant!(


务架构

4.2.2 IoT 设备 OTA

4.2.3 IoT 设备漏洞挖掘思路概述

4.2.4 IoT 命令注入漏洞复现

4.2.5 IoT 命令注入漏洞复现实操

4.2.5 IoT 认证绕过漏洞复现

4.2.6 IoT 缓冲区溢出漏洞复现

4.2.7 IoT 后门漏洞复现

4.3 Fuzz与物联网漏洞挖掘

4.3.1 IoT 与 Fuzzing

4.3.2 IOT 场景中的 Fuzzer 工具

4.3.3 常见 Fuzz 工具 AFL++ 介绍&安装

4.3.4 常见 Fuzz 工具 AFL++ 实例演示

4.3.5 常见 Fuzz 工具 Boofuzz 介绍与安装

4.3.6 常见 Fuzz 工具 Boofuzz 实例演示

4.3.7 LLM 助力物联网 Fuzzing

**五、实战分析**

5.1  路由器公开CVE分析实战

路由设备漏洞分析

路由设备漏洞分析之D-Link

路由设备漏洞分析之Tenda

路由设备漏洞分析之WayOS

路由设备漏洞分析之NETGEAR

路由设备漏洞分析之Belkin

路由设备漏洞分析之UTT

5.2 其他设备

物联网设备漏洞分析

南方测绘等GNSS设备漏洞分析

5.3 拓展篇

实战物联网设备信息收集

自动化工具固件初步分析

**六、物联网安全走向何处？**

6.1 国内外安全社群简介

6.2 安全研究方向简介

6.3 车联网/卫星/LLM简介

**·**

**立即学习**

![](https://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8FewYl2MAlQHldGibTNbZaIibJviaN35Nk2jSD285IpuaiaM8B958SLcGYX4ORVgHqRicvJAicpNrj9BmfQ/640?wx_fmt=png&from=appmsg "")

原价：¥20000   折后：¥15000

探索IoT设备的奥秘

![](https://mmbiz.qpic.cn/sz_mmbiz_gif/1UG7KPNHN8FewYl2M


    "bio": "\u003Cp\u003EI thrive on empowering others and believe in the transformative power of education. Former full time software developer, now on a mission to equip future female leaders with essential skills in STEM with Generation Girl 🚀 \u003C/p\u003E",
              "picture": {
                "url": "https://res.cloudinary.com/startup-grind/image/upload/c_fill,dpr_2,f_auto,g_center,q_auto:good/v1/gcs/platform-data-goog/events/astrid.jpg",
                "path": "events/astrid.jpg",
                "thumbnail_width": 400,
                "thumbnail_height": 400,
                "thumbnail_format": "auto",
                "thumbnail_url": "https://res.cloudinary.com/startup-grind/image/upload/c_fill,dpr_2,f_auto,g_face,h_400,q_auto:good,w_400/v1/gcs/platform-data-goog/events/astrid.jpg"
              },
              "personal_twitter": "",
              "company_twitter": "",
              "event_person_id": 42705
            },
            {
              "id": 15818,
              "first_name": "Jessi",
              "last_name": "Febria",
              "company": "iOS Engineer @ Traveloka",
              "title": "Co-Founder @ PetaNetra",
              "bio": "\u003Cp\u003EOne word to describe myself, I like to be called a “Changemaker”, someone who is fueled by the desire to make a change. \u003C/p\u003E\u003Cp\u003EAnd, it began with myself. Back in 2018, choosing computer science as my major, I, a girl unfamiliar with computers, found myself navigating a male-dominated world. Armed with a passion for math, I ventured into various ICPC competitions and enrolled in bootcamps with Metrodata and Gojek during my college years.\u003C/p\u003E\u003Cp\u003EThe desire to make a broader impact on the world ignited when I joined the Apple Developer Academy. As a team, we co-founded PetaNetra—an app designed for the visually impaired to help them navigate independently in indoor public spaces. The iOS skills I got during this experience also paved the way for my role as an iOS engineer at Traveloka.\u003C/p\u003E\u003Cp\u003ECurrently, I am someone who juggling between PetaNetra (as Co-Founder, tech lead) and Traveloka (as iOS engineer). \u003C/p\u003E\u003Cp\u003EAnother chapter from my life, is that education has always been a burning passion of mine. From being an assistant lecturer and volunteering as a teacher in rural areas during college, I continue to fuel this passion. Presently, I am an Advisor & Instructor at Bangkit and a coding tutor for kids during my free time.\u003C/p\u003E",
              "picture": {
                "url": "https://res.cloudinary.com/startup-grind/image/upload/c_fill,dpr_2,f_auto,g_center,q_auto:good/v1/gcs/platform-data-goog/events/jessi.jpg",
                "path": "events/jessi.jpg",
                "thumbnail_width": 400,
                "thumbnail_height": 400,
                "thumbnail_format": "auto",
                "thumbnail_url": "https://res.cloudinary.com/startup-grind/image/upload/c_fill,dpr_2,f_auto,g_face,h_400,q_auto:good,w_400/v1/gcs/platform-data-goog/events/jessi.jpg"
              },
              "personal_twitter": "",
              "company_twitter": "traveloka",
              "event_person_id": 43092
            },


90 06 00 08 */	stw r0, 8(r6)
/* 8045BE14 00457354  48 00 00 24 */	b lbl_8045BE38
lbl_8045BE18:
/* 8045BE18 00457358  2C 00 00 0B */	cmpwi r0, 0xb
/* 8045BE1C 0045735C  40 81 00 14 */	ble lbl_8045BE30
/* 8045BE20 00457360  38 00 00 0B */	li r0, 0xb
/* 8045BE24 00457364  50 04 7B 20 */	rlwimi r4, r0, 0xf, 0xc, 0x10
/* 8045BE28 00457368  90 86 00 08 */	stw r4, 8(r6)
/* 8045BE2C 0045736C  48 00 00 0C */	b lbl_8045BE38
lbl_8045BE30:
/* 8045BE30 00457370  50 04 7B 20 */	rlwimi r4, r0, 0xf, 0xc, 0x10
/* 8045BE34 00457374  90 86 00 08 */	stw r4, 8(r6)
lbl_8045BE38:
/* 8045BE38 00457378  80 86 00 04 */	lwz r4, 4(r6)
/* 8045BE3C 0045737C  54 83 96 FE */	rlwinm r3, r4, 0x12, 0x1b, 0x1f
/* 8045BE40 00457380  34 03 00 02 */	addic. r0, r3, 2
/* 8045BE44 00457384  40 80 00 10 */	bge lbl_8045BE54
/* 8045BE48 00457388  54 80 04 98 */	rlwinm r0, r4, 0, 0x12, 0xc
/* 8045BE4C 0045738C  90 06 00 04 */	stw r0, 4(r6)
/* 8045BE50 00457390  48 00 00 24 */	b lbl_8045BE74
lbl_8045BE54:
/* 8045BE54 00457394  2C 00 00 07 */	cmpwi r0, 7
/* 8045BE58 00457398  40 81 00 14 */	ble lbl_8045BE6C
/* 8045BE5C 0045739C  38 00 00 07 */	li r0, 7
/* 8045BE60 004573A0  50 04 73 62 */	rlwimi r4, r0, 0xe, 0xd, 0x11
/* 8045BE64 004573A4  90 86 00 04 */	stw r4, 4(r6)
/* 8045BE68 004573A8  48 00 00 0C */	b lbl_8045BE74
lbl_8045BE6C:
/* 8045BE6C 004573AC  50 04 73 62 */	rlwimi r4, r0, 0xe, 0xd, 0x11
/* 8045BE70 004573B0  90 86 00 04 */	stw r4, 4(r6)
lbl_8045BE74:
/* 8045BE74 004573B4  A0 06 00 0E */	lhz r0, 0xe(r6)
/* 8045BE78 004573B8  38 60 00 0A */	li r3, 0xa
/* 8045BE7C 004573BC  50 60 5C 28 */	rlwimi r0, r3, 0xb, 0x10, 0x14
/* 8045BE80 004573C0  B0 06 00 0E */	sth r0, 0xe(r6)
lbl_8045BE84:
/* 8045BE84 004573C4  80 10 00 0C */	lwz r0, 0xc(r16)
/* 8045BE88 004573C8  2C 00 00 00 */	cmpwi r0, 0
/* 8045BE8C 004573CC  41 82 00 C0 */	beq lbl_8045BF4C
/* 8045BE90 004573D0  38 00 00 03


DELEGATA.equals(ruoloPorta)) {
				delegata = (nomePorta!=null);
			}
			else if(RuoloPolicy.APPLICATIVA.equals(ruoloPorta)) {
				applicativa = (nomePorta!=null);
			}
		}
		configurazione = !delegata && !applicativa;

		StringBuilder bf = new StringBuilder("Filtro");
		if(filtro.isEnabled()){

			bf.append(" abilitato con le seguenti impostazioni:");

			if(configurazione) {
				bf.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
				if( (filtro.getRuoloPorta()==null || RuoloPolicy.ENTRAMBI.equals(filtro.getRuoloPorta())) ){
					bf.append(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_PDD+": Qualsiasi");
				}
				else{
					bf.append(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_PDD+":"+filtro.getRuoloPorta().getValue());
				}
			}

			if(configurazione) {
				bf.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
				if( (filtro.getProtocollo()==null || "".equals(filtro.getProtocollo())) ){
					bf.append(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PROTOCOLLO+": Qualsiasi");
				}
				else{
					bf.append(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_PROTOCOLLO+": "+filtro.getProtocollo());
				}
			}

			if(configurazione) {
				bf.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
				if(filtro.getRuoloErogatore()!=null) {
					bf.append(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_RUOLO_EROGATORE+": "+filtro.getRuoloErogatore());
				}
				else if( (filtro.getTipoErogatore()==null || "".equals(filtro.getTipoErogatore()))
						||
						(filtro.getNomeErogatore()==null || "".equals(filtro.getNomeErogatore()))){
					bf.append(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_EROGATORE+": Qualsiasi");
				}
				else{
					bf.append(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_FILTRO_EROGATORE+": "+filtro.getTipoErogatore()+"/"+filtro.getNomeErogatore());
				}
			}

			if(configurazione) {
				bf.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
				if( filtro.getTag()==null || "".equals(filtro.getTag()) ){
					bf.append(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_CONTROLLO_T


tmp2, data1, #REP8_7f
	eor	diff, data1, data2	/* Non-zero if differences found.  */
	bic	has_nul, tmp1, tmp2	/* Non-zero if NUL terminator.  */
	orr	syndrome


# Copyright 2022 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# [auth_cloud_idtoken_impersonated_credentials]

import google
from google.auth import impersonated_credentials
import google.auth.transport.requests

def idtoken_from_impersonated_credentials(
        impersonated_service_account: str, scope: str, target_audience: str):
    """
      Use a service account (SA1) to impersonate as another service account (SA2) and obtain id token
      for the impersonated account.
      To obtain token for SA2, SA1 should have the "roles/iam.serviceAccountTokenCreator" permission
      on SA2.

    Args:
        impersonated_service_account: The name of the privilege-bearing service account for whom the credential is created.
            Examples: name@project.service.gserviceaccount.com

        scope: Provide the scopes that you might need to request to access Google APIs,
            depending on the level of access you need.
            For this example, we use the cloud-wide scope and use IAM to narrow the permissions.
            https://cloud.google.com/docs/authentication#authorization_for_services
            For more information, see: https://developers.google.com/identity/protocols/oauth2/scopes

        target_audience: The service name for which the id token is requested. Service name refers to the
            logical identifier of an API service, such as "iap.googleapis.com".
            Examples: iap.googleapis.com
    """

    # Construct the GoogleCredentials object which obtains the default configuration from your
    # working environment.
    credentials, project_id = google.auth.default()

    # Create the impersonated credential.
    target_credentials = impersonated_credentials.Credentials(
        source_credentials=credentials,
        target_principal=impersonated_service_account,
        # delegates: The chained list of delegates required to grant the final accessToken.
        # For more information, see:
        # https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
        # Delegate is NOT USED here.
        delegates=[],
        target_scopes=[scope],
        lifetime=300)

    # Set the impersonated credential, target audience and token options.
    id_creds = impersonated_credentials.IDTokenCredentials(
        target_credentials,
        target_audience=target_audience,
        include_email=True)

    # Get the ID token.
    # Once you've obtained the ID token, use it to make an authenticated call
    # to the target audience.
    request = google.auth.transport.requests.Request()
    id_creds.refresh(request)
    # token = id_creds.token
    print("Generated ID token.")

# [auth_cloud_idtoken_impersonated_credentials]


function f5(s){s=s|0,pTe(s),Qg(s,10)}function ATe(s){s=s|0,fTe(s+24|0)}function fTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function pTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,1,l,mTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hTe(s,l,c){s=s|0,l=l|0,c=+c,gTe(s,l,c)}function Qg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function gTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,ZA(k,l),n[m>>2]=$A(k,l)|0,ku(B,c),E[d>>3]=+Qu(B,c),dTe(s,m,d),C=f}function dTe(s,l,c){s=s|0,l=l|0,c=c|0,Y(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function mTe(){return 1404}function yTe(s,l){return s=s|0,l=+l,ETe(s,l)|0}function ETe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Wa(8)|0,c=d,Q=Kt(16)|0,ZA(m,s),s=$A(m,s)|0,ku(B,l),Y(Q,s,+Qu(B,l)),B=c+4|0,n[B>>2]=Q,s=Kt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],KF(s,B,m),n[d>>2]=s,C=f,c|0}function CTe(){var s=0;return o[7896]|0||(p5(10364),tr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Tr(10364)|0||p5(10364),10364}function p5(s){s=s|0,BTe(s),Qg(s,55)}function wTe(s){s=s|0,ITe(s+24|0)}function ITe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function BTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,4,l,STe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function vTe(s){s=s|0,DTe(s)}function DTe


) {
  padding-left: 2em;
}
.rendered_html ul {
  list-style: disc;
}
.rendered_html ul ul {
  list-style: square;
  margin-top: 0;
}
.rendered_html ul ul ul {
  list-style: circle;
}
.rendered_html ol {
  list-style: decimal;
}
.rendered_html ol ol {
  list-style: upper-alpha;
  margin-top: 0;
}
.rendered_html ol ol ol {
  list-style: lower-alpha;
}
.rendered_html ol ol ol ol {
  list-style: lower-roman;
}
.rendered_html ol ol ol ol ol {
  list-style: decimal;
}
.rendered_html * + ul {
  margin-top: 1em;
}
.rendered_html * + ol {
  margin-top: 1em;
}
.rendered_html hr {
  color: black;
  background-color: black;
}
.rendered_html pre {
  margin: 1em 2em;
  padding: 0px;
  background-color: #fff;
}
.rendered_html code {
  background-color: #eff0f1;
}
.rendered_html p code {
  padding: 1px 5px;
}
.rendered_html pre code {
  background-color: #fff;
}
.rendered_html pre,
.rendered_html code {
  border: 0;
  color: #000;
  font-size: 100%;
}
.rendered_html blockquote {
  margin: 1em 2em;
}
.rendered_html table {
  margin-left: auto;
  margin-right: auto;
  border: none;
  border-collapse: collapse;
  border-spacing: 0;
  color: black;
  font-size: 12px;
  table-layout: fixed;
}
.rendered_html thead {
  border-bottom: 1px solid black;
  vertical-align: bottom;
}
.rendered_html tr,
.rendered_html th,
.rendered_html td {
  text-align: right;
  vertical-align: middle;
  padding: 0.5em 0.5em;
  line-height: normal;
  white-space: normal;
  max-width: none;
  border: none;
}
.rendered_html th {
  font-weight: bold;
}
.rendered_html tbody tr:nth-child(odd) {
  background: #f5f5f5;
}
.rendered_html tbody tr:hover {
  background: rgba(66, 165, 245, 0.2);
}
.rendered_html * + table {
  margin-top: 1em;
}
.rendered_html p {
  text-align: left;
}
.rendered_html * + p {
  margin-top: 1em;
}
.rendered_html img {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.rendered_html * + img {
  margin-top: 1em;
}
.rendered_html img,
.rendered_html svg {
  max-width: 100%;
  height: auto;
}
.rendered_html img.unconfined,
.rendered_html svg.unconfined {
  max-width: none;
}
.rendered_html .alert {
  margin-bottom: initial;
}
.rendered_html * + .alert {
  margin-top: 1em;
}
[dir="rtl"] .rendered_html p {
  text-align: right;
}
div.text_cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient:


ng(0, indexOfColon).Trim();
				value = rawHeader.Substring(indexOfColon + 1).Trim();
			}

			return new KeyValuePair<string, string>(key, value);
		}
	}
}


   '5l4q4t,'
    // #6445: 2 fonts: JP 5₁₄₁, KR 100₃₆₀.
    '5l8k,'
    // #6446: 2 fonts: JP 5₁₄₁, SC 3₃₈₇.
    '5l9l,'
    // #6447: 2 fonts: JP 7₁₄₃, KR 65₃₂₅.
    '5n6z,'
    // #6448: 2 fonts: JP 8₁₄₄, KR 65₃₂₅.
    '5o6y,'
    // #6449: 3 fonts: JP 8₁₄₄, KR 66₃₂₆, SC 7₃₉₁.
    '5o6z2m,'
    // #6450: 2 fonts: JP 9₁₄₅, KR 66₃₂₆.
    '5p6y,'
    // #6451: 3 fonts: JP 9₁₄₅, KR 66₃₂₆, SC 8₃₉₂.
    '5p6y2n,'
    // #6452: 2 fonts: JP 10₁₄₆, SC 10₃₉₄.
    '5q9n,'
    // #6453: 2 fonts: JP 10₁₄₆, SC 89₄₇₃.
    '5q12o,'
    // #6454: 2 fonts: JP 12₁₄₈, KR 67₃₂₇.
    '5s6w,'
    // #6455: 2 fonts: JP 12₁₄₈, KR 68₃₂₈.
    '5s6x,'
    // #6456: 2 fonts: JP 13₁₄₉, SC 86₄₇₀.
    '5t12i,'
    // #6457: 2 fonts: JP 14₁₅₀, SC 78₄₆₂.
    '5u11z,'
    // #6458: 2 fonts: JP 15₁₅₁, SC 16₄₀₀.
    '5v9o,'
    // #6459: 2 fonts: JP 15₁₅₁, SC 17₄₀₁.
    '5v9p,'
    // #6460: 2 fonts: JP 15₁₅₁, SC 18₄₀₂.
    '5v9q,'
    // #6461: 2 fonts: JP 18₁₅₄, SC 79₄₆₃.
    '5y11w,'
    // #6462: 2 fonts: JP 18₁₅₄, SC 90₄₇₄.
    '5y12h,'
    // #6463: 2 fonts: JP 19₁₅₅, KR 72₃₃₂.
    '5z6u,'
    // #6464: 2 fonts: JP 19₁₅₅, SC 22₄₀₆.
    '5z9q,'
    // #6465: 2 fonts: JP 20₁₅₆, SC 82₄₆₆.
    '6a11x,'
    // #6466: 2 fonts: JP 20₁₅₆, SC 84₄₆₈.
    '6a11z,'
    // #6467: 2 fonts: JP 20₁₅₆, SC 88₄₇₂.
    '6a12d,'
    // #6468: 2 fonts: JP 21₁₅₇, SC 23₄₀₇.
    '6b9p,'
    // #6469: 2 fonts: JP 22₁₅₈, SC 89₄₇₃.
    '6c12c,'
    // #6470: 3 fonts:


args': <String, dynamic>{'key': 'Test', 'isolateId': isolateId, 'parentId': null},
      },
      <String, dynamic>{
        'name': 'listener',
        'args': <String, dynamic>{'isolateId': isolateId, 'parentId': null},
      },
      <String, dynamic>{
        'name': 'ImageCache.clear',
        'args': <String, dynamic>{
          'pendingImages': 1,
          'keepAliveImages': 0,
          'liveImages': 1,
          'currentSizeInBytes': 0,
          'isolateId': isolateId,
          'parentId': null,
        },
      },
      <String, dynamic>{
        'name': 'ImageCache.putIfAbsent',
        'args': <String, dynamic>{'key': 'Test2', 'isolateId': isolateId, 'parentId': null},
      },
      <String, dynamic>{
        'name': 'ImageCache.evict',
        'args': <String, dynamic>{'sizeInBytes': 4, 'isolateId': isolateId, 'parentId': null},
      },
    ]);
  }, skip: isBrowser); // [intended] uses dart:isolate and io.
}

void _expectTimelineEvents(List<TimelineEvent> events, List<Map<String, dynamic>> expected) {
  for (final TimelineEvent event in events) {
    for (int index = 0; index < expected.length; index += 1) {
      if (expected[index]['name'] == event.json!['name']) {
        final Map<String, dynamic> expectedArgs = expected[index]['args'] as Map<String, dynamic>;
        final Map<String, dynamic> args = event.json!['args'] as Map<String, dynamic>;
        if (_mapsEqual(expectedArgs, args)) {
          expected.removeAt(index);
        }
      }
    }
  }
  if (expected.isNotEmpty) {
    final String encodedEvents = jsonEncode(events);
    fail('Timeline did not contain expected events: $expected\nactual: $encodedEvents');
  }
}

bool _mapsEqual(Map<String, dynamic> expectedArgs, Map<String, dynamic> args) {
  for (final String key in expectedArgs.keys) {
    if (expectedArgs[key] != args[key]) {
      return false;
    }
  }
  return true;
}

class TestImageStreamCompleter extends ImageStreamCompleter {
  void testSetImage(ImageInfo image) {
    setImage(image);
  }
}
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';

/// Flutter code sample for [ElevatedButton].

void main() => runApp(const ElevatedButtonExampleApp());

class ElevatedButtonExampleApp extends StatelessWidget {
  const ElevatedButtonExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('ElevatedButton Sample')),
        body: const ElevatedButtonExample(),
      ),
    );
  }
}

class ElevatedButtonExample extends StatefulWidget {
  const ElevatedButtonExample({super.key});

  @override
  State<ElevatedButtonExample> createState() => _ElevatedButtonExampleState();
}

class _ElevatedButtonExampleState extends State<ElevatedButtonExample> {
  @override
  Widget build(BuildContext context) {
    final ButtonStyle style = ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20));

    return Center(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
          ElevatedButton(
            style: style,
            onPressed: null,
            child: const Text('Disabled'),
          ),
          const SizedBox(height: 30),
          ElevatedButton(
            style: style


r ip, ip, lr
  mov ip, ip, asl #9
  tst ip, #512
  mov r4, r0
  str ip, [sp, #12]
  mov r8, r1
  mov sl, r2
  str r3, [sp, #8]
  beq .L5988
  add r3, r5, r0, asl #1
  ldrh  r1, [r3, #8]
  ldr r3, .L5993+4
  mov r2, r0, asl #4
  sub r0, r0, #2
  ldr r6, [r3, r0, asl #2]
  ldr r3, .L5993+8
  sub r2, r2, #32
  add r2, r2, r5
  mov lr, r1, lsr #14
  ldr r5, [r3, r0, asl #2]
  ldr r4, .L5993+12
  mov ip, r1, lsr #12
  mov r0, r1, asl #3
  mov r1, r1, asl #12
  and r1, r1, #49152
  ldrsh fp, [r2, #36]
  add r1, r1, r4
  ldrsh r9, [r2, #32]
  and ip, ip, #2
  and r0, r0, #63488
  str r1, [sp, #20]
  ldr r1, [sp, #8]
  add r0, r0, r4
  add r2, lr, #7
  mov r3, #1
  cmp fp, #0
  orrne ip, ip, #1
  str r0, [sp, #16]
  mov r7, r3, asl r2
  mla r0, r9, r8, r5
  rsb sl, r8, sl
  add lr, lr, #4
  add r4, r1, r8, asl #2
  mla r5, fp, r8, r6
  cmp ip, #3
  ldrls pc, [pc, ip, asl #2]
  b .L5985
  .p2align 2
.L5943:
  .word .L5939
  .word .L5940
  .word .L5941
  .word .L5942
.L5941:
  sub r6, r7, #1
  and r1, r6, r5, asr #8
  cmp r7, r1
  bls .L5985
  ldr r5, [sp, #16]
  ldr ip, [sp, #20]
  mov r2, r1, lsr #3
  and r3, r1, #7
  cmp sl, #0
  add lr, r5, r2, asl lr
  add r1, ip, r3, asl #3
  beq .L5985
  mov ip, #0
.L5974:
  and r3, r6, r0, asr #8
  ldrb  r2, [lr, r3, lsr #3]  @ zero_extendqisi2
  and r3, r3, #7
  add r3, r3, r2, asl #6
  ldrb  r2, [r3, r1]  @ zero_extendqisi2
  add ip, ip, #1
  cmp r2, #0
  ldrne r3, [r4, #0]
  ldrne r5, [sp, #12]
  add r0, r0, r9
  orrne r3, r5, r3, asl #16
  orrne r3, r2, r3
  strne r3, [r4, #0]
  cmp sl, ip
  add r4, r4, #4
  bne .L5974
.L5985:
  add sp, sp, #36
  ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
.L5988:
  add sp, sp, #36
  ldmfd sp!, {r4, r5, r6, r7, r


*/
    public static void importPreferences(InputStream is)
        throws IOException, InvalidPreferencesFormatException
    {
        XmlSupport.importPreferences(is);
    }
}
/*
 * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 */

package java.awt.datatransfer;

import java.io.*;

/**
 * A Transferable which implements the capability required
 * to transfer a String.
 *
 * This Transferable properly supports
 * DataFlavor.stringFlavor
 * and all equivalent flavors. Support for
 * DataFlavor.plainTextFlavor
 * and all equivalent flavors is deprecated. No other
 * DataFlavors are supported.
 *
 * @see java.awt.datatransfer.DataFlavor#stringFlavor
 * @see java.awt.datatransfer.DataFlavor#plainTextFlavor
 */
public class StringSelection implements Transferable, ClipboardOwner {

    private static final int STRING = 0;
    private static final int PLAIN_TEXT = 1;

    private static final DataFlavor[] flavors = {
        DataFlavor.stringFlavor,
        DataFlavor.plainTextFlavor // deprecated
    };

    private String data;

    /**
     * Creates a Transferable capable of transferring
     * the specified String.
     */
    public StringSelection(String data) {
        this.data = data;
    }

    /**
     * Returns an array of flavors in which this Transferable
     * can provide the data. DataFlavor.stringFlavor
     * is properly supported.
     * Support for DataFlavor.plainTextFlavor is
     * deprecated.
     *
     * @return an array of length two, whose elements are DataFlavor.
     *         stringFlavor and DataFlavor.plainTextFlavor
     */
    public DataFlavor[] getTransferDataFlavors() {
        // returning flavors itself would allow client code to modify
        // our internal behavior
        return (DataFlavor[])flavors.clone();
    }

    /**
     * Returns whether the requested flavor is supported by this
     * Transferable.
     *
     * @param flavor the requested flavor for the data
     * @return true if flavor is equal to
     *   DataFlavor.stringFlavor or
     *   DataFlavor.plainTextFlavor; false if flavor
     *   is not one of the above flavors
     * @throws NullPointerException if flavor is null
     */
    public boolean isDataFlavorSupported(DataFlavor flavor) {
        // JCK Test StringSelection0003: if 'flavor' is null, throw NPE
        for (int i = 0; i < f


 - FRAME_attak216);

            Math3D.AngleVectors(self.s.angles, forward, right, null);
            Math3D.G_ProjectSource(self.s.origin,
                    M_Flash.monster_flash_offset[flash_number], forward, right,
                    start);

            // project enemy back a bit and target there
            Math3D.VectorCopy(self.enemy.s.origin, target);
            Math3D.VectorMA(target, -0.2f, self.enemy.velocity, target);
            target[2] += self.enemy.viewheight;

            Math3D.VectorSubtract(target, start, aim);
            Math3D.VectorNormalize(aim);
            Monster.monster_fire_bullet(self, start, aim, 3, 4,
                    GameDefines.DEFAULT_BULLET_HSPREAD,
                    GameDefines.DEFAULT_BULLET_VSPREAD, flash_number, gameExports);

            return true;
        }
    };

    static EntThinkAdapter GunnerGrenade = new EntThinkAdapter() {
    	public String getID() { return "GunnerGrenade"; }
        public boolean think(GameEntity self, GameExportsImpl gameExports) {
            float[] start = { 0, 0, 0 };
            float[] forward = { 0, 0, 0 }, right = { 0, 0, 0 };
            float[] aim = { 0, 0, 0 };
            int flash_number;

            if (self.s.frame == FRAME_attak105)
                flash_number = Defines.MZ2_GUNNER_GRENADE_1;
            else if (self.s.frame == FRAME_attak108)
                flash_number = Defines.MZ2_GUNNER_GRENADE_2;
            else if (self.s.frame == FRAME_attak111)
                flash_number = Defines.MZ2_GUNNER_GRENADE_3;
            else
                // (self.s.frame == FRAME_attak114)
                flash_number = Defines.MZ2_GUNNER_GRENADE_4;

            Math3D.AngleVectors(self.s.angles, forward, right, null);
            Math3D.G_ProjectSource(self.s.origin,
                    M_Flash.monster_flash_offset[flash_number], forward, right,
                    start);

            //FIXME : do a spread -225 -75 75 225 degrees around forward
            Math3D.VectorCopy(forward, aim);

            Monster.monster_fire_grenade(self, start, aim, 50, 600,
                    flash_number, gameExports);
            return true;
        }
    };

    static EntThinkAdapter gunner_attack = new EntThinkAdapter() {
    	public String getID() { return "gunner_attack"; }
        public boolean think(GameEntity self, GameExportsImpl gameExports) {
            if (GameUtil.range(self, self.enemy) == GameDefines.RANGE_MELEE) {
                self.monsterinfo.currentmove = gunner_move_attack_chain;
            } else {
                if (Lib.random() <= 0.5)
                    self.monsterinfo.currentmove = gunner_move_attack_grenade;
                else
                    self.monsterinfo.currentmove = gunner_move_attack_chain;
            }
            return true;
        }
    };

    static EntThinkAdapter gunner_fire_chain = new EntThinkAdapter() {
    	public String getID() { return "gunner_fire_chain"; }
        public boolean think(GameEntity self, GameExportsImpl gameExports) {
            self.monsterinfo.currentmove = gunner_move_fire_chain;
            return true;
        }
    };

    static mframe_t gunner_frames_attack_chain[] = new mframe_t[] {
            new mframe_t(GameAI.ai_


ôi phục email: $e'),
            backgroundColor: theme.brightness == Brightness.dark ? Colors.red[700] : Colors.red,
            behavior: SnackBarBehavior.floating,
          ),
        );
      }
    }
  }

  bool _isSpamEmail() {
    if (_currentUser == null) return false;
    final emailLabelsMap = widget.email['emailLabels'] as Map<String, dynamic>?;
    if (emailLabelsMap != null && emailLabelsMap[_currentUser!.uid] is List) {
      final userLabels = List<String>.from(emailLabelsMap[_currentUser!.uid] as List);
      return userLabels.contains('Spam');
    }
    return false;
  }

  Future<void> _toggleSpamLabel() async {
    if (_currentUser == null || widget.email['id'] == null) return;

    final isCurrentlySpam = _isSpamEmail();

    try {
      if (widget.toggleSpamStatus != null) {
        await widget.toggleSpamStatus!(
          widget.email['id'],
          _currentUser!.uid,
          !isCurrentlySpam
        );

        if (mounted) {
          setState(() {
            final emailLabelsMap = widget.email['emailLabels'] as Map<String, dynamic>? ?? {};
            final userLabels = List<String>.from(emailLabelsMap[_currentUser!.uid] ?? []);

            if (!isCurrentlySpam) {
              if (!userLabels.contains('Spam')) {
                userLabels.add('Spam');
              }
              userLabels.remove('Inbox');
            } else {
              userLabels.remove('Spam');
              if (!userLabels.contains('Inbox')) {
                userLabels.add('Inbox');
              }
            }

            emailLabelsMap[_currentUser!.uid] = userLabels;
            widget.email['emailLabels'] = emailLabelsMap;
            _emailDataWasUpdated = true;
          });
        }
      }
    } catch (e) {
      print('Error toggling spam status: $e');
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Error updating spam status: $e')),
        );
      }
    }
  }
  @override
  void dispose() {
    if (!kIsWeb) {
      _languageIdentifier.close();
      _onDeviceTranslator?.close();
    }
    super.dispose();
  }

  // Helper function to get BCP-47 code from TranslateLanguage
String _getBcp47Code(mlkit_translation.TranslateLanguage? lang) {
  if (lang == null) return 'und';

  final Map<mlkit_translation.TranslateLanguage, String> bcp47Map = {
    mlkit_translation.TranslateLanguage.afrikaans: 'af', mlkit_translation.TranslateLanguage.albanian: 'sq', mlkit_translation.TranslateLanguage.arabic: 'ar',
    mlkit_translation.TranslateLanguage.belarusian: 'be', mlkit_translation.TranslateLanguage.bengali: 'bn', mlkit_translation.TranslateLanguage.bulgarian: 'bg',
    mlkit_translation.TranslateLanguage.catalan: 'ca', mlkit_translation.TranslateLanguage.chinese: 'zh', mlkit_translation.TranslateLanguage.croatian: 'hr',
    mlkit_translation.TranslateLanguage.czech: 'cs', mlkit_translation.TranslateLanguage.danish: 'da', mlkit_translation.TranslateLanguage.dutch: 'nl',
    mlkit_translation.TranslateLanguage.english: 'en', mlkit_translation.TranslateLanguage.esperanto: 'eo', mlkit_translation.TranslateLanguage.estonian: 'et',
    mlkit_translation.TranslateLanguage.finnish: 'fi', mlkit_translation.TranslateLanguage.french: 'fr', mlkit_trans


movq	(%r9), %rax
        bswapq	%rax
        movq	%rax, (%rdi)
        addq	$8, %rdi
        subq	$8, %rcx
L_4096_from_bin_bswap_8_end:
        cmpq	$7, %rcx
        jg	L_4096_from_bin_bswap_8_start
        cmpq	%r11, %rcx
        je	L_4096_from_bin_bswap_hi_end
        movq	%r11, %r8
        movq	%r11, %rax
L_4096_from_bin_bswap_hi_start:
        movb	(%rdx), %al
        shlq	$8, %r8
        incq	%rdx
        addq	%rax, %r8
        decq	%rcx
        jg	L_4096_from_bin_bswap_hi_start
        movq	%r8, (%rdi)
        addq	$8, %rdi
L_4096_from_bin_bswap_hi_end:
        cmpq	%r10, %rdi
        jge	L_4096_from_bin_bswap_zero_end
L_4096_from_bin_bswap_zero_start:
        movq	%r11, (%rdi)
        addq	$8, %rdi
        cmpq	%r10, %rdi
        jl	L_4096_from_bin_bswap_zero_start
L_4096_from_bin_bswap_zero_end:
        repz retq
#ifndef __APPLE__
.size	sp_4096_from_bin_bswap,.-sp_4096_from_bin_bswap
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Read big endian unsigned byte array into r.
 * Uses the movbe instruction which is an optional instruction.
 *
 * r  A single precision integer.
 * size  Maximum number of bytes to convert
 * a  Byte array.
 * n  Number of bytes in array to read.
 */
#ifndef __APPLE__
.text
.globl	sp_4096_from_bin_movbe
.type	sp_4096_from_bin_movbe,@function
.align	16
sp_4096_from_bin_movbe:
#else
.section	__TEXT,__text
.globl	_sp_4096_from_bin_movbe
.p2align	4
_sp_4096_from_bin_movbe:
#endif /* __APPLE__ */
        movq	%rdx, %r9
        movq	%rdi, %r10
        addq	%rcx, %r9
        addq	$0x200, %r10
        jmp	L_4096_from_bin_movbe_64_end
L_4096_from_bin_movbe_64_start:
        subq	$0x40, %r9
        movbeq	56(%r9), %rax
        movbeq	48(%r9), %r8
        movq	%rax, (%rdi)
        movq	%r8, 8(%rdi)
        movbeq	40(%r9), %rax
        movbeq	32(%r9), %r8
        movq	%rax, 16(%rdi)
        movq	%r8, 24(%rdi)
        movbeq	24(%r9), %rax
        movbeq	16(%r9), %r8
        movq	%rax, 32(%rdi)
        movq	%r8, 40(%rdi)
        movbeq	8(%r9), %rax
        movbeq	(%r9), %r8
        movq	%rax, 48(%rdi)
        movq	%r8, 56(%rdi)
        addq	$0x40, %rdi


local UI = Z.UI
local super = require("ui.ui_view_base")
local Tips_game_broadcastView = class("Tips_game_broadcastView", super)
local POS_MOVE_Y = 100

function Tips_game_broadcastView:ctor()
  self.uiBinder = nil
  super.ctor(self, "tips_game_broadcast")
  self.configMoveTime_ = Z.Global.BroadcastTipsMoveTime
end

function Tips_game_broadcastView:OnActive()
  self:BindEvents()
  self.curShowId_ = nil
  if Z.UIMgr:IsActive("tips_broadcast") then
    self.uiBinder.rect_panel:SetAnchorPosition(0, -50)
  else
    self.uiBinder.rect_panel:SetAnchorPosition(0, 0)
  end
end

function Tips_game_broadcastView:OnDeActive()
end

function Tips_game_broadcastView:OnRefresh()
  self:showOneBroadcast()
end

function Tips_game_broadcastView:BindEvents()
  Z.EventMgr:Add(Z.ConstValue.UIOpen, self.onOpenViewEvent, self)
  Z.EventMgr:Add(Z.ConstValue.UIClose, self.onCloseViewEvent, self)
end

function Tips_game_broadcastView:UnBindEvents()
  Z.EventMgr:Remove(Z.ConstValue.UIOpen, self.onOpenViewEvent, self)
  Z.EventMgr:Remove(Z.ConstValue.UIClose, self.onCloseViewEvent, self)
end

function Tips_game_broadcastView:onCloseViewEvent(viewConfigKey)
  if viewConfigKey == "tips_broadcast" then
    self.uiBinder.rect_panel:SetAnchorPosition(0, 0)
  end
end

function Tips_game_broadcastView:onOpenViewEvent(viewConfigKey)
  if viewConfigKey == "tips_broadcast" then
    self.uiBinder.rect_panel:SetAnchorPosition(0, -50)
  end
end

function Tips_game_broadcastView:showOneBroadcast()


链接，或者被浏览器拦截

皮肤相关

        skins
        预加载皮肤的地址列表，可设置多个，逗号隔开，如skins="default.zip,wmp11.zip"

          提示：如果皮肤路径格式都正确，但加载错误，可能是因为空间对zip文件的限制访问导致，可尝试将后缀改为swf等

        skin_id
        当前需要使用皮肤的id序号，默认值为1，如果没有设置以上skins皮肤列表，则加载默认皮肤，此时skin_id为0

        skin
        单个皮肤地址快捷设置，它将自动附加到上面skins设置的前面，并强制skin_id为1

很多空间存在.zip后缀文件无权读取的问题，可尝试修改皮肤后缀为swf或jpg解决，如skin="default.swf"

插件和背景

        plugins
        插件地址列表，支持多个，支持多属性自定义（最新版本CMP支持将多个插件打包成zip文件一起加载）

        plugin
        附加插件地址，将自动附加到plugins参数前面

        models
        自定义模块地址，将自动附加到plugins参数前面(优先级低于plugin参数)

        backgrounds
        背景地址列表，支持多个，支持多属性自定义

        background
        附加背景地址，将自动添加到backgrounds参数前面

        bgcolor
        播放器所在flash背景颜色，默认为空

        plugins_disabled
        是否


BoolVar(&forceGlobal, "global", false, "set the value at the global level")
	configCmd.MarkFlagsMutuallyExclusive("app", "global")

	root.Cmd.AddCommand(configCmd)
}

// bt renders a backtick-enclosed string.
func bt(val string) string {
	return fmt.Sprintf("`%s`", val)
}
package bits

import (
	"context"
	"fmt"
	"os"

	"github.com/cockroachdb/errors"
	"github.com/spf13/cobra"

	"encr.dev/cli/cmd/encore/cmdutil"
	"encr.dev/pkg/bits"
)

var addCmd = &cobra.Command{
	Use:   "add <name> [<path>]",
	Short: "Add an Encore Bit to your application",
	Args:  cobra.MinimumNArgs(1),

	DisableFlagsInUseLine: true,
	Run: func(c *cobra.Command, args []string) {
		slug := args[0]
		ctx := context.Background()
		bit, err := bits.Get(ctx, slug)
		if errors.Is(err, errBitNotFound) {
			cmdutil.Fatalf("encore bit not found: %s", slug)
		} else if err != nil {
			cmdutil.Fatalf("could not lookup encore bit: %v", err)
		}

		workdir, err := os.MkdirTemp("", "encore-bit")
		if err != nil {
			cmdutil.Fatal(err)
		}
		defer os.RemoveAll(workdir)

		//prefix := args[0]
		//if len(args) > 1 {
		//	prefix = args[1]
		//}

		fmt.Fprintf(os.Stderr, "Downloading Encore Bit: %s\n", bit.Title)
		if err := bits.Extract(ctx, bit, workdir); err != nil {
			cmdutil.Fatalf("download failed: %v", err)
		}

		meta, err := bits.Describe(ctx, workdir)
		if err != nil {
			cmdutil.Fatalf("could not parse bit metadata: %v", err)
		}

		fmt.Fprintf(os.Stderr, "successfully got bit: %+v\n", meta)

		//fmt.Fprintf(os.Stderr, "\n\nSuccessfully added Encore Bit: %s!\n", bit.Title)
		//fmt.Fprintf(os.Stderr, "You can find the new bit under the %s/ directory.\n", prefix)
	},
}

func init() {
	bitsCmd.AddCommand(addCmd)
}
/*
Copyright 2014 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package types

// RawExtension is used to hold extensions in external versions.
//
// To use this, make a field which has RawExtension as its type in your external, versioned
// struct, and Object in your internal struct. You also need to register your
// various plugin types.
//
// // Internal package:
//
//	type MyAPIObject struct {
//		runtime.TypeMeta `json:",inline"`
//		MyPlugin runtime.Object `json:"myPlugin"`
//	}
//
//	type PluginA struct {
//		AOption string `json:"aOption"`
//	}
//
// // External package:
//
//	type MyAPIObject struct {
//		runtime.TypeMeta `json:",inline"`
//		MyPlugin runtime.RawExtension `json:"myPlugin"`
//	}
//
//	type PluginA struct {
//		AOption string `json:"aOption"`
//	}
//
// // On the wi


faction_memory",
				"time_since_last_short_conversation",
				OP.TIMEDIFF,
				OP.GT,
				100,
			},
			{
				"faction_memory",
				"time_since_last_conversation",
				OP.TIMEDIFF,
				OP.GT,
				20,
			},
		},
		on_done = {
			{
				"user_memory",
				"bonding_conversations_victoria_parched_a_user",
				OP.ADD,
				1,
			},
			{
				"faction_memory",
				"bonding_conversations_victoria_parched_a",
				OP.ADD,
				1,
			},
			{
				"faction_memory",
				"time_since_last_short_conversation",
				OP.TIMESET,
				"0",
			},
		},
		heard_speak_routing = {
			target = "players",
		},
	})
	define_rule({
		category = "conversations_prio_1",
		database = "zealot_male_c",
		name = "bonding_conversations_victoria_parched_b",
		response = "bonding_conversations_victoria_parched_b",
		wwise_route = 0,
		criterias = {
			{
				"query_context",
				"concept",
				OP.EQ,
				"heard_speak",
			},
			{
				"query_context",
				"dialogue_name",
				OP.SET_INCLUDES,
				args = {
					"bonding_conversations_victoria_parched_a",
				},
			},
			{
				"user_context",
				"voice_template",
				OP.SET_INCLUDES,
				args = {
					"zealot_male_b",
				},
			},
		},
		on_done = {
			{
				"user_memory",
				"bonding_conversations_victoria_parched_b_user",
				OP.ADD,
				1,
			},
		},
		heard_speak_routing = {
			target = "players",
		},
		on_pre_rule_execution = {
			delay_vo = {
				duration = 0.2,
			},
		},
	})
	define_rule({
		category = "conversations_prio_1",
		database = "zealot_male_c",
		name = "bonding_conversations_victoria_parched_c",
		response = "bonding_conversations_victoria_parched_c",
		wwise_route = 0,
		criterias = {
			{
				"query_context",
				"concept",
				OP.EQ,
				"heard_speak",
			},
			{
				"query_context",
				"dialogue_name",
				OP.SET_INCLUDES,
				args = {
					"bonding_conversations_victoria_parched_b",
				},
			},
			{
				"user_context",
				"voice_template",
				OP.SET_INCLUDES,
				args = {
					"zealot_male_c",
				},
			},
			{
				"user_memory",
				"bonding_conversations_victoria_parched_a_user",
				OP.EQ,
				1,
			},
		},
		on_done = {},
		heard_speak_routing = {
			target = "players",
		},
		on_pre_rule_execution = {
			delay_vo = {
				duration = 0.2,
			},
		},
	})
	define_rule({
		category = "conversations_prio_1",
		database = "zealot_male_c",
		name = "bonding_conversations_victoria_parched_d",
		response = "bonding_c


{_0x63d6x20[__Oxee8fb[0x80]][__Oxee8fb[0x24]]}${__Oxee8fb[0x2]}`)}else {if(_0x63d6x20[__Oxee8fb[0x7f]]=== false){console[__Oxee8fb[0xb]](`${__Oxee8fb[0x8c]}`)}else {console[__Oxee8fb[0xb]](`${__Oxee8fb[0x2]}${_0x63d6x1e}${__Oxee8fb[0x2]}`)}}}else {console[__Oxee8fb[0xb]](`${__Oxee8fb[0x2]}${_0x63d6x1e}${__Oxee8fb[0x2]}`)};break;case __Oxee8fb[0x70]:if( typeof _0x63d6x20== __Oxee8fb[0x7e]){if(_0x63d6x20[__Oxee8fb[0x7f]]&& _0x63d6x20[__Oxee8fb[0x7f]]=== true){if( typeof _0x63d6x20[__Oxee8fb[0x80]]== __Oxee8fb[0x7e]){let _0x63d6xf=__Oxee8fb[0x2];let _0x63d6x21=_0x63d6x14;if(_0x63d6x20[__Oxee8fb[0x80]][__Oxee8fb[0x8d]]){_0x63d6xf+= (_0x63d6x20[__Oxee8fb[0x80]][__Oxee8fb[0x8d]][__Oxee8fb[0x8e]]== true&& _0x63d6x20[__Oxee8fb[0x80]][__Oxee8fb[0x8d]][__Oxee8fb[0x8f]]+ __Oxee8fb[0x90])|| __Oxee8fb[0x91]};if(_0x63d6x20[__Oxee8fb[0x80]][__Oxee8fb[0x92]]){_0x63d6xf+= `${__Oxee8fb[0x83]}${_0x63d6x20[__Oxee8fb[0x80]][__Oxee8fb[0x92]]}${__Oxee8fb[0x93]}`};console[__Oxee8fb[0xb]](`${__Oxee8fb[0x2]}${_0x63d6x21}${__Oxee8fb[0x94]}${_0x63d6xf|| _0x63d6x1e}${__Oxee8fb[0x2]}`)}else {console[__Oxee8fb[0xb]](`${__Oxee8fb[0x2]}${_0x63d6x1e[__Oxee8fb[0x7f]]}${__Oxee8fb[0x2]}`)}}else {if(_0x63d6x20[__Oxee8fb[0x82]]){$[__Oxee8fb[0x4e]]= false;console[__Oxee8fb[0xb]](`${__Oxee8fb[0x2]}${_0x63d6x14}${__Oxee8fb[0x83]}${_0x63d6x20[__Oxee8fb[0x82]]|| __Oxee8fb[0x2]}${__Oxee8fb[0x2]}`)}else {console[__Oxee8fb[0xb]](`${__Oxee8fb[0x2]}${_0x63d6x14}${__Oxee8fb[0x83]}${_0x63d6x1e}${__Oxee8fb[0x2]}`)}}}else {console[__Oxee8fb[0xb]](`${__Oxee8fb[0x2]}${_0x63d6x14}${__Oxee8fb[0x83]}${_0x63d6x


.04-.42l3.13-3.04c.3-.3.3-.78 0-1.08l-3.13-3.04a1.5 1.5 0 0 0-1.05-.42H6.5Z\"/>") { } }
    public class Dialpad : Icon { public Dialpad() : base("Dialpad", IconVariant.Filled, IconSize.Size20, "<path d=\"M6 5.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Zm0 4a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5ZM7.25 12a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM10 5.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5ZM11.25 8a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM10 13.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5ZM11.25 16a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM14 5.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5ZM15.25 8a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM14 13.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Z\"/>") { } }
    public class DialpadOff : Icon { public DialpadOff() : base("DialpadOff", IconVariant.Filled, IconSize.Size20, "<path d=\"M2.85 2.15a.5.5 0 1 0-.7.7l3.9 3.9H6a1.25 1.25 0 1 0 1.25 1.2l2.8 2.8H10a1.25 1.25 0 1 0 1.25 1.2l5.9 5.9a.5.5 0 0 0 .7-.7l-15-15ZM15.25 12c0 .31-.12.6-.3.82l-1.77-1.76a1.25 1.25 0 0 1 2.07.94Zm-4-4c0 .31-.12.6-.3.82L9.17 7.06a1.25 1.25 0 0 1 2.07.94Zm-4-4c0 .31-.12.6-.3.82L5.17 3.06A1.25 1.25 0 0 1 7.25 4Zm0 8a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM10 5.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5ZM11.25 16a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM14 5.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5ZM15.25 8a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0Z\"/>") { } }
    public class DialpadQuestionMark : Icon { public DialpadQuestionMark() : base("DialpadQuestionMark", IconVariant.Filled, IconSize.Size20, "<path d=\"M6 5.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Zm0 4a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Zm0 4a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Zm4


recorder: any
    utterThis: any = new SpeechSynthesisUtterance()

    speak(comment: IComment) {
        this.utterThis.text = comment.content
        this.utterThis.rate = comment.rate // 読み上げ速度 0.1-10 初期値:1 (倍速なら2, 半分の倍速なら0.5, )
        this.utterThis.pitch = comment.voice_type;　// 声の高さ 0-2 初期値:1(0で女性の声)
        this.utterThis.lang = 'ja-JP' //(日本語:ja-JP, アメリカ英語:en-US, イギリス英語:en-GB, 中国語:zh-CN, 韓国語:ko-KR)
        speechSynthesis.speak(this.utterThis)

        return this.utterThis
    }

    speakAll(comments: IComment[]) {
        // 無操作でAudioContextを作成するとエラーになるのでここで初期化
        //this.recorder = new Recorder()
        //this.recorder.start()

        let speakCount = 0

        const speak = () => {

            if (this.isCancelAll) {
                this.isCancelAll = false
                return
            }

            const instance = this.speak(comments[speakCount])

            instance.onerror = () => {
                console.log('error')
            }

            instance.onend = () => {
                speakCount++
                if (speakCount < comments.length) {
                    speak()
                }
            }
        }

        if (speakCount === 0) {
            speak()
        }

    }

    cancel() {
        this.isCancelAll = true
        speechSynthesis.cancel()
        //this.recorder.stop()
    }

}export interface JokeModel {
  type: string;
  value: JokeBody
}

export interface JokeBody {
  id: number;
  joke: string;
}
import {Component, OnInit, ViewChild, Input} from "@angular/core";
import {HeatmapLayer} from "@ngui/map";
import {Observable, Subject} from "rxjs";
import {NewsSentimentService} from "./news.sentiment.service";
import {Data} from './data';
import WeightedLocation = google.maps.visualization.WeightedLocation;

@Component({
    template: `
<ngui-map
        zoom="1"
        minZoom="1"
        center="0, 0"
        mapTypeId="satellite"
        style="height: 400px; width: 600px;">

    <heatmap-layer [data]="points" dissipating="false"></heatmap-layer>
</ngui-map>
`,
    selector: 'app-heatmap',
    styles: []
})
export class HeatmapComponent implements OnInit {

    @Input()
    itemId: string;

    @ViewChild(HeatmapLayer) heatmapLayer: HeatmapLayer;
    heatmap: google.maps.visualization.HeatmapLayer;

    points = [];

    constructor(private sentiment: NewsSentimentService) {}

    ngOnInit() {
        this.heatmapLayer['initialized$'].subscribe(heatmap => {
            console.log("Initialized CB...", heatmap);

            this.heatmap = heatmap;

            this.dataToPoints().subscribe(point => {
                this.points.push(point);
                this.heatmap.setData(this.points);
            });
        });
    }

    dataToPoints(): Observable<WeightedLocation> {
        // this.sentiment.fetchContentSentiment(this.itemId)
        return Observable.from(Data).flatMap(item => {
            if (item.location.geo !== "") {
                let components = item.location.geo.split(" ");
                let location = new google.maps.LatLng(parseFloat(components[0]), parseFloat(components[1]));

                return Observable.of({
                    location: location,
                    weight: this.weight(item)
                }


 leading $ characters will be
 * stripped since angular uses this notation internally.
 *
 * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
 * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.
 * @returns {string|undefined} JSON-ified string representing `obj`.
 */
function toJson(obj, pretty) {
  if (typeof obj === 'undefined') return undefined;
  return JSON.stringify(obj, toJsonReplacer, pretty ? '  ' : null);
}

/**
 * @ngdoc function
 * @name angular.fromJson
 * @function
 *
 * @description
 * Deserializes a JSON string.
 *
 * @param {string} json JSON string to deserialize.
 * @returns {Object|Array|Date|string|number} Deserialized thingy.
 */
function fromJson(json) {
  return isString(json)
      ? JSON.parse(json)
      : json;
}

function toBoolean(value) {
  if (value && value.length !== 0) {
    var v = lowercase("" + value);
    value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
  } else {
    value = false;
  }
  return value;
}

/**
 * @returns {string} Returns the string representation of the element.
 */
function startingTag(element) {
  element = jqLite(element).clone();
  try {
    // turns out IE does not let you set .html() on elements which
    // are not allowed to have children. So we just ignore it.
    element.empty();
  } catch(e) {}
  // As Per DOM Standards
  var TEXT_NODE = 3;
  var elemHtml = jqLite('<div>').append(element).html();
  try {
    return element[0].nodeType === TEXT_NODE ? lowercase(elemHtml) :
        elemHtml.
          match(/^(<[^>]+>)/)[1].
          replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
  } catch(e) {
    return lowercase(elemHtml);
  }

}

/////////////////////////////////////////////////

/**
 * Tries to decode the URI component without throwing an exception.
 *
 * @private
 * @param str value potential URI component to check.
 * @returns {boolean} True if `value` can be decoded
 * with the decodeURIComponent function.
 */
function tryDecodeURIComponent(value) {
  try {
    return decodeURIComponent(value);
  } catch(e) {
    // Ignore any invalid uri component
  }
}

/**
 * Parses an escaped url query string into key-value pairs.
 * @returns Object.<(string|boolean)>
 */
function parseKeyValue(/**string*/keyValue) {
  var obj = {}, key_value, key;
  forEach((keyValue || "").split('&'), function(keyValue){
    if ( keyValue ) {
      key_value = keyValue.split('=');
      key = tryDecodeURIComponent(key_value[0]);
      if ( isDefined(key) ) {
        var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
        if (!obj[key]) {
          obj[key] = val;
        } else if(isArray(obj[key])) {
          obj[key].push(val);
        } else {
          obj[key] = [obj[key],val];
        }
      }
    }
  });
  return obj;
}

function toKeyValue(obj) {
  var parts = [];
  forEach(obj, function(value, key) {
    if (isArray(value)) {
      forEach(value, function(arrayValue) {
        parts.push(encodeUriQuery(key, true) +
                   (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
      });
    } else {
    parts.push(encodeUriQuery(key, true) +


4361A->velocity_mode) {
    // ensure we are in positioning mode with S-shaped ramp
    tmc4361A_sRampInit(tmc4361A);
    tmc4361A->velocity_mode = false;
  }

  // Read events before and after to clear the register
  tmc4361A_readInt(tmc4361A, TMC4361A_EVENTS);
  tmc4361A_writeInt(tmc4361A, TMC4361A_X_TARGET, x_pos);
  tmc4361A_readInt(tmc4361A, TMC4361A_EVENTS);
  // Read X_ACTUAL to get it to refresh
  tmc4361A_readInt(tmc4361A, TMC4361A_XACTUAL);

  return NO_ERR;
}

/*
  -----------------------------------------------------------------------------
  DESCRIPTION: tmc4361A_move() writes the new setpoint relative to the current position to the TMC4361A.

  OPERATION:   We first convert the relative position to an absolute position and call moveTo()

  ARGUMENTS:
      TMC4361ATypeDef *tmc4361A: Pointer to a struct containing motor driver info
      int32_t x_pos:             The target position in microsteps

  RETURNS:
      uint8_t err: Return ERR_OUT_OF_RANGE or NO_ERR depending on what happened.

  INPUTS / OUTPUTS: The CS pin and SPI MISO and MOSI pins output, input, and output data respectively

  LOCAL VARIABLES:
      int32_t current: current position
      int32_t target:  calculated absolute position

  SHARED VARIABLES:
      TMC4361ATypeDef *tmc4361A: Values are read from the struct

  GLOBAL VARIABLES: None

  DEPENDENCIES: tmc4316A.h
  -----------------------------------------------------------------------------
*/
int8_t tmc4361A_move(TMC4361ATypeDef *tmc4361A, int32_t x_pos) {
  int32_t current = tmc4361A_currentPosition(tmc4361A);
  int32_t target = current + x_pos;

  return tmc4361A_moveTo(tmc4361A, target);
}

/*
  -----------------------------------------------------------------------------
  DESCRIPTION: tmc4361A_currentPosition() reads the current position

  OPERATION:   We read the data in the XACTUAL register

  ARGUMENTS:
      TMC4361ATypeDef *tmc4361A: Pointer to a struct containing motor driver info

  RETURNS:
      int32_t xpos: The position in units microsteps

  INPUTS / OUTPUTS: The CS pin and SPI MISO and MOSI pins output, input, and output data respectively

  LOCAL VARIABLES: None

  SHARED VARIABLES:
      TMC4361ATypeDef *tmc4361A: Values are read from the struct

  GLOBAL VARIABLES: None

  DEPENDENCIES: tmc4316A.h
  -----------------------------------------------------------------------------
*/
int32_t tmc4361A_currentPosition(TMC4361ATypeDef *tmc4361A) {
  return tmc4361A_readInt(tmc4361A, TMC4361A_XACTUAL);
}

/*
  -----------------------------------------------------------------------------
  DESCRIPTION: tmc4361A_targetPosition() reads the target position

  OPERATION:   We read the data in the X_TARGET register

  ARGUMENTS:
      TMC4361ATypeDef *tmc4361A: Pointer to a struct containing motor driver info

  RETURNS:
      int32_t xpos: The position in units microsteps

  INPUTS / OUTPUTS: The CS pin and SPI MISO and MOSI pins output, input, and output data respectively

  LOCAL VARIABL


 and probabilistically some of the account/storage trie nodes.
		var followupInterrupt uint32
		if !bc.cacheConfig.TrieCleanNoPrefetch {
			if followup, err := it.peek(); followup != nil && err == nil {
				throwaway, _ := state.New(parent.Root, bc.stateCache, bc.snaps)

				go func(start time.Time, followup *types.Block, throwaway *state.StateDB, interrupt *uint32) {
					// Disable tracing for prefetcher executions.
					vmCfg := bc.vmConfig
					vmCfg.Tracer = nil
					bc.prefetcher.Prefetch(followup, throwaway, vmCfg, &followupInterrupt)

					blockPrefetchExecuteTimer.Update(time.Since(start))
					if atomic.LoadUint32(interrupt) == 1 {
						blockPrefetchInterruptMeter.Mark(1)
					}
				}(time.Now(), followup, throwaway, &followupInterrupt)
			}
		}

		var blockSidecars []*types.BlobTxSidecar
		if len(sidecars) > 0 {
			blockSidecars = sidecars[it.index]
		}

		// The traced section of block import.
		res, err := bc.processBlock(block, statedb, start, blockSidecars)
		atomic.StoreUint32(&followupInterrupt, 1)
		if err != nil {
			return it.index, err
		}

		switch res.status {
		case CanonStatTy:
			log.Debug("Inserted new block", "number", block.Number(), "hash", block.Hash(),
				"uncles", len(block.Uncles()), "txs", len(block.Transactions()), "gas", block.GasUsed(),
				"elapsed", common.PrettyDuration(time.Since(start)),
				"root", block.Root())

			lastCanon = block

			// Only count canonical blocks for GC processing time
			bc.gcproc += res.procTime

		case SideStatTy:
			log.Debug("Inserted forked block", "number", block.Number(), "hash", block.Hash(),
				"diff", block.Difficulty(), "elapsed", common.PrettyDuration(time.Since(start)),
				"txs", len(block.Transactions()), "gas", block.GasUsed(), "uncles", len(block.Uncles()),
				"root", block.Root())

		default:
			// This in theory is impossible, but lets be nice to our future selves and leave
			// a log, instead of trying to track down blocks imports that don't emit logs.
			log.Warn("Inserted block with unknown status", "number", block.Number(), "hash", block.Hash(),
				"diff", block.Difficulty(), "elapsed", common.PrettyDuration(time.Since(start)),
				"txs", len(block.Transactions()), "gas", block.GasUsed(), "uncles", len(block.Uncles()),
				"root", block.Root())
		}
		stats.processed++
		stats.usedGas += res.usedGas

		dirty, _ := bc.triedb.Size()
		stats.report(chain, it.index, dirty)
	}

	// Any blocks remaining here? The only ones we care about are the future ones
	if block != nil && errors.Is(err, consensus.ErrFutureBlock) {
		var futureBlockSidecars []*types.BlobTxSidecar
		if len(sidecars) > 0 {
			futureBlockSidecars = sidecars[it.index]
		}
		if err := bc.addFutureBlock(block, futureBlockSidecars); err != nil {
			return it.index, err
		}
		block, err = it.next()

		for ; block != nil && errors.Is(err, consensus.ErrUnknownAncestor); block, err = it.next() {
			var futureBlockSidecars []*types.BlobTxSidecar
			if len(sidecars) > 0 {
				futureBlockSidecars = sidecars[it.index]
			}
			if err := bc.addFutureBlock(block, futureBlockSidecars); err != nil {
				return it.index, err
			}
			stats.queued++
		}
	}
	stats.ignored += it.remaining()

	return it.index, err
}

// blockProcessingResult is a summary of block processing


return
perf
.
now
(
)
;
}
/
*
*
*
Returns
a
promise
which
resolves
after
the
specified
time
.
*
/
export
function
resolveOnTimeout
(
ms
:
number
)
:
Promise
<
void
>
{
return
new
Promise
(
resolve
=
>
{
timeout
(
(
)
=
>
{
resolve
(
)
;
}
ms
)
;
}
)
;
}
export
class
PromiseTimeoutError
extends
Error
{
}
/
*
*
*
Returns
a
promise
which
rejects
after
the
specified
time
.
*
/
export
function
rejectOnTimeout
(
ms
:
number
msg
:
string
)
:
Promise
<
never
>
{
return
new
Promise
(
(
_resolve
reject
)
=
>
{
timeout
(
(
)
=
>
{
reject
(
new
PromiseTimeoutError
(
msg
)
)
;
}
ms
)
;
}
)
;
}
/
*
*
*
Takes
a
promise
p
and
returns
a
new
one
which
rejects
if
p
takes
too
long
*
and
otherwise
passes
the
result
through
.
*
/
export
function
raceWithRejectOnTimeout
<
T
>
(
p
:
Promise
<
T
>
ms
:
number
msg
:
string
)
:
Promise
<
T
>
{
if
(
globalTestConfig
.
noRaceWithRejectOnTimeout
)
{
return
p
;
}
/
/
Setup
a
promise
that
will
reject
after
ms
milliseconds
.
We
cancel
this
timeout
when
/
/
p
is
finalized
so
the
JavaScript
VM
doesn
'
t
hang
around
waiting
for
the
timer
to
/
/
complete
once
the
test
runner
has
finished
executing
the
tests
.
const
timeoutPromise
=
new
Promise
(
(
_resolve
reject
)
=
>
{
const
handle
=
timeout
(
(
)
=
>
{
reject
(
new
PromiseTimeoutError
(
msg
)
)
;
}
ms
)
;
p
=
p
.
finally
(
(
)
=
>
clearTimeout
(
handle
)
)
;
}
)
;
return
Promise
.
race
(
[
p
timeoutPromise
]
)
as
Promise
<
T
>
;
}
/
*
*
*
Takes
a
promise
p
and
returns
a
new
one
which
rejects
if
p
resolves
or
rejects
*
and
otherwise
resolves
after
the
specified
time
.
*
/
export
function
assertNotSettledWithinTime
(
p
:
Promise
<
unknown
>
ms
:
number
msg
:
string
)
:
Promise
<
undefined
>
{
/
/
Rejects
regardless
of
whether
p
resolves
or
rejects
.
const
rejectWhenSettled
=
p
.
then
(
(
)
=
>
Promise
.
reject
(
new
Error
(
msg
)
)
)
;
/
/
Resolves
after
ms
milliseconds
.
const
timeoutPromise
=
new
Promise
<


 inflight_blocks = InflightBlocks::default();
    inflight_blocks.protect_num = 0;

    assert!(inflight_blocks.insert(1.into(), (1, h256!("0x1").pack()).into()));
    assert!(inflight_blocks.insert(2.into(), (2, h256!("0x2").pack()).into()));
    assert!(inflight_blocks.insert(3.into(), (3, h256!("0x3").pack()).into()));
    assert!(inflight_blocks.insert(4.into(), (3, h256!("0x33").pack()).into()));
    assert!(inflight_blocks.insert(5.into(), (4, h256!("0x4").pack()).into()));
    assert!(inflight_blocks.insert(6.into(), (5, h256!("0x5").pack()).into()));
    assert!(inflight_blocks.insert(7.into(), (5, h256!("0x55").pack()).into()));

    let list = inflight_blocks.prune(2);
    assert!(list.is_empty());

    assert!(inflight_blocks.trace_number.is_empty());
    assert!(inflight_blocks.restart_number == 0);

    // When 2 + 512 number block request send out
    inflight_blocks.mark_slow_block(2);

    assert_eq!(
        inflight_blocks
            .trace_number
            .keys()
            .cloned()
            .collect::<HashSet<BlockNumberAndHash>>(),
        HashSet::from_iter(vec![
            (1, h256!("0x1").pack()).into(),
            (2, h256!("0x2").pack()).into(),
            (3, h256!("0x3").pack()).into(),
            (3, h256!("0x33").pack()).into()
        ])
    );

    faketime::write_millis(&faketime_file, 2000).expect("write millis");

    let list = inflight_blocks.prune(2);
    assert!(list.is_empty());

    assert!(inflight_blocks.restart_number == 3);

    assert!(inflight_blocks
        .inflight_state_by_block(&(3, h256!("0x3").pack()).into())
        .is_none());
    assert!(inflight_blocks
        .inflight_state_by_block(&(3, h256!("0x33").pack()).into())
        .is_none());

    assert_eq!(inflight_blocks.peer_can_fetch_count(3.into()), 8);
    assert_eq!(inflight_blocks.peer_can_fetch_count(4.into()), 8);
}

#[cfg(not(disable_faketime))]
#[test]
fn inflight_with_compact() {
    let faketime_file = faketime::millis_tempfile(0).expect("create faketime file");
    faketime::enable(&faketime_file);

    let mut inflight_blocks = InflightBlocks::default();
    inflight_blocks.protect_num = 0;

    assert!(inflight_blocks.compact_reconstruct(1.into(), h256!("0x1").pack()));
    assert!(inflight_blocks.compact_reconstruct(2.into(), h256!("0x1").pack()));
    assert!(!inflight_blocks.compact_reconstruct(3.into(), h256!("0x1").pack()));

    // try sync, but can't, mark this block a deadline
    assert!(!inflight_blocks.insert(3.into(), (1, h256!("0x1").pack()).into()));
    assert_eq!(inflight_blocks.total_inflight_count(), 0);

    assert_eq!(
        inflight_blocks
            .inflight_compact_by_block(&h256!("0x1").pack())
            .unwrap()
            .clone()
            .into_iter()
            .collect::<HashSet<PeerIndex>>(),
        HashSet::from_iter(vec![1.into(), 2.into()])
    );

    faketime::write_millis(&faketime_file, 3000).expect("write milli


 = "wire";
}

bool vcd_enum_trace::changed()
{
    return object != old_value;
}

void vcd_enum_trace::write(FILE* f)
{
    char rawdata[1000];
    char compdata[1000];
    int bitindex;

    // Check for overflow
    if ((object & mask) != object) {
        for (bitindex = 0; bitindex < bit_width; bitindex++){
            rawdata[bitindex] = 'x';
        }
    } else {
        unsigned long bit_mask = 1ul << (bit_width-1);
        for (bitindex = 0; bitindex < bit_width; bitindex++) {
            rawdata[bitindex] = (object & bit_mask)? '1' : '0';
            bit_mask = bit_mask >> 1;
        }
    }
    rawdata[bitindex] = '\0';
    compose_data_line(rawdata, compdata);
    std::fputs(compdata, f);
    old_value = object;
}

/*****************************************************************************
           vcd_trace_file functions
 *****************************************************************************/

vcd_trace_file::vcd_trace_file(const char *name)
  : sc_trace_file_base( name, "vcd" )
  , vcd_name_index(0)
  , previous_time_units_low(0)
  , previous_time_units_high(0)
  , traces()
{}

void
vcd_trace_file::do_initialize()
{
    char buf[2000];

    //date:
    std::fprintf(fp, "$date\n     %s\n$end\n\n", localtime_string().c_str() );

    //version:
    std::fprintf(fp, "$version\n %s\n$end\n\n", sc_version());

    //timescale:
    static struct SC_TIMESCALE_TO_TEXT {
        double       unit;
        const char*  text;
    } timescale_to_text [] = {
        { sc_time(1, SC_FS).to_seconds(), "1 fs" },
        { sc_time(10, SC_FS).to_seconds(), "10 fs" },
        { sc_time(100, SC_FS).to_seconds(),"100 fs" },
        { sc_time(1, SC_PS).to_seconds(),  "1 ps" },
        { sc_time(10, SC_PS).to_seconds(), "10 ps" },
        { sc_time(100, SC_PS).to_seconds(),"100 ps" },
        { sc_time(1, SC_NS).to_seconds(),  "1 ns" },
        { sc_time(10, SC_NS).to_seconds(), "10 ns" },
        { sc_time(100, SC_NS).to_seconds(),"100 ns" },
        { sc_time(1, SC_US).to_seconds(),  "1 us" },
        { sc_time(10, SC_US).to_seconds(), "10 us" },
        { sc_time(100, SC_US).to_seconds(),"100 us" },
        { sc_time(1, SC_MS).to_seconds(),  "1 ms" },
        { sc_time(10, SC_MS).to_seconds(), "10 ms" },
        { sc_time(100, SC_MS).to_seconds(),"100 ms" },
        { sc_time(1, SC_SEC).to_seconds(),  "1 sec" },
        { sc_time(10, SC_SEC).to_seconds(), "10 sec" },
        { sc_time(100, SC_SEC).to_seconds(),"100 sec" }
    };
    static int timescale_to_text_n =
        sizeof(timescale_to_text)/sizeof(SC_TIMESCALE_TO_TEXT);

    for ( int time_i = 0; time_i < timescale_to_text_n; time_i++ )
    {
        if (timescale_unit == timescale_to_text[time_i].unit)
        {
            std::fprintf(fp,"$timescale\n     %s\n$end\n\n",
                timescale_to_text[time_i].text);
            break;
        }
    }

    // Create a dummy scope
    std::fputs("$