From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:403:4789::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms9.migadu.com with LMTPS id aL6AA4N1CWWJ7QAA9RJhRA:P1 (envelope-from ) for ; Tue, 19 Sep 2023 12:18:43 +0200 Received: from aspmx1.migadu.com ([2001:41d0:403:4789::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id aL6AA4N1CWWJ7QAA9RJhRA (envelope-from ) for ; Tue, 19 Sep 2023 12:18:43 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 751334C1D2 for ; Tue, 19 Sep 2023 12:18:42 +0200 (CEST) Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=EJEUQ374; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1695118722; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=w4xQp8QSDzwHR5hGQsMOIZUF4v9vxULP5QbBUPKyUpc=; b=BnjmvSbmzr4ytsd0QvuSJOxMVkSY+K35Cux4dfDtgclAIf2fiNYXL4MUjSqvW1a3DOfNXf NsRyceBEKTfELpvEpSGqyzVvL/al0vqove9gqCvq1fo9yFX04OUGJGF0/bnG30p2R3slZp TB5qn+k9MZBRtfhspGn0SjuAZVUXcWNGBe64DOEtPRjvWK5ms3+sMASQMW+XnrLa7/mL9i 2iAolTSA2Xhb7Hz3gPvOLP7BLtazcqsRuMExMlDuuIVBykF1bHI1okxbO+1w1bu7t6tz/s X6XESeAoaGiaBbfBrx8yJT+B34m8hBKsq5sOB5FOiUNiEh7qa8kzqcqsKcorsA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=EJEUQ374; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=key1; d=yhetil.org; t=1695118722; a=rsa-sha256; cv=none; b=NVam5j++su4BL8Ixdy15tqjUknxmwmwLRVwZ3s2IR7Xsr8IfyjrFSAVGQtVphS0NZ6Rdfk OJ4qjHlbsQlHULV329MVhlB+vBTHcyAACGhNMy6sgUx4Nj+C1OBkM1eudGbw4QAy2pLd2m Uk5+JSylNWeNB1d6i/r2b0ppuP3GuzCMtFhkxeK+RIO5jpZOQLOocnr/ycucxKMYE+N1xL +KrizwQzg8ccd5zSRRRbq+aYig6Rt/1zOoRfsxia5xiZx5h3wPnNRvqbsFvywBgKWVTt1j yOseNt804X7Au5S6SwZIFJo0N0LQGCWR+2G+Etq4WXFPuJI88I6/MT/d1kPx7w== Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qiXne-0006sR-Et; Tue, 19 Sep 2023 06:17:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qiXnZ-0006o6-Un for emacs-orgmode@gnu.org; Tue, 19 Sep 2023 06:17:41 -0400 Received: from mail-ua1-x932.google.com ([2607:f8b0:4864:20::932]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qiXnW-0006ZR-C1 for emacs-orgmode@gnu.org; Tue, 19 Sep 2023 06:17:41 -0400 Received: by mail-ua1-x932.google.com with SMTP id a1e0cc1a2514c-7a7857e5290so1973926241.1 for ; Tue, 19 Sep 2023 03:17:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695118657; x=1695723457; darn=gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=w4xQp8QSDzwHR5hGQsMOIZUF4v9vxULP5QbBUPKyUpc=; b=EJEUQ374sIAVQDfgDu2UJj3t2pXb6vCSy824vgr9mroV8bExUqF7Z3WQ9Z5ZfKACSH tm3mrC89BzNyyLtdRxI5SLKAZx6A61WzIRj60xFTmwbSgnWk6IpNGfFcXR+Mj3Uxc+Od Y1VCziR2A6WdwKTvlY3kiYd3zPAeHUK3HnYmlPld/tUDaSmDixJh55zYcL9b2/Zp+Dcp ATZGxvJdtX2FgAqwJhnNM9GHmKPHIsm9F8KgHFFeCP4aq397EFvYLHkk6CMT8bBj7hDL wNdi/FYg6qHJD0dVGM4zB8YotEHTJRX50sXA4vxbrtINASPRebUlTFiiO0wdB8MeaR3g wPuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695118657; x=1695723457; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=w4xQp8QSDzwHR5hGQsMOIZUF4v9vxULP5QbBUPKyUpc=; b=p907QpwkfFiVR0un5DOz1WyR2gQTkseWOocsiEv8uWY7DbgowLylnVlG4UWOrwrirp FSAeG1Ok/Wrxn901YfF+HQC/7JTxUcdcrvUQtPSSeYjLwJjRc0hecvJuF/XwhrJNhs2k zlAo/eVePLkCpz7Yqy1nAuZgJ/IVEGmbvfIxCZLQA/G4CQKl6AlPRLPMOxHj8ivjCwh5 ogDmU8S7SFrLtuC8u+kgQ24jamvRh881OsnLvnHt4po3DyBlVKgfmgE+ZEKlK7n+NdH4 ZJK7xsSQLbpnXqM3wMNZfJnGw/AxBoYcnnOkYti4OW0ilP2Ap6PaFsObFCUYM6gcsRz+ cTQw== X-Gm-Message-State: AOJu0YyY4PoGPKghwuSR3n1+HyLQqDWve4pCUKLCsxS8WvIUPwcLWDRu AydRmpaeq68c9wCP3OooxD2eVG4X6v8ZKYJJA+A= X-Google-Smtp-Source: AGHT+IHrqs1Jq6Gh1RkWSeoVUztzcmWc/ugub/0XQI/K5dop6yo7OesTXkjSQWrnxlc9IDqk4vISjn7oVbkWtL8uQYE= X-Received: by 2002:a1f:c902:0:b0:48d:5de:3053 with SMTP id z2-20020a1fc902000000b0048d05de3053mr8396997vkf.14.1695118656810; Tue, 19 Sep 2023 03:17:36 -0700 (PDT) MIME-Version: 1.0 References: <87fs3ay0wx.fsf@localhost> <87a5tixzfk.fsf@localhost> <8734zaxykw.fsf@localhost> In-Reply-To: <8734zaxykw.fsf@localhost> From: Carlo Tambuatco Date: Tue, 19 Sep 2023 06:17:00 -0400 Message-ID: Subject: Re: Org agenda crashes when an agenda's deadline is within 14 days of its scheduled time. To: Ihor Radchenko Cc: Org-Mode Mailing List Content-Type: multipart/alternative; boundary="0000000000006433b60605b391eb" Received-SPF: pass client-ip=2607:f8b0:4864:20::932; envelope-from=oraclmaster@gmail.com; helo=mail-ua1-x932.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: emacs-orgmode-bounces+larch=yhetil.org@gnu.org X-Migadu-Flow: FLOW_IN X-Migadu-Country: US X-Migadu-Scanner: mx1.migadu.com X-Migadu-Spam-Score: -8.02 X-Spam-Score: -8.02 X-Migadu-Queue-Id: 751334C1D2 X-TUID: WmK205V4DUFx --0000000000006433b60605b391eb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Okay. It does indeed work. When will it be available in general release? On Tue, Sep 19, 2023 at 6:09=E2=80=AFAM Ihor Radchenko wrote: > Carlo Tambuatco writes: > > > org-version 9.6.9 > > Then, (1) open agenda as usual, get the error; (2) re-define > `org-agenda-get-scheduled' by evaluating the following snippet (C-M-x > with point inside defun in scratch buffer); (3) open agenda again - you > should not get the error. > > (defun org-agenda-get-scheduled (&optional deadlines with-hour) > "Return the scheduled information for agenda display. > Optional argument DEADLINES is a list of deadline items to be > displayed in agenda view. When WITH-HOUR is non-nil, only return > scheduled items with an hour specification like [h]h:mm." > (with-no-warnings (defvar date)) > (let* ((props (list 'org-not-done-regexp org-not-done-regexp > 'org-todo-regexp org-todo-regexp > 'org-complex-heading-regexp > org-complex-heading-regexp > 'done-face 'org-agenda-done > 'mouse-face 'highlight > 'help-echo > (format "mouse-2 or RET jump to Org file %s" > (abbreviate-file-name buffer-file-name)))) > (regexp (if with-hour > org-scheduled-time-hour-regexp > org-scheduled-time-regexp)) > (today (org-today)) > (todayp (org-agenda-today-p date)) ; DATE bound by calendar. > (current (calendar-absolute-from-gregorian date)) > (deadline-pos > (mapcar (lambda (d) > (let ((m (get-text-property 0 'org-hd-marker d))) > (and m (marker-position m)))) > deadlines)) > scheduled-items) > (goto-char (point-min)) > (if (org-element--cache-active-p) > (org-element-cache-map > (lambda (el) > (when (and (org-element-property :scheduled el) > (or (not with-hour) > (org-element-property > :hour-start > (org-element-property :scheduled el)) > (org-element-property > :hour-end > (org-element-property :scheduled el)))) > (goto-char (org-element-property :contents-begin el)) > (catch :skip > (org-agenda-skip el) > (let* ((s (substring (org-element-property > :raw-value > (org-element-property :scheduled el)= ) > 1 -1)) > (pos (save-excursion > (goto-char (org-element-property > :contents-begin el)) > ;; We intentionally leave NOERROR > ;; argument in `re-search-forward' nil. If > ;; the search fails here, something went > ;; wrong and we are looking at > ;; non-matching headline. > (re-search-forward regexp (line-end-position= )) > (1- (match-beginning 1)))) > (todo-state (org-element-property :todo-keyword el)= ) > (donep (eq 'done (org-element-property :todo-type > el))) > (sexp? (eq 'diary > (org-element-property > :type (org-element-property :scheduled > el)))) > ;; SCHEDULE is the scheduled date for the entry. I= t > is > ;; either the bare date or the last repeat, accordi= ng > ;; to `org-agenda-prefer-last-repeat'. > (schedule > (cond > (sexp? (org-agenda--timestamp-to-absolute s > current)) > ((or (eq org-agenda-prefer-last-repeat t) > (member todo-state > org-agenda-prefer-last-repeat)) > (org-agenda--timestamp-to-absolute > s today 'past (current-buffer) pos)) > (t (org-agenda--timestamp-to-absolute s)))) > ;; REPEAT is the future repeat closest from CURRENT= , > ;; according to `org-agenda-show-future-repeats'. I= f > ;; the latter is nil, or if the time stamp has no > ;; repeat part, default to SCHEDULE. > (repeat > (cond > (sexp? schedule) > ((<=3D current today) schedule) > ((not org-agenda-show-future-repeats) schedule) > (t > (let ((base (if (eq > org-agenda-show-future-repeats 'next) > (1+ today) > current))) > (org-agenda--timestamp-to-absolute > s base 'future (current-buffer) pos))))) > (diff (- current schedule)) > (warntime (get-text-property (point) > 'org-appt-warntime)) > (pastschedp (< schedule today)) > (futureschedp (> schedule today)) > (habitp (and (fboundp 'org-is-habit-p) > (string=3D "habit" (org-element-proper= ty > :STYLE el)))) > (suppress-delay > (let ((deadline (and > org-agenda-skip-scheduled-delay-if-deadline > (org-element-property > :raw-value > (org-element-property > :deadline el))))) > (cond > ((not deadline) nil) > ;; The current item has a deadline date, so > ;; evaluate its delay time. > ((integerp > org-agenda-skip-scheduled-delay-if-deadline) > ;; Use global delay time. > (- org-agenda-skip-scheduled-delay-if-deadline= )) > ((eq org-agenda-skip-scheduled-delay-if-deadlin= e > 'post-deadline) > ;; Set delay to no later than DEADLINE. > (min (- schedule > (org-agenda--timestamp-to-absolute > deadline)) > org-scheduled-delay-days)) > (t 0)))) > (ddays > (cond > ;; Nullify delay when a repeater triggered alread= y > ;; and the delay is of the form --Xd. > ((and (string-match-p "--[0-9]+[hdwmy]" s) > (> schedule > (org-agenda--timestamp-to-absolute s))) > 0) > (suppress-delay > (let ((org-scheduled-delay-days suppress-delay)) > (org-get-wdays s t t))) > (t (org-get-wdays s t))))) > ;; Display scheduled items at base date (SCHEDULE), toda= y > if > ;; scheduled before the current date, and at any repeat > past > ;; today. However, skip delayed items and items that ha= ve > ;; been displayed for more than `org-scheduled-past-days= '. > (unless (and todayp > habitp > (bound-and-true-p org-habit-show-all-today)= ) > (when (or (and (> ddays 0) (< diff ddays)) > (> diff (or (and habitp > org-habit-scheduled-past-days) > org-scheduled-past-days)) > (> schedule current) > (and (/=3D current schedule) > (/=3D current today) > (/=3D current repeat))) > (throw :skip nil))) > ;; Possibly skip done tasks. > (when (and donep > (or org-agenda-skip-scheduled-if-done > (/=3D schedule current))) > (throw :skip nil)) > ;; Skip entry if it already appears as a deadline, per > ;; `org-agenda-skip-scheduled-if-deadline-is-shown'. Th= is > ;; doesn't apply to habits. > (when (pcase > org-agenda-skip-scheduled-if-deadline-is-shown > ((guard > (or (not (memq (line-beginning-position 0) > deadline-pos)) > habitp)) > nil) > (`repeated-after-deadline > (let ((deadline (time-to-days > (when (org-element-property > :deadline el) > (org-time-string-to-time > (org-element-interpret-data > (org-element-property > :deadline el))))))) > (and (<=3D schedule deadline) (> current > deadline)))) > (`not-today pastschedp) > (`t t) > (_ nil)) > (throw :skip nil)) > ;; Skip habits if `org-habit-show-habits' is nil, or if = we > ;; only show them for today. Also skip done habits. > (when (and habitp > (or donep > (not (bound-and-true-p > org-habit-show-habits)) > (and (not todayp) > (bound-and-true-p > > org-habit-show-habits-only-for-today)))) > (throw :skip nil)) > (save-excursion > (goto-char (org-element-property :begin el)) > (let* ((category (org-get-category)) > (effort (save-match-data > (or (get-text-property (point) 'effor= t) > (org-element-property (intern > (concat ":" (upcase org-effort-property))) el)))) > (effort-minutes (when effort (save-match-data > (org-duration-to-minutes effort)))) > (inherited-tags > (or (eq org-agenda-show-inherited-tags 'always= ) > (and (listp org-agenda-show-inherited-tags= ) > (memq 'agenda > org-agenda-show-inherited-tags)) > (and (eq org-agenda-show-inherited-tags t) > (or (eq org-agenda-use-tag-inheritanc= e > t) > (memq 'agenda > > org-agenda-use-tag-inheritance))))) > (tags (org-get-tags el (not inherited-tags))) > (level (make-string (org-element-property :leve= l > el) > ?\s)) > (head (save-excursion > (goto-char (org-element-property :begin > el)) > (re-search-forward > org-outline-regexp-bol) > (buffer-substring (point) > (line-end-position)))) > (time > (cond > ;; No time of day designation if it is only a > ;; reminder, except for habits, which always > show > ;; the time of day. Habits are an exception > ;; because if there is a time of day, that is > ;; interpreted to mean they should usually > happen > ;; then, even if doing the habit was missed. > ((and > (not habitp) > (/=3D current schedule) > (/=3D current repeat)) > nil) > ((string-match " \\([012]?[0-9]:[0-9][0-9]\\)= " > s) > (concat (substring s (match-beginning 1)) " > ")) > (t 'time))) > (item > (org-agenda-format-item > (pcase-let ((`(,first ,past) > org-agenda-scheduled-leaders)) > ;; Show a reminder of a past scheduled toda= y. > (if (and todayp pastschedp) > (format past diff) > first)) > (org-add-props head nil > 'effort effort > 'effort-minutes effort-minutes) > level category tags time nil habitp)) > (face (cond ((and (not habitp) pastschedp) > 'org-scheduled-previously) > ((and habitp futureschedp) > 'org-agenda-done) > (todayp 'org-scheduled-today) > (t 'org-scheduled))) > (habitp (and habitp (org-habit-parse-todo > (org-element-property :begin el))))) > (org-add-props item props > 'undone-face face > 'face (if donep 'org-agenda-done face) > 'org-marker (org-agenda-new-marker pos) > 'org-hd-marker (org-agenda-new-marker > (line-beginning-position)) > 'type (if pastschedp "past-scheduled" "scheduled") > 'date (if pastschedp schedule date) > 'ts-date schedule > 'warntime warntime > 'level level > 'effort effort 'effort-minutes effort-minutes > 'priority (if habitp (org-habit-get-priority habit= p) > (+ 99 diff (org-get-priority item))) > 'org-habit-p habitp > 'todo-state todo-state) > (push item scheduled-items))))))) > :next-re regexp > :fail-re regexp > :narrow t) > (while (re-search-forward regexp nil t) > (catch :skip > (unless (save-match-data (org-at-planning-p)) (throw :skip nil)= ) > (org-agenda-skip) > (let* ((s (match-string 1)) > (pos (1- (match-beginning 1))) > (todo-state (save-match-data (org-get-todo-state))) > (donep (member todo-state org-done-keywords)) > (sexp? (string-prefix-p "%%" s)) > ;; SCHEDULE is the scheduled date for the entry. It is > ;; either the bare date or the last repeat, according > ;; to `org-agenda-prefer-last-repeat'. > (schedule > (cond > (sexp? (org-agenda--timestamp-to-absolute s current)) > ((or (eq org-agenda-prefer-last-repeat t) > (member todo-state org-agenda-prefer-last-repeat)= ) > (org-agenda--timestamp-to-absolute > s today 'past (current-buffer) pos)) > (t (org-agenda--timestamp-to-absolute s)))) > ;; REPEAT is the future repeat closest from CURRENT, > ;; according to `org-agenda-show-future-repeats'. If > ;; the latter is nil, or if the time stamp has no > ;; repeat part, default to SCHEDULE. > (repeat > (cond > (sexp? schedule) > ((<=3D current today) schedule) > ((not org-agenda-show-future-repeats) schedule) > (t > (let ((base (if (eq org-agenda-show-future-repeats > 'next) > (1+ today) > current))) > (org-agenda--timestamp-to-absolute > s base 'future (current-buffer) pos))))) > (diff (- current schedule)) > (warntime (get-text-property (point) 'org-appt-warntime)= ) > (pastschedp (< schedule today)) > (futureschedp (> schedule today)) > (habitp (and (fboundp 'org-is-habit-p) (org-is-habit-p))= ) > (suppress-delay > (let ((deadline (and > org-agenda-skip-scheduled-delay-if-deadline > (org-entry-get nil "DEADLINE")))) > (cond > ((not deadline) nil) > ;; The current item has a deadline date, so > ;; evaluate its delay time. > ((integerp > org-agenda-skip-scheduled-delay-if-deadline) > ;; Use global delay time. > (- org-agenda-skip-scheduled-delay-if-deadline)) > ((eq org-agenda-skip-scheduled-delay-if-deadline > 'post-deadline) > ;; Set delay to no later than DEADLINE. > (min (- schedule > (org-agenda--timestamp-to-absolute deadline= )) > org-scheduled-delay-days)) > (t 0)))) > (ddays > (cond > ;; Nullify delay when a repeater triggered already > ;; and the delay is of the form --Xd. > ((and (string-match-p "--[0-9]+[hdwmy]" s) > (> schedule (org-agenda--timestamp-to-absolute > s))) > 0) > (suppress-delay > (let ((org-scheduled-delay-days suppress-delay)) > (org-get-wdays s t t))) > (t (org-get-wdays s t))))) > ;; Display scheduled items at base date (SCHEDULE), today if > ;; scheduled before the current date, and at any repeat past > ;; today. However, skip delayed items and items that have > ;; been displayed for more than `org-scheduled-past-days'. > (unless (and todayp > habitp > (bound-and-true-p org-habit-show-all-today)) > (when (or (and (> ddays 0) (< diff ddays)) > (> diff (or (and habitp > org-habit-scheduled-past-days) > org-scheduled-past-days)) > (> schedule current) > (and (/=3D current schedule) > (/=3D current today) > (/=3D current repeat))) > (throw :skip nil))) > ;; Possibly skip done tasks. > (when (and donep > (or org-agenda-skip-scheduled-if-done > (/=3D schedule current))) > (throw :skip nil)) > ;; Skip entry if it already appears as a deadline, per > ;; `org-agenda-skip-scheduled-if-deadline-is-shown'. This > ;; doesn't apply to habits. > (when (pcase org-agenda-skip-scheduled-if-deadline-is-shown > ((guard > (or (not (memq (line-beginning-position 0) > deadline-pos)) > habitp)) > nil) > (`repeated-after-deadline > (let ((deadline (time-to-days > (org-get-deadline-time (point))))) > (and (<=3D schedule deadline) (> current deadline)= ))) > (`not-today pastschedp) > (`t t) > (_ nil)) > (throw :skip nil)) > ;; Skip habits if `org-habit-show-habits' is nil, or if we > ;; only show them for today. Also skip done habits. > (when (and habitp > (or donep > (not (bound-and-true-p org-habit-show-habits)) > (and (not todayp) > (bound-and-true-p > org-habit-show-habits-only-for-today)))) > (throw :skip nil)) > (save-excursion > (re-search-backward "^\\*+[ \t]+" nil t) > (goto-char (match-end 0)) > (let* ((category (org-get-category)) > (effort (save-match-data (or (get-text-property > (point) 'effort) > (org-entry-get (point) > org-effort-property)))) > (effort-minutes (when effort (save-match-data > (org-duration-to-minutes effort)))) > (inherited-tags > (or (eq org-agenda-show-inherited-tags 'always) > (and (listp org-agenda-show-inherited-tags) > (memq 'agenda > org-agenda-show-inherited-tags)) > (and (eq org-agenda-show-inherited-tags t) > (or (eq org-agenda-use-tag-inheritance t) > (memq 'agenda > > org-agenda-use-tag-inheritance))))) > (tags (org-get-tags nil (not inherited-tags))) > (level (make-string (org-reduced-level > (org-outline-level)) > ?\s)) > (head (buffer-substring (point) (line-end-position))= ) > (time > (cond > ;; No time of day designation if it is only a > ;; reminder, except for habits, which always show > ;; the time of day. Habits are an exception > ;; because if there is a time of day, that is > ;; interpreted to mean they should usually happen > ;; then, even if doing the habit was missed. > ((and > (not habitp) > (/=3D current schedule) > (/=3D current repeat)) > nil) > ((string-match " \\([012]?[0-9]:[0-9][0-9]\\)" s) > (concat (substring s (match-beginning 1)) " ")) > (t 'time))) > (item > (org-agenda-format-item > (pcase-let ((`(,first ,past) > org-agenda-scheduled-leaders)) > ;; Show a reminder of a past scheduled today. > (if (and todayp pastschedp) > (format past diff) > first)) > (org-add-props head nil > 'effort effort > 'effort-minutes effort-minutes) > level category tags time nil habitp)) > (face (cond ((and (not habitp) pastschedp) > 'org-scheduled-previously) > ((and habitp futureschedp) > 'org-agenda-done) > (todayp 'org-scheduled-today) > (t 'org-scheduled))) > (habitp (and habitp (org-habit-parse-todo)))) > (org-add-props item props > 'undone-face face > 'face (if donep 'org-agenda-done face) > 'org-marker (org-agenda-new-marker pos) > 'org-hd-marker (org-agenda-new-marker > (line-beginning-position)) > 'type (if pastschedp "past-scheduled" "scheduled") > 'date (if pastschedp schedule date) > 'ts-date schedule > 'warntime warntime > 'level level > 'effort effort 'effort-minutes effort-minutes > 'priority (if habitp (org-habit-get-priority habitp) > (+ 99 diff (org-get-priority item))) > 'org-habit-p habitp > 'todo-state todo-state) > (push item scheduled-items))))))) > (nreverse scheduled-items))) > > -- > Ihor Radchenko // yantar92, > Org mode contributor, > Learn more about Org mode at . > Support Org development at , > or support my work at > --0000000000006433b60605b391eb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+T2theS4gSXQgZG9lcyBpbmRlZWQgd29yay4gV2hlbiB3aWxsIGl0IGJl IGF2YWlsYWJsZSBpbiBnZW5lcmFsIHJlbGVhc2U/PC9kaXY+PGJyPjxkaXYgY2xhc3M9ImdtYWls X3F1b3RlIj48ZGl2IGRpcj0ibHRyIiBjbGFzcz0iZ21haWxfYXR0ciI+T24gVHVlLCBTZXAgMTks IDIwMjMgYXQgNjowOeKAr0FNIElob3IgUmFkY2hlbmtvICZsdDs8YSBocmVmPSJtYWlsdG86eWFu dGFyOTJAcG9zdGVvLm5ldCI+eWFudGFyOTJAcG9zdGVvLm5ldDwvYT4mZ3Q7IHdyb3RlOjxicj48 L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBw eCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGlu Zy1sZWZ0OjFleCI+Q2FybG8gVGFtYnVhdGNvICZsdDs8YSBocmVmPSJtYWlsdG86b3JhY2xtYXN0 ZXJAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+b3JhY2xtYXN0ZXJAZ21haWwuY29tPC9hPiZn dDsgd3JpdGVzOjxicj4NCjxicj4NCiZndDsgb3JnLXZlcnNpb24gOS42Ljk8YnI+DQo8YnI+DQpU aGVuLCAoMSkgb3BlbiBhZ2VuZGEgYXMgdXN1YWwsIGdldCB0aGUgZXJyb3I7ICgyKSByZS1kZWZp bmU8YnI+DQpgb3JnLWFnZW5kYS1nZXQtc2NoZWR1bGVkJiMzOTsgYnkgZXZhbHVhdGluZyB0aGUg Zm9sbG93aW5nIHNuaXBwZXQgKEMtTS14PGJyPg0Kd2l0aCBwb2ludCBpbnNpZGUgZGVmdW4gaW4g c2NyYXRjaCBidWZmZXIpOyAoMykgb3BlbiBhZ2VuZGEgYWdhaW4gLSB5b3U8YnI+DQpzaG91bGQg bm90IGdldCB0aGUgZXJyb3IuPGJyPg0KPGJyPg0KKGRlZnVuIG9yZy1hZ2VuZGEtZ2V0LXNjaGVk dWxlZCAoJmFtcDtvcHRpb25hbCBkZWFkbGluZXMgd2l0aC1ob3VyKTxicj4NCsKgICZxdW90O1Jl dHVybiB0aGUgc2NoZWR1bGVkIGluZm9ybWF0aW9uIGZvciBhZ2VuZGEgZGlzcGxheS48YnI+DQpP cHRpb25hbCBhcmd1bWVudCBERUFETElORVMgaXMgYSBsaXN0IG9mIGRlYWRsaW5lIGl0ZW1zIHRv IGJlPGJyPg0KZGlzcGxheWVkIGluIGFnZW5kYSB2aWV3LsKgIFdoZW4gV0lUSC1IT1VSIGlzIG5v bi1uaWwsIG9ubHkgcmV0dXJuPGJyPg0Kc2NoZWR1bGVkIGl0ZW1zIHdpdGggYW4gaG91ciBzcGVj aWZpY2F0aW9uIGxpa2UgW2hdaDptbS4mcXVvdDs8YnI+DQrCoCAod2l0aC1uby13YXJuaW5ncyAo ZGVmdmFyIGRhdGUpKTxicj4NCsKgIChsZXQqICgocHJvcHMgKGxpc3QgJiMzOTtvcmctbm90LWRv bmUtcmVnZXhwIG9yZy1ub3QtZG9uZS1yZWdleHA8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCAmIzM5O29yZy10b2RvLXJlZ2V4cCBvcmctdG9kby1yZWdleHA8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmIzM5O29yZy1jb21wbGV4LWhlYWRpbmctcmVn ZXhwIG9yZy1jb21wbGV4LWhlYWRpbmctcmVnZXhwPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgJiMzOTtkb25lLWZhY2UgJiMzOTtvcmctYWdlbmRhLWRvbmU8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmIzM5O21vdXNlLWZhY2UgJiMzOTtoaWdobGln aHQ8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmIzM5O2hlbHAtZWNobzxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChmb3JtYXQgJnF1b3Q7bW91c2Ut MiBvciBSRVQganVtcCB0byBPcmcgZmlsZSAlcyZxdW90Ozxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChhYmJyZXZpYXRlLWZpbGUtbmFtZSBidWZmZXIt ZmlsZS1uYW1lKSkpKTxicj4NCsKgIMKgIMKgIMKgIMKgKHJlZ2V4cCAoaWYgd2l0aC1ob3VyPGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBvcmctc2NoZWR1bGVkLXRpbWUtaG91 ci1yZWdleHA8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG9yZy1zY2hlZHVsZWQt dGltZS1yZWdleHApKTxicj4NCsKgIMKgIMKgIMKgIMKgKHRvZGF5IChvcmctdG9kYXkpKTxicj4N CsKgIMKgIMKgIMKgIMKgKHRvZGF5cCAob3JnLWFnZW5kYS10b2RheS1wIGRhdGUpKSA7IERBVEUg Ym91bmQgYnkgY2FsZW5kYXIuPGJyPg0KwqAgwqAgwqAgwqAgwqAoY3VycmVudCAoY2FsZW5kYXIt YWJzb2x1dGUtZnJvbS1ncmVnb3JpYW4gZGF0ZSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAoZGVhZGxp bmUtcG9zPGJyPg0KwqAgwqAgwqAgwqAgwqAgKG1hcGNhciAobGFtYmRhIChkKTxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChsZXQgKChtIChnZXQtdGV4dC1wcm9wZXJ0eSAwICYj Mzk7b3JnLWhkLW1hcmtlciBkKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgKGFuZCBtIChtYXJrZXItcG9zaXRpb24gbSkpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBkZWFkbGluZXMpKTxicj4NCsKgIMKgIMKgIMKgIMKgc2NoZWR1bGVkLWl0ZW1zKTxi cj4NCsKgIMKgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpPGJyPg0KwqAgwqAgKGlmIChvcmctZWxl bWVudC0tY2FjaGUtYWN0aXZlLXApPGJyPg0KwqAgwqAgwqAgwqAgKG9yZy1lbGVtZW50LWNhY2hl LW1hcDxicj4NCsKgIMKgIMKgIMKgIMKgKGxhbWJkYSAoZWwpPGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAod2hlbiAoYW5kIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6c2NoZWR1bGVkIGVsKTxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChvciAobm90IHdpdGgtaG91cik8YnI+DQrC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAob3JnLWVsZW1lbnQtcHJvcGVy dHk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDpob3VyLXN0 YXJ0PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOnNjaGVkdWxlZCBlbCkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgKG9yZy1lbGVtZW50LXByb3BlcnR5PGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA6aG91ci1lbmQ8YnI+DQrCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChvcmctZWxlbWVudC1wcm9wZXJ0eSA6c2NoZWR1 bGVkIGVsKSkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgKGdvdG8tY2hhciAob3JnLWVsZW1l bnQtcHJvcGVydHkgOmNvbnRlbnRzLWJlZ2luIGVsKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oChjYXRjaCA6c2tpcDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKG9yZy1hZ2VuZGEtc2tp cCBlbCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChsZXQqICgocyAoc3Vic3RyaW5nIChv cmctZWxlbWVudC1wcm9wZXJ0eTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOnJhdy12YWx1ZTxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKG9yZy1lbGVtZW50LXByb3Bl cnR5IDpzY2hlZHVsZWQgZWwpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIDEgLTEpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIChwb3MgKHNhdmUtZXhjdXJzaW9uPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoZ290by1jaGFyIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 Y29udGVudHMtYmVnaW4gZWwpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgOzsgV2UgaW50ZW50aW9uYWxseSBsZWF2ZSBOT0VSUk9SPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyBhcmd1bWVudCBpbiBgcmUt c2VhcmNoLWZvcndhcmQmIzM5OyBuaWwuwqAgSWY8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoDs7IHRoZSBzZWFyY2ggZmFpbHMgaGVyZSwgc29tZXRoaW5n IHdlbnQ8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDs7 IHdyb25nIGFuZCB3ZSBhcmUgbG9va2luZyBhdDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgOzsgbm9uLW1hdGNoaW5nIGhlYWRsaW5lLjxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHJlLXNlYXJjaC1mb3J3YXJk IHJlZ2V4cCAobGluZS1lbmQtcG9zaXRpb24pKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgKDEtIChtYXRjaC1iZWdpbm5pbmcgMSkpKSk8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAodG9kby1zdGF0ZSAob3JnLWVsZW1lbnQtcHJv cGVydHkgOnRvZG8ta2V5d29yZCBlbCkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgKGRvbmVwIChlcSAmIzM5O2RvbmUgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0b2RvLXR5 cGUgZWwpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoc2V4cD8gKGVx ICYjMzk7ZGlhcnk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoChvcmctZWxlbWVudC1wcm9wZXJ0eTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDp0eXBlIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6c2NoZWR1bGVkIGVsKSkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IDs7IFNDSEVEVUxFIGlzIHRoZSBzY2hlZHVsZWQgZGF0ZSBmb3IgdGhlIGVudHJ5LsKgIEl0IGlz PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOzsgZWl0aGVyIHRoZSBiYXJl IGRhdGUgb3IgdGhlIGxhc3QgcmVwZWF0LCBhY2NvcmRpbmc8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCA7OyB0byBgb3JnLWFnZW5kYS1wcmVmZXItbGFzdC1yZXBlYXQmIzM5 Oy48YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoc2NoZWR1bGU8YnI+DQrC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChjb25kPGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHNleHA/IChvcmctYWdlbmRhLS10aW1lc3RhbXAtdG8t YWJzb2x1dGUgcyBjdXJyZW50KSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAoKG9yIChlcSBvcmctYWdlbmRhLXByZWZlci1sYXN0LXJlcGVhdCB0KTxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKG1lbWJlciB0b2RvLXN0YXRl IG9yZy1hZ2VuZGEtcHJlZmVyLWxhc3QtcmVwZWF0KSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoChvcmctYWdlbmRhLS10aW1lc3RhbXAtdG8tYWJzb2x1dGU8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzIHRvZGF5ICYjMzk7cGFz dCAoY3VycmVudC1idWZmZXIpIHBvcykpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgKHQgKG9yZy1hZ2VuZGEtLXRpbWVzdGFtcC10by1hYnNvbHV0ZSBzKSkpKTxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDs7IFJFUEVBVCBpcyB0aGUgZnV0dXJl IHJlcGVhdCBjbG9zZXN0IGZyb20gQ1VSUkVOVCw8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCA7OyBhY2NvcmRpbmcgdG8gYG9yZy1hZ2VuZGEtc2hvdy1mdXR1cmUtcmVwZWF0 cyYjMzk7LiBJZjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDs7IHRoZSBs YXR0ZXIgaXMgbmlsLCBvciBpZiB0aGUgdGltZSBzdGFtcCBoYXMgbm88YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA7OyByZXBlYXQgcGFydCwgZGVmYXVsdCB0byBTQ0hFRFVM RS48YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocmVwZWF0PGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoY29uZDxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIChzZXhwPyBzY2hlZHVsZSk8YnI+DQrCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoKCZsdDs9IGN1cnJlbnQgdG9kYXkpIHNjaGVkdWxlKTxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICgobm90IG9yZy1hZ2VuZGEt c2hvdy1mdXR1cmUtcmVwZWF0cykgc2NoZWR1bGUpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKHQ8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoChsZXQgKChiYXNlIChpZiAoZXEgb3JnLWFnZW5kYS1zaG93LWZ1dHVyZS1yZXBlYXRzICYj Mzk7bmV4dCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCgxKyB0b2RheSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGN1cnJlbnQpKSk8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChvcmctYWdlbmRhLS10aW1lc3Rh bXAtdG8tYWJzb2x1dGU8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBzIGJhc2UgJiMzOTtmdXR1cmUgKGN1cnJlbnQtYnVmZmVyKSBwb3MpKSkpKTxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChkaWZmICgtIGN1cnJlbnQgc2NoZWR1bGUp KTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICh3YXJudGltZSAoZ2V0LXRl eHQtcHJvcGVydHkgKHBvaW50KSAmIzM5O29yZy1hcHB0LXdhcm50aW1lKSk8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocGFzdHNjaGVkcCAoJmx0OyBzY2hlZHVsZSB0b2Rh eSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGZ1dHVyZXNjaGVkcCAo Jmd0OyBzY2hlZHVsZSB0b2RheSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgKGhhYml0cCAoYW5kIChmYm91bmRwICYjMzk7b3JnLWlzLWhhYml0LXApPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoc3RyaW5nPSAm cXVvdDtoYWJpdCZxdW90OyAob3JnLWVsZW1lbnQtcHJvcGVydHkgOlNUWUxFIGVsKSkpKTxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChzdXBwcmVzcy1kZWxheTxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGxldCAoKGRlYWRsaW5lIChhbmQgb3Jn LWFnZW5kYS1za2lwLXNjaGVkdWxlZC1kZWxheS1pZi1kZWFkbGluZTxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChv cmctZWxlbWVudC1wcm9wZXJ0eTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOnJhdy12YWx1ZTxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpkZWFkbGluZSBlbCkpKSkpPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoY29uZDxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICgobm90IGRlYWRsaW5lKSBuaWwpPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOzsgVGhlIGN1cnJlbnQgaXRlbSBoYXMg YSBkZWFkbGluZSBkYXRlLCBzbzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIDs7IGV2YWx1YXRlIGl0cyBkZWxheSB0aW1lLjxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgICgoaW50ZWdlcnAgb3JnLWFnZW5kYS1za2lwLXNjaGVkdWxl ZC1kZWxheS1pZi1kZWFkbGluZSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoDs7IFVzZSBnbG9iYWwgZGVsYXkgdGltZS48YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgtIG9yZy1hZ2VuZGEtc2tpcC1zY2hlZHVsZWQtZGVs YXktaWYtZGVhZGxpbmUpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgICgoZXEgb3JnLWFnZW5kYS1za2lwLXNjaGVkdWxlZC1kZWxheS1pZi1kZWFkbGluZTxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJiMzOTtwb3N0 LWRlYWRsaW5lKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg OzsgU2V0IGRlbGF5IHRvIG5vIGxhdGVyIHRoYW4gREVBRExJTkUuPGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAobWluICgtIHNjaGVkdWxlPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAob3JnLWFnZW5k YS0tdGltZXN0YW1wLXRvLWFic29sdXRlIGRlYWRsaW5lKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBvcmctc2NoZWR1bGVkLWRlbGF5LWRheXMp KTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICh0IDApKSkpPGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGRkYXlzPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoY29uZDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIDs7IE51bGxpZnkgZGVsYXkgd2hlbiBhIHJlcGVhdGVyIHRyaWdnZXJl ZCBhbHJlYWR5PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOzsgYW5k IHRoZSBkZWxheSBpcyBvZiB0aGUgZm9ybSAtLVhkLjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgICgoYW5kIChzdHJpbmctbWF0Y2gtcCAmcXVvdDstLVswLTldK1toZHdt eV0mcXVvdDsgcyk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAoJmd0OyBzY2hlZHVsZSAob3JnLWFnZW5kYS0tdGltZXN0YW1wLXRvLWFic29sdXRlIHMp KSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDApPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHN1cHByZXNzLWRlbGF5PGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAobGV0ICgob3JnLXNjaGVkdWxlZC1k ZWxheS1kYXlzIHN1cHByZXNzLWRlbGF5KSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoChvcmctZ2V0LXdkYXlzIHMgdCB0KSkpPGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHQgKG9yZy1nZXQtd2RheXMgcyB0KSkpKSk8YnI+DQrC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDs7IERpc3BsYXkgc2NoZWR1bGVkIGl0ZW1zIGF0IGJh c2UgZGF0ZSAoU0NIRURVTEUpLCB0b2RheSBpZjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgOzsgc2NoZWR1bGVkIGJlZm9yZSB0aGUgY3VycmVudCBkYXRlLCBhbmQgYXQgYW55IHJlcGVh dCBwYXN0PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyB0b2RheS7CoCBIb3dldmVy LCBza2lwIGRlbGF5ZWQgaXRlbXMgYW5kIGl0ZW1zIHRoYXQgaGF2ZTxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgOzsgYmVlbiBkaXNwbGF5ZWQgZm9yIG1vcmUgdGhhbiBgb3JnLXNjaGVk dWxlZC1wYXN0LWRheXMmIzM5Oy48YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCh1bmxl c3MgKGFuZCB0b2RheXA8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBoYWJpdHA8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCAoYm91bmQtYW5kLXRydWUtcCBvcmctaGFiaXQtc2hvdy1hbGwtdG9kYXkpKTxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHdoZW4gKG9yIChhbmQgKCZndDsgZGRheXMg MCkgKCZsdDsgZGlmZiBkZGF5cykpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAoJmd0OyBkaWZmIChvciAoYW5kIGhhYml0cCBvcmctaGFiaXQtc2NoZWR1 bGVkLXBhc3QtZGF5cyk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG9yZy1zY2hlZHVsZWQtcGFzdC1kYXlzKSk8YnI+DQrC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgmZ3Q7IHNjaGVkdWxl IGN1cnJlbnQpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAoYW5kICgvPSBjdXJyZW50IHNjaGVkdWxlKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICgvPSBjdXJyZW50IHRvZGF5KTxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICgvPSBjdXJyZW50 IHJlcGVhdCkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHRocm93IDpz a2lwIG5pbCkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOzsgUG9zc2libHkgc2tp cCBkb25lIHRhc2tzLjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHdoZW4gKGFuZCBk b25lcDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChvciBv cmctYWdlbmRhLXNraXAtc2NoZWR1bGVkLWlmLWRvbmU8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoLz0gc2NoZWR1bGUgY3VycmVudCkpKTxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHRocm93IDpza2lwIG5pbCkpPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyBTa2lwIGVudHJ5IGlmIGl0IGFscmVhZHkgYXBwZWFy cyBhcyBhIGRlYWRsaW5lLCBwZXI8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDs7IGBv cmctYWdlbmRhLXNraXAtc2NoZWR1bGVkLWlmLWRlYWRsaW5lLWlzLXNob3duJiMzOTsuwqAgVGhp czxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOzsgZG9lc24mIzM5O3QgYXBwbHkgdG8g aGFiaXRzLjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHdoZW4gKHBjYXNlIG9yZy1h Z2VuZGEtc2tpcC1zY2hlZHVsZWQtaWYtZGVhZGxpbmUtaXMtc2hvd248YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgoZ3VhcmQ8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChvciAobm90IChtZW1xIChsaW5lLWJlZ2lubmluZy1w b3NpdGlvbiAwKSBkZWFkbGluZS1wb3MpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgaGFiaXRwKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBuaWwpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAoYHJlcGVhdGVkLWFmdGVyLWRlYWRsaW5lPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgKGxldCAoKGRlYWRsaW5lICh0aW1lLXRvLWRheXM8YnI+DQrC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCh3aGVuIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZGVhZGxpbmUgZWwpPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAob3JnLXRpbWUtc3RyaW5nLXRvLXRpbWU8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAob3JnLWVs ZW1lbnQtaW50ZXJwcmV0LWRhdGE8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChvcmctZWxlbWVudC1wcm9w ZXJ0eSA6ZGVhZGxpbmUgZWwpKSkpKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKGFuZCAoJmx0Oz0gc2NoZWR1bGUgZGVhZGxpbmUpICgmZ3Q7IGN1cnJl bnQgZGVhZGxpbmUpKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAoYG5vdC10b2RheSBwYXN0c2NoZWRwKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgKGB0IHQpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAoXyBuaWwpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHRocm93IDpz a2lwIG5pbCkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyBTa2lwIGhhYml0cyBp ZiBgb3JnLWhhYml0LXNob3ctaGFiaXRzJiMzOTsgaXMgbmlsLCBvciBpZiB3ZTxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgOzsgb25seSBzaG93IHRoZW0gZm9yIHRvZGF5LsKgIEFsc28g c2tpcCBkb25lIGhhYml0cy48YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCh3aGVuIChh bmQgaGFiaXRwPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg KG9yIGRvbmVwPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgKG5vdCAoYm91bmQtYW5kLXRydWUtcCBvcmctaGFiaXQtc2hvdy1oYWJpdHMpKTxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChhbmQgKG5v dCB0b2RheXApPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAoYm91bmQtYW5kLXRydWUtcDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG9yZy1oYWJpdC1zaG93LWhhYml0 cy1vbmx5LWZvci10b2RheSkpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCh0 aHJvdyA6c2tpcCBuaWwpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHNhdmUtZXhj dXJzaW9uPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoZ290by1jaGFyIChvcmct ZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWwpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgKGxldCogKChjYXRlZ29yeSAob3JnLWdldC1jYXRlZ29yeSkpPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGVmZm9ydCAoc2F2ZS1tYXRjaC1kYXRhPGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg KG9yIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICYjMzk7ZWZmb3J0KTxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChvcmct ZWxlbWVudC1wcm9wZXJ0eSAoaW50ZXJuIChjb25jYXQgJnF1b3Q7OiZxdW90OyAodXBjYXNlIG9y Zy1lZmZvcnQtcHJvcGVydHkpKSkgZWwpKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKGVmZm9ydC1taW51dGVzICh3aGVuIGVmZm9ydCAoc2F2ZS1tYXRjaC1k YXRhIChvcmctZHVyYXRpb24tdG8tbWludXRlcyBlZmZvcnQpKSkpPGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGluaGVyaXRlZC10YWdzPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAob3IgKGVxIG9yZy1hZ2VuZGEtc2hvdy1p bmhlcml0ZWQtdGFncyAmIzM5O2Fsd2F5cyk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoChhbmQgKGxpc3RwIG9yZy1hZ2VuZGEtc2hvdy1pbmhlcml0 ZWQtdGFncyk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCAobWVtcSAmIzM5O2FnZW5kYSBvcmctYWdlbmRhLXNob3ctaW5oZXJpdGVkLXRh Z3MpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg KGFuZCAoZXEgb3JnLWFnZW5kYS1zaG93LWluaGVyaXRlZC10YWdzIHQpPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKG9yIChlcSBvcmct YWdlbmRhLXVzZS10YWctaW5oZXJpdGFuY2UgdCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobWVtcSAmIzM5O2FnZW5kYTxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIG9yZy1hZ2VuZGEtdXNlLXRhZy1pbmhlcml0YW5jZSkpKSkpPGJyPg0K wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHRhZ3MgKG9yZy1nZXQtdGFn cyBlbCAobm90IGluaGVyaXRlZC10YWdzKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKGxldmVsIChtYWtlLXN0cmluZyAob3JnLWVsZW1lbnQtcHJvcGVydHkg OmxldmVsIGVsKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgID9ccykpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgKGhlYWQgKHNhdmUtZXhjdXJzaW9uPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGdvdG8tY2hhciAob3Jn LWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGVsKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocmUtc2VhcmNoLWZvcndhcmQgb3JnLW91dGxp bmUtcmVnZXhwLWJvbCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQpIChsaW5lLWVuZC1wb3NpdGlv bikpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAodGltZTxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGNvbmQ8YnI+DQrC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA7OyBObyB0aW1lIG9mIGRh eSBkZXNpZ25hdGlvbiBpZiBpdCBpcyBvbmx5IGE8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCA7OyByZW1pbmRlciwgZXhjZXB0IGZvciBoYWJpdHMsIHdoaWNo IGFsd2F5cyBzaG93PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgOzsgdGhlIHRpbWUgb2YgZGF5LsKgIEhhYml0cyBhcmUgYW4gZXhjZXB0aW9uPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOzsgYmVjYXVzZSBpZiB0aGVy ZSBpcyBhIHRpbWUgb2YgZGF5LCB0aGF0IGlzPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgOzsgaW50ZXJwcmV0ZWQgdG8gbWVhbiB0aGV5IHNob3VsZCB1c3Vh bGx5IGhhcHBlbjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IDs7IHRoZW4sIGV2ZW4gaWYgZG9pbmcgdGhlIGhhYml0IHdhcyBtaXNzZWQuPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKChhbmQ8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobm90IGhhYml0cCk8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoLz0gY3VycmVudCBzY2hl ZHVsZSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAo Lz0gY3VycmVudCByZXBlYXQpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgbmlsKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgICgoc3RyaW5nLW1hdGNoICZxdW90OyBcXChbMDEyXT9bMC05XTpbMC05XVswLTldXFwp JnF1b3Q7IHMpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAoY29uY2F0IChzdWJzdHJpbmcgcyAobWF0Y2gtYmVnaW5uaW5nIDEpKSAmcXVvdDsgJnF1b3Q7 KSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAodCAmIzM5 O3RpbWUpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoaXRl bTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKG9yZy1hZ2Vu ZGEtZm9ybWF0LWl0ZW08YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAocGNhc2UtbGV0ICgoYCgsZmlyc3QgLHBhc3QpIG9yZy1hZ2VuZGEtc2NoZWR1bGVkLWxl YWRlcnMpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IDs7IFNob3cgYSByZW1pbmRlciBvZiBhIHBhc3Qgc2NoZWR1bGVkIHRvZGF5Ljxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChpZiAoYW5kIHRvZGF5cCBw YXN0c2NoZWRwKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIChmb3JtYXQgcGFzdCBkaWZmKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGZpcnN0KSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAob3JnLWFkZC1wcm9wcyBoZWFkIG5pbDxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICYjMzk7ZWZmb3J0IGVmZm9y dDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICYjMzk7 ZWZmb3J0LW1pbnV0ZXMgZWZmb3J0LW1pbnV0ZXMpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgbGV2ZWwgY2F0ZWdvcnkgdGFncyB0aW1lIG5pbCBoYWJpdHAp KTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChmYWNlIChjb25k ICgoYW5kIChub3QgaGFiaXRwKSBwYXN0c2NoZWRwKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJiMzOTtvcmctc2NoZWR1bGVk LXByZXZpb3VzbHkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgKChhbmQgaGFiaXRwIGZ1dHVyZXNjaGVkcCk8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCYjMzk7 b3JnLWFnZW5kYS1kb25lKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgICh0b2RheXAgJiMzOTtvcmctc2NoZWR1bGVkLXRvZGF5KTxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgICh0ICYjMzk7b3JnLXNjaGVkdWxlZCkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIChoYWJpdHAgKGFuZCBoYWJpdHAgKG9yZy1oYWJpdC1wYXJzZS10b2Rv IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWwpKSkpKTxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgKG9yZy1hZGQtcHJvcHMgaXRlbSBwcm9wczxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJiMzOTt1bmRvbmUtZmFjZSBmYWNlPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAmIzM5O2ZhY2UgKGlmIGRvbmVwICYjMzk7 b3JnLWFnZW5kYS1kb25lIGZhY2UpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAmIzM5O29yZy1tYXJrZXIgKG9yZy1hZ2VuZGEtbmV3LW1hcmtlciBwb3MpPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAmIzM5O29yZy1oZC1tYXJrZXIgKG9yZy1h Z2VuZGEtbmV3LW1hcmtlciAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pKTxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJiMzOTt0eXBlIChpZiBwYXN0c2NoZWRwICZxdW90 O3Bhc3Qtc2NoZWR1bGVkJnF1b3Q7ICZxdW90O3NjaGVkdWxlZCZxdW90Oyk8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCYjMzk7ZGF0ZSAoaWYgcGFzdHNjaGVkcCBzY2hl ZHVsZSBkYXRlKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJiMzOTt0 cy1kYXRlIHNjaGVkdWxlPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAm IzM5O3dhcm50aW1lIHdhcm50aW1lPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAmIzM5O2xldmVsIGxldmVsPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAmIzM5O2VmZm9ydCBlZmZvcnQgJiMzOTtlZmZvcnQtbWludXRlcyBlZmZvcnQtbWludXRl czxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJiMzOTtwcmlvcml0eSAo aWYgaGFiaXRwIChvcmctaGFiaXQtZ2V0LXByaW9yaXR5IGhhYml0cCk8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgrIDk5IGRpZmYgKG9y Zy1nZXQtcHJpb3JpdHkgaXRlbSkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgJiMzOTtvcmctaGFiaXQtcCBoYWJpdHA8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCYjMzk7dG9kby1zdGF0ZSB0b2RvLXN0YXRlKTxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgKHB1c2ggaXRlbSBzY2hlZHVsZWQtaXRlbXMpKSkpKSkpPGJy Pg0KwqAgwqAgwqAgwqAgwqA6bmV4dC1yZSByZWdleHA8YnI+DQrCoCDCoCDCoCDCoCDCoDpmYWls LXJlIHJlZ2V4cDxicj4NCsKgIMKgIMKgIMKgIMKgOm5hcnJvdyB0KTxicj4NCsKgIMKgIMKgICh3 aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgcmVnZXhwIG5pbCB0KTxicj4NCsKgIMKgIMKgIMKgIChj YXRjaCA6c2tpcDxicj4NCsKgIMKgIMKgIMKgIMKgICh1bmxlc3MgKHNhdmUtbWF0Y2gtZGF0YSAo b3JnLWF0LXBsYW5uaW5nLXApKSAodGhyb3cgOnNraXAgbmlsKSk8YnI+DQrCoCDCoCDCoCDCoCDC oCAob3JnLWFnZW5kYS1za2lwKTxicj4NCsKgIMKgIMKgIMKgIMKgIChsZXQqICgocyAobWF0Y2gt c3RyaW5nIDEpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHBvcyAoMS0gKG1hdGNo LWJlZ2lubmluZyAxKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAodG9kby1zdGF0 ZSAoc2F2ZS1tYXRjaC1kYXRhIChvcmctZ2V0LXRvZG8tc3RhdGUpKSk8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoChkb25lcCAobWVtYmVyIHRvZG8tc3RhdGUgb3JnLWRvbmUta2V5d29y ZHMpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHNleHA/IChzdHJpbmctcHJlZml4 LXAgJnF1b3Q7JSUmcXVvdDsgcykpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyBT Q0hFRFVMRSBpcyB0aGUgc2NoZWR1bGVkIGRhdGUgZm9yIHRoZSBlbnRyeS7CoCBJdCBpczxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOzsgZWl0aGVyIHRoZSBiYXJlIGRhdGUgb3IgdGhl IGxhc3QgcmVwZWF0LCBhY2NvcmRpbmc8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDs7 IHRvIGBvcmctYWdlbmRhLXByZWZlci1sYXN0LXJlcGVhdCYjMzk7Ljxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgKHNjaGVkdWxlPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg KGNvbmQ8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChzZXhwPyAob3JnLWFnZW5k YS0tdGltZXN0YW1wLXRvLWFic29sdXRlIHMgY3VycmVudCkpPGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAoKG9yIChlcSBvcmctYWdlbmRhLXByZWZlci1sYXN0LXJlcGVhdCB0KTxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChtZW1iZXIgdG9kby1zdGF0 ZSBvcmctYWdlbmRhLXByZWZlci1sYXN0LXJlcGVhdCkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgKG9yZy1hZ2VuZGEtLXRpbWVzdGFtcC10by1hYnNvbHV0ZTxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcyB0b2RheSAmIzM5O3Bhc3QgKGN1cnJlbnQtYnVm ZmVyKSBwb3MpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHQgKG9yZy1hZ2Vu ZGEtLXRpbWVzdGFtcC10by1hYnNvbHV0ZSBzKSkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgOzsgUkVQRUFUIGlzIHRoZSBmdXR1cmUgcmVwZWF0IGNsb3Nlc3QgZnJvbSBDVVJSRU5U LDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOzsgYWNjb3JkaW5nIHRvIGBvcmctYWdl bmRhLXNob3ctZnV0dXJlLXJlcGVhdHMmIzM5Oy4gSWY8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoDs7IHRoZSBsYXR0ZXIgaXMgbmlsLCBvciBpZiB0aGUgdGltZSBzdGFtcCBoYXMgbm88 YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDs7IHJlcGVhdCBwYXJ0LCBkZWZhdWx0IHRv IFNDSEVEVUxFLjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHJlcGVhdDxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChjb25kPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAoc2V4cD8gc2NoZWR1bGUpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAoKCZsdDs9IGN1cnJlbnQgdG9kYXkpIHNjaGVkdWxlKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgKChub3Qgb3JnLWFnZW5kYS1zaG93LWZ1dHVyZS1yZXBlYXRzKSBzY2hlZHVs ZSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCh0PGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgKGxldCAoKGJhc2UgKGlmIChlcSBvcmctYWdlbmRhLXNob3ctZnV0 dXJlLXJlcGVhdHMgJiMzOTtuZXh0KTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICgxKyB0b2RheSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjdXJyZW50KSkpPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKG9yZy1hZ2VuZGEtLXRpbWVzdGFtcC10by1hYnNv bHV0ZTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcyBiYXNlICYjMzk7 ZnV0dXJlIChjdXJyZW50LWJ1ZmZlcikgcG9zKSkpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoChkaWZmICgtIGN1cnJlbnQgc2NoZWR1bGUpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgKHdhcm50aW1lIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICYjMzk7b3JnLWFw cHQtd2FybnRpbWUpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHBhc3RzY2hlZHAg KCZsdDsgc2NoZWR1bGUgdG9kYXkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGZ1 dHVyZXNjaGVkcCAoJmd0OyBzY2hlZHVsZSB0b2RheSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAoaGFiaXRwIChhbmQgKGZib3VuZHAgJiMzOTtvcmctaXMtaGFiaXQtcCkgKG9yZy1p cy1oYWJpdC1wKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoc3VwcHJlc3MtZGVs YXk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobGV0ICgoZGVhZGxpbmUgKGFuZCBv cmctYWdlbmRhLXNraXAtc2NoZWR1bGVkLWRlbGF5LWlmLWRlYWRsaW5lPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAob3JnLWVu dHJ5LWdldCBuaWwgJnF1b3Q7REVBRExJTkUmcXVvdDspKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKGNvbmQ8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCgobm90IGRlYWRsaW5lKSBuaWwpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqA7OyBUaGUgY3VycmVudCBpdGVtIGhhcyBhIGRlYWRsaW5lIGRhdGUsIHNvPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyBldmFsdWF0ZSBpdHMgZGVsYXkgdGltZS48YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgoaW50ZWdlcnAgb3JnLWFnZW5kYS1z a2lwLXNjaGVkdWxlZC1kZWxheS1pZi1kZWFkbGluZSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCA7OyBVc2UgZ2xvYmFsIGRlbGF5IHRpbWUuPGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgKC0gb3JnLWFnZW5kYS1za2lwLXNjaGVkdWxlZC1kZWxheS1p Zi1kZWFkbGluZSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoKGVxIG9y Zy1hZ2VuZGEtc2tpcC1zY2hlZHVsZWQtZGVsYXktaWYtZGVhZGxpbmU8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmIzM5O3Bvc3QtZGVhZGxpbmUpPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOzsgU2V0IGRlbGF5IHRvIG5vIGxhdGVyIHRo YW4gREVBRExJTkUuPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKG1pbiAo LSBzY2hlZHVsZTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIChvcmctYWdlbmRhLS10aW1lc3RhbXAtdG8tYWJzb2x1dGUgZGVhZGxpbmUpKTxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgb3JnLXNjaGVkdWxlZC1kZWxh eS1kYXlzKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCh0IDApKSkpPGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoZGRheXM8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCAoY29uZDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOzsgTnVs bGlmeSBkZWxheSB3aGVuIGEgcmVwZWF0ZXIgdHJpZ2dlcmVkIGFscmVhZHk8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoDs7IGFuZCB0aGUgZGVsYXkgaXMgb2YgdGhlIGZvcm0gLS1Y ZC48YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgoYW5kIChzdHJpbmctbWF0Y2gt cCAmcXVvdDstLVswLTldK1toZHdteV0mcXVvdDsgcyk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCgmZ3Q7IHNjaGVkdWxlIChvcmctYWdlbmRhLS10aW1lc3RhbXAt dG8tYWJzb2x1dGUgcykpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDApPGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoc3VwcHJlc3MtZGVsYXk8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobGV0ICgob3JnLXNjaGVkdWxlZC1kZWxheS1kYXlz IHN1cHByZXNzLWRlbGF5KSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAo b3JnLWdldC13ZGF5cyBzIHQgdCkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg KHQgKG9yZy1nZXQtd2RheXMgcyB0KSkpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCA7OyBEaXNw bGF5IHNjaGVkdWxlZCBpdGVtcyBhdCBiYXNlIGRhdGUgKFNDSEVEVUxFKSwgdG9kYXkgaWY8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCA7OyBzY2hlZHVsZWQgYmVmb3JlIHRoZSBjdXJyZW50IGRhdGUs IGFuZCBhdCBhbnkgcmVwZWF0IHBhc3Q8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCA7OyB0b2RheS7C oCBIb3dldmVyLCBza2lwIGRlbGF5ZWQgaXRlbXMgYW5kIGl0ZW1zIHRoYXQgaGF2ZTxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIDs7IGJlZW4gZGlzcGxheWVkIGZvciBtb3JlIHRoYW4gYG9yZy1zY2hl ZHVsZWQtcGFzdC1kYXlzJiMzOTsuPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgKHVubGVzcyAoYW5k IHRvZGF5cDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaGFiaXRw PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoYm91bmQtYW5kLXRy dWUtcCBvcmctaGFiaXQtc2hvdy1hbGwtdG9kYXkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg ICh3aGVuIChvciAoYW5kICgmZ3Q7IGRkYXlzIDApICgmbHQ7IGRpZmYgZGRheXMpKTxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICgmZ3Q7IGRpZmYgKG9yIChhbmQgaGFi aXRwIG9yZy1oYWJpdC1zY2hlZHVsZWQtcGFzdC1kYXlzKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG9yZy1zY2hlZHVsZWQtcGFzdC1k YXlzKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoJmd0OyBzY2hl ZHVsZSBjdXJyZW50KTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChh bmQgKC89IGN1cnJlbnQgc2NoZWR1bGUpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAoLz0gY3VycmVudCB0b2RheSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgvPSBjdXJyZW50IHJlcGVhdCkpKTxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgICh0aHJvdyA6c2tpcCBuaWwpKSk8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCA7OyBQb3NzaWJseSBza2lwIGRvbmUgdGFza3MuPGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAgKHdoZW4gKGFuZCBkb25lcDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgKG9yIG9yZy1hZ2VuZGEtc2tpcC1zY2hlZHVsZWQtaWYtZG9uZTxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKC89IHNjaGVkdWxlIGN1cnJlbnQpKSk8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCAodGhyb3cgOnNraXAgbmlsKSk8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCA7OyBTa2lwIGVudHJ5IGlmIGl0IGFscmVhZHkgYXBwZWFycyBhcyBhIGRlYWRsaW5l LCBwZXI8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCA7OyBgb3JnLWFnZW5kYS1za2lwLXNjaGVkdWxl ZC1pZi1kZWFkbGluZS1pcy1zaG93biYjMzk7LsKgIFRoaXM8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCA7OyBkb2VzbiYjMzk7dCBhcHBseSB0byBoYWJpdHMuPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg KHdoZW4gKHBjYXNlIG9yZy1hZ2VuZGEtc2tpcC1zY2hlZHVsZWQtaWYtZGVhZGxpbmUtaXMtc2hv d248YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoKGd1YXJkPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKG9yIChub3QgKG1lbXEgKGxpbmUtYmVnaW5uaW5n LXBvc2l0aW9uIDApIGRlYWRsaW5lLXBvcykpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgaGFiaXRwKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoG5pbCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoYHJlcGVhdGVkLWFm dGVyLWRlYWRsaW5lPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAobGV0ICgo ZGVhZGxpbmUgKHRpbWUtdG8tZGF5czxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChvcmctZ2V0LWRlYWRsaW5lLXRpbWUgKHBvaW50 KSkpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChhbmQgKCZsdDs9 IHNjaGVkdWxlIGRlYWRsaW5lKSAoJmd0OyBjdXJyZW50IGRlYWRsaW5lKSkpKTxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChgbm90LXRvZGF5IHBhc3RzY2hlZHApPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGB0IHQpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgKF8gbmlsKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCAodGhyb3cgOnNr aXAgbmlsKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCA7OyBTa2lwIGhhYml0cyBpZiBgb3JnLWhh Yml0LXNob3ctaGFiaXRzJiMzOTsgaXMgbmlsLCBvciBpZiB3ZTxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIDs7IG9ubHkgc2hvdyB0aGVtIGZvciB0b2RheS7CoCBBbHNvIHNraXAgZG9uZSBoYWJpdHMu PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgKHdoZW4gKGFuZCBoYWJpdHA8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChvciBkb25lcDxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKG5vdCAoYm91bmQtYW5kLXRydWUtcCBvcmctaGFiaXQt c2hvdy1oYWJpdHMpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgKGFuZCAobm90IHRvZGF5cCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCAoYm91bmQtYW5kLXRydWUtcDxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgb3JnLWhhYml0LXNob3ctaGFiaXRzLW9u bHktZm9yLXRvZGF5KSkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgICh0aHJvdyA6c2tpcCBu aWwpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIChzYXZlLWV4Y3Vyc2lvbjxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIChyZS1zZWFyY2gtYmFja3dhcmQgJnF1b3Q7XlxcKitbIFx0XSsmcXVvdDsg bmlsIHQpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDAp KTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIChsZXQqICgoY2F0ZWdvcnkgKG9yZy1nZXQtY2F0 ZWdvcnkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGVmZm9ydCAoc2F2 ZS1tYXRjaC1kYXRhIChvciAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAmIzM5O2VmZm9ydCk8 YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAob3JnLWVudHJ5LWdldCAocG9pbnQpIG9yZy1lZmZvcnQt cHJvcGVydHkpKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoZWZmb3J0 LW1pbnV0ZXMgKHdoZW4gZWZmb3J0IChzYXZlLW1hdGNoLWRhdGEgKG9yZy1kdXJhdGlvbi10by1t aW51dGVzIGVmZm9ydCkpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChp bmhlcml0ZWQtdGFnczxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChvciAo ZXEgb3JnLWFnZW5kYS1zaG93LWluaGVyaXRlZC10YWdzICYjMzk7YWx3YXlzKTxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChhbmQgKGxpc3RwIG9yZy1hZ2VuZGEt c2hvdy1pbmhlcml0ZWQtdGFncyk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoChtZW1xICYjMzk7YWdlbmRhIG9yZy1hZ2VuZGEtc2hvdy1pbmhlcml0 ZWQtdGFncykpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGFu ZCAoZXEgb3JnLWFnZW5kYS1zaG93LWluaGVyaXRlZC10YWdzIHQpPGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAob3IgKGVxIG9yZy1hZ2VuZGEtdXNl LXRhZy1pbmhlcml0YW5jZSB0KTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgKG1lbXEgJiMzOTthZ2VuZGE8YnI+DQrCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG9yZy1hZ2Vu ZGEtdXNlLXRhZy1pbmhlcml0YW5jZSkpKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAodGFncyAob3JnLWdldC10YWdzIG5pbCAobm90IGluaGVyaXRlZC10YWdzKSkpPGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAobGV2ZWwgKG1ha2Utc3RyaW5nIChv cmctcmVkdWNlZC1sZXZlbCAob3JnLW91dGxpbmUtbGV2ZWwpKTxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgP1xzKSk8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChoZWFkIChidWZmZXItc3Vic3RyaW5n IChwb2ludCkgKGxpbmUtZW5kLXBvc2l0aW9uKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAodGltZTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChj b25kPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyBObyB0aW1lIG9m IGRheSBkZXNpZ25hdGlvbiBpZiBpdCBpcyBvbmx5IGE8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoDs7IHJlbWluZGVyLCBleGNlcHQgZm9yIGhhYml0cywgd2hpY2ggYWx3 YXlzIHNob3c8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDs7IHRoZSB0 aW1lIG9mIGRheS7CoCBIYWJpdHMgYXJlIGFuIGV4Y2VwdGlvbjxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgOzsgYmVjYXVzZSBpZiB0aGVyZSBpcyBhIHRpbWUgb2YgZGF5 LCB0aGF0IGlzPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyBpbnRl cnByZXRlZCB0byBtZWFuIHRoZXkgc2hvdWxkIHVzdWFsbHkgaGFwcGVuPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyB0aGVuLCBldmVuIGlmIGRvaW5nIHRoZSBoYWJp dCB3YXMgbWlzc2VkLjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKChh bmQ8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChub3QgaGFiaXRw KTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKC89IGN1cnJlbnQg c2NoZWR1bGUpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoLz0g Y3VycmVudCByZXBlYXQpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IG5pbCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgoc3RyaW5nLW1h dGNoICZxdW90OyBcXChbMDEyXT9bMC05XTpbMC05XVswLTldXFwpJnF1b3Q7IHMpPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGNvbmNhdCAoc3Vic3RyaW5nIHMgKG1h dGNoLWJlZ2lubmluZyAxKSkgJnF1b3Q7ICZxdW90OykpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAodCAmIzM5O3RpbWUpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoChpdGVtPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg KG9yZy1hZ2VuZGEtZm9ybWF0LWl0ZW08YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoChwY2FzZS1sZXQgKChgKCxmaXJzdCAscGFzdCkgb3JnLWFnZW5kYS1zY2hlZHVsZWQt bGVhZGVycykpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyBT aG93IGEgcmVtaW5kZXIgb2YgYSBwYXN0IHNjaGVkdWxlZCB0b2RheS48YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChpZiAoYW5kIHRvZGF5cCBwYXN0c2NoZWRwKTxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGZvcm1hdCBw YXN0IGRpZmYpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBm aXJzdCkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAob3JnLWFkZC1w cm9wcyBoZWFkIG5pbDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg JiMzOTtlZmZvcnQgZWZmb3J0PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAmIzM5O2VmZm9ydC1taW51dGVzIGVmZm9ydC1taW51dGVzKTxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbGV2ZWwgY2F0ZWdvcnkgdGFncyB0aW1lIG5pbCBoYWJp dHApKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGZhY2UgKGNvbmQgKChh bmQgKG5vdCBoYWJpdHApIHBhc3RzY2hlZHApPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgJiMzOTtvcmctc2NoZWR1bGVkLXByZXZpb3VzbHkp PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAo KGFuZCBoYWJpdHAgZnV0dXJlc2NoZWRwKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICYjMzk7b3JnLWFnZW5kYS1kb25lKTxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHRvZGF5cCAmIzM5 O29yZy1zY2hlZHVsZWQtdG9kYXkpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAodCAmIzM5O29yZy1zY2hlZHVsZWQpKSk8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChoYWJpdHAgKGFuZCBoYWJpdHAgKG9yZy1oYWJpdC1w YXJzZS10b2RvKSkpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChvcmctYWRkLXByb3Bz IGl0ZW0gcHJvcHM8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmIzM5O3VuZG9uZS1m YWNlIGZhY2U8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmIzM5O2ZhY2UgKGlmIGRv bmVwICYjMzk7b3JnLWFnZW5kYS1kb25lIGZhY2UpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgJiMzOTtvcmctbWFya2VyIChvcmctYWdlbmRhLW5ldy1tYXJrZXIgcG9zKTxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICYjMzk7b3JnLWhkLW1hcmtlciAob3JnLWFnZW5kYS1u ZXctbWFya2VyIChsaW5lLWJlZ2lubmluZy1wb3NpdGlvbikpPGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgJiMzOTt0eXBlIChpZiBwYXN0c2NoZWRwICZxdW90O3Bhc3Qtc2NoZWR1bGVk JnF1b3Q7ICZxdW90O3NjaGVkdWxlZCZxdW90Oyk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAmIzM5O2RhdGUgKGlmIHBhc3RzY2hlZHAgc2NoZWR1bGUgZGF0ZSk8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCAmIzM5O3RzLWRhdGUgc2NoZWR1bGU8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCAmIzM5O3dhcm50aW1lIHdhcm50aW1lPGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgJiMzOTtsZXZlbCBsZXZlbDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgICYjMzk7ZWZmb3J0IGVmZm9ydCAmIzM5O2VmZm9ydC1taW51dGVzIGVmZm9ydC1taW51 dGVzPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgJiMzOTtwcmlvcml0eSAoaWYgaGFi aXRwIChvcmctaGFiaXQtZ2V0LXByaW9yaXR5IGhhYml0cCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoKyA5OSBkaWZmIChvcmctZ2V0LXByaW9yaXR5 IGl0ZW0pKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmIzM5O29yZy1oYWJpdC1w IGhhYml0cDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICYjMzk7dG9kby1zdGF0ZSB0 b2RvLXN0YXRlKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChwdXNoIGl0ZW0gc2NoZWR1 bGVkLWl0ZW1zKSkpKSkpKTxicj4NCsKgIMKgIChucmV2ZXJzZSBzY2hlZHVsZWQtaXRlbXMpKSk8 YnI+DQo8YnI+DQotLSA8YnI+DQpJaG9yIFJhZGNoZW5rbyAvLyB5YW50YXI5Miw8YnI+DQpPcmcg bW9kZSBjb250cmlidXRvciw8YnI+DQpMZWFybiBtb3JlIGFib3V0IE9yZyBtb2RlIGF0ICZsdDs8 YSBocmVmPSJodHRwczovL29yZ21vZGUub3JnLyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9i bGFuayI+aHR0cHM6Ly9vcmdtb2RlLm9yZy88L2E+Jmd0Oy48YnI+DQpTdXBwb3J0IE9yZyBkZXZl bG9wbWVudCBhdCAmbHQ7PGEgaHJlZj0iaHR0cHM6Ly9saWJlcmFwYXkuY29tL29yZy1tb2RlIiBy ZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2xpYmVyYXBheS5jb20vb3Jn LW1vZGU8L2E+Jmd0Oyw8YnI+DQpvciBzdXBwb3J0IG15IHdvcmsgYXQgJmx0OzxhIGhyZWY9Imh0 dHBzOi8vbGliZXJhcGF5LmNvbS95YW50YXI5MiIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9i bGFuayI+aHR0cHM6Ly9saWJlcmFwYXkuY29tL3lhbnRhcjkyPC9hPiZndDs8YnI+DQo8L2Jsb2Nr cXVvdGU+PC9kaXY+DQo= --0000000000006433b60605b391eb--