Id)
				} else {
					delete(sessionTickets, entry.Ticket)
				}
			}
			if entry.PartyId != "" {
				if partyTickets, ok := m.partyTickets[entry.PartyId]; ok {
					if l := len(partyTickets); l <= 1 {
						delete(m.partyTickets, entry.PartyId)
					} else {
						delete(partyTickets, entry.Ticket)
					}
				}
			}
		}
	}

	m.Unlock()

	if matchedEntriesCount := len(matchedEntries); matchedEntriesCount > 0 {
		wg := &sync.WaitGroup{}
		wg.Add(matchedEntriesCount)
		ts := time.Now().UnixNano()
		for _, entries := range matchedEntries {
			go func(entries []*MatchmakerEntry, ts int64) {
				var tokenOrMatchID string
				var isMatchID bool
				var err error

				// Check if there's a matchmaker matched runtime callback, call it, and see if it returns a match ID.
				fn := m.runtime.MatchmakerMatched()
				if fn != nil {
					tokenOrMatchID, isMatchID, err = fn(context.Background(), entries)
					if err != nil {
						m.logger.Error("Error running Matchmaker Matched hook.", zap.Error(err))
					}
				}

				if !isMatchID {
					// If there was no callback or it didn't return a valid match ID always return at least a token.
					token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
						"mid": fmt.Sprintf("%v.", uuid.Must(uuid.NewV4()).String()),
						"exp": time.Now().UTC().Add(30 * time.Second).Unix(),
					})
					tokenOrMatchID, _ = token.SignedString([]byte(m.config.GetSession().EncryptionKey))
				}

				users := make([]*rtapi.MatchmakerMatched_MatchmakerUser, 0, len(entries))
				for _, entry := range entries {
					users = append(users, &rtapi.MatchmakerMatched_MatchmakerUser{
						Presence: &rtapi.UserPresence{
							UserId:    entry.Presence.UserId,
							SessionId: entry.Presence.SessionId,
							Username:  entry.Presence.Username,
						},
						StringProperties:  entry.StringProperties,
						NumericProperties: entry.NumericProperties,
						PartyId:           entry.PartyId,
					})
				}
				outgoing := &rtapi.Envelope{Message: &rtapi.Envelope_MatchmakerMatched{MatchmakerMatched: &rtapi.MatchmakerMatched{
					// Ticket is set individually below for each recipient.
					// Id set below to account for token or match ID case.
					Users: users,
					// Self is set individually below for each recipient.
				}}}
				if isMatchID {
					outgoing.GetMatchmakerMatched().Id = &rtapi.MatchmakerMatched_MatchId{MatchId: tokenOrMatchID}
				} else {
					outgoing.GetMatchmakerMatched().Id = &rtapi.MatchmakerMatched_Token{Token: tokenOrMatchID}
				}

				for i, entry := range entries {
					statsEntry := MatchmakerStatsEntry{
						CreatedAt:   entry.CreateTime,
						CompletedAt: ts,
					}
					m.statsCompletions.Insert(statsEntry)

					// Set per-recipient fields.
					outgoing.GetMatchmakerMatched().Self = users[i]
					outgoing.GetMatchmakerMatched().Ticket = entry.Ticket
					// Route outgoing message.
					m.router.SendToPresenceIDs(m.logger, []*PresenceID{{Node: entry.Presence.Node, SessionID: entry.Presence.SessionID}}, outgoing, true)
				}

				wg.Done()
			}(entries, ts)
		}

		wg.Wait()
		if m.matchedEntriesFn != nil {
			go m.matchedEntriesFn(matchedEntries)
		}
	}
}

func (m *LocalMatchmaker


           icon: Icon(
                        isSingleLoop ? Icons.repeat_one : Icons.repeat,
                        color: isSingleLoop ? Colors.blue : null,
                      ),
                      onPressed: () {
                        setState(() {
                          isSingleLoop = !isSingleLoop;
                          isShuffle = false;
                          if (isSingleLoop) {
                            ScaffoldMessenger.of(context).showSnackBar(
                              const SnackBar(content: Text('单曲循环模式已开启')),
                            );
                          } else {
                            ScaffoldMessenger.of(context).showSnackBar(
                              const SnackBar(content: Text('单曲循环模式已关闭')),
                            );
                          }
                        });
                      },
                    ),
                    Text(formatDuration(duration)),
                  ],
                ),
                const SizedBox(height: 20),
                StreamBuilder<Duration>(
                  stream: audioProvider.audioPlayer.positionStream,
                  builder: (context, snapshot) {
                    final position = snapshot.data ?? Duration.zero;
                    final totalDuration = audioProvider.audioPlayer.duration ?? Duration.zero;
                    final percent = totalDuration.inMilliseconds > 0
                        ? position.inMilliseconds / totalDuration.inMilliseconds
                        : 0;

                    return NeuBox(
                      child: SliderTheme(
                        data: SliderTheme.of(context).copyWith(
                          trackHeight: 10, // 设置进度条高度，使其更粗
                          activeTrackColor: Colors.blue.shade200, // 进度条已播放部分颜色
                          inactiveTrackColor: Colors.grey[300], // 进度条未播放部分颜色，浅灰色
                          thumbColor: Colors.blue.shade200, // 滑块颜色
                          overlayColor: Colors.blue.shade200.withOpacity(0.2), // 滑块点击时的覆盖颜色
                          thumbShape: const RoundSliderThumbShape(enabledThumbRadius: 8), // 滑块形状和大小
                          overlayShape: const RoundSliderOverlayShape(overlayRadius: 16), // 滑块点击时覆盖层的大小
                        ),
                        child: Slider(
                          value: percent.clamp(0.0, 1.0).toDouble(),
                          onChanged: (newValue) {
                            final newPosition = newValue * totalDuration.inMilliseconds;
                            audioProvider.audioPlayer.seek(Duration(milliseconds: newPosition.toInt()));
                          },
                        ),
                      ),
                    );
                  },
                ),
                const SizedBox(height: 40), // 增加进度条与按钮之间的间距
                SizedBox(
                  height: 60,
                  child: Row(
                    children: [
                      Expanded(
                        child: NeuBox(
                          child: IconButton(
                            icon: const Icon(Icons.skip_previous, size: 32),
                            onPressed: previousSong,
                          ),
                        ),
                      ),
                      Expanded(
                        flex: 2,
                        child: Padding(
                          padding: const EdgeInsets.symmetric(horizontal: 20),
                          child: NeuBox(
                            child: IconButton(
                              //播放按钮
                              icon: Icon(
                                audioProvider.isPlaying ? Icons.pause : Icons.play_arrow,
                                size: 32,
                              ),
                              onPressed: () {
                                playCurrentSong();
                                _fetchSongCoverImage();
                              },
                            ),
                          ),
                        ),
                      ),
                      Expanded(
                        child: NeuBox(
                          child: IconButton(
                            icon: const Icon(Icons.skip_next, size: 32),
                            onPressed: nextSong,
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
class MasiroUrl {
  static const baseUrl = 'https://masiro.me/';
  static const baseUrlWithoutSlash = 'https://masiro.me';

  static const defaultAvatar = '/


50&dpr=2" alt="Palace Downtown Dubai" class="hotel-image">

Palace Downtown Dubai

Price per night: ₹75,000

            <button class="book-button">Book Now</button>

The Address Dubai Mall

Price per night: ₹33,000

            <button class="book-button">Book Now</button>

Grand Hyatt Dubai

Price per night: ₹46,000

            <button class="book-button">Book Now</button>

Shangri-La Hotel Dubai

Price per night: ₹54,000

            <button class="book-button">Book Now</button>

Jumeirah Emirates Towers

Price per night: ₹25,000

            <button class="book-button">Book Now</button>


apSettingImpl(KEY_BATTERY_SHOW_WARNING, DEFAULT_BATTERY_SHOW_WARNING, SHARED_BOOLEAN)

    private val sharedPreferences: SharedPreferences by lazy {
        context.getSharedPreferences("${BuildConfig.APPLICATION_ID}_prefs", Context.MODE_PRIVATE)
    }

    private fun shared(key: String, default: Boolean) = ReadWriteProperty({
        sharedPreferences.getBoolean(key, default)
    }, {
        sharedPreferences.edit().putBoolean(key, it).commit()
    })

    private fun shared(key: String, default: String) = ReadWriteProperty({
        sharedPreferences.getString(key, default) ?: default
    }, {
        sharedPreferences.edit().putString(key, it).commit()
    })

    private fun shared(key: String, default: Int) = ReadWriteProperty({
        sharedPreferences.getInt(key, default)
    }, {
        sharedPreferences.edit().putInt(key, it).commit()
    })

    private fun shared(key: String, default: Float) = ReadWriteProperty({
        sharedPreferences.getFloat(key, default)
    }, {
        sharedPreferences.edit().putFloat(key, it).commit()
    })

    private fun sharedColor(key: String, unusedDefault: Int) = ReadWriteProperty({
        val rawColor = sharedPreferences.getString(key, "") ?: ""
        if(rawColor.isEmpty()) Integer.MAX_VALUE
        else Color.parseColor(rawColor)
    }, {
        sharedPreferences.edit().putString(key, it.toHexString()).commit()
    })

    private inline fun <reified T> sharedList(
        key: String,
        default: List<T>,
        crossinline transform: (List<T>) -> String,
        crossinline reverseTransform: (String) -> List<T>
    ) = ReadWriteProperty({
        reverseTransform(sharedPreferences.getString(key, null) ?: transform(default))
    }, {
        sharedPreferences.edit().putString(key, transform(it)).commit()
    })

    private inline fun <reified T : Enum<T>> sharedEnum(
        key: String,
        default: Enum<T>
    ): ReadWriteProperty<Any?, T> {
        return object : ReadWriteProperty<Any?, T> {

            override operator fun getValue(thisRef: Any?, property: KProperty<*>): T {
                return java.lang.Enum.valueOf(
                    T::class.java,
                    sharedPreferences.getString(key, default.name)
                )
            }

            override operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
                sharedPreferences.edit().putString(key, value.name).commit()
            }

        }
    }

    private inline fun <T> ReadWriteProperty(
        crossinline getValue: () -> T,
        crossinline setValue: (T) -> Unit
    ): ReadWriteProperty<Any?, T> {
        return object : ReadWriteProperty<Any?, T> {

            override operator fun getValue(thisRef: Any?, property: KProperty<*>): T {
                return getValue.invoke()
            }

            override operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
                setValue.invoke(value)
            }

        }
    }

    private fun stringListTypeConverter(list: List<String>): String {
        if (list.isEmpty()) return ""
        return list


t write nodes as dependencies
                for parent in logical_node.inputs:
                    if parent.view.name in view_to_write_node:
                        parent_write_nodes.append(view_to_write_node[parent.view.name])

                if parent_write_nodes:
                    derived_read_node = RayDerivedReadNode(
                        name=f"{view.name}:derived_read",
                        feature_view=view,
                        parent_dependencies=cast(List[DAGNode], parent_write_nodes),
                        config=self.config,
                        column_info=self.get_column_info(view),
                        is_materialization=self.is_materialization,
                    )
                    self.nodes.append(derived_read_node)

                    # Then build the rest of the processing chain (filter, aggregate, etc.)
                    processing_node = self._build(view, [derived_read_node])
                else:
                    # Parent not yet built - this shouldn't happen in topo order
                    raise ValueError(f"Parent views for {view.name} not yet built")
            else:
                # Regular view - build normal processing chain
                processing_node = self._build(view, None)

            # Create a write node for this view
            write_node = RayWriteNode(
                name=f"{view.name}:write",
                feature_view=view,
                inputs=[processing_node],
            )

            view_to_write_node[view.name] = write_node
            logger.info(f"Created write node for {view.name}")

        # Step 3: The final write node is the one for the top-level feature view
        final_node = view_to_write_node[self.feature_view.name]

        # Step 4: Topo sort the final DAG from the output node (Physical DAG)
        sorted_nodes = topological_sort(final_node)

        # Step 5: Update self.nodes to include all nodes for the execution plan
        self.nodes = sorted_nodes

        # Step 6: Return sorted execution plan
        return ExecutionPlan(sorted_nodes)

    def _build_aggregation_optimized_plan(self) -> ExecutionPlan:
        """Build execution plan optimized for aggregation scenarios."""

        # 1. Read source data
        last_node = self.build_source_node(self.feature_view)

        # 2. Apply filters (TTL, custom filters) BEFORE aggregation
        last_node = self.build_filter_node(self.feature_view, last_node)

        # 3. Aggregate across all historical records
        last_node = self.build_aggregation_node(self.feature_view, last_node)

        # 4. Join with entity_df to get aggregated features for each entity
        last_node = self.build_join_node(self.feature_view, [last_node])

        # 5. Apply transformations to aggregated features
        if self._should_transform(self.feature_view):
            last_node = self.build_transformation_node(self.feature_view, [last_node])

        # 6. Output
        last_node = self.build_output_nodes(self.feature_view, last_node)

        return ExecutionPlan(self.nodes)


ft:111px;bottom:317px;letter-spacing:1.8px;}
#t9u_23{left:133px;bottom:317px;}
#t9v_23{left:145px;bottom:317px;}
#t9w_23{left:171px;bottom:317px;letter-spacing:1.6px;word-spacing:-1.6px;}
#t9x_23{left:236px;bottom:317px;}
#t9y_23{left:240px;bottom:317px;letter-spacing:1.1px;word-spacing:-1.1px;}
#t9z_23{left:292px;bottom:317px;}
#ta0_23{left:302px;bottom:317px;}
#ta1_23{left:306px;bottom:317px;}
#ta2_23{left:311px;bottom:317px;letter-spacing:5.4px;}
#ta3_23{left:327px;bottom:317px;}
#ta4_23{left:353px;bottom:317px;letter-spacing:5.5px;word-spacing:-5.5px;}
#ta5_23{left:376px;bottom:317px;}
#ta6_23{left:379px;bottom:317px;}
#ta7_23{left:385px;bottom:317px;}
#ta8_23{left:390px;bottom:317px;letter-spacing:3.6px;word-spacing:-3.6px;}
#ta9_23{left:419px;bottom:317px;}
#taa_23{left:432px;bottom:317px;letter-spacing:5.5px;}
#tab_23{left:442px;bottom:317px;}
#tac_23{left:455px;bottom:317px;}
#tad_23{left:477px;bottom:317px;}
#tae_23{left:489px;bottom:317px;}
#taf_23{left:495px;bottom:317px;}
#tag_23{left:497px;bottom:317px;letter-spacing:1.4px;word-spacing:-1.4px;}
#tah_23{left:533px;bottom:317px;}
#tai_23{left:557px;bottom:317px;letter-spacing:5.5px;word-spacing:-5.5px;}
#taj_23{left:574px;bottom:317px;}
#tak_23{left:581px;bottom:317px;}
#tal_23{left:100px;bottom:292px;letter-spacing:1px;word-spacing:-1px;}
#tam_23{left:143px;bottom:292px;letter-spacing:3px;word-spacing:-3px;}
#tan_23{left:162px;bottom:292px;letter-spacing:3px;word-spacing:-3px;}
#tao_23{left:182px;bottom:292px;}
#tap_23{left:204px;bottom:292px;letter-spacing:1.4px;}
#taq_23{left:216px;bottom:292px;}
#tar_23{left:220px;bottom:292px;letter-spacing:3px;word-spacing:-3px;}
#tas_23{left:239px;bottom:292px;}
#tat_23{left:255px;bottom:292px;}
#tau_23{left:260px;bottom:292px;letter-spacing:1px;word-spacing:-1px;}
#tav_23{left:292px;bottom:292px;}
#taw_23{left:304px;bottom:292px;letter-spacing:3px;}
#tax_23{left:316px;bottom:292px;}
#tay_23{left:326px;bottom:292px;letter-spacing:1px;word-spacing:-1px;}
#taz_23{left:356px;bottom:292px;}
#tb0_23{left:359px;bottom:292px;}
#tb1_23{left:


c:t.c};return{aliases:["hs"],k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{cN:"module",b:"\\bmodule\\b",e:"where",k:"module where",c:[t].concat(c),i:"\\W\\.|;"},{cN:"import",b:"\\bimport\\b",e:"$",k:"import|0 qualified as hiding",c:[t].concat(c),i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[n,t].concat(c)},{cN:"typedef",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[a,n,t,l].concat(c)},{cN:"default",bK:"default",e:"$",c:[n,t].concat(c)},{cN:"infix",bK:"infix infixl infixr",e:"$",c:[e.CNM].concat(c)},{cN:"foreign",b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[n,e.QSM].concat(c)},{cN:"shebang",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},a,i,e.QSM,e.CNM,n,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),{b:"->|<-"}].concat(c)}});hljs.registerLanguage("scilab",function(e){var n=[e.CNM,{cN:"string",b:"'|\"",e:"'|\"",c:[e.BE,{b:"''"}]}];return{aliases:["sci"],k:{keyword:"abort break case clear catch continue do elseif else endfunction end for functionglobal if pause return resume select try then while%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp errorexec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isemptyisinfisnan isvector lasterror length load linspace list listfiles log10 log2 logmax min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand realround sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tantype typename warning zeros matrix"},i:'("|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function endfunction",e:"$",k:"function endfunction|10",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)"}]},{cN:"transposed_variable",b:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",e:"",r:0},{cN:"matrix",b:"\\[",e:"\\]'*[\\.']*",r:0,c:n},e.C("//","$")].concat(n)}});hljs.registerLanguage("profile",function(e){return{c:[e.CNM,{cN:"built_in",b:"{",e:"}$",eB:!0,eE:!0,c:[e.ASM,e.QSM],r:0},{cN:"filename",b:"[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",e:":",eE:!0},{cN:"header",b:"(ncalls|tottime|cumtime)",e:"$",k:"ncalls tottime|10 cumtime|10 filename",r:10},{cN:"summary",b:"function calls",e:"$",c:[e.CNM],r:10},e.ASM,e.QSM,{cN:"function",b:"\\(",e:"\\)$",c:[e.UTM],r:0}]}});hljs.registerLanguage("thrift",functio


 적응할 수 있는 유연하고 확장 가능한 기술 인프라 개발.
- 새로운 AI 기술의 빠른 프로토타이핑과 통합을 위한 프로세스 구현.
- 다가오는 기술적 변화를 예측하고 준비하기 위해 AI 연구 커뮤니티와 연결 유지.

**CHRO를 위한 조언:**
- AI 주도 미래를 위한 인재 개발 및 획득 전략 재구상.
- 기술 발전과 함께 진화하는 포괄적인 AI 리터러시 프로그램 개발.
- 인력의 적응성과 회복력을 육성하여 변화하는 업무 성격에 대비.

**최고 혁신 책임자를 위한 조언:**
- AI 환경을 지속적으로 스캔하고 잠재적 파괴적 기술을 식별하는 프로세스 수립.
- AI 주도 혁신 이니셔티브에 대한 교차 기능 협력을 위한 플랫폼 만들기.
- 조직의 AI 준비도와 적응성을 측정하는 지표 개발.

{{< hint warning >}}

**정보 상자: 과거 기술 예측과 그 정확성 - GenAI에 대한 교훈**

역사적 기술 예측은 GenAI의 미래를 예측하는 데 귀중한 통찰력을 제공합니다:

1. **1943년**: IBM 회장 토마스 왓슨은 "아마도 5대의 컴퓨터"에 대한 세계 시장을 예측합니다. 이 대규모 과소평가는 AI의 잠재적 영향에 대해 크게 생각해야 함을 상기시킵니다.

2. **1977년**: Digital Equipment Corporation 창립자 켄 올슨은 "누구도 집에 컴퓨터를 원할 이유가 없다"고 말합니다. 이는 AI의 예상치 못한 사용 사례를 고려하는 것의 중요성을 강조합니다.

3.


time taken to receive a response to keep alive messages.
	 *
	 * @deprecated This field is no longer updated as keep alive messages are no longer tracked.
	 */
	public ping?: number;

	/**
	 * Creates a new VoiceUDPSocket.
	 *
	 * @param remote - Details of the remote socket
	 */
	public constructor(remote: SocketConfig) {
		super();
		this.socket = createSocket('udp4');
		this.socket.on('error', (error: Error) => this.emit('error', error));
		this.socket.on('message', (buffer: Buffer) => this.onMessage(buffer));
		this.socket.on('close', () => this.emit('close'));
		this.remote = remote;
		this.keepAliveBuffer = Buffer.alloc(8);
		this.keepAliveInterval = setInterval(() => this.keepAlive(), KEEP_ALIVE_INTERVAL);
		setImmediate(() => this.keepAlive());
	}

	/**
	 * Called when a message is received on the UDP socket.
	 *
	 * @param buffer - The received buffer
	 */
	private onMessage(buffer: Buffer): void {
		// Propagate the message
		this.emit('message', buffer);
	}

	/**
	 * Called at a regular interval to check whether we are still able to send datagrams to Discord.
	 */
	private keepAlive() {
		this.keepAliveBuffer.writeUInt32LE(this.keepAliveCounter, 0);
		this.send(this.keepAliveBuffer);
		this.keepAliveCounter++;
		if (this.keepAliveCounter > MAX_COUNTER_VALUE) {
			this.keepAliveCounter = 0;
		}
	}

	/**
	 * Sends a buffer to Discord.
	 *
	 * @param buffer - The buffer to send
	 */
	public send(buffer: Buffer) {
		this.socket.send(buffer, this.remote.port, this.remote.ip);
	}

	/**
	 * Closes the socket, the instance will not be able to be reused.
	 */
	public destroy() {
		try {
			this.socket.close();
		} catch {}

		clearInterval(this.keepAliveInterval);
	}

	/**
	 * Performs IP discovery to discover the local address and port to be used for the voice connection.
	 *
	 * @param ssrc - The SSRC received from Discord
	 */
	public async performIPDiscovery(ssrc: number): Promise<SocketConfig> {
		return new Promise((resolve, reject) => {
			const listener = (message: Buffer) => {
				try {
					if (message.readUInt16BE(0) !== 2) return;
					const packet = parseLocalPacket(message);
					this.socket.off('message', listener);
					resolve(packet);
				} catch {}
			};

			this.socket.on('message', listener);
			this.socket.once('close', () => reject(new Error('Cannot perform IP discovery - socket closed')));

			const discoveryBuffer = Buffer.alloc(74);

			discoveryBuffer.writeUInt16BE(1, 0);
			discoveryBuffer.writeUInt16BE(70, 2);
			discoveryBuffer.writeUInt32BE(ssrc, 4);
			this.send(discoveryBuffer);
		});
	}
}
/* SystemJS module definition */
declare var module: NodeModule;
interface NodeModule {
  id: string;
}

declare var store: Store;
interface Store {
  sample: SampleFunc;
  tags: TagsFunc;
}

interface SampleFunc {
  (): Promise<number[][]>;
}

interface TagsFunc {
  (ids: string|number[]): Promise<string[][]>;
}
import { ContentDataTypeRegistry, defined } from "3d-tiles-tools";

import { Validators } from "./Validators";
import { Validator } from "./Validator";
import { ValidationContext } from "./ValidationContext";
import { ContentData } from "3d-tiles-tools";
import { TilesetPackageValidator } from "./TilesetPackageValidator";

import { B3dmValidator } from "../tileFormats/B3dmValidator";
import { I3dmValidator } from "../


SN,
                EncryptFlag = jT809Header.EncryptFlag,
                EncryptKey = jT809Header.EncryptKey,
                MsgGNSSCENTERID = jT809Header.MsgGNSSCENTERID,
                Version = jT809Header.Version
            };
            return jT809Package;
        }

        public static JT809Package Create<TJT809Bodies>(this ushort jT809BusinessType, JT809Header jT809Header, TJT809Bodies jT809Bodies)
            where TJT809Bodies : JT809Bodies
        {
            JT809Package jT809Package = new JT809Package();
            jT809Package.Bodies = jT809Bodies;
            jT809Package.Header = new JT809Header()
            {
                BusinessType = jT809BusinessType,
                MsgSN = jT809Header.MsgSN,
                EncryptFlag = jT809Header.EncryptFlag,
                EncryptKey = jT809Header.EncryptKey,
                MsgGNSSCENTERID = jT809Header.MsgGNSSCENTERID,
                Version = jT809Header.Version
            };
            return jT809Package;
        }

        public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809Header jT809Header)
        {
            JT809Package jT809Package = new JT809Package();
            jT809Package.Header = new JT809Header()
            {
                BusinessType = (ushort)jT809BusinessType,
                MsgSN = jT809Header.MsgSN,
                EncryptFlag = jT809Header.EncryptFlag,
                EncryptKey = jT809Header.EncryptKey,
                MsgGNSSCENTERID = jT809Header.MsgGNSSCENTERID,
                Version = jT809Header.Version
            };
            return jT809Package;
        }

        public static JT809Package Create(this ushort jT809BusinessType, JT809Header jT809Header)
        {
            JT809Package jT809Package = new JT809Package();
            jT809Package.Header = new JT809Header()
            {
                BusinessType = jT809BusinessType,
                MsgSN = jT809Header.MsgSN,
                EncryptFlag = jT809Header.EncryptFlag,
                EncryptKey = jT809Header.EncryptKey,
                MsgGNSSCENTERID = jT809Header.MsgGNSSCENTERID,
                Version = jT809Header.Version
            };
            return jT809Package;
        }
    }
}


/* Copyright (c) 2024 dr. ext (Vladimir Sigalkin) */

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

using System;
using System.Collections;

using extOSC.Core.Events;

namespace extOSC.UI
{
	[AddComponentMenu("extOSC/UI/Pad")]
	[RequireComponent(typeof(RectTransform))]
	public class OSCPad : Selectable, IInitializePotentialDragHandler, IDragHandler, ICanvasElement
	{
		#region Extensions

		public enum PointAlignment
		{
			BottomLeft,

			BottomRight,

			TopLeft,

			TopRight
		}

		#endregion

		#region Static Private Methods

		private static Vector2 RoundValue(Vector2 input)
		{
			input.x = Mathf.Round(input.x);
			input.y = Mathf.Round(input.y);

			return input;
		}

		private static Vector2 ConvertVector(Vector2 input, PointAlignment alignment)
		{
			switch (alignment)
			{
				case PointAlignment.BottomRight:
					input.x = 1f - input.x;
					break;
				case PointAlignment.TopLeft:
					input.y = 1f - input.y;
					break;
				case PointAlignment.TopRight:
					input.y = 1f - input.y;
					input.x = 1f - input.x;
					break;
				case PointAlignment.BottomLeft:
					break;
				default:
					throw new ArgumentOutOfRangeException(nameof(alignment), alignment, null);
			}

			return input;
		}

		#endregion

		#region Public Vars

		public RectTransform HandleRect
		{
			get => _handleRect;
            set
			{
				if (_handleRect == value)
					return;

				_handleRect = value;

				UpdateCachedReferences();
				UpdateVisuals();
			}
		}

		public RectTransform XAxisRect
		{
			get => _xAxisRect;
            set
			{
				if (_xAxisRect == value)
					return;

				_xAxisRect = value;

				UpdateVisuals();
			}
		}

		public RectTransform YAxisRect
		{
			get => _yAxisRect;
            set
			{
				if (_yAxisRect == value)
					return;

				_yAxisRect = value;

				UpdateVisuals();
			}
		}

		public virtual Vector2 Value
		{
			get
			{
				if (WholeNumbers)
					return RoundValue(_value);

				return _value;
			}
			set => Set(value);
        }

		public Vector2 MinValue
		{
			get => _minValue;
            set
			{
				if (_minValue.Equals(value))
					return;

				_minValue = value;

				Set(_value);
				UpdateVisuals();
			}
		}

		public Vector2 MaxValue
		{
			get => _maxValue;
            set
			{
				if (_maxValue.Equals(value))
					return;

				_maxValue = value;

				Set(_value);
				UpdateVisuals();
			}
		}

		public bool WholeNumbers
		{
			get => _wholeNumbers;
            set
			{
				if (_wholeNumbers.Equals(value))
					return;

				_wholeNumbers = value;

				Set(_value);
				UpdateVisuals();
			}
		}

		public OSCEventVector2 OnValueChanged
		{
			get => _onValueChanged;
            set => _onValueChanged = value;
        }

		public PointAlignment HandleAlignment
		{
			get => _handleAlignment;
            set
			{
				if (_handleAlignment == value)
					return;

				_handleAlignment = value;

				UpdateVisuals();
			}
		}

		public bool ResetValue
		{
			get => _resetValue;
            set => _resetValue = value;
        }

		public float ResetValueTime
		{
			get => _resetValueTime;
            set


    }, clickMaskDismiss: true, backDismiss: true).then((value) {
        _disableAndroidSoftKeyboard();
      });
    },
  );
}

TTextMenu? getResolutionMenu(FFI ffi, String id) {
  final ffiModel = ffi.ffiModel;
  final pi = ffiModel.pi;
  final resolutions = pi.resolutions;
  final display = pi.tryGetDisplayIfNotAllDisplay(display: pi.currentDisplay);

  final visible =
      ffiModel.keyboard && (resolutions.length > 1) && display != null;
  if (!visible) return null;

  return TTextMenu(
    child: Text(translate("Resolution")),
    onPressed: () {
      ffi.dialogManager.show((setState, close, context) {
        final children = resolutions
            .map((e) => getRadio<String>(
                  Text('${e.width}x${e.height}'),
                  '${e.width}x${e.height}',
                  '${display.width}x${display.height}',
                  (value) {
                    close();
                    bind.sessionChangeResolution(
                      sessionId: ffi.sessionId,
                      display: pi.currentDisplay,
                      width: e.width,
                      height: e.height,
                    );
                  },
                ))
            .toList();
        return CustomAlertDialog(
          title: Text(translate('Resolution')),
          content: Column(
            mainAxisSize: MainAxisSize.min,
            children: children,
          ),
        );
      }, clickMaskDismiss: true, backDismiss: true).then((value) {
        _disableAndroidSoftKeyboard();
      });
    },
  );
}

void sendPrompt(bool isMac, String key) {
  final old = isMac ? gFFI.inputModel.command : gFFI.inputModel.ctrl;
  if (isMac) {
    gFFI.inputModel.command = true;
  } else {
    gFFI.inputModel.ctrl = true;
  }
  gFFI.inputModel.inputKey(key);
  if (isMac) {
    gFFI.inputModel.command = old;
  } else {
    gFFI.inputModel.ctrl = old;
  }
}

class FABLocation extends FloatingActionButtonLocation {
  FloatingActionButtonLocation location;
  double offsetX;
  double offsetY;
  FABLocation(this.location, this.offsetX, this.offsetY);

  @override
  Offset getOffset(ScaffoldPrelayoutGeometry scaffoldGeometry) {
    final offset = location.getOffset(scaffoldGeometry);
    return Offset(offset.dx + offsetX, offset.dy + offsetY);
  }
}
part of '../../../vast_world_share.dart';

abstract class Shape2D extends Shape {
  const Shape2D();

  Vector2 get size => aabb.max - aabb.min;
  num get width => size.x - size.x;
  num get height => size.y - size.y;

  Aabb2 get aabb => Aabb2.minMax(min, max);

  /// Order of vertecies considers to [RectExtension.toVertices()] from Flame:
  /// ```
  /// List<Vector2> toVertices() {
  ///   return [
  ///     topLeft,
  ///     topRight,
  ///     bottomRight,
  ///     bottomLeft,
  ///   ];
  /// }
  /// ```
  Rect get boundingBox;
  Vector2 get topLeft => boundingBox.topLeft.toVector2();
  Vector2 get topRight => boundingBox.topRight.toVector2();
  Vector2 get bottomRight => boundingBox.bottomRight.toVector2();
  Vector2 get bottomLeft => boundingBox.bottomLeft.toVector2();

  /// Maximim coordinates.
  Vector2 get max => topRight;

  /// Minimum coordinates.
  Vector2 get min => bottomLeft;

  Vector2 get center => aabb.center;

  bool inside(num x, num y);

  bool outside(num x, num y) => !inside(x, y);

  @override
  List<Object?> get props => [...super.props, center, width,


re just gonna love the folks here",
    #         "Yeah, I know you're woke, but you can take a joke here",
    #         "And every show I do, like, a TON of coke here",
    #         "The whole—",
    #         "PAH-HAH! The whole 'being dead' thing!",
    #         "Nobody is bullet-proof",
    #         "I work out, I eat clean!",
    #         "Jesus, pass the Dramamine",
    #         "Time to face the brutal truth: (Dies Illa)",
    #         "Cause we're all on a hit list",
    #         "Might not live 'till Christmas",
    #         "Choke to death on Triscuits",
    #         "Hey, that's just statistics",
    #         "So take a little break here",
    #         "Kinda like a wake here",
    #         "The scenery is fake here",
    #         "But there's a giant snake here!",
    #         "Ha ha ha",
    #         "You're",
    #         "You're gonna be fine—thank you!",
    #         "On the other side—how you doin'?",
    #         "Oh, not good!",
    #         "Ba-be-ba-ba-be-bo-boo-bap-boop!",
    #         "Seriously, though, this is a show about—",
    #         "Death is taboo, but it's hardly something new",
    #         "There's nothing medical professionals could do",
    #         "cept maybe just bill you",
    #         "If you die while listening to this album, it's still gonna keep playing.",
    #         "There's no destiny or fate",
    #         "Just a terrifying wait",
    #         "Filled with people that you hate",
    #         "And on a certain date, the Universe kills you!",
    #         "That's the thing with life:",
    #         "No one makes it out alive",
    #         "Toss that body in the pit",
    #         "Gosh, it's awful, ain't it tragic?",
    #         "Blah-blah, Bible, Jesus magic",
    #         "When you're dead, who gives a shit?",
    #         "No pilates, no more yoga!",
    #         "Namaste, you freakin' posers",
    #         "From the cradle to cremation (Dies Irae)",
    #         "Death just needs a little conversation!",
    #         "I have mastered the art (Dies Irae)",
    #         "Of tearing convention apart (Dies Irae)",
    #         "So, how about we all make a start (Dies Irae)",
    #         "On the whole 'being dead' thing!",
    #         "God, I hope you're ready for a show about death!"
    #         ]
    #     # Regex to check if any of the expected phrases appears, allowing for case variations and partial matches:
    #     if any(re.search(r'\b' + re.escape(phrase) + r'\b', lyrics, re.IGNORECASE) for phrase in expected_phrases):
    #          messagebox.showinfo("Validation", "Congratulations! Your summoning is validated.")
    #          video_url = "https://www.youtube.com/watch?v=ErHL4qwwyxw"
    #          webbrowser.open(video_url)
    #     else:
    #        messagebox.showwarning("Validation", "Sorry, the summoning is not validated.")
    #     self.phrase_entry.delete(0, tk.END)

if __name__ == "__main__":
    root = tk.Tk()
    app = BeetlejuiceApp(root)
    root.mainloop()


--[[
Description: Toggle take FX envelope visibility for all selected items
Version: 1.02
Author: Lokasenna
Donation: https://paypal.me/Lokasenna
Changelog:
    Initial release
Links:
	Lokasenna's Website http://forum.cockos.com/member.php?u=10417
Provides:
    [main] .
    [main] . > Lokasenna_Show all take FX envelopes for selected items.lua
    [main] . > Lokasenna_Hide all take FX envelopes for selected items.lua
About:
    Provides actions for managing large numbers of take FX envelopes. Toggle,
    Show, and Hide actions are installed.
--]]

-- Licensed under the GNU GPL v3

local script_name = ({reaper.get_action_context()})[2]:match("([^/\\]+)$")
script_name = string.match(script_name, "Lokasenna_(.*)%.lua")

local function Msg(str)
    reaper.ShowConsoleMsg(tostring(str) .. "\n")
end

local function get_state_from_fn()

    return string.match(script_name, "(%a+)%s")

end

local states = {
    Show = function() return true end,
    Hide = function() return false end,
    Toggle = function(state) return not state end,
}

local function get_new_state(state)

    local new = get_state_from_fn()
    if not new and not abort then
        reaper.MB("Error reading script filename. Please make sure it has *not* been changed.", "Whoops!", 0)
        abort = true
        return
    end

    return states[get_state_from_fn()](state)

end

local function toggle_env_visibility(take, fx, param)

    local env = reaper.TakeFX_GetEnvelope(take, fx, param, false)
    if not env then return end

    local env = reaper.BR_EnvAlloc(env, false)

    --active, visible, armed, inLane, laneHeight, de


APB1ENSETR::CECEN;
    pub use super::RCC_MP_APB1ENSETR::DAC12EN;
    pub use super::RCC_MP_APB1ENSETR::I2C1EN;
    pub use super::RCC_MP_APB1ENSETR::I2C2EN;
    pub use super::RCC_MP_APB1ENSETR::I2C3EN;
    pub use super::RCC_MP_APB1ENSETR::I2C5EN;
    pub use super::RCC_MP_APB1ENSETR::LPTIM1EN;
    pub use super::RCC_MP_APB1ENSETR::MDIOSEN;
    pub use super::RCC_MP_APB1ENSETR::SPDIFEN;
    pub use super::RCC_MP_APB1ENSETR::SPI2EN;
    pub use super::RCC_MP_APB1ENSETR::SPI3EN;
    pub use super::RCC_MP_APB1ENSETR::TIM12EN;
    pub use super::RCC_MP_APB1ENSETR::TIM13EN;
    pub use super::RCC_MP_APB1ENSETR::TIM14EN;
    pub use super::RCC_MP_APB1ENSETR::TIM2EN;
    pub use super::RCC_MP_APB1ENSETR::TIM3EN;
    pub use super::RCC_MP_APB1ENSETR::TIM4EN;
    pub use super::RCC_MP_APB1ENSETR::TIM5EN;
    pub use super::RCC_MP_APB1ENSETR::TIM6EN;
    pub use super::RCC_MP_APB1ENSETR::TIM7EN;
    pub use super::RCC_MP_APB1ENSETR::UART4EN;
    pub use super::RCC_MP_APB1ENSETR::UART5EN;
    pub use super::RCC_MP_APB1ENSETR::UART7EN;
    pub use super::RCC_MP_APB1ENSETR::UART8EN;
    pub use super::RCC_MP_APB1ENSETR::USART2EN;
    pub use super::RCC_MP_APB1ENSETR::USART3EN;
}

/// This register is used to set the peripheral clock enable bit
pub mod RCC_MP_APB2ENSETR {

    /// TIM1EN
    pub mod TIM1EN {
        /// Offset (0 bits)
        pub const offset: u32 = 0;
        /// Mask (1 bit: 1 << 0)
        pub const mask: u32 = 1 << offset;
        /// Read-only values (empty)
        pub mod R {}
        /// Write-only values (empty)
        pub mod W {}
        /// Read-write values (empty)
        pub mod RW {}
    }

    /// TIM8EN
    pub mod TIM8EN {
        /// Offset (1 bits)
        pub const offset: u32 = 1;
        /// Mask (1 bit: 1 << 1)
        pub const mask: u32 = 1 << offset;
        /// Read-only values (empty)
        pub mod R {}
        /// Write-only values (empty)
        pub mod W {}
        /// Read-write values (empty)
        pub mod RW {}
    }

    /// TIM15EN
    pub mod TIM15EN {
        /// Offset (2 bits)
        pub const offset: u32 = 2;
        /// Mask (1 bit: 1 << 2)
        pub const mask: u32 = 1 << offset;
        /// Read-only values (empty)
        pub mod R {}
        /// Write-only values (empty)
        pub mod W {}
        /// Read-write values (empty)
        pub mod RW {}
    }

    /// TIM16EN
    pub mod TIM16EN {
        /// Offset (3 bits)
        pub const offset: u32 = 3;
        /// Mask (1 bit: 1 << 3)
        pub const mask: u32 = 1 << offset;
        /// Read-only values (empty)
        pub mod R {}
        /// Write-only values (empty)
        pub mod W {}
        /// Read-write values (empty)
        pub mod RW {}
    }

    /// TIM17EN
    pub mod TIM17EN {
        /// Offset (4 bits)
        pub const offset: u32 = 4;
        /// Mask (1 bit: 1 << 4)
        pub const mask: u32 = 1 << offset;
        /// Read-only values (empty)
        pub


� (尝试 $retryCount/$_maxRetryAttempts): $e');

        // 减小块大小，降低内存使用
        adaptiveChunkSize = (adaptiveChunkSize * 0.5).round();
        if (adaptiveChunkSize < 64 * 1024) {
          // 最小64KB
          adaptiveChunkSize = 64 * 1024;
        }

        logDebug('调整块大小为 ${adaptiveChunkSize / 1024}KB');

        if (retryCount >= _maxRetryAttempts) {
          throw Exception('多次尝试后仍然内存不足，请关闭其他应用后重试');
        }

        onStatusUpdate?.call('内存不足，正在重试 ($retryCount/$_maxRetryAttempts)...');

        // 清理可能的临时文件
        try {
          final tempFile = File(targetPath);
          if (await tempFile.exists()) {
            await tempFile.delete();
          }
        } catch (_) {}

        // 等待更长时间让系统回收内存
        await Future.delayed(Duration(seconds: retryCount * 2));

        // 触发垃圾回收
        await LargeFileManager.emergencyMemoryCleanup();
      } catch (e) {
        // 其他错误直接抛出
        rethrow;
      }
    }
  }

  /// 根据文件大小和内存状态计算最佳块大小
  static int _calculateOptimalChunkSize(int fileSize) {
    // 更保守的块大小策略，避免内存峰值
    if (fileSize > 1024 * 1024 * 1024) {
      // 1GB以上
      return 128 * 1024; // 128KB - 减小块大小
    } else if (fileSize > 500 * 1024 * 1024) {
      // 500MB以上
      return 256 * 1024; // 256KB
    } else if (fileSize > 100 * 1024 * 1024) {
      // 100MB以上
      return 512 * 1024; // 512KB
    } else if (fileSize > 50 * 1024 * 1024) {
      // 50MB以上
      return 1024 * 1024; // 1MB
    } else {
      return 2 * 1024 * 1024; // 2MB
    }
  }

  /// 执行实际的视频文件复制
  static Future<void> _performVideoCopy(
    String sourcePath,
    String targetPath, {
    required int fileSize,
    int? chunkSize,
    Function(double progress)? onProgress,
    Function(String status)? onStatusUpdate,
    CancelToken? cancelToken,
  }) async {
    final sourceFile = File(sourcePath);
    final targetFile = File(targetPath);

    // 使用传入的块大小或根据文件大小动态调整
    int actualChunkSize = chunkSize ?? _videoChunkSize;
    if (chunkSize == null) {
      if (fileSize > 500 * 1024 * 1024) {
        // 500MB以上
        actualChunkSize = 2 * 1024 * 1024; // 2MB
      } else if (fileSize > 100 * 1024 * 1024) {
        // 100MB以上
        actualChunkSize = 1024 * 1024; // 1MB
      } else {
        actualChunkSize = 512 * 1024; // 512KB
      }
    }

    logDebug(
      '使用块大小: ${actualChunkSize / 1024}KB 处理 ${fileSize / (1024 * 1024)}MB 文件',
    );

    int copiedBytes = 0;

    try {
      final RandomAccessFile reader = await sourceFile.open(
        mode: FileMode.read,
      );
      final IOSink writer = targetFile.openWrite();

      try {
        while (copiedBytes < fileSize) {
          // 检查取消状态
          if (cancelToken?.isCancelled == true) {
            // 清理不完整的目标文件
            try {
              if (await targetFile.exists()) {
                await targetFile.delete();


absolutePath + "/" + packageName
            }
        }

        // apk 保存名称
        val apkName = if (updateInfo.config.apkSaveName.isNotEmpty()) {
            updateInfo.config.apkSaveName
        } else {
            context.appName
        }

        val apkLocalPath = "$filePath/$apkName.apk"

        downloadUpdateApkFilePath = apkLocalPath

        SPUtil.putBase(KEY_OF_SP_APK_PATH, downloadUpdateApkFilePath)

        FileDownloader.setup(context)

        val downloadTask = FileDownloader.getImpl().create(updateInfo.apkUrl)
            .setPath(apkLocalPath)

        downloadTask
            .addHeader("Accept-Encoding","identity")
            .addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36")
            .setListener(object : FileDownloadLargeFileListener() {

                override fun pending(task: BaseDownloadTask, soFarBytes: Long, totalBytes: Long) {
                    log("----使用FileDownloader下载-------")
                    log("pending:soFarBytes($soFarBytes),totalBytes($totalBytes)")
                    downloadStart()
                    if(totalBytes < 0){
                        downloadTask.pause()
                    }
                }

                override fun progress(task: BaseDownloadTask, soFarBytes: Long, totalBytes: Long) {
                    downloading(soFarBytes, totalBytes)
                    if(totalBytes < 0){
                        downloadTask.pause()
                    }
                }

                override fun paused(task: BaseDownloadTask, soFarBytes: Long, totalBytes: Long) {
                    log("获取文件总长度失败出错，尝试HTTPURLConnection下载")
                    downloadUpdateApkFilePath.deleteFile()
                    "$downloadUpdateApkFilePath.temp".deleteFile()
                    downloadByHttpUrlConnection(filePath, apkName)
                }

                override fun completed(task: BaseDownloadTask) {
                    downloadComplete()
                }

                override fun error(task: BaseDownloadTask, e: Throwable) {
                    // FileDownloader 下载失败后，再调用 FileDownloadUtil 下载一次
                    // FileDownloader 对码云或者阿里云上的apk文件会下载失败
                    // downloadError(e)
                    log("下载出错，尝试HTTPURLConnection下载")
                    downloadUpdateApkFilePath.deleteFile()
                    "$downloadUpdateApkFilePath.temp".deleteFile()
                    downloadByHttpUrlConnection(filePath, apkName)
                }

                override fun warn(task: BaseDownloadTask) {
                }
            }).start()
    }

    /**
     * 使用 HttpUrlConnection 下载
     */
    private fun downloadByHttpUrlConnection(filePath: String, apkName: String?) {
        FileDownloadUtil.download(
            updateInfo.apkUrl,
            filePath,
            "$apkName.apk",
            onStart = { downloadStart() },
            onProgress = { current, total -> downloading(current, total) },
            onComplete = { downloadComplete() },
            onError = { downloadError(it) }
        )
    }

    /**
     * 开始下载逻辑
     */
    private fun downloadStart() {
        isDownloading = true
        UpdateAppUtils.downloadListener?.onStart()
        UpdateA


init(env)
end
function ZH.fini(env)
    -- 清理
    CF.fini(env)
    AP.fini(env)
end
function ZH.func(input, env)
    local config = env.engine.schema.config
    local context = env.engine.context
    local input_str = context.input
    local is_radical_mode = wanxiang.is_in_radical_mode(env)
    local schema_id = env.engine.schema.schema_id or ""
    local is_wanxiang_pro = (schema_id == "wanxiang_pro")
    local should_skip_candidate_comment = wanxiang.is_function_mode_active(context) or input_str == ""
    local is_tone_comment = env.engine.context:get_option("tone_hint")
    local is_comment_hint = env.engine.context:get_option("fuzhu_hint")
    local is_chaifen_enabled = env.engine.context:get_option("chaifen_switch")
    --preedit相关声明
    local delimiter = env.settings.delimiter
    local auto_delimiter = env.settings.auto_delimiter
    local manual_delimiter = env.settings.manual_delimiter
    local visual_delim = config:get_string("speller/visual_delimiter") or " "
    local tone_isolate = config:get_bool("speller/tone_isolate")
    local is_tone_display = context:get_option("tone_display")
    local is_full_pinyin = context:get_option("full_pinyin")
    local index = 0
    -- auto_phrase 相关声明
    local enable_auto_phrase = config:get_bool("add_user_dict/enable_auto_phrase") or false
    local enable_user_dict = config:get_bool("add_user_dict/enable_user_dict") or false

    for cand in input:iter() do
        local genuine_cand = cand:get_genuine()
        local preedit = genuine_cand.preedit or ""
        local initial_comment = genuine_cand.comment
        local final_comment = initial_comment
        index = index + 1

        -- auto_phrase 相关处理,只保存comment
        if enable_auto_phrase and enable_user_dict then
            AP.save_comment_cache(cand)
        end

        -- preedit相关处理只跳过 preedit，不影响注释
        if is_radical_mode then
            goto after_preedit
        end
        if not is_tone_display and not is_full_pinyin then
            goto after_preedit
        end
        if (not initial_comment or initial_comment == "") then
            goto after_preedit
        end
        do
            -- 拆分 preedit
            local input_parts = {}
            local current_segment = ""
            for i = 1, #preedit do
                local char = preedit:sub(i, i)
                if char == auto_delimiter or char == manual_delimiter then
                    if #current_segment > 0 then
                        table.insert(input_parts, current_segment)
                        current_segment = ""
                    end
                    table.insert(input_parts, char)
                else
                    current_segment = current_segment .. char
                end
            end
            if #current_segment > 0 then
                table.insert(input_parts, current_segment)
            end

            -- 拆分拼音段（comment）
            local pinyin_segments = {}
            for segment in string.gmatch(initial_comment, "[^" .. auto_delimiter .. manual_delimiter .. "]+") do
                local pinyin = segment:match("^[^;]+")
                if pinyin then
                    table.insert(pinyin_segments, pinyin)
                end
            end

            -- 替换逻辑
            local pinyin_index = 1
            for i, part in ipairs(input_parts) do
                if part == auto_delimi


pler
     %20 = OpFunctionParameter %ptr_f_texture_1d
     %entry = OpLabel

     %s = OpLoad %sampler %10
     %im = OpLoad %f_texture_1d %20
     %100 = OpSampledImage %sampled_image_type %im %s
     %200 = OpImage %f_texture_1d %100

     OpReturn
     OpFunctionEnd
  )" + MainBody();
    auto p = parser(test::Assemble(assembly));
    ASSERT_TRUE(p->BuildInternalModule());
    EXPECT_TRUE(p->error().empty());

    const auto* image = p->GetMemoryObjectDeclarationForHandle(200, true);
    ASSERT_TRUE(image != nullptr);
    EXPECT_EQ(image->result_id(), 20u);

    p->SkipDumpingPending("crbug.com/tint/1039");
}

// Test RegisterHandleUsage, sampled image cases

struct UsageImageAccessCase {
    std::string inst;
    std::string expected_sampler_usage;
    std::string expected_image_usage;
};
inline std::ostream& operator<<(std::ostream& out, const UsageImageAccessCase& c) {
    out << "UsageImageAccessCase(" << c.inst << ", " << c.expected_sampler_usage << ", "
        << c.expected_image_usage << ")";
    return out;
}

using SpvParserHandleTest_RegisterHandleUsage_SampledImage =
    SpirvASTParserTestBase<::testing::TestWithParam<UsageImageAccessCase>>;

TEST_P(SpvParserHandleTest_RegisterHandleUsage_SampledImage, Variable) {
    const std::string inst = GetParam().inst;
    const auto assembly = Preamble() + FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
     %si_ty = OpTypeSampledImage %f_texture_2d
     %coords = OpConstantNull %v2float
     %coords3d = OpConstantNull %v3float ; needed for Proj variants

     %10 = OpVariable %ptr_sampler UniformConstant
     %20 = OpVariable %ptr_f_texture_2d UniformConstant

     %main = OpFunction %void None %voidfn
     %entry = OpLabel

     %sam = OpLoad %sampler %10
     %im = OpLoad %f_texture_2d %20
     %sampled_image = OpSampledImage %si_ty %im %sam
)" + GetParam().inst + R"(

     OpReturn
     OpFunctionEnd
  )";
    auto p = parser(test::Assemble(assembly));
    ASSERT_TRUE(p->BuildInternalModule());
    EXPECT_TRUE(p->RegisterHandleUsage());
    EXPECT_TRUE(p->error().empty());
    Usage su = p->GetHandleUsage(10);
    Usage iu = p->GetHandleUsage(20);

    EXPECT_THAT(su.to_str(), Eq(GetParam().expected_sampler_usage));
    EXPECT_THAT(iu.to_str(), Eq(GetParam().expected_image_usage));

    if (inst.find("ImageQueryLod") != std::string::npos) {
        // WGSL does not support querying image level of detail.
        // So don't emit them as part of a "passing" corpus.
        p->DeliberatelyInvalidSpirv();
    }
    if (inst.find("ImageSampleDrefExplicitLod") != std::string::npos) {
        p->SkipDumpingPending("crbug.com/tint/425");  // gpuweb issue #1319
    }
}

TEST_P(SpvParserHandleTest_RegisterHandleUsage_SampledImage, FunctionParam) {
    const std::string inst = GetParam().inst;
    const auto assembly = Preamble() + FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
     %f_ty = OpTypeFunction %void %ptr_sampler %ptr_f_texture_2d
     %si_ty = OpTypeSampledImage %f_texture_2d
     %coords = OpConstantNull %v2float
     %coords3d =


tart sub_038031D4
sub_038031D4: ; 0x038031D4
	stmdb sp!, {r3, lr}
	cmp r0, #0xb
	bne _038032AC
	cmp r2, #0
	beq _038032AC
	ldr r0, _038032B4 ; =_03809060
	ldr r2, [r0, #8]
	cmp r2, #0
	streq r1, [r0, #4]
	ldr r2, [r0, #4]
	cmp r2, #0xf
	addls pc, pc, r2, lsl #2
	b _03803278
_03803208: ; jump table
	b _03803248 ; case 0
	b _03803278 ; case 1
	b _0380326C ; case 2
	b _0380326C ; case 3
	b _0380326C ; case 4
	b _0380326C ; case 5
	b _0380326C ; case 6
	b _0380326C ; case 7
	b _0380326C ; case 8
	b _0380326C ; case 9
	b _0380326C ; case 10
	b _0380326C ; case 11
	b _0380326C ; case 12
	b _0380326C ; case 13
	b _0380326C ; case 14
	b _0380326C ; case 15
_03803248:
	ldr r2, [r0, #8]
	cmp r2, #0
	beq _03803278
	cmp r2, #1
	ldreq r2, [r0, #0xfc]
	streq r1, [r0]
	orreq r1, r2, #0x10
	streq r1, [r0, #0xfc]
	b _03803278
_0380326C:
	ldr r1, [r0, #0xfc]
	orr r1, r1, #0x10
	str r1, [r0, #0xfc]
_03803278:
	ldr r1, [r0, #0xfc]
	tst r1, #0x10
	ldreq r1, [r0, #8]
	addeq r1, r1, #1
	streq r1, [r0, #8]
	beq _038032AC
	ldr r1, [r0, #0xfc]
	mov r2, #0
	str r2, [r0, #8]
	tst r1, #4
	ldrne r0, [r0, #0xec]
	addeq r0, r0, #0x48
	bl sub_037FC36C
_038032AC:
	ldmia sp!, {r3, lr}
	bx lr
	.align 2, 0
_038032B4: .word _03809060
	arm_func_end sub_038031D4

	arm_func_start sub_038032B8
sub_038032B8: ; 0x038032B8
	stmdb sp!, {r4, r5, r6, r7, r8, lr}
	ldr r4, _038034E8 ; =_03809060
_038032C0:
	mov r5, #0
	bl EnableIrqFlag
	mov r6, r0
	add r8, r4, #0x48
	mov r7, r5
_038032D4:
	ldr r0, [r4, #0xfc]
	tst r0, #4
	bne _0380330C
	ldr r0, [r4, #0xfc]
	tst r0, #0x10
	beq _03803318
	ldr r0, [r4, #0xfc]
	mov r5, #1
	orr r0, r0, #4
	str r0, [r4, #0xfc]
	ldr r


dev/null 2>&1 || $iptables -N EasyApps-wifi -w",
            "$iptables -L EasyApps-data -w > /dev/null 2>&1 || $iptables -N EasyApps-data -w",
            "$iptables -L EasyApps-reject -w > /dev/null 2>&1 || $iptables -N EasyApps-reject -w"
        ))
    }

    private fun connectChains(iptables: String, commands: MutableList<String>) {
        commands.addAll(listOf(
            "$iptables -A EasyApps -j EasyApps-ips",
            "$iptables -A EasyApps -o eth+ -j EasyApps-wifi",
            "$iptables -A EasyApps -o wlan+ -j EasyApps-wifi",
            "$iptables -A EasyApps -o tiwlan+ -j EasyApps-wifi",
            "$iptables -A EasyApps -o ra+ -j EasyApps-wifi",
            "$iptables -A EasyApps -o bnep+ -j EasyApps-wifi",
            "$iptables -A EasyApps -o rmnet+ -j EasyApps-data",
            "$iptables -A EasyApps -o pdp+ -j EasyApps-data",
            "$iptables -A EasyApps -o uwbr+ -j EasyApps-data",
            "$iptables -A EasyApps -o wimax+ -j EasyApps-data",
            "$iptables -A EasyApps -o vsnet+ -j EasyApps-data",
            "$iptables -A EasyApps -o rmnet_sdio+ -j EasyApps-data",
            "$iptables -A EasyApps -o ccmni+ -j EasyApps-data",
            "$iptables -A EasyApps -o qmi+ -j EasyApps-data",
            "$iptables -A EasyApps -o svnet0+ -j EasyApps-data",
            "$iptables -A EasyApps -o ccemni+ -j EasyApps-data",
            "$iptables -A EasyApps -o wwan+ -j EasyApps-data",
            "$iptables -A EasyApps -o cdma_rmnet+ -j EasyApps-data",
            "$iptables -A EasyApps -o clat4+ -j EasyApps-data",
            "$iptables -A EasyApps -o cc2mni+ -j EasyApps-data",
            "$iptables -A EasyApps -o bond1+ -j EasyApps-data",
            "$iptables -A EasyApps -o rmnet_smux+ -j EasyApps-data",
            "$iptables -A EasyApps -o ccinet+ -j EasyApps-data",
            "$iptables -A EasyApps -o v4-rmnet+ -j EasyApps-data",
            "$iptables -A EasyApps -o seth_w+ -j EasyApps-data",
            "$iptables -A EasyApps -o v4-rmnet_data+ -j EasyApps-data",
            "$iptables -A EasyApps -o rmnet_ipa+ -j EasyApps-data",
            "$iptables -A EasyApps -o rmnet_data+ -j EasyApps-data",
            "$iptables -A EasyApps -o r_rmnet_data+ -j EasyApps-data"
        ))
    }

    private fun createRejectChain(iptables: String, commands: MutableList<String>) {
        commands.addAll(
            listOf(
                "$iptables -A EasyApps-reject -p udp --dport 53 -m owner --uid-owner root -j ACCEPT -w",
                "$iptables -A EasyApps-reject -p tcp --dport 53 -j ACCEPT -w",
                "$iptables -A EasyApps-reject -p udp --dport 53 -j ACCEPT -w",
                "$iptables -A EasyApps-reject -j REJECT --reject-with ${if (iptables == "iptables") "icmp-port-unreachable" else "icmp6-adm-prohibited"} -w"
            )
        )
    }

    private fun createDNSRules(iptables: String, commands: MutableList<String>, settings: Settings) {
        if (iptables == "iptables") {
            // IPv4 DNS redirection
            commands.addAll(listOf(
                "$ipta


texture:SetTexCoord(L, R, T, B)
				else
					block.texture:SetTexture([[Interface\Scenarios\ScenarioIcon-Boss]])
				end
			else
				block.texture:SetTexture([[Interface\Scenarios\ScenarioIcon-Boss]])
			end

			block:ShowMe()
			segmentIndex = segmentIndex + 1
		end

		Details.switch.frame:SetScale(instancia.window_scale)
		Details.switch:ResizeSegmentBlocks()

		for i = segmentIndex+2, #Details.switch.segments_blocks do
			Details.switch.segments_blocks [i]:HideMe()
		end

		Details.switch.frame:SetPoint("topleft", instancia.baseframe, "topleft", 0, 1)
		Details.switch.frame:SetPoint("bottomright", instancia.baseframe, "bottomright", 0, 1)
		Details.switch.frame:Show()

		return

	else
		if (Details.no_bookmark) then
			return
		end

		if (Details.no_bookmark_on_combat and InCombatLockdown()) then
			return
		end

		if (Details.switch.segments_blocks) then
			Details.switch:ClearSegmentBlocks()
		end
	end

	--check if there is some custom contidional
	if (instancia.atributo == 5) then
		local custom_object = instancia:GetCustomObject()
		if (custom_object and custom_object.OnSwitchShow) then
			local interrupt = custom_object.OnSwitchShow (instancia)
			if (interrupt) then
				return
			end
		end
	end

	Details.switch.frame:SetPoint("topleft", instancia.baseframe, "topleft", 0, 1)
	Details.switch.frame:SetPoint("bottomright", instancia.baseframe, "bottomright", 0, 1)

	local altura = instancia.baseframe:GetHeight()
	local mostrar_quantas = floor(altura / Details.switch.button_height) * 2

	local precisa_mostrar = 0
	for i = 1, #Details.switch.table do
		local slot = Details.switch.table [i]
		if (not slot) then
			Details.switch.table [i] = {}
			slot = Details.switch.table [i]
		end
		if (slot.atributo) then
			precisa_mostrar = precisa_mostrar + 1
		else
			break
		end
	end

	if (Details.switch.mostrar_quantas ~= mostrar_quantas) then
		for i = 1, #Details.switch.buttons do
			if (i <= mostrar_quantas) then
				Details.switch.buttons [i]:Show()
			else
				Details.switch.buttons [i]:Hide()
			end
		end

		if (#Details.switch.buttons < mostrar_quantas) then
			Details.switch.slots = mostrar_quantas
		end

		Details.switch.mostrar_quantas = mostrar_quantas
	end

	Details.switch:Resize (precisa_mostrar)
	Details.switch:Update()

	Details.switch.frame:SetScale(instancia.window_scale)
	Details.switch.frame:Show()

	Details.switch:Resize (precisa_mostrar)

	if (DetailsSwitchPanel.all_switch:IsShown()) then
		return DetailsSwitchPanel.all_switch:Hide()
	end
end

-- ~setting
function Details.switch:Config(_, _, atributo, sub_atributo)
	if (not sub_atributo) then
		return
	end

	if (type(atributo) == "string") then
		--is a plugin?
		local plugin = Details:GetPlugin(atributo)
		if(plugin) then
			Details.switch.table[Details.switch.editing_bookmark].atributo = "plugin"
			Details.switch.table[Details.switch.editing_bookmark].sub_atributo = atributo
		end
	else
		--is a attribute or custom script
		Details.switch.table[Details.switch


sitions
# asm 1: mov  <positions=int64#8,>pos5=int64#6
# asm 2: mov  <positions=%r10,>pos5=%r9
mov  %r10,%r9

# qhasm: (uint64) pos5 >>= 34
# asm 1: shr  $34,<pos5=int64#6
# asm 2: shr  $34,<pos5=%r9
shr  $34,%r9

# qhasm: (uint32) pos5 &= 0x3fc0
# asm 1: and  $0x3fc0,<pos5=int64#6d
# asm 2: and  $0x3fc0,<pos5=%r9d
and  $0x3fc0,%r9d

# qhasm: uint32323232 v2 ^= *(int128 *)(pos1 +  0 + matrix)
# asm 1: pxor 0(<pos1=int64#7,<matrix=int64#4,1),<v2=int6464#3
# asm 2: pxor 0(<pos1=%rax,<matrix=%rcx,1),<v2=%xmm2
pxor 0(%rax,%rcx,1),%xmm2

# qhasm: uint32323232 v3 ^= *(int128 *)(pos1 + 16 + matrix)
# asm 1: pxor 16(<pos1=int64#7,<matrix=int64#4,1),<v3=int6464#4
# asm 2: pxor 16(<pos1=%rax,<matrix=%rcx,1),<v3=%xmm3
pxor 16(%rax,%rcx,1),%xmm3

# qhasm: uint32323232 v4 ^= *(int128 *)(pos1 + 32 + matrix)
# asm 1: pxor 32(<pos1=int64#7,<matrix=int64#4,1),<v4=int6464#5
# asm 2: pxor 32(<pos1=%rax,<matrix=%rcx,1),<v4=%xmm4
pxor 32(%rax,%rcx,1),%xmm4

# qhasm: uint32323232 v5 ^= *(int128 *)(pos1 + 48 + matrix)
# asm 1: pxor 48(<pos1=int64#7,<matrix=int64#4,1),<v5=int6464#6
# asm 2: pxor 48(<pos1=%rax,<matrix=%rcx,1),<v5=%xmm5
pxor 48(%rax,%rcx,1),%xmm5

# qhasm: pos6 = positions
# asm 1: mov  <positions=int64#8,>pos6=int64#7
# asm 2: mov  <positions=%r10,>pos6=%rax
mov  %r10,%rax

# qhasm: (uint64) pos6 >>= 42
# asm 1: shr  $42,<pos6=int64#7
# asm 2: shr  $42,<pos6=%rax
shr  $42,%rax

# qhasm: (uint32) pos6 &= 0x3fc0
# asm 1: and  $0x3fc0,<pos6=int64#7d
# asm 2: and  $0x3fc0,<pos6=%eax
and  $0x3fc0,%eax

# qhasm: uint32323232 v3 ^= *(int128 *)(pos0 +  0 + matrix)
# asm 1: pxor 0(<pos0=int64#1,<matrix=int64#4,1),<v3=int6464#4
# asm 2: pxor 0(<pos0=%rdi,<matrix=%rcx,1),<v3=%xmm3
pxor 0(%rdi,%rcx,1),%xmm3

# qhasm: uint32323232 v4 ^= *(int128 *)(pos0 + 16 + matrix)
# asm 1: pxor 16(<pos0=int64#1,<matrix=int64#4,1),<v4=


from typing import List, Tuple
from math import inf
import heapq

class Solution:
    def findOptimalCommute(
        self,
        grid: List[List[str]],
        modes: List[str],
        costs: List[int],
        times: List[int],
        swtchCost: int,
        switchTime: int
    ) -> Tuple[int, int]:
        m, n = len(grid), len(grid[0])
        sx = sy = dx = dy = -1
        for i in range(m):
            for j in range(n):
                if grid[i][j] == "S":
                    sx, sy = i, j
                elif grid[i][j] == "D":
                    dx, dy = i, j

        # Dijkstra: 状态=(time, cost, x, y, mode)，mode: 0=无模式（仅 S/D）
        pq = [(0, 0, sx, sy, 0)]
        dist = {}  # (x,y,mode) -> (time, cost)
        dist[(sx, sy, 0)] = (0, 0)

        DIRS = [(0,1),(0,-1),(1,0),(-1,0)]

        while pq:
            d, c, i, j, mode = heapq.heappop(pq)
            if dist.get((i, j, mode), (inf, inf)) != (d, c):
                continue

            # 抵达 D（用 mode=0 表示在 D）
            if i == dx and j == dy and mode == 0:
                return d, c

            for dx4, dy4 in DIRS:
                ii, jj = i + dx4, j + dy4
                if not (0 <= ii < m and 0 <= jj < n):
                    continue
                ch = grid[ii][jj]
                if ch == "X" or ch == "S":
                    continue

                if ch == "D":
                    nd, nc = d, c  # 进入 D 零代价
                    key = (ii, jj, 0)
                    if (nd, nc) < dist.get(key, (inf, inf)):
                        dist[key] = (nd, nc)
                        heapq.heappush(pq, (nd, nc, ii, jj, 0))
                    continue

                if ch.isdigit():
                    nx_mode = int(ch)
                    step_t = times[nx_mode - 1]
                    step_c = costs[nx_mode - 1]
                    if mode != 0 and nx_mode != mode:
                        step_t += switchTime
                        step_c += swtchCost
                    nd, nc = d + step_t, c + step_c
                    key = (ii, jj, nx_mode)
                    if (nd, nc) < dist.get(key, (inf, inf)):
                        dist[key] = (nd, nc)
                        heapq.heappush(pq, (nd, nc, ii, jj, nx_mode))

        return inf, inf  # 不可达


武装警察部队退出现役的人员，服人民解放军军官预备役的，适用本法。

第六十六条 本法自1996年1月1日起施行。# 中华人民共和国食品安全法

2009年2月28日 第十一届全国人民代表大会常务委员会第七次会议通过

2015年4月24日 第十二届全国人民代表大会常务委员会第十四次会议修订

2018年12月29日 第十三届全国人民代表大会常务委员会第七次会议《关于修改〈中华人民共和国产品质量法〉等五部法律的决定》第一次修正

2021年4月29日 第十三届全国人民代表大会常务委员会第二十八次会议《关于修改〈中华人民共和国道路交通安全法〉等八部法律的决定》第二次修正

<!-- INFO END -->

## 第一章 总 则

第一条 为了保证食品安全，保障公众身体健康和生命安全，制定本法。

第二条 在中华人民共和国境内从事下列活动，应当遵守本法：

（一）食品生产和加工（以下称食品生产），食品销售和餐饮服务（以下称食品经营）；

（二）食品添加剂的生产经营；

（三）用于食品的包装材料、容器、洗涤剂、消毒剂和用于食品生产经营的工具、设备（以下称食品相关产品）的生产经营；

（四）食品生产经营者使用食品添加剂、食品相关产品；

（五）食品的贮存和运输；

（六）对食品、食品添加剂、食品相关产品的安全管理。

供食用的源于农业的初级产品（以下称食用农产品）的质量安全管理，遵守《中华人民共和国农产品质量安全法》的规定。但是，食用农产品的市场销售、有关质量安全标准的制定、有关安全信息的公布和本法对农业投入品作出规定的，应当遵守本法的规定。

第三条 食品安全工作实行预防为主、风险管理、全程控制、社会共治，建立科学、严格的监督管理制度。

第四条 食品生产经营者对其生产经营食品的安全负责。

食品生产经营者应当依照法


前，电流呈线性增加（电感内电流不能突变），输出电压不能立刻达到输入的电压值。
   - 此时电感正向伏秒为：$(V_{in}-V_{out})* T_{on}$
2. 开关 $S_1$ 断开（绿色虚线）
   - 电感 L 因自感惯性作用，其电流方向大小不能发生突变。这时候电流会流经由续流二极管 $D_1$ 提供的回路，继续为输出负载供电。此时电容 $C_1$ 也参与放电。
   - 此时电感反向伏秒为：$V_{out} * T_{off}$

根据电感伏秒平衡（即能量守恒），$(V_{in}-V_{out})* T_{on}=V_{out} * T_{off}$，可得到：

$$
V_{out}=\delta*V_{in}
$$

各节点的波形曲线：

![](https://media.wiki-power.com/img/20211214100812.png)

通过控制 PWM 的占空比，使得电子开关 $S_1$ 不断地闭合断开，此时的输入电流是脉动的。但经过电感、电容、二极管的共同作用下，输出的电流是相对连续平稳的。

### 升压型 Boost

升压型 Boost，可以把一个较低的电压转换为一个稳定的较高电压。其拓扑如下：

![](https://media.wiki-power.com/img/20211214100041.png)

基本原理：

1. 开关 $S_1$ 闭合（蓝色实线）
   - 电流流经电感 $L_1$，在电感未饱和前，其电流以 $\frac{V_{in}}{L_1}$ 的速率线性增加，电能以磁能形式储存在电感中。此时电容 $C_1$ 为负载 $R_L$ 供电，假设此时负载两端电压为 $V_0$。因为开关 $S_1$ 闭合，所以二极管 $D_1$ 阳极接地，电容放出的电不能通过二极管。
   - 此时电感正向伏秒为：$V_{in}* T_{on}$
2. 开关 $S_1$ 断开（绿色虚线）
   - 由于电感 $L_1$ 上的电流不能突变，所以电感上的磁能转化为电压输出电流，以 $\frac{V_{out}-V_{in}}{L_1}$ 的速率线性下降，与电源 $V_{in}$ 形成串联，向电容 $C_1$ 和负载 $R_L$ 供电。当串联电压高于$V_0$ 时，电容 $C_1$ 状态为充电；当串联


("indexData")
    VkDeviceOrHostAddressConstKHR("transformData")
}

val VkTransformMatrixKHR = struct(Module.VULKAN, "VkTransformMatrixKHR") {
    float("matrix")[3][4]
}

val VkAccelerationStructureGeometryAabbsDataKHR = struct(Module.VULKAN, "VkAccelerationStructureGeometryAabbsDataKHR") {
    Expression("#STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR")..VkStructureType("sType")
    nullable..opaque_const_p("pNext")
    VkDeviceOrHostAddressConstKHR("data")
    VkDeviceSize("stride")
}

val VkAccelerationStructureGeometryInstancesDataKHR = struct(Module.VULKAN, "VkAccelerationStructureGeometryInstancesDataKHR") {
    Expression("#STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR")..VkStructureType("sType")
    nullable..opaque_const_p("pNext")
    VkBool32("arrayOfPointers")
    VkDeviceOrHostAddressConstKHR("data")
}

val VkAccelerationStructureGeometryDataKHR = union(Module.VULKAN, "VkAccelerationStructureGeometryDataKHR") {
    VkAccelerationStructureGeometryTrianglesDataKHR("triangles")
    VkAccelerationStructureGeometryAabbsDataKHR("aabbs")
    VkAccelerationStructureGeometryInstancesDataKHR("instances")
}

val VkAccelerationStructureGeometryKHR = struct(Module.VULKAN, "VkAccelerationStructureGeometryKHR") {
    Expression("#STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR")..VkStructureType("sType")
    PointerSetter(
        "VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX", "VkAccelerationStructureGeometryLinearSweptSpheresDataNV", "VkAccelerationStructureGeometrySpheresDataNV",
        prepend = true
    )..nullable..opaque_const_p("pNext")
    VkGeometryTypeKHR("geometryType")
    VkAccelerationStructureGeometryDataKHR("geometry")
    VkGeometryFlagsKHR("flags")
}

val VkAccelerationStructureBuildGeometryInfoKHR = struct(Module.VULKAN, "VkAccelerationStructureBuildGeometryInfoKHR") {
    Expression("#STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR")..VkStructureType("sType")
    nullable..opaque_const_p("pNext")
    VkAccelerationStructureTypeKHR("type")
    VkBuildAccelerationStructureFlagsKHR("flags")
    VkBuildAccelerationStructureModeKHR("mode")
    VkAccelerationStructureKHR("srcAccelerationStructure")
    VkAccelerationStructureKHR("dstAccelerationStructure")
    AutoSize("pGeometries", "ppGeometries", optional = true)..uint32_t("geometryCount")
    nullable..VkAccelerationStructureGeometryKHR.const.p("pGeometries")
    nullable..VkAccelerationStructureGeometryKHR.const.p.const.p("ppGeometries")
    VkDeviceOrHostAddressKHR("scratchData")
}

val VkAccelerationStructureInstanceKHR = struct(Module.VULKAN, "VkAccelerationStructureInstanceKHR") {
    VkTransformMatrixKHR("transform")
    uint32_t("instanceCustomIndex", bits = 24)
    uint32_t("mask", bits = 8)
    uint32_t("instanceShaderBindingTableRecordOffset", bits = 24)
    VkGeometryInstanceFlagsKHR("flags", bits = 8)
    uint64_t("accelerationStructureReference")
}

val VkAccelerationStructureCreateInfoKHR = struct(Module.VULKAN, "VkAccelerationStructureCreateInfoKHR") {
    Expression("#STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR").


4812      	ldr	r0, [pc, #72]	; (8008744 <f_build+0x68>)
 80086fa:	f242 7110 	movw	r1, #10000	; 0x2710
 80086fe:	f000 fd4d 	bl	800919c <arcprint>
  print("SYS_TIMER_TICK_FREQ %i\n", SYS_TIMER_TICK_FREQ);
 8008702:	4811      	ldr	r0, [pc, #68]	; (8008748 <f_build+0x6c>)
 8008704:	f44f 717a 	mov.w	r1, #1000	; 0x3e8
 8008708:	f000 fd48 	bl	800919c <arcprint>
  print("UART2_SPEED %i\n", UART2_SPEED);
 800870c:	480f      	ldr	r0, [pc, #60]	; (800874c <f_build+0x70>)
 800870e:	f44f 21e1 	mov.w	r1, #460800	; 0x70800
 8008712:	f000 fd43 	bl	800919c <arcprint>
  print("CONFIG_TASK_POOL %i\n", CONFIG_TASK_POOL);
 8008716:	480e      	ldr	r0, [pc, #56]	; (8008750 <f_build+0x74>)
 8008718:	2120      	movs	r1, #32
 800871a:	f000 fd3f 	bl	800919c <arcprint>
  print("APP_CONFIG_PINS %i\n", APP_CONFIG_PINS);
 800871e:	480d      	ldr	r0, [pc, #52]	; (8008754 <f_build+0x78>)
 8008720:	211a      	movs	r1, #26
 8008722:	f000 fd3b 	bl	800919c <arcprint>
  print("APP_CONFIG_DEFS_PER_PIN %i\n", APP_CONFIG_DEFS_PER_PIN);
 8008726:	480c      	ldr	r0, [pc, #48]	; (8008758 <f_build+0x7c>)
 8008728:	2108      	movs	r1, #8
 800872a:	f000 fd37 	bl	800919c <arcprint>
  print("USB_KB_REPORT_KEYMAP_SIZE %i\n", USB_KB_REPORT_KEYMAP_SIZE);
 800872e:	480b      	ldr	r0, [pc, #44]	; (800875c <f_build+0x80>)
 8008730:	2120      	movs	r1, #32
 8008732:	f000 fd33 	bl	800919c <arcprint>

  return 0;
}
 8008736:	2000      	movs	r0, #0
 8008738:	bd10      	pop	{r4, pc}
 800873a:	bf00      	nop
 800873c:	0801191e 	.word	0x0801191e
 8008740:	0801196b 	.word	0x0801196b
 8008744:	0801197f 	.word	0x0801197f
 8008748:	08011997 	.word	0x08011997
 800874c:	080119af 	.word	0x080119af
 8008750:	080119bf 	.word	0x080119bf
 8008754:	080119d4 	.word	0x080119d4
 8008758:	080119e8 	.word	0x080119e8
 800875c:	08011a04 	.word	0x08011a04

08008760 <CLI_parse>:
#endif // CONFIG_ANNOYATRON

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

void CLI_par


"SELECT a, b, s FROM %s WHERE a IN (1, 2, 3, 4) GROUP BY a LIMIT 2"),
                   row(1, 2, 1),
                   row(2, 2, 2));

        assertRows(execute("SELECT a, b, s FROM %s WHERE a IN (1, 2, 3, 4) GROUP BY a, b LIMIT 10"),
                   row(1, 2, 1),
                   row(1, 4, 1),
                   row(2, 2, 2),
                   row(2, 4, 2),
                   row(3, null, 3),
                   row(4, 8, null));

        // Multi-partitions query with DISTINCT
        assertRows(execute("SELECT DISTINCT a, s, count(a), count(s) FROM %s WHERE a IN (1, 2, 3, 4) GROUP BY a"),
                   row(1, 1, 1L, 1L),
                   row(2, 2, 1L, 1L),
                   row(3, 3, 1L, 1L),
                   row(4, null, 1L, 0L));

        // Multi-partitions query with DISTINCT and LIMIT
        assertRows(execute("SELECT DISTINCT a, s, count(a), count(s) FROM %s WHERE a IN (1, 2, 3, 4) GROUP BY a LIMIT 2"),
                   row(1, 1, 1L, 1L),
                   row(2, 2, 1L, 1L));

         // Multi-partitions query with ORDER BY
        assertRows(execute("SELECT a, b, s, count(b), count(s) FROM %s WHERE a IN (1, 2, 4) GROUP BY a, b ORDER BY b DESC, c DESC"),
                   row(4, 8, null, 1L, 0L),
                   row(1, 4, 1, 2L, 2L),
                   row(2, 4, 2, 1L, 1L),
                   row(2, 2, 2, 1L, 1L),
                   row(1, 2, 1, 2L, 2L));

         // Multi-partitions queries with ORDER BY and LIMIT
        assertRows(execute("SELECT a, b, s, count(b), count(s) FROM %s WHERE a IN (1, 2, 4) GROUP BY a, b ORDER BY b DESC, c DESC LIMIT 2"),
                   row(4, 8, null, 1L, 0L),
                   row(1, 4, 1, 2L, 2L));
    }

    @Test
    public void testGroupByWithPaging() throws Throwable
    {
        for (String compactOption : new String[] { "", " WITH COMPACT STORAGE" })
        {
            createTable("CREATE TABLE %s (a int, b int, c int, d int, e int, primary key (a, b, c, d))"
                    + compactOption);

            execute("INSERT INTO %s (a, b, c, d, e) VALUES (1, 2, 1, 3, 6)");
            execute("INSERT INTO %s (a, b, c, d, e) VALUES (1, 2, 2, 6, 12)");
            execute("INSERT INTO %s (a, b, c, d, e) VALUES (1, 3, 2, 12, 24)");
            execute("INSERT INTO %s (a, b, c, d, e) VALUES (1, 4, 2, 12, 24)");
            execute("INSERT INTO %s (a, b, c, d, e) VALUES (1, 4, 2, 6, 12)");
            execute("INSERT INTO %s (a, b, c, d, e) VALUES (2, 2, 3, 3, 6)");
            execute("INSERT INTO %s (a, b, c, d, e) VALUES (2, 4, 3, 6, 12)");
            execute("INSERT INTO %s (a, b, c, d, e) VALUES (3, 3, 2, 12, 24)");
            execute("INSERT INTO %s (a, b, c, d, e) VALUES (4, 8, 2, 12, 24)");

            // Makes sure that we have some tombstones
            execute("DELETE FROM %s WHERE a = 1 AND b = 3 AND c = 2 AND d = 12");
            execute("DELETE FROM %s WHERE a = 3");


,
    "verse_number": 12,
    "content":
        "മാതൃകായോഗ്യമായിക്കൊണ്ടും കാരുണ്യമായിക്കൊണ്ടും ഇതിനു മുമ്പ് മൂസായുടെ ഗ്രന്ഥം വന്നിട്ടുണ്ട്. ഇത് (അതിനെ) സത്യപ്പെടുത്തുന്ന അറബിഭാഷയിലുള്ള ഒരു ഗ്രന്ഥമാകുന്നു. അക്രമം ചെയ്തവര്‍ക്ക് താക്കീത് നല്‍കുവാന് വേണ്ടിയും, സദ്‌വൃത്തര്‍ക്ക് സന്തോഷവാര്‍ത്ത ആയിക്കൊണ്ടും."
  },
  {
    "surah_number": 46,
    "verse_number": 13,
    "content":
        "ഞങ്ങളുടെ രക്ഷിതാവ് അല്ലാഹുവാണ് എന്ന് പറയുകയും പിന്നീട് ചൊവ്വെ നിലകൊള്ളുകയും ചെയ്തവരാരോ അവര്‍ക്ക് യാതൊന്നും ഭയപ്പെടാനില്ല. അവര് ദുഃഖിക്കേണ്ടി വരികയുമില്ല."
  },
  {
    "surah_number": 46,
    "verse_number": 14,
    "content":
        "അവരാകുന്നു സ്വര്‍ഗാവകാശികള്. അവരതില് നിത്യവാസികളായിരിക്കും. അവര് പ്രവര്‍ത്തിച്ചിരുന്നതിനുള്ള പ്രതിഫലമത


update.send({ srfdecodename: context.principal_type,srfkey:context.principal_id})
```

#### 注入脚本代码 :id=RAWJSCODE3<sup class="footnote-symbol"> <font color=gray size=1>[直接前台代码]</font></sup>

<p class="panel-title"><b>执行代码</b></p>

```javascript
ibiz.mc.command.update.send({ srfdecodename: "article_page",srfkey:context.principal_id})
```

#### 刷新列表 :id=VIEWCTRLINVOKE1<sup class="footnote-symbol"> <font color=gray size=1>[视图部件调用]</font></sup>

调用`mdctrl(多数据部件)`的方法`refresh`，参数为`mdctrl(多数据部件)`
#### 结束 :id=END1<sup class="footnote-symbol"> <font color=gray size=1>[结束]</font></sup>

### 连接条件说明
#### 关注工作项 :id=PREPAREJSPARAM2-PREPAREJSPARAM1

```ctx(应用上下文).work_item``` ISNOTNULL
#### PAGE :id=PREPAREJSPARAM10-RAWJSCODE3

```ctx(应用上下文).principal_type``` EQ ```PAGE```
#### 关注产品需求 :id=PREPAREJSPARAM2-PREPAREJSPARAM3

```ctx(应用上下文).idea``` ISNOTNULL
#### 关注工单 :id=PREPAREJSPARAM2-PREPAREJSPARAM4

```ctx(应用上下文).ticket``` ISNOTNULL
#### 关注客户 :id=PREPAREJSPARAM2-PREPAREJSPARAM5

```ctx(应用上下文).customer``` ISNOTNULL
#### 关注测试用例 :id=PREPAREJSPARAM2-PREPAREJSPARAM7

```ctx(应用上下文).test_case``` ISNOTNULL AND ```ctx(应用上下文).run``` ISNULL
#### 关注执行用例 :id=PREPAREJSPARAM2-PREPAREJSPARAM6

```ctx(应用上下文).run``` ISNOTNULL
#### 关注页面 :id=PREPAREJSPARAM2-PREPAREJSPARAM8

```ctx(应用上下文).article_page``` ISNOTNULL
#### 关注讨论 :id=PREPAREJSPARAM2-PREPAREJSPARAM9

```ctx(应用上下文).discuss_post``` ISNOTNULL

### 实体逻辑参数

|    中文名   |    代码名    |  数据类型      |备注 |
| --------| --------| --------  | --------   |
|关注人容器对象|attention_container|数据对象||
|应用上下文|ctx|导航视图参数绑定参数||
|多数据部件|mdctrl|部件对象||
|当前视图对象|view|当前视图对象||
|提交对象|commit_object|数据对象||
|传入变量()|Default|数据对象||
|关注数据|attention_data|数据对象列表||
## 团队管理员(user_group_admin)

查看SQL语句

<el-row>
 <el-tag @click="MYSQL5 = true">MYSQL5</el-tag>
</el-row>


     break;

            case 'v':
            case 'p':
            case 'l':
            case 'b':
            case 'B':
            case 'e':
            case 'n':
            case 'N':
                log_stderr("mcperf: option -%c requires a number", optopt);
                break;

            case 't':
                log_stderr("mcperf: option -%c requires a real number", optopt);
                break;

            case 'r':
            case 'R':
            case 'z':
                log_stderr("mcperf: option -%c requires a distribution", optopt);
                break;

            default:
                log_stderr("mcperf: invalid option -- '%c'", optopt);
                break;
            }
            return MCP_ERROR;

        default:
            log_stderr("mcperf: invalid option -- '%c'", optopt);
            return MCP_ERROR;
        }
    }

    return MCP_OK;
}

static rstatus_t
mcp_pre_run(struct context *ctx)
{
    rstatus_t status;
    struct opt *opt = &ctx->opt;

    /* initialize logger */
    status = log_init(opt->log_level, opt->log_filename);
    if (status != MCP_OK) {
        return status;
    }

    /* initialize buffer */
    memset(ctx->buf1m, '0', sizeof(ctx->buf1m));

    /* resolve server info */
    status = mcp_resolve_addr(opt->server, opt->port, &opt->si);
    if (status != MCP_OK) {
        return status;
    }

    /*
     * Initialize distribution for {conn, call, size} load generators with
     * either default or user-supplied values.
     */
    dist_init(&ctx->conn_dist, opt->conn_dopt.type, opt->conn_dopt.min,
              opt->conn_dopt.max, opt->client.id);

    dist_init(&ctx->call_dist, opt->call_dopt.type, opt->call_dopt.min,
              opt->call_dopt.max, opt->client.id);

    dist_init(&ctx->size_dist, opt->size_dopt.type, opt->size_dopt.min,
              opt->size_dopt.max, opt->client.id);

    /* initialize stats subsystem */
    stats_init(ctx);

    /* initialize timer */
    timer_init();

    /* initialize core */
    status = core_init(ctx);
    if (status != MCP_OK) {
        return status;
    }

    return MCP_OK;
}

static void
mcp_run(struct context *ctx)
{
    rstatus_t status;

    core_start(ctx);

    for (;;) {
        status = core_loop(ctx);
        if (status != MCP_OK) {
            break;
        }
    }
}

int
main(int argc, char **argv)
{
    rstatus_t status;
    static struct context ctx;

    mcp_set_default_options(&ctx);

    status = mcp_get_options(&ctx, argc, argv);
    if (status != MCP_OK) {
        mcp_show_usage();
        exit(1);
    }

    if (show_version) {
        log_stderr("This is mcperf-%s" CRLF, MCP_VERSION_STRING);
        if (show_help) {
            mcp_show_usage();
        }
        exit(0);
    }

    status = mcp_pre_run(&ctx);
    if (status != MCP_OK) {
        exit(1);
    }

    mcp_run(&ctx);

    return 0;
}


cerb3_exh_j",
	[2850371631] = "sf_yacht_fixer_02_yat_canopies_r01",
	[1866283057] = "h4_int_sub_ladderexit_lightdum001",
	[1328101435] = "elegy1_dash1",
	[3239917635] = "hckbarsink",
	[1847933003] = "dbike_weapb",
	[467089492] = "vehmod_camo20",
	[4038932580] = "grow_rsplit_b1",
	[1013528679] = "bh1_42b_long_0",
	[2833987688] = "cs1_12_long_2",
	[2326345836] = "hei_carrier_int2_lod",
	[262223988] = "ch_chint02_trophy_cab_flat_glass1",
	[3029547129] = "v_49_tat2dirt",
	[215169147] = "cs1_railwyb_tunnel_5_wires",
	[423573628] = "jest4_brace6",
	[3924899965] = "strike_livery7",
	[1492465793] = "sm_07_strm_1",
	[3856742533] = "ch_chint06_security_screen13",
	[3253024910] = "ex_office_02a_skirt1",
	[1723938965] = "euro_wing_2",
	[1928804506] = "hei_cs1_12_strm_1",
	[3374004379] = "bkr_cash_pile_20c",
	[3690674333] = "ex_dt1_11_office_03b",
	[2052667563] = "v_38_ducttape",
	[643774647] = "dom8_louver_a",
	[2286368954] = "prev_hlite_l_4",
	[2034710716] = "ex_office_03c_sideboardpower_028",
	[416495812] = "knjosj_cage_1",
	[563427525] = "hei_ch3_06_long_6",
	[4278794452] = "ba_work_light_clutter",
	[3708762329] = "sf_mpapyacht_dk3_spots1",
	[2800040164] = "open2_hoodsplit_c",
	[2178627814] = "tur_livery7",
	[1981757682] = "apa_ch2_02b_long_2",
	[3301128442] = "vb_additions_toiletblock01_lod",
	[539441407] = "tord_bump_f3p",
	[1859991808] = "v_64_dance_mirror",
	[4217452812] = "euro_mirr",
	[1146566929] = "cs3_02_long_1",
	[2349938965] = "v_7_rangeedges",
	[1674787101] = "v_40_hospseating1",
	[3254204703] = "vb_01_critical_0",
	[1205156129] = "lr_cs4_05_long_0",
	[3107535143] = "green_bumf_pl",
	[3294968106] = "bansh2_exh6",
	[3769186605] = "xm_lab_pipework002",
	[254490939] = "hei_ss1_10_strm_0",
	[758462781] = "hei_mph_hang2_decals2",
	[2873047358] = "hei_heist_office_det02",
	[512833856] = "plate_smod5f",
	[3838785863] = "h4_int_03_light_recessed02


from Cl_Test_ALU import TestAlu
test = TestAlu()

print("Test1")
test.Test1()

print("Test2")
test.Test2()

print("Test3")
test.Test3()

print("Test4")
test.Test4()

print("Test5")
test.Test5()

print("Test6")
test.Test6()

print("Test7")
test.Test7()

print("Test8")
test.Test8()

print("Test9")
test.Test9()

print("Test10")
test.Test10()

print("Test11")
test.Test11()

print("Test12")
test.Test12()

print("Test13")
test.Test13()

print("Test14")
test.Test14()

print("Test15")
test.Test15()

print("Test16")
test.Test16()

print("test17")
test.Test17()

print("test18")
test.Test18()


--[[============================================================================
-- Duplex.Application.Repeater
============================================================================]]--

--[[--

Take control of the native repeater DSP device.

#

[View the README.md](https://github.com/renoise/xrnx/blob/master/Tools/com.renoise.Duplex.xrnx/Docs/Applications/Repeater.md) (github)

--]]

--==============================================================================

-- constants

local DIVISORS = {1/1,1/2,1/4,1/8,1/16,1/32,1/64,1/128}
local HOLD_ENABLED = 1
local HOLD_DISABLED = 2
local MODE_OFF = 0
local MODE_FREE = 1
local MODE_EVEN = 2
local MODE_TRIPLET = 3
local MODE_DOTTED = 4
local MODE_AUTO = 5

--==============================================================================

class 'Repeater' (RoamingDSP)

Repeater.default_options = {
  mode_select = {
    label = "Mode select",
    description = "Determine the working mode of the grid:"
                .."\nFree: scale between 1/1 and 1/128"
                .."\nEven: display only 'even' divisors"
                .."\nTriplet: display only 'triplet' divisors"
                .."\nDotted: display only 'dotted' divisors"
                .."\nAutomatic: display 'even','triplet' and 'dotted' "
                .."\n  divisors, each on a separate line (automatic layout)",
    items = {
      "Free",
      "Even",
      "Triplet",
      "Dotted",
      "Automatic",
    },
    value = 5,
    on_change = function(app)
      app:init_grid()
    end
  },
  hold_option = {
    label = "Hold option",
    description = "Determine what to do when a button is released",
    items = {
      "Continue (hold)",
      "Stop (hold off)",
    },
    value = 1,
    on_change = function(app)
      if (app.options.hold_option.value == HOLD_DISABLED) then
        app:stop_repeating()
      end
    end
  },
  divisor_min = {
    label = "Divisor (min) ",
    hidden = true,
    description = "Specify the minimum divisor value",
    items = {
      "1/1",
      "1/2",
      "1/4",
      "1/8",
      "1/16",
      "1/32",
      "1/64",
      "1/128",
    },
    value = 1,
    on_change = function(app)
      app:init_grid()
    end
  },
  divisor_max = {
    label = "Divisor (max) ",
    hidden = true,
    description = "Specify the minimum divisor value",
    items = {
      "1/1",
      "1/2",
      "1/4",
      "1/8",
      "1/16",
      "1/32",
      "1/64",
      "1/128",
    },
    value = 8,
    on_change = function(app)
      app:init_grid()
    end
  },
}

--- available_mappings
-- @field grid
-- @field divisor_slider
-- @field mode_slider
-- @field mode_even
-- @field mode_triplet
-- @field mode_dotted
-- @field mode_free
-- @table available_mappings
Repeater.available_mappings = {
  grid = {
    description = "Repeater: button grid"
  },
  divisor_slider = {
    description = "Repeater: Control divisor using a fader/knob",
  },
  mode_slider = {
    description = "Repeater: Control mode using


r2, r2, r0, lsr #28
	eor	r7, r7, r1, lsr #28
	eor	r2, r2, r1, lsl #4
	eor	r7, r7, r0, lsl #4
	movs	r0, r3
	mov	r1, r8
	eor	r3, r3, r1, lsr #29
	eor	r8, r8, r0, lsr #29
	eor	r3, r3, r0, lsl #3
	eor	r8, r8, r1, lsl #3
	eor	r3, r3, r1, lsr #7
	eor	r8, r8, r0, lsr #7
	eor	r3, r3, r0, lsl #25
	eor	r8, r8, r1, lsl #25
	movs	r0, r4
	mov	r1, r9
	eor	r4, r4, r0, lsr #1
	eor	r9, r9, r1, lsr #1
	eor	r4, r4, r1, lsl #31
	eor	r9, r9, r0, lsl #31
	eor	r4, r4, r0, lsr #6
	eor	r9, r9, r1, lsr #6
	eor	r4, r4, r1, lsl #26
	eor	r9, r9, r0, lsl #26
	movs	r0, r5
	mov	r1, r10
	eor	r5, r5, r0, lsr #10
	eor	r10, r10, r1, lsr #10
	eor	r5, r5, r1, lsl #22
	eor	r10, r10, r0, lsl #22
	eor	r5, r5, r0, lsr #17
	eor	r10, r10, r1, lsr #17
	eor	r5, r5, r1, lsl #15
	eor	r10, r10, r0, lsl #15
	movs	r0, r6
	mov	r1, fp
	eor	r6, r6, r0, lsr #7
	eor	fp, fp, r1, lsr #7
	eor	r6, r6, r1, lsl #25
	eor	fp, fp, r0, lsl #25
	eor	r6, r6, r1, lsr #9
	eor	fp, fp, r0, lsr #9
	eor	r6, r6, r0, lsl #23
	eor	fp, fp, r1, lsl #23
.LP1:
	eor	r4, r4, #225
	eors	r2, r6
	eor	r7, fp
	eors	r6, r5
	eor	fp, r10
	eors	r4, r3
	eor	r9, r8
	bic	r0, r3, r2
	bic	ip, r4, r3
	bic	lr, r5, r4
	eor	r3, lr
	bic	lr, r2, r6
	eor	r2, ip
	bic	ip, r6, r5
	eor	r4, ip
	eor	r5, lr
	eors	r6, r0
	bic	r0, r8, r7
	bic	ip, r9, r8
	bic	lr, r10, r9
	eor	r8, lr
	bic	lr, r7, fp
	eor	r7, ip
	bic	ip, fp, r10
	eor	r9, ip
	eor	r10, lr
	eor	fp, r0
	eors	r3, r2
	eor	r8, r7
	eors	r2, r6
	eor	r7, fp
	eors	r5, r4
	eor	r10,


具，例如常见漏洞以及如何利用它们、使用 Burp Suite，以及黑客会注意到的一些标准内容，例如“我可以更改参数的值吗？”或“我可以删除参数吗？一旦你了解了这些基础知识，现在你想要选择你的目标来查找错误。

这是大多数人错过诀窍的地方。许多初学者从 HackerOne 或 Bugcrowd 等程序中选择目标，最终陷入一个令人沮丧的循环，他们无法理解任何东西，也没有使用他们从盗版课程中学到的技术找到任何错误。这是因为这些网站中的大多数都是安全的，因为更高级的黑客已经测试了它们。因此，从这些平台开始是没有意义的。

那么，你应该从哪里开始呢？

您需要从只有漏洞披露计划的网站开始，这些网站只是提供对发现的确认，而不是任何赏金。大多数有经验的黑客可能不会在没有任何赏金的情况下浪费他们宝贵的时间，所以他们是你的目标。以及如何找到它们？使用“Google Dorks”或只是节省您的时间并查看此 GitHub 存储库：Bug Bounty Dorks。
# 目标已锁定

既然您已经选择了目标，请确保您选择的网站在 Google 搜索结果中显示 5-6 页深度，因为这些网站可能容易受到攻击。那么，您应该测试哪些漏洞？您可能会想，“让我们从 XSS 开始，使用自动扫描工具扫描整个站点。你在这里完全错了。一开始就忘记 XSS 或任何其他诱人的漏洞。只需专注于构建方法论即可。

我的意思是，从简单的nmap扫描开始，做一些版本枚举，并尝试找到横幅，即服务器或正在运行的其他服务的版本。用谷歌搜索结果，看看是否存在任何漏洞。不要因为看到您的版本容易受到某些随机网站的攻击而受到诱惑，因为它们中的大多数没有任何影响，或者很难或无用地利用。只信任 ExploitDB、Rapid7 或 GitHub 等来源。

如果您发现易受攻击的版本，那就太好了！但是，如果您没有从服务或服务器版本中获得任何潜在客户，该怎么办？使用 Gobuster、Dirb 或您喜欢的任何工具进行目录暴力破解。我喜欢Gobuster。尝试使用相关的单词列表。例如，如果一个网站正在使用Drupal CMS，请确保使用Drupal的单词列表。许多初学者对所有网站都使用默认的单词列表。根据您网站的技术更改单词列表。

如果您发现任何应该隐藏或不显示的文件，例如某些配置文件、备份文件或目录列表，请直接报告它们。


Gul'dan's Regalia
        [846] = {{48741,48744,48743,48740,48742},1,4,232,256,{{2,67230},{4,67231}}}, -- Kel'Thuzad's Regalia
        [847] = {{48745,48749,48748,48746,48747},1,4,232,16,{{2,67201},{4,67202}}}, -- Velen's Raiment
        [848] = {{48750,48754,48753,48751,48752},1,4,232,16,{{2,67201},{4,67202}}}, -- Zabra's Raiment
        [849] = {{48755,48757,48759,48756,48758},1,4,232,16,{{2,67193},{4,67198}}}, -- Velen's Regalia
        [850] = {{48760,48762,48764,48761,48763},1,4,232,16,{{2,67193},{4,67198}}}, -- Zabra's Regalia
        [851] = {{48775,48778,48777,48774,48776},2,4,232,1024,{{2,67127},{4,67128}}}, -- Malfurion's Garb
        [852] = {{48770,48773,48772,48769,48771},2,4,232,1024,{{2,67127},{4,67128}}}, -- Runetotem's Garb
        [853] = {{48786,48788,48790,48787,48789},2,4,232,1024,{{2,67125},{4,67126}}}, -- Malfurion's Regalia
        [854] = {{48781,48783,48785,48782,48784},2,4,232,1024,{{2,67125},{4,67126}}}, -- Runetotem's Regalia
        [855] = {{48800,48803,48802,48799,48801},2,4,232,1024,{{2,67121},{4,67123}}}, -- Malfurion's Battlegear
        [856] = {{48795,48798,48797,48794,48796},2,4,232,1024,{{2,67121},{4,67123}}}, -- Runetotem's Battlegear
        [857] = {{48811,48813,48809,48810,48812},2,4,232,8,{{2,67209},{4,67211}}}, -- VanCleef's Battlegear
        [858] = {{48806,48808,48804,48805,48807},2,4,232,8,{{2,67209},{4,67211}}}, -- Garona's Battlegear
        [859] = {{48820,48822,48823,48819,48821},3,4,232,4,{{2,67150},{4,67151}}}, -- Windrunner's Battlegear
        [860] = {{48815,48817,48818,48814,48816},3,4,232,4,{{2,67150},{4,67151}}}, -- Windrunner's Pursuit
        [861] = {{48825,48827,48828,48824,48826},3,4,232,64,{{2,67225},{4,67226}}}, -- Nobundo's Garb
        [862] = {{48830,48832,48833,48829,48831},3,4,232,64,{{2,67225},{4,67226}}}, -- Thrall's Garb
        [863] = {{48843,48845,48842,48841,48844},3,4,232,64,{{2,67227},{4,67228}}}, -- Thrall's Regalia
        [864] = {{48838,48840,48837,48836,48839},3,4,232,64,{{2,67227},{4,67228}}}, -- Nobundo's Regalia
        [865] = {{48847,48849,48846,48848,48850},3,4,232,64,{{2,67220},{4,67221}}}, -- Nobundo's Battlegear
        [866] = {{48852,48854,48851,48853,48855},3,4,232,64,{{


import tkinter as tk
import subprocess

def set_brightness(value):
    monitor_name = subprocess.check_output("xrandr | grep ' connected' | cut -f1 -d ' '", shell=True).decode().strip()
    brightness_level = float(value)
    subprocess.call(f"xrandr --output {monitor_name} --brightness {brightness_level}", shell=True)

root = tk.Tk()
root.title("Adjust Brightness")
root.geometry("400x150")
root.config(bg="#2e3f4f")

title_label = tk.Label(root, text="Brightness Control", font=("Helvetica", 16, "bold"), fg="white", bg="#2e3f4f")
title_label.pack(pady=10)

slider_label = tk.Label(root, text="Brightness Level", font=("Helvetica", 12), fg="white", bg="#2e3f4f")
slider_label.pack(pady=5)
slider = tk.Scale(root, from_=0.1, to=1.0, orient=tk.HORIZONTAL, resolution=0.01, command=set_brightness,
fg="#ffffff", bg="#3b4c5a", highlightbackground="#3b4c5a", troughcolor="#4e6270", length=250)
slider.set(0.75)
slider.pack(pady=5)

root.mainloop()


x := graphql.WithPathContext(ctx, graphql.NewPathWithField("configLTE"))
			data, err := ec.unmarshalOCategoryConfigInput2ᚖentgoᚗioᚋcontribᚋentgqlᚋinternalᚋtodoᚋentᚋschemaᚋschematypeᚐCategoryConfig(ctx, v)
			if err != nil {
				return it, err
			}
			it.ConfigLTE = data
		case "configIsNil":
			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("configIsNil"))
			data, err := ec.unmarshalOBoolean2bool(ctx, v)
			if err != nil {
				return it, err
			}
			it.ConfigIsNil = data
		case "configNotNil":
			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("configNotNil"))
			data, err := ec.unmarshalOBoolean2bool(ctx, v)
			if err != nil {
				return it, err
			}
			it.ConfigNotNil = data
		case "duration":
			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("duration"))
			data, err := ec.unmarshalODuration2ᚖtimeᚐDuration(ctx, v)
			if err != nil {
				return it, err
			}
			it.Duration = data
		case "durationNEQ":
			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("durationNEQ"))
			data, err := ec.unmarshalODuration2ᚖtimeᚐDuration(ctx, v)
			if err != nil {
				return it, err
			}
			it.DurationNEQ = data
		case "durationIn":
			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("durationIn"))
			data, err := ec.unmarshalODuration2ᚕtimeᚐDurationᚄ(ctx, v)
			if err != nil {
				return it, err
			}
			it.DurationIn = data
		case "durationNotIn":
			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("durationNotIn"))
			data, err := ec.unmarshalODuration2ᚕtimeᚐDurationᚄ(ctx, v)
			if err != nil {
				return it, err
			}
			it.DurationNotIn = data
		case "durationGT":
			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("durationGT"))
			data, err := ec.unmarshalODuration2ᚖtimeᚐDuration(ctx, v)
			if err != nil {
				return it, err
			}
			it.DurationGT = data
		case "durationGTE":
			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("durationGTE"))
			data, err := ec.unmarshalODuration2ᚖtimeᚐDuration(ctx, v)
			if err != nil {
				return it, err
			}
			it.DurationGTE = data
		case "durationLT":
			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("durationLT"))
			data, err := ec.unmarshalODuration2ᚖtimeᚐDuration(ctx, v)
			if err != nil {
				return it, err
			}
			it.DurationLT = data
		case "durationLTE":
			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("durationLTE"))
			data, err := ec.unmarshalODuration2ᚖtimeᚐDuration(ctx, v)
			if err != nil {
				return it, err


Function(P.stopWordFilter,"stopWordFilter"),
/*!
		 * lunr.trimmer
		 * Copyright (C) 2020 Oliver Nightingale
		 */
P.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},P.Pipeline.registerFunction(P.trimmer,"trimmer"),
/*!
		 * lunr.TokenSet
		 * Copyright (C) 2020 Oliver Nightingale
		 */
P.TokenSet=function(){this.final=!1,this.edges={},this.id=P.TokenSet._nextId,P.TokenSet._nextId+=1},P.TokenSet._nextId=1,P.TokenSet.fromArray=function(e){for(var t=new P.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},P.TokenSet.fromClause=function(e){return"editDistance"in e?P.TokenSet.fromFuzzyString(e.term,e.editDistance):P.TokenSet.fromString(e.term)},P.TokenSet.fromFuzzyString=function(e,t){for(var n=new P.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var s,i=o.str.charAt(0);i in o.node.edges?s=o.node.edges[i]:(s=new P.TokenSet,o.node.edges[i]=s),1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var a=o.node.edges["*"];else a=new P.TokenSet,o.node.edges["*"]=a;if(0==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else l=new P.TokenSet,o.node.edges["*"]=l;1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),f=o.str.charAt(1);f in o.node.edges?c=o.node.edges[f]:(c=new P.TokenSet,o.node.edges[f]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},P.TokenSet.fromString=function(e){for(var t=new P.TokenSet,n=t,r=0,o=e.length;r<o;r++){var s=e[r],i=r==o-1;if("*"==s)t.edges[s]=t,t.final=i;else{var a=new P.TokenSet;a.final=i,t.edges[s]=a,t=a}}return n},P.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node


0, r6
	mov r2, r5
	bl ov00_02207F1C
_02201F10:
	mov r0, #0
	add sp, sp, #4
	ldmia sp!, {r3, r4, r5, r6, pc}
	.balign 4, 0
_02201F1C: .word ov00_022182FC
_02201F20: .word ov00_02218310
_02201F24: .word ov00_0221823C
_02201F28: .word ov00_0221831C
_02201F2C: .word ov00_02218260
_02201F30: .word ov00_0221832C
_02201F34: .word ov00_02218338
_02201F38: .word ov00_02218220
_02201F3C: .word 0x000001FD
_02201F40: .word ov00_02218344
_02201F44: .word ov00_02201D78
	arm_func_end ov00_02201D9C

	arm_func_start ov00_02201F48
ov00_02201F48: ; 0x02201F48
	stmdb sp!, {r4, r5, r6, r7, r8, lr}
	movs r4, r1
	mov r8, r0
	mov r7, r2
	bne _02201F70
	ldr r0, _02201FD0 ; =ov00_022183F8
	ldr r1, _02201FD4 ; =ov00_02218410
	ldr r2, _02201FD8 ; =ov00_022183A8
	mov r3, #0x25
	bl __msl_assertion_failed
_02201F70:
	ldr r5, [r4, #8]
	ldmia r4, {r0, r6}
	cmp r6, r5
	bne _02201FA8
	add r6, r6, #0x800
	add r1, r6, #1
	bl ov00_021EC3BC
	cmp r0, #0
	bne _02201FA8
	ldr r1, _02201FDC ; =ov00_0221841C
	mov r0, r8
	bl ov00_0220A890
	mov r0, #1
	ldmia sp!, {r4, r5, r6, r7, r8, pc}
_02201FA8:
	strb r7, [r0, r5]
	add r1, r5, #1
	mov r2, #0
	strb r2, [r0, r1]
	ldr r1, [r4, #8]
	add r1, r1, #1
	str r1, [r4, #8]
	stmia r4, {r0, r6}
	mov r0, r2
	ldmia sp!, {r4, r5, r6, r7, r8, pc}
	.balign 4, 0
_02201FD0: .word ov00_022183F8
_02201FD4: .word ov00_02218410
_02201FD8: .word ov00_022183A8
_02201FDC: .word ov00_0221841C
	arm_func_end ov00_02201F48

	arm_func_start ov00_02201FE0
ov00_02201FE0: ; 0x02201FE0
	stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
	movs r8, r2
	mov sl, r0
	mov sb, r1
	mov r7, r3
	bne _0220200C
	ldr r0, _022020D4 ; =ov00_0221842C
	ldr r1, _022020D8 ; =ov00_02218410
	ldr r2, _022020DC ; =ov00_022183DC
	mov r3,


; test some of the 4cade wipes

.include "../zp.inc"
.include "../hardware.inc"

Coordinates2Bit=$8100
EndCoordinates2Bit = Coordinates2Bit + (origEndCoordinates2Bit-origCoordinates2Bit)

wipe_test:
;	jmp	after
test_graphic:
;	.incbin "../graphics/a2_dating.hgr.zx02"

;.include "../zx02_optim.s"

after:

	; from code.dhgr.precomputed.2bit

	jsr	BuildHGRTables
	jsr	BuildDHGRMirrorCols
	jsr	BuildHGRSparseBitmasks2Bit

	;=========================
	; init graphics

	bit	SET_GR
	bit	HIRES
	bit	FULLGR
	sta	AN3
	sta	EIGHTYCOLON
	sta	SET80COL

	bit	PAGE1

	;=================================
	; intro
	;=================================

	; copy data table to $8100

	ldx	#((>origEndCoordinates2Bit)-(>origCoordinates2Bit))

outer_copy_coords_loop:
	ldy	#0
copy_coords_loop:

col_smc1:
	lda	origCoordinates2Bit,Y
col_smc2:
	sta	Coordinates2Bit,