handle-user-agent-shutdown" },
                "importscripts-method": { "dfnID": "importscripts-method", "dfnText": "importScripts(urls)", "external": false, "refSections": [{ "refs": [{ "id": "ref-for-importscripts-method" }], "title": "6.3.1. Origin restriction" }, { "refs": [{ "id": "ref-for-importscripts-method\u2460" }], "title": "6.3.2. importScripts(urls)" }, { "refs": [{ "id": "ref-for-importscripts-method\u2461" }], "title": "Update" }], "url": "#importscripts-method" },
                "install": { "dfnID": "install", "dfnText": "Install", "external": false, "refSections": [{ "refs": [{ "id": "ref-for-install" }], "title": "3.5. Events" }, { "refs": [{ "id": "ref-for-install\u2460" }], "title": "4.8. Events" }, { "refs": [{ "id": "ref-for-install\u2461" }], "title": "Update" }], "url": "#install" },
                "installevent": { "dfnID": "installevent", "dfnText": "InstallEvent", "external": false, "refSections": [{ "refs": [{ "id": "ref-for-installevent" }], "title": "4.5. InstallEvent" }, { "refs": [{ "id": "ref-for-installevent\u2460" }], "title": "4.8. Events" }, { "refs": [{ "id": "ref-for-installevent\u2461" }], "title": "Install" }], "url": "#installevent" },
                "is-async-module": { "dfnID": "is-async-module", "dfnText": "Is Async Module", "external": false, "refSections": [{ "refs": [{ "id": "ref-for-is-async-module" }], "title": "Update" }, { "refs": [{ "id": "ref-for-is-async-module\u2460" }], "title": "Is Async Module" }], "url": "#is-async-module" },
                "job-referrer": { "dfnID": "job-referrer", "dfnText": "referrer", "external": false, "refSections": [{ "refs": [{ "id": "ref-for-job-referrer" }], "title": "Create Job" }, { "refs": [{ "id": "ref-for-job-referrer\u2460" }], "title": "Start Register" }, { "refs": [{ "id": "ref-for-job-referrer\u2461" }, { "id": "ref-for-job-referrer\u2462" }], "title": "Register" }], "url": "#job-referrer" },
                "job-storage-key": { "dfnID": "job-storage-key", "dfnText": "storage key", "external": false, "refSections": [{ "refs": [{ "id": "ref-for-job-storage-key" }], "title": "Create Job" }, { "refs": [{ "id": "ref-for-job-storage-key\u2460" }, { "id": "ref-for-job-storage-key\u2461" }], "title": "Register" }, { "refs": [{ "id": "ref-for-job-storage-key\u2462" }], "title": "Update" }, { "refs": [{ "id": "ref-for-job-storage-key\u2463" }], "title": "Unregister" }], "url": "#job-storage-key" },
                "lookup-race-response": { "dfnID": "lookup-race-response", "dfnText": "Lookup Race Response", "external": false, "refSections": [], "url": "#lookup-race-response" },
                "match-router-condition": { "dfnID": "match-router-condition", "dfnText": "Match Router Condition", "external": false, "refSections": [{ "refs": [{ "id": "ref-for-match-router-condition" }, { "id": "


int get hashCode => Object.hash(runtimeType,id,name,slug,updatedAt,createdAt);

@override
String toString() {
  return 'NavApiDocsItemTagsItemData(id: $id, name: $name, slug: $slug, updatedAt: $updatedAt, createdAt: $createdAt)';
}

}

/// @nodoc
abstract mixin class _$NavApiDocsItemTagsItemDataCopyWith<$Res> implements $NavApiDocsItemTagsItemDataCopyWith<$Res> {
  factory _$NavApiDocsItemTagsItemDataCopyWith(_NavApiDocsItemTagsItemData value, $Res Function(_NavApiDocsItemTagsItemData) _then) = __$NavApiDocsItemTagsItemDataCopyWithImpl;
@override @useResult
$Res call({
@JsonKey(name: 'id') String id,@JsonKey(name: 'name') String name,@JsonKey(name: 'slug') String slug,@JsonKey(name: 'updatedAt') String updatedAt,@JsonKey(name: 'createdAt') String createdAt
});

}
/// @nodoc
class __$NavApiDocsItemTagsItemDataCopyWithImpl<$Res>
    implements _$NavApiDocsItemTagsItemDataCopyWith<$Res> {
  __$NavApiDocsItemTagsItemDataCopyWithImpl(this._self, this._then);

  final _NavApiDocsItemTagsItemData _self;
  final $Res Function(_NavApiDocsItemTagsItemData) _then;

/// Create a copy of NavApiDocsItemTagsItemData
/// with the given fields replaced by the non-null parameter values.
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? name = null,Object? slug = null,Object? updatedAt = null,Object? createdAt = null,}) {
  return _then(_NavApiDocsItemTagsItemData(
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
as String,slug: null == slug ? _self.slug : slug // ignore: cast_nullable_to_non_nullable
as String,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
as String,
  ));
}

}

/// @nodoc
mixin _$NavApiData {

@JsonKey(name: 'docs') List<NavApiDocsItemData> get docs;@JsonKey(name: 'hasNextPage') bool get hasNextPage;@JsonKey(name: 'hasPrevPage') bool get hasPrevPage;@JsonKey(name: 'limit') int get limit;@JsonKey(name: 'nextPage') dynamic get nextPage;@JsonKey(name: 'page') int get page;@JsonKey(name: 'pagingCounter') int get pagingCounter;@JsonKey(name: 'prevPage') dynamic get prevPage;@JsonKey(name: 'totalDocs') int get totalDocs;@JsonKey(name: 'totalPages') int get totalPages;
/// Create a copy of NavApiData
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
$NavApiDataCopyWith<NavApiData> get copyWith => _$NavApiDataCopyWithImpl<NavApiData>(this as NavApiData, _$identity);

  /// Serializes this NavApiData to a JSON map.
  Map<String, dynamic> toJson();

@override
bool operator ==(Object other) {
  return identical(this, other) || (other.runtimeType == runtimeType&&other is NavApiData&&const DeepCollectionEquality().equals(other.docs, docs)&&(identical(other.hasNextPage, hasNextPage) || other.hasNextPage == hasNextPage)&&(ident


;
    box-shadow: none;
    transition:
      box-shadow 0.5s ease,
      padding 0.5s ease
    ;
  }
  .main.menu .item img.logo {
    margin-right: 1.5em;
  }

  .overlay {
    float: left;
    margin: 0em 3em 1em 0em;
  }
  .overlay .menu {
    position: relative;
    left: 0;
    transition: left 0.5s ease;
  }

  .main.menu.fixed {
    background-color: #FFFFFF;
    border: 1px solid #DDD;
    box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.2);
  }
  .overlay.fixed .menu {
    left: 800px;
  }

  .text.container .left.floated.image {
    margin: 2em 2em 2em -4em;
  }
  .text.container .right.floated.image {
    margin: 2em -4em 2em 2em;
  }

  .ui.footer.segment {
    margin: 5em 0em 0em;
    padding: 5em 0em;
  }
  </style>

Sticky Example

This example shows how to use lazy loaded images, a sticky menu, and a simple text container

        Project Name

      Blog
      Articles

        Dropdown

Link Item

Link Item

Header Item

            Sub Menu

Link Item

Link Item

Link Item

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, t


 once a
   * classification model has been built with the buildClassifier call.
   * @param i The instance to classify.
   * @return A double array filled with the probabilities of each class type.
   * @throws Exception if can't classify instance.
   */
  public double[] distributionForInstance(Instance i) throws Exception {

    // default model?
    if (m_useDefaultModel) {
      return m_ZeroR.distributionForInstance(i);
    }

    if (m_useNomToBin) {
      m_nominalToBinaryFilter.input(i);
      m_currentInstance = m_nominalToBinaryFilter.output();
    }
    else {
      m_currentInstance = i;
    }

    if (m_normalizeAttributes) {
      for (int noa = 0; noa < m_instances.numAttributes(); noa++) {
	if (noa != m_instances.classIndex()) {
	  if (m_attributeRanges[noa] != 0) {
	    m_currentInstance.setValue(noa, (m_currentInstance.value(noa) -
					     m_attributeBases[noa]) /
				       m_attributeRanges[noa]);
	  }
	  else {
	    m_currentInstance.setValue(noa, m_currentInstance.value(noa) -
				       m_attributeBases[noa]);
	  }
	}
      }
    }
    resetNetwork();

    //since all the output values are needed.
    //They are calculated manually here and the values collected.
    double[] theArray = new double[m_numClasses];
    for (int noa = 0; noa < m_numClasses; noa++) {
      theArray[noa] = m_outputs[noa].outputValue(true);
    }
    if (m_instances.classAttribute().isNumeric()) {
      return theArray;
    }

    //now normalize the array
    double count = 0;
    for (int noa = 0; noa < m_numClasses; noa++) {
      count += theArray[noa];
    }
    if (count <= 0) {
      return m_ZeroR.distributionForInstance(i);
    }
    for (int noa = 0; noa < m_numClasses; noa++) {
      theArray[noa] /= count;
    }
    return theArray;
  }

  /**
   * Returns an enumeration describing the available options.
   *
   * @return an enumeration of all the available options.
   */
  public Enumeration listOptions() {

    Vector newVector = new Vector(14);

    newVector.addElement(new Option(
	      "\tLearning Rate for the backpropagation algorithm.\n"
	      +"\t(Value should be between 0 - 1, Default = 0.3).",
	      "L", 1, "-L <learning rate>"));
    newVector.addElement(new Option(
	      "\tMomentum Rate for the backpropagation algorithm.\n"
	      +"\t(Value should be between 0 - 1, Default = 0.2).",
	      "M", 1, "-M <momentum>"));
    newVector.addElement(new Option(
	      "\tNumber of epochs to train through.\n"
	      +"\t(Default = 500).",
	      "N", 1,"-N <number of epochs>"));
    newVector.addElement(new Option(
	      "\tPercentage size of validation set to use to terminate\n"
	      + "\ttraining (if this is non zero it can pre-empt num of epochs.\n"
	      +"\t(Value should be between 0 - 100, Default = 0).",
	      "V", 1, "-V <percentage size of validation set>"));
    newVector.addElement(new Option(
	      "\tThe value used to seed the random number generator\n"
	      + "\t(Value should be >= 0 and and a long, Default = 0).",
	      "S", 1, "-S <seed>"));
    newVector.addElement(new Option(
	      "\tThe consequetive number of errors allowed


oduct OA and AB. Determining the vectors.
    double oa_x = path.poses[idx].pose.position.x -
      path.poses[idx - 1].pose.position.x;
    double oa_y = path.poses[idx].pose.position.y -
      path.poses[idx - 1].pose.position.y;
    double ab_x = path.poses[idx + 1].pose.position.x -
      path.poses[idx].pose.position.x;
    double ab_y = path.poses[idx + 1].pose.position.y -
      path.poses[idx].pose.position.y;

    // Checking for the existence of cusp, in the path, using the dot product.
    double dot_product = (oa_x * ab_x) + (oa_y * ab_y);
    if (dot_product < 0.0) {
      curr_segment.end = idx;
      segments.push_back(curr_segment);
      curr_segment.start = idx;
    }

    // Checking for the existence of a differential rotation in place.
    double cur_theta = tf2::getYaw(path.poses[idx].pose.orientation);
    double next_theta = tf2::getYaw(path.poses[idx + 1].pose.orientation);
    double dtheta = angles::shortest_angular_distance(cur_theta, next_theta);
    if (fabs(ab_x) < 1e-4 && fabs(ab_y) < 1e-4 && fabs(dtheta) > 1e-4) {
      curr_segment.end = idx;
      segments.push_back(curr_segment);
      curr_segment.start = idx;
    }
  }

  curr_segment.end = path.poses.size() - 1;
  segments.push_back(curr_segment);
  return segments;
}

/**
 * @brief For a given path, update the path point orientations based on smoothing
 * @param path Path to approximate the path orientation in
 * @param reversing_segment Return if this is a reversing segment
 * @param is_holonomic Whether the motion model is holonomic (default is false)
 Only set as true when the input path is known to be generated from a holonomic planner like NavFn.
 */
inline void updateApproximatePathOrientations(
  nav_msgs::msg::Path & path,
  bool & reversing_segment,
  bool is_holonomic = false)
{
  double dx, dy, theta, pt_yaw;
  reversing_segment = false;

  // Find if this path segment is in reverse
  dx = path.poses[2].pose.position.x - path.poses[1].pose.position.x;
  dy = path.poses[2].pose.position.y - path.poses[1].pose.position.y;
  theta = atan2(dy, dx);
  pt_yaw = tf2::getYaw(path.poses[1].pose.orientation);
  if (!is_holonomic && fabs(angles::shortest_angular_distance(pt_yaw, theta)) > M_PI_2) {
    reversing_segment = true;
  }

  // Find the angle relative the path position vectors
  for (unsigned int i = 0; i != path.poses.size() - 1; i++) {
    dx = path.poses[i + 1].pose.position.x - path.poses[i].pose.position.x;
    dy = path.poses[i + 1].pose.position.y - path.poses[i].pose.position.y;
    theta = atan2(dy, dx);

    // If points are overlapping, pass
    if (fabs(dx) < 1e-4 && fabs(dy) < 1e-4) {
      continue;
    }

    // Flip the angle if this path segment is in reverse
    if (reversing_segment) {
      theta += M_PI;  // orientationAroundZAxis will normalize
    }

    path.poses[i].pose.orientation = nav2_util::geometry_utils::orientationAroundZAxis(theta);
  }
}

}  // namespace nav2_util

#endif  // NAV2_UTIL__SMOOTHER_UTILS_HPP_
//  Copyright 2020 Anshumaan Singh
//
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in


8A0424, "STRING");
            SendNativeCallToAllPlayers(0x6C188BE134E074AA, body);
            SendNativeCallToAllPlayers(0x1CCD9A37359072CF, pic, pic, flash, iconType, sender, subject);
            SendNativeCallToAllPlayers(0xF020C96915705B3A, false, true);
        }

        public void GetPlayerHealth(Client player, Action<object> callback, string salt = "salt")
        {
            GetNativeCallFromPlayer(player, salt,
                0xEEF059FAD016D209, new IntArgument(), callback, new LocalPlayerArgument());
        }

	    public void ToggleNightVisionForPlayer(Client player, bool status)
        {
            SendNativeCallToPlayer(player, 0x18F621F7A5B1F85D, status);
        }

        public void ToggleNightVisionForAll(Client player, bool status)
        {
            SendNativeCallToAllPlayers(0x18F621F7A5B1F85D, status);
        }

        public void IsNightVisionActive(Client player, Action<object> callback, string salt = "salt")
        {
            GetNativeCallFromPlayer(player, salt, 0x2202A3F42C8E5F79, new BooleanArgument(), callback, new LocalPlayerArgument());
        }
    }
}


omUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>
```
![此处输入图片的描述](https://dn-anything-about-doc.qbox.me/document-uid212008labid2270timestamp1478568973118.png/wm)

##### 2. 图片消息

我们接到原生的图片消息时这样的：

```
 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[image]]></MsgType>
 <PicUrl><![CDATA[this is a url]]></PicUrl>
 <MediaId><![CDATA[media_id]]></MediaId>
 <MsgId>1234567890123456</MsgId>
 </xml>
```
其中的参数代表的一样：

![此处输入图片的描述](https://dn-anything-about-doc.qbox.me/document-uid212008labid2270timestamp1478568185658.png/wm)

如果我们要回复公众号粉丝用户消息，我们应该写成这样：

```
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[media_id]]></MediaId>
</Image>
</xml>
```
![此处输入图片的描述](https://dn-anything-about-doc.qbox.me/document-uid212008labid2270timestamp1478569102530.png/wm)

##### 3. 图文消息

图文消息，可以说是我们在开发过程中最常用的东西

其中，我们要返回给用户图文消息，我们应该这样写：

```
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title><![CDATA[title1]]></Title>
<Description><![CDATA[description1]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
<item>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
</Articles>
</xml>
```

其中各项代表的含义分别为：

![此处输入图片的描述](https://dn-anything-about-doc.qbox.me/document-uid212008labid2270timestamp1478569192390.png/wm)

### 2.3 不用框架下的原生代码（节选）

原生的格式代码，有这么多，大家可以感受一下：

举刚开始的 Token 验证为


                       ; @GenValue
GenValue$local:
.Lfunc_begin2:
	.file	1 "./lane-pc-vega20-kernel.cl"
	.loc	1 36 0                          ; lane-pc-vega20-kernel.cl:36:0
	.cfi_startproc
; %bb.0:                                ; %entry
	.cfi_llvm_def_aspace_cfa 64, 0, 6
	.cfi_escape 0x10, 0x10, 0x08, 0x90, 0x3e, 0x93, 0x04, 0x90, 0x3f, 0x93, 0x04 ;
	.cfi_undefined 2560
	.cfi_undefined 2561
	.cfi_undefined 2562
	.cfi_undefined 2563
	.cfi_undefined 2564
	.cfi_undefined 2565
	.cfi_undefined 2566
	.cfi_undefined 2567
	.cfi_undefined 2568
	.cfi_undefined 2569
	.cfi_undefined 2570
	.cfi_undefined 2571
	.cfi_undefined 2572
	.cfi_undefined 2573
	.cfi_undefined 2574
	.cfi_undefined 2575
	.cfi_undefined 2576
	.cfi_undefined 2577
	.cfi_undefined 2578
	.cfi_undefined 2579
	.cfi_undefined 2580
	.cfi_undefined 2581
	.cfi_undefined 2582
	.cfi_undefined 2583
	.cfi_undefined 2584
	.cfi_undefined 2585
	.cfi_undefined 2586
	.cfi_undefined 2587
	.cfi_undefined 2588
	.cfi_undefined 2589
	.cfi_undefined 2590
	.cfi_undefined 2591
	.cfi_undefined 2592
	.cfi_undefined 2593
	.cfi_undefined 2594
	.cfi_undefined 2595
	.cfi_undefined 2596
	.cfi_undefined 2597
	.cfi_undefined 2598
	.cfi_undefined 2599
	.cfi_undefined 2608
	.cfi_undefined 2609
	.cfi_undefined 2610
	.cfi_undefined 2611
	.cfi_undefined 2612
	.cfi_undefined 2613
	.cfi_undefined 2614
	.cfi_undefined 2615
	.cfi_undefined 2624
	.cfi_undefined 2625
	.cfi_undefined 2626
	.cfi_undefined 2627
	.cfi_undefined 2628
	.cfi_undefined 2629
	.cfi_undefined 2630
	.cfi_undefined 2631
	.cfi_undefined 2640
	.cfi_undefined 2641
	.cfi_undefined 2642
	.cfi_undefined 2643
	.cfi_undefined 2644
	.cfi_undefined 2645
	.cfi_undefined 2646
	.cfi_undefined 2647
	.cfi_undefined 2656
	.cfi_undefined 2657
	.cfi_undefined 2658
	.cfi_undefined 2659
	.cfi_undefined 2660
	.cfi_undefined 2661
	.cfi_undefined 2662
	.cfi_undefined 2663
	.cfi_undefined 2672
	.cfi_undefined 2673
	.cfi_undefined 2674
	.cfi_undefined 2675
	.cfi_undefined 2676
	.cfi_undefined 2677
	.cfi_undefined 2678
	.cfi_undefined 2679
	.cfi_undefined 2688
	.cfi_undefined 2689
	.cfi_undefined 2690
	.cfi_undefined 2691
	.cfi_undefined 2692
	.cfi_undefined 2693
	.cfi_undefined 2694
	.cfi_undefined


tom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen=true]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border=true]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius=true]){border-top-left-radius:0;border-top-right-radius:0}[data-full-screen=true]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,.15);margin:.2rem .4rem;padding:.55rem !important;font-size:.8rem;cursor:pointer;opacity:.7;z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card[data-full-screen=false]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .card:hover>*>.bslib-full-screen-enter{display:none}@media(max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}.bslib-grid{display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bs


then oil.verbose:output(file)
		else return errmsg
	end
end

local argidx, errmsg = _M(...)
if not argidx or argidx <= select("#", ...) then
	if errmsg then io.stderr:write("ERROR: ", errmsg, "\n") end
	io.stderr:write([[
Usage:	nsd.lua [options]
Options:
	--verb <level>
	--log <file>
	--ior <file>
	--port <number>
	--ir <objref>

]])
	os.exit(1)
end

oil.main(function()
	oil.verbose:level(verb)
	local orb = (port > 0) and oil.init{port=port} or oil.init()
	if ir ~= ""
		then orb:setIR(orb:narrow(orb:newproxy(ir)))
		else orb:loadidlfile("CosNaming.idl")
	end
	ns = orb:newservant(naming.new())
	if ior ~= "" then oil.writeto(ior, orb:tostring(ns)) end
	orb:run()
end)


if (css_urls == null) css_urls = [];
    if (js_urls == null) js_urls = [];

    root._bokeh_onload_callbacks.push(callback);
    if (root._bokeh_is_loading > 0) {
      console.debug("Bokeh: BokehJS is being loaded, scheduling callback at", now());
      return null;
    }
    if (js_urls == null || js_urls.length === 0) {
      run_callbacks();
      return null;
    }
    console.debug("Bokeh: BokehJS not loaded, scheduling load and callback at", now());
    root._bokeh_is_loading = css_urls.length + js_urls.length;

    function on_load() {
      root._bokeh_is_loading--;
      if (root._bokeh_is_loading === 0) {
        console.debug("Bokeh: all BokehJS libraries/stylesheets loaded");
        run_callbacks()
      }
    }

    function on_error(url) {
      console.error("failed to load " + url);
    }

    for (let i = 0; i < css_urls.length; i++) {
      const url = css_urls[i];
      const element = document.createElement("link");
      element.onload = on_load;
      element.onerror = on_error.bind(null, url);
      element.rel = "stylesheet";
      element.type = "text/css";
      element.href = url;
      console.debug("Bokeh: injecting link tag for BokehJS stylesheet: ", url);
      document.body.appendChild(element);
    }

    for (let i = 0; i < js_urls.length; i++) {
      const url = js_urls[i];
      const element = document.createElement('script');
      element.onload = on_load;
      element.onerror = on_error.bind(null, url);
      element.async = false;
      element.src = url;
      console.debug("Bokeh: injecting script tag for BokehJS library: ", url);
      document.head.appendChild(element);
    }
  };

  function inject_raw_css(css) {
    const element = document.createElement("style");
    element.appendChild(document.createTextNode(css));
    document.body.appendChild(element);
  }

  const js_urls = ["https://cdn.holoviz.org/panel/1.3.6/dist/bundled/jquery/jquery.slim.min.js", "https://cdn.holoviz.org/panel/1.3.6/dist/bundled/plotlyplot/plotly-2.18.0.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-3.3.2.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.2.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.2.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.2.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.3.2.min.js", "https://unpkg.com/@holoviz/panel@1.3.6/dist/panel.min.js"];
  const css_urls = [];

  const inline_js = [    function(Bokeh) {
      Bokeh.set_log_level("info");
    },
function(Bokeh) {
    }
  ];

  function run_inline_js() {
    if (root.Bokeh !== undefined || force === true) {
          for (let i = 0; i < inline_js.length; i++) {
      inline_js[i].call(root, roo


using System.Collections.Generic;
using System.Diagnostics;

namespace Microsoft.Msagl.Core.Geometry
{
    /// <summary>
    /// implementation of the "MoveToFront" method for computing the minimum enclosing disc of a collection of points.
    /// Runs in time linear in the number of points.  After Welzl'1991.
    /// </summary>
    public class MoveToFront {
        LinkedList<int> L;
        Point[] ps;
        /// <summary>
        /// minimum enclosing disc
        /// </summary>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
        public Disc disc;
        /// <summary>
        /// list of 2 or 3 points lying on the boundary
        /// </summary>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1002:DoNotExposeGenericLists")]
        public List<int> boundary;
        /// <summary>
        /// Constructs the minimum enclosing disc for the specified points
        /// </summary>
        /// <param name="ps"></param>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "ps")]
        public MoveToFront(Point[] ps)
        {
            ValidateArg.IsNotNull(ps, "ps");
            this.ps = ps;
            L = new LinkedList<int>();
            for (int i = 0; i < ps.Length; ++i)
            {
                L.AddLast(i);
            }
            MinDisc md = mtf_md(null, new List<int>());
            disc = md.disc;
            boundary = md.boundary;
        }
        class MinDisc
        {
            public Disc disc;
            public List<int> boundary;
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1805:DoNotInitializeUnnecessarily")]
            public MinDisc(Point[] ps, List<int> b)
            {
                this.boundary = b;
                Debug.Assert(b.Count <= 3);
                switch(b.Count) {
                    case 0:
                        disc = null;
                        break;
                    case 1:
                        disc = new Disc(ps[b[0]]);
                        break;
                    case 2:
                        disc = new Disc(ps[b[0]], ps[b[1]]);
                        break;
                    case 3:
                        disc = new Disc(ps[b[0]], ps[b[1]], ps[b[2]]);
                        break;
                }
            }
            public bool contains(Point p)
            {
                if (disc == null)
                {
                    return false;
                }
                return disc.Contains(p);
            }
        }
#if DEBUG
         bool collinear3(List<int> b)
        {
            if (b.Count == 3)
            {
                return Disc.Collinear(ps[b[0]], ps[b[1]], ps[b[2]]);
            }
            return false;
        }
#endif
         MinDisc mtf_md(LinkedListNode<int> lPtr, List<int> b)
        {
            Debug.Assert(b.Count <= 3);
            MinDisc md = new MinDisc(ps,b);
            if (b.Count == 3)


	public string URL
	{
		get => Methods.ulViewGetURL(this);
		set => Methods.ulViewLoadURL(this, value);
	}
	public string HTML { set => Methods.ulViewLoadHTML(this, value); }
	public string Title { get => Methods.ulViewGetTitle(this); }

	public uint Width => Methods.ulViewGetWidth(this);
	public uint Height => Methods.ulViewGetHeight(this);
	public double DeviceScale { get => Methods.ulViewGetDeviceScale(this); set => Methods.ulViewSetDeviceScale(this, value); }

	public bool IsAccelerated => Methods.ulViewIsAccelerated(this);
	public bool IsTransparent => Methods.ulViewIsTransparent(this);

	public bool IsLoading => Methods.ulViewIsLoading(this);

	/// <summary>
	/// Provides info used to display texture in your application
	/// </summary>
	/// <remarks>Only valid when <see cref="ULGPUDriver"/> is used</remarks>
	public RenderTarget RenderTarget
	{
		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		get => Methods.ulViewGetRenderTarget(this);
	}

	public ULSurface? Surface
	{
		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		get
		{
			nuint surfaceHandle = Methods.ulViewGetSurface(this);
			if (surfaceHandle is 0) return null;
			return ULSurface.FromHandle(surfaceHandle);
		}
	}

	public void Resize(in uint width, in uint height) => Methods.ulViewResize(this, width, height);

	/*public ref readonly JSContext LockJSContext()
	{
		void* contextHandle = Methods.ulViewLockJSContext(this);
		Context.OnLocked(contextHandle);
		lockedContext = Context;
		return ref lockedContext!;
	}
	public void UnlockJSContext()
	{
		lockedContext = null;
		Methods.ulViewUnlockJSContext(this);
	}*/

	public string EvaluateScript(string js_string, out string exception) => Methods.ulViewEvaluateScript(this, js_string, out exception);

	public bool CanGoBack => Methods.ulViewCanGoBack(this);
	public bool CanGoForward => Methods.ulViewCanGoForward(this);

	public void GoBack() => Methods.ulViewGoBack(this);
	public void GoForward() => Methods.ulViewGoForward(this);
	public void GoToHistoryOffset(in int offset) => Methods.ulViewGoToHistoryOffset(this, offset);

	public void Reload() => Methods.ulViewReload(this);
	public void Stop() => Methods.ulViewStop(this);

	public void Focus() => Methods.ulViewFocus(this);
	public void Unfocus() => Methods.ulViewUnfocus(this);
	public bool HasFocus => Methods.ulViewHasFocus(this);
	public bool HasInputFocus => Methods.ulViewHasInputFocus(this);

	public void FireKeyEvent(ULKeyEvent keyEvent) => Methods.ulViewFireKeyEvent(this, keyEvent);
	public void FireMouseEvent(ULMouseEvent mouseEvent) => Methods.ulViewFireMouseEvent(this, &mouseEvent);
	public void FireScrollEvent(ULScrollEvent scrollEvent) => Methods.ulViewFireScrollEvent(this, &scrollEvent);

	public bool NeedsPaint { get => Methods.ulViewGetNeedsPaint(this); set => Methods.ulViewSetNeedsPaint(this, value); }

	public View? CreateLocalInspectorView()
	{
		var handle = Methods.ulViewCreateLocalInspectorView(this);
		Debug.Assert(handle is not null);
		var view = FromHandle(handle, false);
		view.Renderer = Renderer;
		return view;
	}

	public event Action<string>? OnChangeTitle;
	public event Action<string>? OnChangeURL;
	public event Action<string>? OnChangeTooltip;
	public event Action<ULCursor>? OnChangeCursor;
	public event AddConsoleMessageCallback? OnAddConsoleMessage;
	public CreateChildViewCallback? OnCreateChildView;
	public


andriah**                      | [DIbella's Blessing](https://www.nexusmods.com/skyrimspecialedition/mods/82606)
 **Wyndelius Gatharian**             | [Modpocalypse NPCs - All Vanilla NPCs](https://www.nexusmods.com/skyrimspecialedition/mods/54422)
 **Chief Yamarz**                    | [Children of the Pariah - An Orc NPC Overhaul](https://www.nexusmods.com/skyrimspecialedition/mods/97981)
 **Yatul**                           | [Children of the Pariah - An Orc NPC Overhaul](https://www.nexusmods.com/skyrimspecialedition/mods/97981)
 **Yngvar the Singer**               | [NITHI NPC ENHANCEMENT - The Reach](https://www.nexusmods.com/skyrimspecialedition/mods/86150)
 **Ysolda**                          | [Charming women - a NPC replacer](https://www.nexusmods.com/skyrimspecialedition/mods/113364)
 **Zaria**                           | [Pandorable's NPCs](https://www.nexusmods.com/skyrimspecialedition/mods/19012)
 **Zaynabi**                         | [Project ja-Kha'jay- Khajiit NPC Diversity Overhaul](https://www.nexusmods.com/skyrimspecialedition/mods/57610)

# Manual mesh creation {#manual-mesh-creation}

There are two ways to create your own mesh. The first way is to create a Ogre::Mesh instance and provide it with the vertex and index buffers directly.

The second way is the high level Ogre::ManualObject interface. Instead of filling position and color buffers, you simply call the "position" and "colour" functions.

# Using Manual Object

@copydetails Ogre::ManualObject

## Example

We will use the ManualObject to create a single textured plane.
After creating the object, we start a new geometry block that will use the given material

@snippet Tests/VisualTests/PlayPen/src/PlayPenTests.cpp manual_plane_begin

Next we specify the vertices of the plane

@snippet Tests/VisualTests/PlayPen/src/PlayPenTests.cpp manual_plane_vertices

Now we can define the face. %Ogre will split the quad into triangles for us.

@snippet Tests/VisualTests/PlayPen/src/PlayPenTests.cpp manual_plane_faces

Calling @c end() creates the actual Hardware Buffers to be used for rendering and we can attach the Object to a Ogre::SceneNode.

@snippet Tests/VisualTests/PlayPen/src/PlayPenTests.cpp manual_plane_end

In case you need multiple Ogre::Entities of the plane, you should call Ogre::ManualObject::convertToMesh first and then use Ogre::SceneManager::createEntity as usual.

# Using vertex and index buffers directly

This time we are going to create a plane using the lower level Ogre::HardwareBuffer primitives.

We start by creating a Mesh object. As this is a manual Mesh, we have to set the bounds of it explicitly.
```cpp
using namespace Ogre;

        MeshPtr mesh = MeshManager::getSingleton().createManual(yourMeshName, RGN_DEFAULT);
        mesh->_setBounds(AxisAlignedBox({-100,-100,0}, {100,100,0});
```

Next we define what should end up in our vertex and index buffer. We will store all data interleaved in one buffer. This typically has some advantages due to cache coherency and also is what ManualObject does automatically for us.

@snippet OgreMain/src/OgrePrefabFactory.cpp manual_plane_geometry

However we could also split the data into multiple buffers with lower precision to save some bytes on texture coordinates and normals.

To describe the vertex sources, we have to create a Ogre::VertexData object. Notably it stores how many vertices we have.

@snippet OgreMain/src/


);
    ENC_RUN_FUNC2(rc_check_reenc, enc->rc_ctx, rc_task, mpp, ret);

TASK_DONE:
    return ret;
}

static void mpp_enc_clr_rc_cb_info(EncRcTask *rc_task)
{
    EncRcTaskInfo *hal_rc = (EncRcTaskInfo *) &rc_task->info;
    EncRcTaskInfo bak = rc_task->info;

    memset(hal_rc, 0, sizeof(rc_task->info));

    hal_rc->frame_type = bak.frame_type;
    hal_rc->bit_target = bak.bit_target;
    hal_rc->bit_max = bak.bit_max;
    hal_rc->bit_min = bak.bit_min;
    hal_rc->quality_target = bak.quality_target;
    hal_rc->quality_max = bak.quality_max;
    hal_rc->quality_min = bak.quality_min;
}

static MPP_RET mpp_enc_reenc_simple(Mpp *mpp, EncAsyncTaskInfo *task)
{
    MppEncImpl *enc = (MppEncImpl *)mpp->mEnc;
    MppEncHal hal = enc->enc_hal;
    EncRcTask *rc_task = &task->rc;
    EncFrmStatus *frm = &rc_task->frm;
    HalEncTask *hal_task = &task->task;
    MPP_RET ret = MPP_OK;

    enc_dbg_func("enter\n");

    mpp_enc_clr_rc_cb_info(rc_task);

    enc_dbg_detail("task %d enc proc hal\n", frm->seq_idx);
    ENC_RUN_FUNC2(enc_impl_proc_hal, enc->impl, hal_task, mpp, ret);

    enc_dbg_detail("task %d hal get task\n", frm->seq_idx);
    ENC_RUN_FUNC2(mpp_enc_hal_get_task, hal, hal_task, mpp, ret);

    enc_dbg_detail("task %d rc hal start\n", frm->seq_idx);
    ENC_RUN_FUNC2(rc_hal_start, enc->rc_ctx, rc_task, mpp, ret);

    enc_dbg_detail("task %d hal generate reg\n", frm->seq_idx);
    ENC_RUN_FUNC2(mpp_enc_hal_gen_regs, hal, hal_task, mpp, ret);

    enc_dbg_detail("task %d hal start\n", frm->seq_idx);
    ENC_RUN_FUNC2(mpp_enc_hal_start, hal, hal_task, mpp, ret);

    enc_dbg_detail("task %d hal wait\n", frm->seq_idx);
    ENC_RUN_FUNC2(mpp_enc_hal_wait,  hal, hal_task, mpp, ret);

    enc_dbg_detail("task %d rc hal end\n", frm->seq_idx);
    ENC_RUN_FUNC2(rc_hal_end, enc->rc_ctx, rc_task, mpp, ret);

    enc_dbg_detail("task %d hal ret task\n", frm->seq_idx);
    ENC_RUN_FUNC2(mpp_enc_hal_ret_task, hal, hal_task, mpp, ret);

    enc_dbg_detail("task %d rc frame check reenc\n", frm->seq_idx);
    ENC_RUN_FUNC2(rc_check_reenc, enc->rc_ctx, rc_task, mpp, ret);

    enc_dbg_detail("task %d reenc %d times %d\n", frm->seq_idx, frm->reencode, frm->reencode_times);
    enc_dbg_func("leave\n");

TASK_DONE:
    return ret;
}

static MPP_RET mpp_enc_reenc_drop(Mpp *mpp, EncAsyncTaskInfo *task)
{
    Mpp


        for (int x2 = -xR; x2 <= xR; ++x2) {
            for (int y2 = -yR; y2 <= yR; ++y2) {
                for (int z2 = -zR; z2 <= zR; ++z2) {
                    long cubeLong = CubePos.asLong(x + x2, y + y2, z + z2);
                    if (cubeLong == pos) {
                        cubeLong = Long.MAX_VALUE;
                    }

                    if (cubeLong != excludedSourcePos) {
                        int k1 = this.computeLevelFromNeighbor(cubeLong, pos, this.getLevel(cubeLong));
                        if (i > k1) {
                            i = k1;
                        }

                        if (i == 0) {
                            return i;
                        }
                    }
                }
            }
        }

        return i;
    }

    /**
     * Returns level propagated from start position with specified level to the neighboring end position.
     */
    @Override protected int computeLevelFromNeighbor(long startPos, long endPos, int startLevel) {
        return startPos == Long.MAX_VALUE ? this.getLevelFromSource(endPos) : startLevel + 1;
    }

    protected abstract int getLevelFromSource(long pos);

    public void update(long pos, int level, boolean isDecreasing) {
        this.checkEdge(Long.MAX_VALUE, pos, level, isDecreasing);
    }

}package io.github.opencubicchunks.cubicchunks.server.level;

import java.util.Set;
import java.util.concurrent.Executor;

import javax.annotation.Nullable;

import io.github.opencubicchunks.cc_core.api.CubePos;
import io.github.opencubicchunks.cubicchunks.world.level.chunk.CubeStatus;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.longs.LongSet;
import it.unimi.dsi.fastutil.objects.ObjectSet;
import net.minecraft.core.SectionPos;
import net.minecraft.server.level.ChunkHolder;
import net.minecraft.server.level.ChunkMap;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.level.Ticket;
import net.minecraft.server.level.TicketType;
import net.minecraft.util.SortedArraySet;
import net.minecraft.util.thread.ProcessorHandle;
import net.minecraft.world.level.chunk.ChunkStatus;

/**
 * A majority of this class is generated with DASM
 */
public interface CubicDistanceManager {
    int PLAYER_CUBE_TICKET_LEVEL = 33 + CubeStatus.getDistance(ChunkStatus.FULL) - 2;

    // implemented by ASM unless specified otherwise
    void purgeStaleCubeTickets();

    // isChunkToRemove
    boolean isCubeToRemove(long sectionPos);

    @Nullable
    ChunkHolder getCube(long cubePos);

    @Nullable
    ChunkHolder updateCubeScheduling(long cubePosIn, int newLevel, @Nullable ChunkHolder holder, int oldLevel);

    boolean runAllUpdatesCubic(ChunkMap chunkManager);

    void addCubeTicket(long chunkPosIn, Ticket<?> ticketIn);

    void removeCubeTicket(long chunkPosIn, Ticket<?> ticketIn);

    <T> void addCubeTicket(TicketType<T> type, CubePos pos, int level, T value);

    <T> void removeCubeTicket(TicketType<T> type, CubePos pos, int level, T value);

    <T> void addCubeRegionTicket(TicketType<T> type, CubePos pos, int distance, T value);

    <T> void removeCubeRegionTicket(TicketType<T> type, CubePos pos, int distance, T value);

    SortedArraySet<Ticket<?>> getCubeTickets


def django_tests(subject, msg, from_email, to_email):
  from django.core.mail import send_mail, send_mass_mail

  send_mail(subject, msg, from_email, [to_email]) # Noncompliant {{Make sure that this email is sent in a safe manner.}}
# ^^^^^^^^^
  send_mass_mail((subject, msg, from_email, [to_email])) # Noncompliant

def smtplib_tests(from_email, to_email, msg):
    import smtplib
    server1 = smtplib.SMTP('localhost', 1025)
    server1.sendmail(from_email, to_email, msg) # Noncompliant
    server1.send_message(msg, from_email, to_email) # Noncompliant

    server2 = smtplib.SMTP_SSL('localhost', 1025)
    server2.sendmail(from_email, to_email, msg) # Noncompliant
    server2.send_message(msg, from_email, to_email) # Noncompliant

    class A:
        def sendmail(self): pass
        def send_message(self): pass

    a = A()
    a.sendmail(from_email, to_email, msg) # OK
    a.send_message(msg, from_email, to_email) # OK

def flask_mail_tests(app, msg, subject, to_email, body, from_email):
    from flask_mail import Mail, Connection
    mail = Mail(app)
    mail.send(msg) # Noncompliant
    mail.send_message(subject, [to_email], body, sender=from_email) # Noncompliant

    connection = Connection(mail)
    connection.send(msg) # Noncompliant
    connection.send_message(subject, [to_email], body, sender=from_email) # Noncompliant


            .spawn_with_alpn(vec![b"my.alpn".to_vec()])
            .expect("sender must not be lost");

        let init_sc = server.config();
        assert!(!Arc::ptr_eq(&init_config, &init_sc));
        assert_eq!(init_sc.alpn_protocols, [b"my.alpn"]);

        let update_config = Arc::new(empty_server_config());
        assert!(!Arc::ptr_eq(&update_config, &init_config));
        server_tx
            .send(update_config.clone())
            .ok()
            .expect("receiver is held");

        // Give the update task a chance to run.
        tokio::task::yield_now().await;

        let update_sc = server.config();
        assert!(!Arc::ptr_eq(&update_config, &update_sc));
        assert!(!Arc::ptr_eq(&init_sc, &update_sc));
        assert_eq!(update_sc.alpn_protocols, [b"my.alpn"]);
    }
}
// TODO:
// - Add fragment support
// - Make object expectations fail non-object inputs
extern crate serde;
extern crate serde_json;
extern crate graphql_parser;
extern crate gqlog;

use std::{ env, io };
use serde_json::de::{ IoRead };

use gqlog::filter_stream;

fn main() {
    // Get query from input arguments
    let _args: Vec<String> = env::args().collect();
    let default_query = String::from("{}");
    let query = _args.get(1).unwrap_or(&default_query);

    let reader = IoRead::new(io::stdin());
    filter_stream::<IoRead<io::Stdin>>(query.to_string(), reader, |value| {
        println!("{}", value.to_string());
    });
}
<filename>trie-db/src/proof/mod.rs
// Copyright 2019, 2020 AXIA Technologies
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//! Generation and verification of compact proofs for Merkle-Patricia tries.
//!
//! Using this module, it is possible to generate a logarithmic-space proof of inclusion or
//! non-inclusion of certain key-value pairs in a trie with a known root. The proof contains
//! information so that the verifier can reconstruct the subset of nodes in the trie required to
//! lookup the keys. The trie nodes are not included in their entirety as data which the verifier
//! can compute for themself is omitted. In particular, the values of included keys and and hashes
//! of other trie nodes in the proof are omitted.
//!
//! The proof is a sequence of the subset of nodes in the trie traversed while performing lookups
//! on all keys. The trie nodes are listed in pre-order traversal order with some values and
//! internal hashes omitted. In particular, values on leaf nodes, child references on extension
//! nodes, values on branch nodes corresponding to a key in the statement, and child references on
//! branch nodes corresponding to another node in the proof are all omitted. The proof is verified
//! by iteratively reconstructing the trie nodes using the values proving as part of the statement
//! and the hashes of other reconstructed nodes. Since the nodes in t


_dcCallbackThunkEntry:

	/* Prolog. This function never needs to spill inside its prolog, so just store the permanent registers. */
	stmdb	r13, {r4-r11, r13, r14}	/* Permanent registers and stack pointer, etc... -> save area on stack (except counter). */
	mov		r11, r13						/* Set frame pointer. */
	sub		r13, r13, #40					/* Adjust stack pointer. */

	/* Grab arguments. */
	mov		r4, #0
	stmdb	r13!, {r0-r4, r11}			/* Spill first 4 args to DCArgs, along with reg_count and (stack) pointer to remaining args. */

	/* Prepare callback handler call. */
	mov		r0, r12						/* Parameter 0 (r0) = DCCallback pointer (r12, pointer to thunk). */
	mov		r1, r13						/* Parameter 1 (r1) = DCArgs pointer (r13, stack pointer). */
	sub		r13, r13, #DCValue_size		/* Make room for return value. */
	mov		r2, r13						/* Parameter 2 (r2) = results pointer. */
	ldr		r3, [r12, #CTX_userdata]		/* Parameter 3 (r3) = userdata pointer. */

	/* Call. */
	ldr		r4, [r12, #CTX_handler]		/* Load callback handler pointer into r4. */
	mov		r14, r15						/* Branch return address(r15) -> link register (r14) -- r15 always points to address of current + 2 instructions (= Epilog code). */
	bx		r4								/* Call. */

	/* Return value. */
	ldmia	r13, {r0, r1}				/* Load return value in r0 and r1. */

	/* Epilog. */
	ldmdb	r11, {r4-r11, r13, r15}	/* Restore permanent registers (restore stack ptr and program counter).@@@db not needed since we rewrite r13? */


, .mini-calendar-clearButton,
.mini-calendar-okButton, .mini-calendar-cancelButton
{
    line-height:14px;
    padding:5px;
    padding-left:0px;
    padding-right:0px;
}
.mini-calendar-menu-year
{
    padding:2px 1px;
}

/* progressbar
==========================================*/
.mini-progressbar
{
    height:26px;
}
.mini-progressbar-border
{
    height:24px;
}
.mini-progressbar-text
{
    line-height:24px;
    font-size:13px;
}

/* base
==========================================*/
.app-header
{
    background:url(images/header.gif) repeat-x 0 -1px;
}
.app-toolbar,
.bg-toolbar
{
    background:#f0f0f0 url(images/toolbar/toolbar.gif) repeat-x 0 0;
}
.mini-modal
{
    background:#fff;
    opacity: .6;
    filter: alpha(opacity=60);
}
.mini-mask-background
{
    background:#fff;
    opacity: 0;
    filter: alpha(opacity=0);
}
.mini-popup,
.mini-window,
.mini-menu-open
{
    /*box-shadow:rgba(0, 0, 0, 0.6) 0px 6px 12px 0px;*/
    box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
}

/* tools
==========================================*/
.mini-tools .mini-tools-collapse
{
    background:url(images/tools/collapse.gif) no-repeat 50% 50%;
    width:15px;
    _background-position:50% 0px;
}
.mini-tools .mini-tools-expand
{
    background:url(images/tools/expand.gif) no-repeat 50% 50%;
    width:15px;
    _background-position:50% 0px;
}
.mini-tools-close
{
    background:url(images/tools/close.gif) no-repeat 50% 0px;
    width:15px;
    _background-position:50% 0px;
}
.mini-tools-max
{
    background:url(images/tools/max.gif) no-repeat 50% 50%;
    _background-position:50% 0px;
}
.mini-tools-restore
{
    background:url(images/tools/restore.gif) no-repeat 50% 50%;
    _background-position:50% 0px;
}
.mini-panel-collapse .mini-tools-collapse
{
    background:url(images/tools/expand.gif) no-repeat 50% 50%;
    _background-position:50% 0px;
}
.mini-outlookbar .mini-tools-collapse,
.mini-outlookbar .mini-outlookbar-expand .mini-tools-collapse
{
    background:url(images/navbar/expand.gif) no-repeat 50% 50%;
    _background-position:50% 0px;
}
.mini-outlookbar .mini-outlookbar-collapse .mini-tools-collapse
{
    background:url(images/navbar/collapse.gif) no-repeat 50% 50%;
    _background-position:50% 0px;
}
.mini-layout-region-west .mini-layout-region-header .mini-tools-collapse
{
    background:url(images/layout/west.gif) no-repeat 50% 50%;
    _background-position:50% 0px;
}
.mini-layout-region-east .mini-layout-region-header .mini-tools-collapse
{
    background:url(images/layout/east.gif) no-repeat 50% 50%;
    _background-position:50% 0px;
}
.mini-layout-region-north .mini-layout-region-header .mini-tools-collapse
{
    background:url(images/layout/north.gif) no-repeat 50% 50%;
    _background


>

Film[edit]

In A Serious Man (2009), written by the Coen Brothers, protagonist Larry Gopnik mentions Schrödinger's Cat in a discussion about the unpredictability of future events.

In Repo Men (2010), Jude Law's character mentions the Schrödinger's cat example in the beginning of the movie.

In 6 Films to Keep You Awake: The Baby's Room (2006), a Spanish made-for-TV movie, a journalist, Domingo, describes Schrödinger's Cat to the protagonist, Juan, in order to explain the existence of parallel worlds.

In The Prestige (2006), Nikola Tesla uses a cat to demonstrate a machine he makes for The Great Danton.

In Prince of Darkness (1987), Walter and Catherine have a discussion about Schrödinger's Cat, with Catherine understanding and Walter not.

In the made for television movie Mean Girls 2 one of the characters wears a shirt written "Save the Schrödinger's Cat".

In the short film "Dead and Alive" (2013) by Desert Eagle Pictures, the situation of the main character Cynthia runs parallel in many ways to that of the Schrödinger's Cat thought experiment. The distinction is most evident in the classroom scene, where a high school physics teacher gives a lecture on the aforementioned feline.[7]]

Video games[edit]

In Digital Devil Saga, a game produced by Atlus, there is an enigmatic cat-like creature revealed to have some connection to God, whom the main character can see throughout the games. His name is 'Schrödinger'.

In Wild Arms 3, the character of Shady the Cat, owned by a Maya Schrödinger, is based on Schrödinger's cat,


#ifndef DANMUVIEW_H
#define DANMUVIEW_H
#include "UI/framelessdialog.h"
#include "Play/Danmu/common.h"
#include "UI/widgets/klineedit.h"
class QTreeView;
class QActionGroup;
class QLabel;
class DanmuFilterBox : public KLineEdit
{
    Q_OBJECT
public:
    enum FilterType
    {
        CONTENT = 0,
        USER,
        TYPE,
        TIME
    };
    explicit DanmuFilterBox(QWidget *parent = nullptr);
    void setFilter(FilterType type, const QString &filterStr);

signals:
    void filterChanged(int type,const QString &filterStr);
private:
    QActionGroup *filterTypeGroup;
};
class DanmuView : public CFramelessDialog
{
    Q_OBJECT
public:
    explicit DanmuView(const QVector<DanmuComment *> *danmuList, QWidget *parent = nullptr,
                       int sourceId=-1);
    explicit DanmuView(const QVector<QSharedPointer<DanmuComment> > *danmuList, QWidget *parent = nullptr,
                       int sourceId=-1);

private:
    QTreeView *danmuView;
    DanmuFilterBox *filterEdit;
    QLabel *tipLabel;
    void initView();
};

#endif // DANMUVIEW_H


ck-rst-%ED%8F%AD%EC%A3%BC">ACK-RST 폭주

ACK-RST 폭주는 피해자에게 많은 ACK 및 RST 패킷을 전송하여 전송 제어 프로토콜(TCP)을 악용합니다. 이로 인해 피해자가 이 패킷을 처리하고 응답하는 능력이 과부하되어 서비스 중단으로 이어집니다. 이 공격은 각 ACK 또는 RST 패킷이 피해자의 시스템에서 응답을 유도하여 리소스를 소모하기 때문에 효과적입니다. ACK-RST 폭주는 합법적인 트래픽을 모방하므로 필터링이 어려운 경우가 많아 감지 및 방어가 어렵습니다.

CLDAP 폭주

연결 없는 경량 디렉터리 액세스 프로토콜(CLDAP)는 경량 디렉터리 액세스 프로토콜(LDAP)의 변형입니다. CLDAP는 IP 네트워크에서 실행되는 디렉터리 서비스를 쿼리하고 수정하는 데 사용됩니다. CLDAP는 연결이 필요 없고 TCP 대신 UDP를 사용하므로 더 빠르지만, 안정성이 떨어집니다. UDP를 사용하므로 공격자가 IP 주소를 스푸핑할 수 있는 핸드셰이크가 필요하지 않으므로 공격자가 이를 반사 벡터로 악용할 수 있습니다. 이러한 공격에서는 스푸핑된 소스 IP 주소(피해자의 IP)로 작은 쿼리를 전송하여 서버가 피해자에게 대량의 응답을 전송하여 서버를 과부하시키도록 합니다. 완화 조치에는 비정상적인 CLDAP 트래픽을 필터링하고 모니터링하는 것이 포함됩니다.

SPSS 폭주

Source Port Service Sweep(SPSS) 프로토콜을 악용하는 폭주는 무작위 또는 스푸핑된 많은 원본 포트에서 표적 시스템 또는 네트워크의 다양한 대상 포트로 패킷을 전송하는 네트워크 공격 방법입니다. 이 공격의 목적은 두 가지입니다. 첫째, 피해자의 처리 능력


CLOSE,
        Constants.LEAD_RELATIONSHIP_REALLY_CLOSE
      ])
      .description('Get info from api /types, key=Relationship'),
    Source: Joi.number()
      .label('Nguồn')
      .valid([
        Constants.LEAD_SOURCE_PERSONAL,
        Constants.LEAD_SOURCE_EVENT,
        Constants.LEAD_SOURCE_INTRODUCTION,
        Constants.LEAD_SOURCE_OTHER
      ])
      .required()
      .description('Get info from api /types, key=Source'),
    LeadType: Joi.number()
      .required()
      .valid([Constants.LEAD_TYPE_CUSTOMER, Constants.LEAD_TYPE_EMPLOYEE])
      .description('Get info from api /types, key=LeadType'),
    Description: Joi.string()
      .allow('')
      .label('Mô tả')
      .max(500),
    BirthDay: Joi.date().allow(Joi.any())
  })
};
import { Component } from "./Component"
import { Audio } from "./Audio"

export class Volume extends Component {
  private volume: number
  constructor(private audio: Audio) {
    super()
    this.audio = audio
    this.volume = 40
    this.addClass("volume-container")
    this.render()
    const volumeSlider = this.element.querySelector("#volume-slider")
    if (volumeSlider) {
      volumeSlider.setAttribute("value", this.volume.toString())
      volumeSlider.addEventListener("input", this.onVolumeChange.bind(this))
    }
  }

  onVolumeChange(e: any) {
    this.volume = e.target.value
    this.audio.setVolume(this.volume)
    this.setMessageText()
  }

  setMessageText() {
    const volumeMessage = this.element.querySelector(".volume-message")
    if (volumeMessage) {
      volumeMessage.textContent = `${this.volume}%`
    }
  }

  render() {
    this.element.innerHTML = `

${this.volume}%

      <input value="0" min="0" max="100" step="1" id="volume-slider" type="range" />
    `
  }
}
import { getNumbersFromFile } from '../utils'

const jolts = getNumbersFromFile(`${__dirname}/input.txt`)
jolts.sort((a, b) => a - b)

interface Chain {
  [key: number]: number
}

const chain: Chain = {}

chain[0] = 1

for (let i = 0; i < jolts.length; i++) {
  for (let j = i + 1; jolts[j] < jolts[i] + 4; j++) {
    chain[j] = chain[j] || 0
    chain[j] += chain[i]
  }
}

const lastKey = Object.keys(chain).pop()

console.log(chain[lastKey] * 2)
import * as es from 'estree'

import { ErrorSeverity, ErrorType, Rule, SourceError } from '../types'

export class BracesAroundForError implements SourceError {
  public type = ErrorType.SYNTAX
  public severity = ErrorSeverity.ERROR

  constructor(public node: es.ForStatement) {}

  get location() {
    return this.node.loc!
  }

  public explain() {
    return 'Missing curly braces around "for" block'
  }

  public elaborate() {
    return 'TODO'
  }
}

const bracesAroundFor: Rule<es.ForStatement> = {
  name: 'braces-around-for',

  checkers: {
    ForStatement(node: es.ForStatement, ancestors: [es.Node]) {
      if (node.body.type !== 'BlockStatement') {
        return [new BracesAroundForError(node)]
      } else {
        return []
      }
    }
  }
}

export default bracesAroundFor

    const createTodo = async (todo: any) => {
        if (todo.user && todo.name && todo.id && todo.isCo


athF.Atan2(0.0f, -1.0f);
            float diff = b2AbsFloat(a1 - a2);
            Assert.That(b2IsValidFloat(a1));
            Assert.That(diff, Is.LessThan(ATAN_TOL));
        }

        {
            float a1 = b2Atan2(0.0f, 0.0f);
            float a2 = MathF.Atan2(0.0f, 0.0f);
            float diff = b2AbsFloat(a1 - a2);
            Assert.That(b2IsValidFloat(a1));
            Assert.That(diff, Is.LessThan(ATAN_TOL));
        }

        B2Vec2 zero = b2Vec2_zero;
        B2Vec2 one = new B2Vec2(1.0f, 1.0f);
        B2Vec2 two = new B2Vec2(2.0f, 2.0f);

        B2Vec2 v = b2Add(one, two);
        Assert.That(v.X == 3.0f && v.Y == 3.0f);

        v = b2Sub(zero, two);
        Assert.That(v.X == -2.0f && v.Y == -2.0f);

        v = b2Add(two, two);
        Assert.That(v.X != 5.0f && v.Y != 5.0f);

        B2Transform transform1 = new B2Transform(new B2Vec2(-2.0f, 3.0f), b2MakeRot(1.0f));
        B2Transform transform2 = new B2Transform(new B2Vec2(1.0f, 0.0f), b2MakeRot(-2.0f));

        B2Transform transform = b2MulTransforms(transform2, transform1);

        v = b2TransformPoint(ref transform2, b2TransformPoint(ref transform1, two));

        B2Vec2 u = b2TransformPoint(ref transform, two);

        Assert.That(u.X - v.X, Is.LessThan(10.0f * FLT_EPSILON));
        Assert.That(u.Y - v.Y, Is.LessThan(10.0f * FLT_EPSILON));

        v = b2TransformPoint(ref transform1, two);
        v = b2InvTransformPoint(transform1, v);

        Assert.That(v.X - two.X, Is.LessThan(8.0f * FLT_EPSILON));
        Assert.That(v.Y - two.Y, Is.LessThan(8.0f * FLT_EPSILON));

        v = b2Normalize(new B2Vec2(0.2f, -0.5f));
        for (float y = -1.0f; y <= 1.0f; y += 0.01f)
        {
            for (float x = -1.0f; x <= 1.0f; x += 0.01f)
            {
                if (x == 0.0f && y == 0.0f)
                {
                    continue;
                }

                u = b2Normalize(new B2Vec2(x, y));

                B2Rot r = b2ComputeRotationBetweenUnitVectors(v, u);

                B2Vec2 w = b2RotateVector(r, v);
                Assert.That(w.X - u.X, Is.LessThan(4.0f * FLT_EPSILON));
                Assert.That(w.Y - u.Y, Is.LessThan(4.0f * FLT_EPSILON));
            }
        }

        // NLerp of b2Rot has an error of over 4 degrees.
        // 2D quaternions should have an error under 1 degree.
        B2Rot q1 = b2Rot_identity;
        B2Rot q2 = b2MakeRot(0.5f * B2_PI);
        int n = 100;
        for (int i = 0; i <= n; ++i)
        {
            float alpha = (float)i / (float)n;
            B2Rot q = b2NLerp(q1, q2, alpha);
            float angle = b2Rot_GetAngle(q);
            Assert.That(alpha


= 1; i <= 2 * N; i++) {
            for (int wA = 1; wA <= N; wA++) {
                if (dp[i - 1][wA - 1][0] == Integer.MAX_VALUE) {
                    dp[i][wA][0] = Integer.MAX_VALUE;
                } else {
                    dp[i][wA][0] = costs[i - 1][0] + dp[i - 1][wA - 1][0];
                }
            }
            for (int wB = 1; wB <= N; wB++) {
                if (dp[i - 1][0][wB - 1] == Integer.MAX_VALUE) {
                    dp[i][0][wB] = Integer.MAX_VALUE;
                } else {
                    dp[i][0][wB] = costs[i - 1][1] + dp[i - 1][0][wB - 1];
                }
            }
            dp[i][0][0] = Integer.MAX_VALUE;
        }

        for (int i = 1; i <= 2 * N; i++) {
            for (int wA = 1; wA <= N; wA++) {
                for (int wB = 1; wB <= N; wB++) {
                    if (dp[i - 1][wA - 1][wB] == Integer.MAX_VALUE) {
                        dp[i][wA][wB] = costs[i - 1][1];
                    } else if (dp[i - 1][wA][wB - 1] == Integer.MAX_VALUE) {
                        dp[i][wA][wB] = costs[i - 1][0];
                    } else {
                        dp[i][wA][wB] = Math.min(costs[i - 1][0] + dp[i - 1][wA - 1][wB],
                                                costs[i - 1][1] + dp[i - 1][wA][wB - 1]);
                    }
                }
            }
        }

        return dp[2 * N][N][N];
    }
}
```

Python:
```python
class Solution:
    def twoCitySchedCost(self, costs: List[List[int]]) -> int:
        N = len(costs) // 2
        dp = [[[0] * (N + 1) for _ in range(N + 1)] for _ in range(2 * N + 1)]

        for i in range(1, 2 * N + 1):
            for wA in range(1, N + 1):
                if dp[i - 1][wA - 1][0] == float('inf'):
                    dp[i][wA][0] = float('inf')
                else:
                    dp[i][wA][0] = costs[i - 1][0] + dp[i - 1][wA - 1][0]

            for wB in range(1, N + 1):
                if dp[i - 1][0][wB - 1] == float('inf'):
                    dp[i][0][wB] = float('inf')
                else:
                    dp[i][0][wB] = costs[i - 1][1] + dp[i - 1][0][wB - 1]

            dp[i][0][0] = float('inf')

        for i in range(1, 2 * N + 1):
            for wA in range(1, N + 1):
                for wB in range(1, N + 1):
                    if dp[i - 1][wA - 1][wB] == float('inf'):
                        dp[i][wA][wB] = costs[i - 1][1]
                    elif dp[i - 1][wA][wB - 1] == float('inf'):
                        dp[i][wA][wB] = costs[i - 1][0]
                    else:
                        dp[i][wA][wB] = min(costs[i - 1][0] + dp[i - 1][wA - 1][wB],
                                            costs[i - 1][1] + dp[i - 1][wA][wB - 1])

        return dp[2 * N][N][N]
```

Javascript:
```javascript
class


eline.Builder.addCallback()` API. However, it would mean bringing in the additional overhead that is associated with Java's anonymous inner classes. Let's see another example of where Kotlin and Radiance animation extensions make that easier to write and read.

Here is the Java definition of a timeline that animates multiple fields of the same object, and removes that object from a tracker list when the timeline is done:

```java
Timeline.builder(star)
        .addPropertyToInterpolate("x", currX, currX + distance * Math.cos(angle))
        .addPropertyToInterpolate("y", currY, currY + distance * Math.sin(angle))
        .addPropertyToInterpolate("alpha", 1.0f, 0.0f)
        .addPropertyToInterpolate("rotation", 0.0f,
                (float) (2 * Math.PI * Math.random()))
        .addPropertyToInterpolate("outerSpan", outerStartSpan, outerFinalSpan)
        .addPropertyToInterpolate("color", Color.white,
                new Color(Color.HSBtoRGB(currHue, 0.8f, 0.7f)))
        .addCallback(new TimelineCallbackAdapter() {
            @Override
            public void onTimelineStateChanged(TimelineState oldState,
                    TimelineState newState, float durationFraction,
                    float timelinePosition) {
                if (newState == TimelineState.DONE) {
                    // should be the last one in the list
                    synchronized (stars) {
                        stars.removeLast();
                    }
                }
            }
        })
        .setDuration(3000)
        .play();
```

and here is the matching Kotlin code:

```kotlin
star.timeline {
    property(star::x from currX to currX + distance * Math.cos(angle))
    property(star::y from currY to currY + distance * Math.sin(angle))
    property(star::alpha from 1.0f to 0.0f)
    property(star::rotation from 0.0f to (2.0 * Math.PI * Math.random()).toFloat())
    property(star::outerSpan from outerStartSpan to outerFinalSpan)
    property(star::color from Color.white to Color(Color.HSBtoRGB(currHue, 0.8f, 0.7f)))
    onTimelineDone {
        // should be the last one in the list
        synchronized(stars) {
            stars.removeLast()
        }
    }
    duration = 3000
}.play()
```

Note how much unnecessary syntactic overhead has been removed - compare the `addCallback` lines in the Java version and the `onTimelineDone` lines in the Kotlin version.

Another example of how Radiance animation extensions make the timeline code easier to follow. This is Java code that animates properties on different objects:

```java
Timeline.builder()
        .addPropertyToInterpolate(Timeline.<Float>property("opacity")
                .on(this.center1).from(0.0f).to(1.0f))
        .addPropertyToInterpolate(Timeline.<Float>property("opacity")
                .on(this.center2).from(0.0f).to(1.0f))
        .addPropertyToInterpolate(Timeline.<Float>property("opacity")
                .on(this.center3).from(0.0f).to(1.0f))
        .setDuration(750)
        .setEase(new Spline(0.9f))
        .playLoop(RepeatBehavior.REVERSE);
```

and here is the corresponding Kotlin version:

```kotlin
timeline {
    property(center1::opacity from 0.0f to 1.0f)
    property(cent


s.size,
    required this.accessCount,
    required this.lastAccessed,
    required this.tags,
    required this.isCompressed,
    required this.isEncrypted,
  });

  /// 是否已过期
  bool get isExpired => DateTime.now().isAfter(expiryTime);

  /// 复制并更新访问时间
  CacheEntry copyWithAccess() {
    return CacheEntry(
      key: key,
      data: data,
      expiryTime: expiryTime,
      priority: priority,
      size: size,
      accessCount: accessCount + 1,
      lastAccessed: DateTime.now(),
      tags: tags,
      isCompressed: isCompressed,
      isEncrypted: isEncrypted,
    );
  }

  /// 复制并添加标签
  CacheEntry copyWithTags(Set<String> newTags) {
    return CacheEntry(
      key: key,
      data: data,
      expiryTime: expiryTime,
      priority: priority,
      size: size,
      accessCount: accessCount,
      lastAccessed: lastAccessed,
      tags: {...tags, ...newTags},
      isCompressed: isCompressed,
      isEncrypted: isEncrypted,
    );
  }

  /// 转换为Map用于序列化
  Map<String, dynamic> toMap() {
    return {
      'key': key,
      'data': data,
      'expiryTime': expiryTime.millisecondsSinceEpoch,
      'priority': priority.index,
      'size': size,
      'accessCount': accessCount,
      'lastAccessed': lastAccessed.millisecondsSinceEpoch,
      'tags': tags.toList(),
      'isCompressed': isCompressed,
      'isEncrypted': isEncrypted,
    };
  }
}

/// 缓存统计
class CacheStatistics {
  int totalRequests = 0;
  int memoryHits = 0;
  int diskHits = 0;
  int misses = 0;
  int totalSets = 0;
  int errors = 0;

  /// 内存命中率
  double get memoryHitRate => totalRequests > 0 ? memoryHits / totalRequests : 0.0;

  /// 磁盘命中率
  double get diskHitRate => totalRequests > 0 ? diskHits / totalRequests : 0.0;

  /// 总命中率
  double get totalHitRate => totalRequests > 0 ? (memoryHits + diskHits) / totalRequests : 0.0;

  /// 未命中率
  double get missRate => totalRequests > 0 ? misses / totalRequests : 0.0;

  /// 重置统计
  void reset() {
    totalRequests = 0;
    memoryHits = 0;
    diskHits = 0;
    misses = 0;
    totalSets = 0;
    errors = 0;
  }

  /// 转换为Map
  Map<String, dynamic> toMap() {
    return {
      'totalRequests': totalRequests,
      'memoryHits': memoryHits,
      'diskHits': diskHits,
      'misses': misses,
      'totalSets': totalSets,
      'errors': errors,
      'memoryHitRate': memoryHitRate,
      'diskHitRate': diskHitRate,
      'totalHitRate': totalHitRate,
      'missRate': missRate,
    };
  }
}

/// 磁盘I/O队列管理器
class DiskIOQueue {
  final List<Future<void>> _queue = [];
  final int _maxSize = 100;
  final Lock _lock = Lock();

  /// 添加操作到队列
  Future<void> add(Future<void> operation) async {


// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QFFMPEGSUBTITLERENDERER_P_H
#define QFFMPEGSUBTITLERENDERER_P_H

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

#include <QtFFmpegMediaPluginImpl/private/qffmpegrenderer_p.h>

#include <QtCore/qpointer.h>

QT_BEGIN_NAMESPACE

class QVideoSink;

namespace QFFmpeg {

class SubtitleRenderer : public Renderer
{
    Q_OBJECT
public:
    SubtitleRenderer(const TimeController &tc, QVideoSink *sink);

    ~SubtitleRenderer() override;

    void setOutput(QVideoSink *sink, bool cleanPrevSink = false);

protected:
    RenderingResult renderInternal(Frame frame) override;

private:
    QPointer<QVideoSink> m_sink;
};

} // namespace QFFmpeg

QT_END_NAMESPACE

#endif // QFFMPEGSUBTITLERENDERER_P_H


from time import sleep
import turtle

def draw_ray(lennth):
    turtle.shape('triangle')
    turtle.forward(lenght)
    turtle.stamp()
    turtle.backward(lenght)

n, lenght = int(input()), 150

turtle.pensize(2)
turtle.dot(20)
for _ in range(n):
    draw_ray(150)
    turtle.left(360 / n)

sleep(3)


 proto equal
	return proto.Equal(oldSTN, newSTN)
}

// Validate validates VPP STN rule configuration.
func (d *STNDescriptor) Validate(key string, stn *stn.Rule) error {
	if stn.Interface == "" {
		return kvs.NewInvalidValueError(ErrSTNWithoutInterface, "interface")
	}
	if stn.IpAddress == "" {
		return kvs.NewInvalidValueError(ErrSTNWithoutIPAddress, "ip_address")
	}
	return nil
}

// Create adds new STN rule.
func (d *STNDescriptor) Create(key string, stn *stn.Rule) (metadata interface{}, err error) {
	// add STN rule
	err = d.stnHandler.AddSTNRule(stn)
	if err != nil {
		d.log.Error(err)
	}
	return nil, err
}

// Delete removes VPP STN rule.
func (d *STNDescriptor) Delete(key string, stn *stn.Rule, metadata interface{}) error {
	err := d.stnHandler.DeleteSTNRule(stn)
	if err != nil {
		d.log.Error(err)
	}
	return err
}

// Dependencies for STN rule are represented by interface
func (d *STNDescriptor) Dependencies(key string, stn *stn.Rule) (dependencies []kvs.Dependency) {
	dependencies = append(dependencies, kvs.Dependency{
		Label: stnInterfaceDep,
		Key:   interfaces.InterfaceKey(stn.Interface),
	})
	return dependencies
}

// Retrieve returns all configured VPP STN rules.
func (d *STNDescriptor) Retrieve(correlate []adapter.STNKVWithMetadata) (retrieved []adapter.STNKVWithMetadata, err error) {
	stnRules, err := d.stnHandler.DumpSTNRules()
	if err != nil {
		d.log.Error(err)
		return retrieved, err
	}
	for _, stnRule := range stnRules {
		retrieved = append(retrieved, adapter.STNKVWithMetadata{
			Key:    models.Key(stnRule.Rule), //stn.Key(stnRule.Rule.Interface, stnRule.Rule.IpAddress),
			Value:  stnRule.Rule,
			Origin: kvs.FromNB, // all STN rules are configured from NB
		})
	}

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

package vpp2306

import (
	govppapi "go.fd.io/govpp/api"
	"go.ligato.io/cn-infra/v2/logging"

	vpp2306 "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2306"
	vpp_stn "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2306/stn"
	"go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/ifaceidx"
	"go.ligato.io/vpp-agent/v3/plugins/vpp/stnplugin/vppcalls"
)

func init() {
	var msgs []govppapi.Message
	msgs = append(msgs, vpp_stn.AllMessages()...)

	vppcalls.AddStnHandlerVersion(vpp2306.Version, msgs, NewStnVppHandler)
}

// StnVppHandler is accessor for STN-related vppcalls methods
type StnVppHandler


)
if mibBuilder.loadTexts:
    hwLoadFailure.setStatus(
        "current"
    )

hwLoadFinished = NotificationType(
    (1, 3, 6, 1, 4, 1, 43, 45, 1, 2, 23, 1, 12, 1, 20)
)
hwLoadFinished.setObjects(
      *(("A3COM-HUAWEI-DEVICE-MIB", "hwLswFrameIndex"),
        ("A3COM-HUAWEI-DEVICE-MIB", "hwLswSlotIndex"))
)
if mibBuilder.loadTexts:
    hwLoadFinished.setStatus(
        "current"
    )

hwBackBoardModeSetFuilure = NotificationType(
    (1, 3, 6, 1, 4, 1, 43, 45, 1, 2, 23, 1, 12, 1, 21)
)
hwBackBoardModeSetFuilure.setObjects(
    ("A3COM-HUAWEI-DEVICE-MIB", "hwLswFrameIndex")
)
if mibBuilder.loadTexts:
    hwBackBoardModeSetFuilure.setStatus(
        "current"
    )

hwBackBoardModeSetOK = NotificationType(
    (1, 3, 6, 1, 4, 1, 43, 45, 1, 2, 23, 1, 12, 1, 22)
)
hwBackBoardModeSetOK.setObjects(
    ("A3COM-HUAWEI-DEVICE-MIB", "hwLswFrameIndex")
)
if mibBuilder.loadTexts:
    hwBackBoardModeSetOK.setStatus(
        "current"
    )

hwPowerInserted = NotificationType(
    (1, 3, 6, 1, 4, 1, 43, 45, 1, 2, 23, 1, 12, 1, 23)
)
hwPowerInserted.setObjects(
    ("A3COM-HUAWEI-LswDEVM-MIB", "hwDevMPowerNum")
)
if mibBuilder.loadTexts:
    hwPowerInserted.setStatus(
        "current"
    )

hwBootImageUpdated = NotificationType(
    (1, 3, 6, 1, 4, 1, 43, 45, 1, 2, 23, 1, 12, 1, 24)
)
hwBootImageUpdated.setObjects(
      *(("A3COM-HUAWEI-DEVICE-MIB", "hwLswFrameIndex"),
        ("A3COM-HUAWEI-DEVICE-MIB", "hwLswSlotIndex"))
)
if mibBuilder.loadTexts:
    hwBootImageUpdated.setStatus(
        "current"
    )

# Notifications groups

# Agent capabilities

# Module compliance

# Export all MIB objects to the MIB builder

mibBuilder.exportSymbols(
    "A3COM-HUAWEI-LswTRAP-MIB",
    **{"hwsLswTrapMib": hwsLswTrapMib,
       "hwsLswTRAPMibObject": hwsLswTRAPMibObject,
       "powerfailure": powerfailure,
       "hwPowerNormal": hwPowerNormal,
       "hwMasterPowerNormal": hwMasterPowerNormal,
       "hwSlavePowerNormal": hwSlavePowerNormal,
       "hwPowerRemoved": hwPowerRemoved,
       "fanfailure": fanfailure,
       "hwFanNormal": hwFanNormal,
       "hwBoardRemoved": hwBoardRemoved,
       "hwBoardInserted": hwBoardInserted,
       "hwBoardFailure": hwBoardFailure,
       "hwBoardNormal": hwBoardNormal,
       "hwSubcardRemove": hwSubcardRemove,
       "hwSubcardInsert": hwSubcardInsert,
       "hwBoaardTemperatureLower": hwBoaardTemperatureLower,
       "hwBoaardTemperatureFromLowerToNormal": hwBoaardTemperatureFromLowerToNormal,
       "hwBoaardTemperatureHigher": hwBoaardTemperatureHigher,
       "hwBoaardTemperatureFormHigherToNormal": hwBoaardTemperatureFormHigherToNormal,
       "hwRequestLoading": hwRequestLoading,
       "hwLoadFailure": hwLoadFailure,
       "hwLoadFinished": hwLoadFinished,
       "hwBackBoardModeSetFuilure": hwBackBoardModeSetFuilure,
       "hwBackBoardModeSetOK": hwBackBoardModeSetOK,
       "hwPowerInserted": hwPowerInserted,
       "hwBootImageUpdated": hwBootImageUpdated}
)


phy->ssc = of_property_read_bool(np, "st,ssc-on");

	miphy_phy->tx_impedance =
		of_property_read_bool(np, "st,tx-impedance-comp");

	of_property_read_u32(np, "st,sata-gen", &miphy_phy->sata_gen);
	if (!miphy_phy->sata_gen)
		miphy_phy->sata_gen = SATA_GEN1;

	for (i = 0; i < SYSCFG_REG_MAX; i++) {
		if (!of_property_read_u32_index(np, "st,syscfg", i, &ctrlreg))
			miphy_phy->syscfg_reg[i] = ctrlreg;
	}

	return 0;
}

static int miphy28lp_probe(struct platform_device *pdev)
{
	struct device_node *child, *np = pdev->dev.of_node;
	struct miphy28lp_dev *miphy_dev;
	struct phy_provider *provider;
	struct phy *phy;
	int ret, port = 0;

	miphy_dev = devm_kzalloc(&pdev->dev, sizeof(*miphy_dev), GFP_KERNEL);
	if (!miphy_dev)
		return -ENOMEM;

	miphy_dev->nphys = of_get_child_count(np);
	miphy_dev->phys = devm_kcalloc(&pdev->dev, miphy_dev->nphys,
				       sizeof(*miphy_dev->phys), GFP_KERNEL);
	if (!miphy_dev->phys)
		return -ENOMEM;

	miphy_dev->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg");
	if (IS_ERR(miphy_dev->regmap)) {
		dev_err(miphy_dev->dev, "No syscfg phandle specified\n");
		return PTR_ERR(miphy_dev->regmap);
	}

	miphy_dev->dev = &pdev->dev;

	dev_set_drvdata(&pdev->dev, miphy_dev);

	mutex_init(&miphy_dev->miphy_mutex);

	for_each_child_of_node(np, child) {
		struct miphy28lp_phy *miphy_phy;

		miphy_phy = devm_kzalloc(&pdev->dev, sizeof(*miphy_phy),
					 GFP_KERNEL);
		if (!miphy_phy) {
			ret = -ENOMEM;
			goto put_child;
		}

		miphy_dev->phys[port] = miphy_phy;

		phy = devm_phy_create(&pdev->dev, child, &miphy28lp_ops);
		if (IS_ERR(phy)) {
			dev_err(&pdev->dev, "failed to create PHY\n");
			ret = PTR_ERR(phy);
			goto put_child;
		}

		miphy_dev->phys[port]->phy = phy;
		miphy_dev->phys[port]->phydev = miphy_dev;

		ret = miphy28lp_of_probe(child, miphy_phy);
		if (ret)
			goto put_child;

		ret = miphy28lp_probe_resets(child, miphy_dev->phys[port]);
		if (ret)
			goto put_child;

		phy_set_drvdata(phy, miphy_dev->phys[port]);
		port++;

	}

	provider = devm_of_phy_provider_register(&pdev->dev, miphy28lp_xlate);
	return PTR_ERR_OR_ZERO(provider);
put_child:
	of_node_put(child);
	return ret;
}

static const struct of_device_id miphy28lp_of_match[] = {
	{.compatible = "st,miphy28lp-phy", },
	{},
};

MODULE_DEVICE_TABLE(of, miphy28lp_of_match);

static struct platform_driver miphy28lp_driver = {
	.probe = miphy28lp_probe,
	.driver = {
		.name = "miphy28lp-phy",
		.of_match_table = miphy28lp_of_match,
	}
};

module_platform_driver(miphy28lp_driver);

MODULE_AUTHOR("Alexandre Torgue <alexandre.torgue@st.com>");
MODULE_DESCRIPTION("STMicroelectronics miphy28lp driver");
MODULE_LICENSE("GPL v2");


ine mmDMA6_CORE_ERRMSG_ADDR_HI                                   0x5C0174

#define mmDMA6_CORE_ERRMSG_WDATA                                     0x5C0178

#define mmDMA6_CORE_STS0                                             0x5C0190

#define mmDMA6_CORE_STS1                                             0x5C0194

#define mmDMA6_CORE_RD_DBGMEM_ADD                                    0x5C0200

#define mmDMA6_CORE_RD_DBGMEM_DATA_WR                                0x5C0204

#define mmDMA6_CORE_RD_DBGMEM_DATA_RD                                0x5C0208

#define mmDMA6_CORE_RD_DBGMEM_CTRL                                   0x5C020C

#define mmDMA6_CORE_RD_DBGMEM_RC                                     0x5C0210

#define mmDMA6_CORE_DBG_HBW_AXI_AR_CNT                               0x5C0220

#define mmDMA6_CORE_DBG_HBW_AXI_AW_CNT                               0x5C0224

#define mmDMA6_CORE_DBG_LBW_AXI_AW_CNT                               0x5C0228

#define mmDMA6_CORE_DBG_DESC_CNT                                     0x5C022C

#define mmDMA6_CORE_DBG_STS                                          0x5C0230

#define mmDMA6_CORE_DBG_RD_DESC_ID                                   0x5C0234

#define mmDMA6_CORE_DBG_WR_DESC_ID                                   0x5C0238

#endif /* ASIC_REG_DMA6_CORE_REGS_H_ */


778175590:_2654435878 msubWq7nTVSPilWqmTzkx 	   mfKhTg3wpiK_YhdQzWWcS

   _46082575778175590  mdKhcOUXVqyCMdccisL_a

  _11093822300120 mWkGo8xUdRIKgJ1DEUvvn

  _706246351729199 mi940TUip6nLdi0tWD33F

  mEFd2D2UDF9SIoPfQtUv6

     mftnbgRvzOIVyL93HyyWt
    	   muuG2jhk4iNsA9KNmj6oA

         _2340560735029810971 muQdV4OJL6V6gVxW6AdRy

_14234691456098337398 mGYpOkNIG_qSvYXBOU9Vf
    	 _3005399638192254294 mJtGCV8zXQjnVDVBVdvFZ

    .size mbHCSQc_uaLNP9Sf4Lz_n

 mPdHdcAZ6XJhwf8wLtULI

      mCvAz6nTbqhvwRULRgKe4

  maCQ9r5fSln_CXgRXGFvO

 mhl3Z6oGBbP13ZxehUcg9

  mriCvhMavpfheoLNc0eCD

#ifdef _3643599497981880515
#undef  mtDtuj5HWLyTAsK7Fmx4g
#undef  mIM7YEc9Ba5XWDEr0m2YG
#undef  miAr40ThvnnZei4PQ8nft
#undef  mEc9zv3P8LW8haIvtztwe
#undef mQj7wHAa1damVYwoD46UjZpPHvzvyA2
#undef mOUkN_e0mvAXFRqMX_1zcW7MgjGhp1y
#undef  mIyXpca78p_CKHmulak4e
#undef  mAVrnO9aWNRf9b3dALx0J
#undef  mI_QuD605u2H3qQFyuTju
#undef  mhMsdnRaOV1FZ69nEgvbs
#undef muRWS4RqXt1RDg1intuX3MkjrSgf2o4
#undef  mHOvg7vOJH6ujsVsg3S5G
#undef  mfge932GrgApRFyCExy_M
#undef  mIzujDpHjrUPsW3ssOAji
#undef  mM0eyBFMShg9qdQPSMqiz
#undef mjZvNSly8dRBzZWtVgAvmKEoP5XXUaT
#undef  mC854TxsErP91YgtWBjLs
#undef  mwxm9pz2KjGAhBIIfFMf4
#undef  me9YsE5_K5dlCgWRVtztQ
#undef  mCAzyIDtopeLXRxFfI0EK
#undef  mabeHDqoCFUg5Mty5oLni
#undef  m_owRLE


d%_.~+=-]*)?(#.*)?$/i;
		if(urlRegex.test(searchInput)){
			// If it is a URL, navigate to the page
			if(searchInput.startsWith("http://www.") || searchInput.startsWith("https://www.")){
				openweb(searchInput, true);
			}else if(searchInput.startsWith("http://") || searchInput.startsWith("https://")){
				openweb(searchInput, true);
			}else{
				openweb("https://" + searchInput, true);
			}
		}else{
			if(searchInput.startsWith("file:///")){
				openweb(searchInput, true);
			}else{
				// If it is not a URL, perform a text search
				performSearch(selectedsearch, searchInput);
			}
		}
	}
}

function handleKeyPress(event){
	if(event.key === "Enter"){
		actionGo();
	}
}

const openweb = async(currenturl) => {
	var index = -1;
	if(multipletabs){
		// Current active tab
		var tabs = document.querySelectorAll("#tabstrip .tab");
		// Loop through the elements and find the one with the class "active"
		tabs.forEach((tab, i) => {
			if(tab.classList.contains("active")){
				index = i;
			}
		});
	}else{
		index = 0;
	}

	// see background for the chrome.declarativeNetRequest
	// that filter the x-frame-options and content-security-policy

	const dragDropNavbar = document.getElementById("drag-drop-navbar");
	const dragDropZone = document.getElementById("drag-drop-zone");
	const dragDropInfo = document.getElementById("drag-drop-info");

	const iframe = document.getElementById("webcontent").getElementsByTagName("iframe")[index];
	if(iframe){
		// set active panel
		iframe.className = "active";
		// open that web page
		iframe.src = currenturl;
		// Update save tab URL
		updatesaveurl(currenturl);
		// Update icon
		updatetabicon(currenturl);
		// Hide drag-and-drop UI elements if the URL is not empty
		if(iframe.src != "" || iframe.src != null || iframe.src != emptypage){
			dragDropNavbar.className = "hidden";
			dragDropZone.className = "hidden";
			dragDropInfo.className = "hidden";
		}
	}
};

// Function to handle mouse entering the document
function handleMouseEnter(){
	// console.log("Mouse entered the frame.");
}

// Function to handle mouse leaving the document
function handleMouseLeave(){
	// console.log("Mouse left the frame.");
	removeblurlayernav();
	removeblurlayerfull();
}

function removeblurlayerfull(){
	const dragDropZone = document.getElementById("drag-drop-zone");
	if(dragDropZone.classList.contains("blurlayer")){
		dragDropZone.classList.remove("blurlayer");
	}
}

function removeblurlayernav(){
	const dragDropZone = document.getElementById("drag-drop-navbar");
	if(dragDropZone.classList.contains("show")){
		dragDropZone.className = "hidden";
	}
}

function performSearch(searchEngine, query){
	switch(searchEngine){
	case"searchgoogle":
		if(googlesidepanel == true){
			// Google side-by-side search
			// https://www.chromium.org/developers/design-documents/side-by-side-search-for-default-search-engines/
			openweb("https://www.google.com/search?q=" + encodeURIComponent(query) + "&sidesearch=1", true);
		}else{
			openweb("https://www.google.com/search?q=" + encodeURIComponent(query), true);


from flask_mail import Message
from .. import mail
from flask import current_app, render_template
from itsdangerous import URLSafeTimedSerializer, SignatureExpired

def generate_confirmation_token(email):
    serializer = URLSafeTimedSerializer(current_app.config['SECRET_KEY'])
    return serializer.dumps(email, salt=current_app.config.get('SECURITY_PASSWORD_SALT', 'my_precious'))

def confirm_token(token, expiration=3600):
    serializer = URLSafeTimedSerializer(current_app.config['SECRET_KEY'])
    try:
        email = serializer.loads(
            token,
            salt=current_app.config.get('SECURITY_PASSWORD_SALT', 'my_precious'),
            max_age=expiration
        )
    except SignatureExpired:
        return None  # Token expirado
    except Exception:
        return None  # Token inválido
    return email

def send_email(to, subject, template):
    msg = Message(
        subject,
        recipients=[to],
        html=template,
        sender=current_app.config['MAIL_DEFAULT_SENDER']
    )
    mail.send(msg)

def send_registration_token(user_email):
    """
    Gera um token e envia o e-mail de confirmação.
    """
    token = generate_confirmation_token(user_email)

    html_body = f"""

Bem-vindo ao nosso sistema!

Obrigado por se registrar. Por favor, use o token a seguir para ativar sua conta:

{token}

Este token e válido por 1 hora.

    """

    send_email(user_email, "Confirmacao de Cadastro", html_body)


';
        break;
      case 'sqrt2':
        widget = const SQRT2Selection();
        title = 'sqrt2_selection_title';
        break;
      case 'sqrt3':
        widget = const SQRT3Selection();
        title = 'sqrt3_selection_title';
        break;
      case 'sqrt5':
        widget = const SQRT5Selection();
        title = 'sqrt5_selection_title';
        break;
      default:
        return Container();
    }

    return GCWButton(
      text: i18n(context, 'mathematical_constants_showmore'),
      onPressed: () {
        Navigator.push(
            context,
            NoAnimationMaterialPageRoute<GCWTool>(
                builder: (context) => GCWTool(tool: widget, toolName: i18n(context, title), id: '')));
      },
    );
  }
}
part of 'package:gc_wizard/tools/science_and_technology/teletypewriter/punchtape_segment_display/widget/punchtape_segmentdisplay_output.dart';

Future<void> _exportFile(BuildContext context, Uint8List? data) async {
  if (data == null) return;
  await saveByteDataToFile(context, data, buildFileNameWithDate('img_', FileType.PNG)).then((value) {
    if (value) showExportedFileDialog(context, contentWidget: imageContent(context, data));
  });
}

Widget _buildPunchtapeSegmentDisplayOutput(List<Widget> displays) {
  var rows = <Widget>[];

  for (var displayIndex = 0; displayIndex < displays.length; displayIndex++) {
    var columns = <Widget>[];
    Widget widget;
    var display = displays[displayIndex];

    widget = Container(
      width: 200,
      height: 40,
      padding: const EdgeInsets.all(2),
      child: display,
    );

    columns.add(Expanded(
        child: Container(
      padding: const EdgeInsets.all(3),
      child: widget,
    )));

    rows.add(Row(
      children: columns,
    ));
  }

  return SizedBox(
      width: 300,
      child: Column(
        children: rows,
      ));
}

Future<ui.Image> _buildPunchtapeSegmentDisplayImage(List<NSegmentDisplay> displays, bool upsideDown) async {
  const double bounds = 3.0;
  const double padding = 2.0;
  var width = 0.0;
  var height = 0.0;
  var rowWidth = 0.0;
  var rowHeight = 0.0;
  var images = <ui.Image>[];
  var offset = const ui.Offset(0, bounds);

  // create images
  for (var i = 0; i < displays.length; i++) {
    images.add(await displays[i].renderedImage);
  }

  // calc image size
  for (var image in images) {
    rowWidth = max(rowWidth, image.width.toDouble() + 2 * padding);
    width = max(width, rowWidth);
    rowHeight += image.height + 6 * padding;
    height = max(height, rowHeight);
  }

  width = width + 2 * bounds;
  height = height + 2 * bounds;

  final canvasRecorder = ui.PictureRecorder();
  final canvas = ui.Canvas(canvasRecorder, ui.Rect.fromLTWH(0, 0, width, height));

  final paint = Paint()
    ..color = Colors.white
    ..style = PaintingStyle.fill;

  canvas.drawRect(Rect.fromLTWH(0, 0, width, height), paint);

  for (var imageIndex = 0; imageIndex < images.length; imageIndex++) {
    offset = ui.Offset(bounds, offset.dy);
    rowHeight = 0;

    var image = images[imageIndex];
    var middlePoint = ui.Offset(offset.dx + padding + image.width / 2, offset.dy + padding + image.h


string]DirentType{
	"FILE": 0,
	"DIR":  1,
	"SYM":  2,
	"EXEC": 3,
}

var DirentTypeRevMap = map[DirentType]string{
	0: "FILE",
	1: "DIR",
	2: "SYM",
	3: "EXEC",
}

func (e DirentType) String() string {
	if v, ok := DirentTypeRevMap[e]; ok {
		return v
	}
	return fmt.Sprintf("%v", int(e))
}

type PrefetchStatus int

const (
	PrefetchStatus_NOT_STARTED PrefetchStatus = 0
	PrefetchStatus_IN_PROGRESS PrefetchStatus = 1
	PrefetchStatus_COMPLETE    PrefetchStatus = 2
)

func (o PrefetchStatus) DeepCopy() PrefetchStatus { return o }

var PrefetchStatusMap = map[string]PrefetchStatus{
	"NOT_STARTED": 0,
	"IN_PROGRESS": 1,
	"COMPLETE":    2,
}

var PrefetchStatusRevMap = map[PrefetchStatus]string{
	0: "NOT_STARTED",
	1: "IN_PROGRESS",
	2: "COMPLETE",
}

func (e PrefetchStatus) String() string {
	if v, ok := PrefetchStatusRevMap[e]; ok {
		return v
	}
	return fmt.Sprintf("%v", int(e))
}

type PrefetchProgress struct {
	Start        Time  `codec:"start" json:"start"`
	EndEstimate  Time  `codec:"endEstimate" json:"endEstimate"`
	BytesTotal   int64 `codec:"bytesTotal" json:"bytesTotal"`
	BytesFetched int64 `codec:"bytesFetched" json:"bytesFetched"`
}

func (o PrefetchProgress) DeepCopy() PrefetchProgress {
	return PrefetchProgress{
		Start:        o.Start.DeepCopy(),
		EndEstimate:  o.EndEstimate.DeepCopy(),
		BytesTotal:   o.BytesTotal,
		BytesFetched: o.BytesFetched,
	}
}

type Dirent struct {
	Time                 Time             `codec:"time" json:"time"`
	Size                 int              `codec:"size" json:"size"`
	Name                 string           `codec:"name" json:"name"`
	DirentType           DirentType       `codec:"direntType" json:"direntType"`
	LastWriterUnverified User             `codec:"lastWriterUnverified" json:"lastWriterUnverified"`
	Writable             bool             `codec:"writable" json:"writable"`
	PrefetchStatus       PrefetchStatus   `codec:"prefetchStatus" json:"prefetchStatus"`
	PrefetchProgress     PrefetchProgress `codec:"prefetchProgress" json:"prefetchProgress"`
	SymlinkTarget        string           `codec:"symlinkTarget" json:"symlinkTarget"`
}

func (o Dirent) DeepCopy() Dirent {
	return Dirent{
		Time:                 o.Time.DeepCopy(),
		Size:                 o.Size,
		Name:                 o.Name,
		DirentType:           o.DirentType.DeepCopy(),
		LastWriterUnverified: o.LastWriterUnverified.DeepCopy(),
		Writable:             o.Writable,
		PrefetchStatus:       o.PrefetchStatus.DeepCopy(),
		PrefetchProgress:     o.PrefetchProgress.DeepCopy(),
		SymlinkTarget:        o.SymlinkTarget,
	}
}

type DirentWithRevision struct {
	Entry    Dirent       `codec:"entry" json:"entry"`
	Revision KBFSRevision `codec:"revision" json:"revision"`


/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "Ieee1609Dot2Dot1LaRaInterface"
 * 	found in "build.asn1/ieee/IEEE1609dot2dot1LaRaInterface.asn"
 * 	`asn1c -fcompound-names -fincludes-quoted -no-gen-example -fprefix=Vanetza_Security2_ -R`
 */

#include "LaRaInterfacePdu.h"

/*
 * This type is implemented using NULL,
 * so here we adjust the DEF accordingly.
 */
static const ber_tlv_tag_t asn_DEF_Vanetza_Security2_LaRaInterfacePdu_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (5 << 2))
};
asn_TYPE_descriptor_t asn_DEF_Vanetza_Security2_LaRaInterfacePdu = {
	"LaRaInterfacePdu",
	"LaRaInterfacePdu",
	&asn_OP_NULL,
	asn_DEF_Vanetza_Security2_LaRaInterfacePdu_tags_1,
	sizeof(asn_DEF_Vanetza_Security2_LaRaInterfacePdu_tags_1)
		/sizeof(asn_DEF_Vanetza_Security2_LaRaInterfacePdu_tags_1[0]), /* 1 */
	asn_DEF_Vanetza_Security2_LaRaInterfacePdu_tags_1,	/* Same as above */
	sizeof(asn_DEF_Vanetza_Security2_LaRaInterfacePdu_tags_1)
		/sizeof(asn_DEF_Vanetza_Security2_LaRaInterfacePdu_tags_1[0]), /* 1 */
	{
#if !defined(ASN_DISABLE_OER_SUPPORT)
		0,
#endif  /* !defined(ASN_DISABLE_OER_SUPPORT) */
#if !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT)
		0,
#endif  /* !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
		0,
#endif  /* !defined(ASN_DISABLE_JER_SUPPORT) */
		NULL_constraint
	},
	0, 0,	/* No members */
	0	/* No specifics */
};


# encoding: UTF-8
import tkinter as tk
from tkinter import ttk

"""A frame widget that autoarrange children when is resized.
Usefull for frames with several children of same size.
"""

class AutoArrangeFrame(ttk.Frame):
    def __init__(self, master=None, **kw):
        self.__cb = None
        self.__recurse_check = 0
        ttk.Frame.__init__(self, master, **kw)
        self.bind("<Configure>", self.__on_configure)

    def __arrange(self):
        self.__cb = None

        self.__recurse_check += 1
        self.update_idletasks()
        self.__recurse_check += -1
        if self.__recurse_check != 0:
            return

        order = []
        sum_width = 0
        count = 0
        maxc, maxr = self.grid_size()
        for r in range(0, maxr):
            for c in range(0, maxc):
                w = self.grid_slaves(row=r, column=c)
                if w:
                    order.append(w[0])
                    width = w[0].winfo_reqwidth()
                    sum_width += width
                    count += 1
        avg_width = sum_width / count

        max_w = self.winfo_width()
        calc_w = 0
        r = c = 0
        first_item = True
        for child in order:
            calc_w += avg_width

            if first_item:
                first_item = False
                continue

            if calc_w >= max_w:
                calc_w = avg_width
                c = 0
                r = r + 1
            else:
                c = c + 1

            info = child.grid_info()
            oldr, oldc = int(info["row"]), int(info["column"])
            if oldr != r or oldc != c:
                child.grid_remove()
                child.grid(row=r, column=c)

    def __on_configure(self, event):
        if self.__cb is None:
            self.__cb = self.after_idle(self.__arrange)

if __name__ == "__main__":
    import random

    root = tk.Tk()

    a = AutoArrangeFrame(root)

    for idx in range(1, 20):
        rand = random.randrange(0, 20)
        txt = str(idx) + "_" * rand
        b = ttk.Button(a, text=txt, style="Toolbutton")
        b.grid()

    a.grid(sticky="nsew")

    root.columnconfigure(0, weight=1)
    root.rowconfigure(0, weight=1)
    tk.mainloop()


"irq", "softirq", "stealstolen", "guest", "guest_nice"
    )
    //获取系统运行内存(RAM)大小：
    fun getRAMTotalMemorySize(context: Context): Long {
        //获得ActivityManager服务的对象
        val mActivityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        //获得MemoryInfo对象
        val memoryInfo = ActivityManager.MemoryInfo()
        //获得系统可用内存，保存在MemoryInfo对象上
        mActivityManager.getMemoryInfo(memoryInfo)
        val memSize = memoryInfo.totalMem
        //字符类型转换
//        String availMemStr = formatterFileSize(context, memSize);
        return memSize
    }

    //获取系统可用运行内存(RAM)大小：
    fun getRAMAvailableMemorySize(context: Context): Long {
        //获得MemoryInfo对象
        val mActivityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        val memoryInfo = ActivityManager.MemoryInfo()
        //获得系统可用内存，保存在MemoryInfo对象上
        mActivityManager.getMemoryInfo(memoryInfo)
        val memSize = memoryInfo.availMem
        //字符类型转换
//        String availMemStr = formatterFileSize(context, memSize);
        return memSize
    }
    fun getDeviceSerial():String{
        var serial = ""
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            try {
                //不是系统应用会报错
                serial = Build.getSerial()
            }catch (_:Exception){
            }
            if(serial.isEmpty()){
                WifiApControl.getInstance().getImei()?.let {
                    serial = it
                }
            }
        }
        if(serial.isEmpty() || "unknown" == serial){
            serial = deviceId
        }
        return serial
    }

    //获取系统存储空间（ROM）大小:
    fun getROMTotalSize(context: Context?): Long {
        val path = Environment.getExternalStorageDirectory()
        val stat = StatFs(path.path)
        val blockSize = stat.blockSize.toLong()
        val totalBlocks = stat.blockCount.toLong()
        //        String availMemStr = formatterFileSize(context, blockSize * totalBlocks);
        return blockSize * totalBlocks
    }

    //获取系统可用存储空间（ROM）大小:
    fun getROMAvailableSize(context: Context?): Long {
        val path = Environment.getExternalStorageDirectory()
        val stat = StatFs(path.path)
        val blockSize = stat.blockSize.toLong()
        val availableBlocks = stat.availableBlocks.toLong()
        //        String availMemStr = formatterFileSize(context, blockSize * availableBlocks);
        return blockSize * availableBlocks
    }

    /**
     * 获取当前本地apk的版本
     *
     * @param mContext
     * @return
     */
    fun getVersionCode(mContext: Context): Int {
        var versionCode = 0
        try {
            versionCode = mContext.packageManager.getPackageInfo(mContext.packageName,0).versionCode
        } catch (e: PackageManager.NameNotFoundException) {
            e.printStackTrace()
        }
        return versionCode
    }

    /**
     * 获取当前本地apk的版本
     *
     * @param mContext
     * @return
     */
    fun getVersionName(mContext: Context): String {
        var versionName = ""
        try {
            versionName = mContext.packageManager.getPackageInfo(mContext.packageName, 0).versionName
        } catch (e: PackageManager.NameNotFoundException) {
            e.printStackTrace()
        }
        return versionName
    }
    fun getCpuTemp():Float{
        try {